txlyre 1 年之前
父節點
當前提交
e8c2734a63
共有 2 個文件被更改,包括 42 次插入2 次删除
  1. 2 2
      langs/wm/Dockerfile.user
  2. 40 0
      langs/wm/wmc.py

+ 2 - 2
langs/wm/Dockerfile.user

@@ -1,2 +1,2 @@
-RUN mkdir .wclib
-COPY wclib .wclib
+RUN mkdir /home/user/.wclib
+ADD wclib /home/user/.wclib

+ 40 - 0
langs/wm/wmc.py

@@ -62,6 +62,7 @@ args:
     | [expr ("," expr)*]
 
 ?expr: op1
+     | op1 "?" op1 ":" expr -> ifexpr
 ?op1: op2
     | vardec
     | op1 "==" op1 -> equals
@@ -419,6 +420,45 @@ class WMC:
         )
       else:
         raise Exception(f"Not implemented: {node}")
+    elif node.data == "ifexpr":
+      else_label = self.make_label()
+      exit_label = self.make_label()
+
+      buffer.emit(
+        self.compile_expr(
+          node.children[0]
+        )
+      )
+
+      buffer.emit(
+        "nbnz Y {}",
+        else_label
+      )
+
+      buffer.emit(
+        self.compile_expr(
+          node.children[1]
+        )
+      )
+      buffer.emit(
+        "jmp {}",
+        exit_label
+      )
+
+      buffer.emit(
+        "{}:",
+        else_label
+      )
+      buffer.emit(
+        self.compile_expr(
+          node.children[2]
+        )
+      )
+
+      buffer.emit(
+        "{}:",
+        exit_label
+      )      
     elif node.data == "equals":
       buffer.emit(
         self.compile_compare_expr(