]> git.mdlowis.com Git - proto/aas.git/commitdiff
started implementing type checking
authorMike Lowis <mike.lowis@gentex.com>
Tue, 5 Dec 2023 21:26:35 +0000 (16:26 -0500)
committerMike Lowis <mike.lowis@gentex.com>
Tue, 5 Dec 2023 21:26:35 +0000 (16:26 -0500)
cerise.rb

index f9969513b58408173261ca3d3378ee5e80801066..2e42a044f0feca38e6b5a248100e43636e9046b7 100755 (executable)
--- a/cerise.rb
+++ b/cerise.rb
@@ -428,13 +428,13 @@ class Parser
 
   def make_binop(loc, op, left, right)
     node = IR::Op.new(loc, nil, op, left, right)
-    checker.infer(syms, node)
+#    checker.infer(syms, node)
     node
   end
 
   def make_unop(loc, op, value)
     node = IR::Op.new(loc, nil, op, value, nil)
-    checker.infer(syms, node)
+#    checker.infer(syms, node)
     node
   end
 
@@ -1038,20 +1038,29 @@ end
 # Emit the Code
 ##
 
-$parser = Parser.new("cerise.m")
+$parser  = Parser.new("cerise.m")
+$checker = TypeChecker.new($parser)
 state = Codegen.init($parser.syms)
 $parser.syms.each do |name, val|
-  $parser.syms.open_scope
-  puts "func #{name.to_sym.inspect}, #{val.value.args.length} do"
-  puts "    locals #{val.value.locals.length}" if val.value.locals.length > 0
-  state.locals = val.value.locals
-  val.value.args.each_with_index do |name, idx|
-    $parser.syms.add_sym(
-        name.name, name.loc, :param, name.type, idx)
-  end
-  val.value.body.each do |stmnt|
-    Codegen.emit(state, stmnt)
-  end
-  puts "end\n\n"
-  $parser.syms.close_scope
+  if val.type
+    $checker.check($parser.syms, val.value, val.type)
+  else
+    $checker.infer($parser.syms, val.value)
+  end
 end
+
+#$parser.syms.each do |name, val|
+#  $parser.syms.open_scope
+#  puts "func #{name.to_sym.inspect}, #{val.value.args.length} do"
+#  puts "    locals #{val.value.locals.length}" if val.value.locals.length > 0
+#  state.locals = val.value.locals
+#  val.value.args.each_with_index do |name, idx|
+#    $parser.syms.add_sym(
+#        name.name, name.loc, :param, name.type, idx)
+#  end
+#  val.value.body.each do |stmnt|
+#    Codegen.emit(state, stmnt)
+#  end
+#  puts "end\n\n"
+#  $parser.syms.close_scope
+#end