?login_element?

Subversion Repositories NedoOS

Rev

Blame | Last modification | View Log | Download

  1.     OUTPUT "dir_elseif.bin"
  2.  
  3.     ;; no nested blocks, just regular IF/ELSEIF/ELSEIF/ELSE/ENDIF chain
  4.  
  5.     IF 1
  6.         ld  b,c ;   'A'
  7.     ELSEIF 1
  8.         false   ; false because other block was active (true)
  9.     ELSEIF 1
  10.         false   ; false because other block was active (true)
  11.     ELSE
  12.         false   ; false because other block was active (true)
  13.     ENDIF
  14.  
  15.     IF 0
  16.         false
  17.     ELSEIF 1
  18.         ld  b,d ;   'B'
  19.     ELSEIF 1
  20.         false   ; false because other block was active (true)
  21.     ELSE
  22.         false
  23.     ENDIF
  24.  
  25.     IF 0
  26.         false
  27.     ELSEIF 0
  28.         false
  29.     ELSEIF 1
  30.         ld  b,e ;   'C'
  31.     ELSE
  32.         false
  33.     ENDIF
  34.  
  35.     IF 0
  36.         false
  37.     ELSEIF 0
  38.         false
  39.     ELSEIF 0
  40.         false
  41.     ELSE
  42.         ld  b,h ;   'D'
  43.     ENDIF
  44.  
  45.     ;; nested blocks
  46.  
  47.     ; first block active ('a')
  48.     IF 1
  49.         ld  h,c ;   'a'
  50.         IF 1
  51.             ld  b,c ;   'A'
  52.         ELSEIF 1
  53.             false   ; false because other block was active (true)
  54.         ELSEIF 1
  55.             false   ; false because other block was active (true)
  56.         ELSE
  57.             false   ; false because other block was active (true)
  58.         ENDIF
  59.  
  60.         IF 0
  61.             false
  62.         ELSEIF 1
  63.             ld  b,d ;   'B'
  64.         ELSEIF 1
  65.             false   ; false because other block was active (true)
  66.         ELSE
  67.             false
  68.         ENDIF
  69.  
  70.         IF 0
  71.             false
  72.         ELSEIF 0
  73.             false
  74.         ELSEIF 1
  75.             ld  b,e ;   'C'
  76.         ELSE
  77.             false
  78.         ENDIF
  79.  
  80.         IF 0
  81.             false
  82.         ELSEIF 0
  83.             false
  84.         ELSEIF 0
  85.             false
  86.         ELSE
  87.             ld  b,h ;   'D'
  88.         ENDIF
  89.     ELSEIF 1
  90.         false   ; false because other block was active (true)
  91.         IF 1
  92.             false
  93.         ELSEIF 1
  94.             false
  95.         ELSEIF 1
  96.             false
  97.         ELSE
  98.             false
  99.         ENDIF
  100.     ELSEIF 1
  101.         false   ; false because other block was active (true)
  102.         IF 1
  103.             false
  104.         ELSEIF 1
  105.             false
  106.         ELSEIF 1
  107.             false
  108.         ELSE
  109.             false
  110.         ENDIF
  111.     ELSE
  112.         false   ; false because other block was active (true)
  113.         IF 1
  114.             false
  115.         ELSEIF 1
  116.             false
  117.         ELSEIF 1
  118.             false
  119.         ELSE
  120.             false
  121.         ENDIF
  122.     ENDIF
  123.  
  124.     ; second block active ('b')
  125.     IF 0
  126.         false
  127.         IF 1
  128.             false
  129.         ELSEIF 1
  130.             false
  131.         ELSEIF 1
  132.             false
  133.         ELSE
  134.             false
  135.         ENDIF
  136.     ELSEIF 1
  137.         ld  h,d ;   'b'
  138.         IF 1
  139.             ld  b,c ;   'A'
  140.         ELSEIF 1
  141.             false   ; false because other block was active (true)
  142.         ELSEIF 1
  143.             false   ; false because other block was active (true)
  144.         ELSE
  145.             false   ; false because other block was active (true)
  146.         ENDIF
  147.  
  148.         IF 0
  149.             false
  150.         ELSEIF 1
  151.             ld  b,d ;   'B'
  152.         ELSEIF 1
  153.             false   ; false because other block was active (true)
  154.         ELSE
  155.             false
  156.         ENDIF
  157.  
  158.         IF 0
  159.             false
  160.         ELSEIF 0
  161.             false
  162.         ELSEIF 1
  163.             ld  b,e ;   'C'
  164.         ELSE
  165.             false
  166.         ENDIF
  167.  
  168.         IF 0
  169.             false
  170.         ELSEIF 0
  171.             false
  172.         ELSEIF 0
  173.             false
  174.         ELSE
  175.             ld  b,h ;   'D'
  176.         ENDIF
  177.     ELSEIF 1
  178.         false   ; false because other block was active (true)
  179.         IF 1
  180.             false
  181.         ELSEIF 1
  182.             false
  183.         ELSEIF 1
  184.             false
  185.         ELSE
  186.             false
  187.         ENDIF
  188.     ELSE
  189.         false   ; false because other block was active (true)
  190.         IF 1
  191.             false
  192.         ELSEIF 1
  193.             false
  194.         ELSEIF 1
  195.             false
  196.         ELSE
  197.             false
  198.         ENDIF
  199.     ENDIF
  200.  
  201.     ; third block active ('c')
  202.     IF 0
  203.         false
  204.         IF 1
  205.             false
  206.         ELSEIF 1
  207.             false
  208.         ELSEIF 1
  209.             false
  210.         ELSE
  211.             false
  212.         ENDIF
  213.     ELSEIF 0
  214.         false
  215.         IF 1
  216.             false
  217.         ELSEIF 1
  218.             false
  219.         ELSEIF 1
  220.             false
  221.         ELSE
  222.             false
  223.         ENDIF
  224.     ELSEIF 1
  225.         ld  h,e ;   'c'
  226.         IF 1
  227.             ld  b,c ;   'A'
  228.         ELSEIF 1
  229.             false   ; false because other block was active (true)
  230.         ELSEIF 1
  231.             false   ; false because other block was active (true)
  232.         ELSE
  233.             false   ; false because other block was active (true)
  234.         ENDIF
  235.  
  236.         IF 0
  237.             false
  238.         ELSEIF 1
  239.             ld  b,d ;   'B'
  240.         ELSEIF 1
  241.             false   ; false because other block was active (true)
  242.         ELSE
  243.             false
  244.         ENDIF
  245.  
  246.         IF 0
  247.             false
  248.         ELSEIF 0
  249.             false
  250.         ELSEIF 1
  251.             ld  b,e ;   'C'
  252.         ELSE
  253.             false
  254.         ENDIF
  255.  
  256.         IF 0
  257.             false
  258.         ELSEIF 0
  259.             false
  260.         ELSEIF 0
  261.             false
  262.         ELSE
  263.             ld  b,h ;   'D'
  264.         ENDIF
  265.     ELSE
  266.         false   ; false because other block was active (true)
  267.         IF 1
  268.             false
  269.         ELSEIF 1
  270.             false
  271.         ELSEIF 1
  272.             false
  273.         ELSE
  274.             false
  275.         ENDIF
  276.     ENDIF
  277.  
  278.     ; fourth block active ('d')
  279.     IF 0
  280.         false
  281.         IF 1
  282.             false
  283.         ELSEIF 1
  284.             false
  285.         ELSEIF 1
  286.             false
  287.         ELSE
  288.             false
  289.         ENDIF
  290.     ELSEIF 0
  291.         false
  292.         IF 1
  293.             false
  294.         ELSEIF 1
  295.             false
  296.         ELSEIF 1
  297.             false
  298.         ELSE
  299.             false
  300.         ENDIF
  301.     ELSEIF 0
  302.         false
  303.         IF 1
  304.             false
  305.         ELSEIF 1
  306.             false
  307.         ELSEIF 1
  308.             false
  309.         ELSE
  310.             false
  311.         ENDIF
  312.     ELSE
  313.         ld  h,h ;   'd'
  314.         IF 1
  315.             ld  b,c ;   'A'
  316.         ELSEIF 1
  317.             false   ; false because other block was active (true)
  318.         ELSEIF 1
  319.             false   ; false because other block was active (true)
  320.         ELSE
  321.             false   ; false because other block was active (true)
  322.         ENDIF
  323.  
  324.         IF 0
  325.             false
  326.         ELSEIF 1
  327.             ld  b,d ;   'B'
  328.         ELSEIF 1
  329.             false   ; false because other block was active (true)
  330.         ELSE
  331.             false
  332.         ENDIF
  333.  
  334.         IF 0
  335.             false
  336.         ELSEIF 0
  337.             false
  338.         ELSEIF 1
  339.             ld  b,e ;   'C'
  340.         ELSE
  341.             false
  342.         ENDIF
  343.  
  344.         IF 0
  345.             false
  346.         ELSEIF 0
  347.             false
  348.         ELSEIF 0
  349.             false
  350.         ELSE
  351.             ld  b,h ;   'D'
  352.         ENDIF
  353.     ENDIF
  354.  
  355.     ASSERT 24 == $  ; expected output: "ABCDaABCDbABCDcABCDdABCD"
  356.  
  357.     ;; verify that ELSEIF expression is not evaluated when active block already happened
  358.     IF 1
  359.     ELSEIF @    ; would emit syntax error if evaluated
  360.     ELSE
  361.     ENDIF
  362.  
  363.     IF 0
  364.     ELSEIF 1
  365.     ELSEIF @    ; would emit syntax error if evaluated
  366.     ELSE
  367.     ENDIF
  368.