From: Mike Lowis Date: Mon, 25 Nov 2024 21:17:32 +0000 (-0500) Subject: codegeneration is busted but at least it doesnt crash... X-Git-Url: https://git.mdlowis.com/?a=commitdiff_plain;h=885b891424bc9fdd5b85ed8f749b06e28127b585;p=proto%2Fcerise-c.git codegeneration is busted but at least it doesnt crash... --- 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)