ソースを参照

Else if support

Kajetan Johannes Hammerle 6 日 前
コミット
b2bdf343d1
3 ファイル変更29 行追加0 行削除
  1. 5 0
      src/Compiler.c
  2. 19 0
      test/ElseIf.basic
  3. 5 0
      test/ElseIf.basic_result

+ 5 - 0
src/Compiler.c

@@ -392,6 +392,11 @@ static void compileIf(Context* c) {
         size_t elseEnd = codePushInstructionI32(c, JUMP, 0);
         codeRewriteI32(c, posIndex, (i32)codeGetWritePosition(c));
         posIndex = elseEnd;
+        if(consumeTokenIf(c, TT_IF)) {
+            compileIf(c);
+            codeRewriteI32(c, posIndex, (i32)codeGetWritePosition(c));
+            return;
+        }
         while(!peekToken(c, TT_END)) {
             compileLine(c, tokenizerNext(c->tokenizer));
         }

+ 19 - 0
test/ElseIf.basic

@@ -0,0 +1,19 @@
+function wusi(a)
+    if a == 0
+        printLine(5)
+    else if a == 1
+        printLine(10)
+    else if a == 2
+        printLine(15)
+    else if a == 3
+        printLine(20)
+    else
+        printLine(25)
+    end
+end
+
+wusi(0)
+wusi(1)
+wusi(2)
+wusi(3)
+wusi(4)

+ 5 - 0
test/ElseIf.basic_result

@@ -0,0 +1,5 @@
+5
+10
+15
+20
+25