]> git.mdlowis.com Git - proto/cerise-c.git/commitdiff
codegeneration is busted but at least it doesnt crash...
authorMike Lowis <mike.lowis@gentex.com>
Mon, 25 Nov 2024 21:17:32 +0000 (16:17 -0500)
committerMike Lowis <mike.lowis@gentex.com>
Mon, 25 Nov 2024 21:17:32 +0000 (16:17 -0500)
lib/codegen.rb

index ec097596cff7920a3ddab29d7f4356f1f0eba8fa..8d5024ec002eb619a2af76724c8da694b487cbd8 100644 (file)
@@ -160,6 +160,8 @@ class Codegen
       emit_assert(v)
     elsif v.is_a? IR::If then
       emit_if(v)
+    elsif v.is_a? Hash then
+#      emit_if(v)
     else
       raise "code emitting of #{v.class} not implemented"
     end
@@ -209,6 +211,9 @@ class Codegen
 
   def emit_binop(v)
     type = type_to_s(v.type)
+#    if reference_type?(type)
+#      type = "#{type}
+#    end
     if v.op == "&&"
       lvar = emit(v.left)
       result = mktemp();
@@ -279,6 +284,8 @@ class Codegen
         else
           putln "#{type} #{result} = (#{lvar} != #{rvar});"
         end
+      when :new
+        putln "#{type} #{result} = 0;"
       else
         raise "not implemented"
       end
@@ -329,11 +336,23 @@ class Codegen
   end
 
   def emit_var(v)
-    var = @syms[v.name]
-    if var.nil?
-      error v, "no such variable: #{v.name}"
+    if v.module
+      mod = @syms[v.module]
+      if mod.nil?
+        error v, "no such module: #{v.module}"
+      end
+      var = mod.type.exports[v.name]
+      if var.nil?
+        error v, "no such variable: #{v.name}"
+      end
+      "#{v.module}_#{v.name}"
+    else
+      var = @syms[v.name]
+      if var.nil?
+        error v, "no such variable: #{v.name}"
+      end
+      var.name
     end
-    var.name
   end
 
   def emit_if(v)