From 885b891424bc9fdd5b85ed8f749b06e28127b585 Mon Sep 17 00:00:00 2001 From: Mike Lowis Date: Mon, 25 Nov 2024 16:17:32 -0500 Subject: [PATCH] codegeneration is busted but at least it doesnt crash... --- lib/codegen.rb | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/lib/codegen.rb b/lib/codegen.rb index ec09759..8d5024e 100644 --- a/lib/codegen.rb +++ b/lib/codegen.rb @@ -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) -- 2.54.0