Ver Fonte

Typecheck phase now prunes Type nodes when done

Taddeus Kroes há 12 anos atrás
pai
commit
33622fca25
2 ficheiros alterados com 8 adições e 3 exclusões
  1. 1 1
      phases/dim_reduce.ml
  2. 7 2
      phases/typecheck.ml

+ 1 - 1
phases/dim_reduce.ml

@@ -16,7 +16,7 @@ and dim_reduce = function
     | Allocate (name, dims, dec, loc) ->
         Allocate (name, [multiply dims], dec, loc)
 
-    | VarUse (Type (Deref (name, values, loc), _), (Array (_, dims) as ctype), depth) ->
+    | VarUse (Deref (name, values, loc), (Array (_, dims) as ctype), depth) ->
         let reduced = [expand (List.rev dims) values] in
         VarUse (Deref (name, reduced, loc), ctype, depth)
 

+ 7 - 2
phases/typecheck.ml

@@ -195,9 +195,14 @@ let rec typecheck node = match node with
 
     | _ -> transform_children typecheck node
 
+(* Remove any Type nodes from the tree to allow more convenient matching in
+ * later phases *)
+let rec prune_types = function
+    | Type (node, _) -> prune_types node
+    | node -> transform_children prune_types node
+
 let rec phase input =
     prerr_endline "- Type checking";
     match input with
-    | Ast (node, args) ->
-        Ast (typecheck node, args)
+    | Ast (node, args) -> Ast (prune_types (typecheck node), args)
     | _ -> raise (InvalidInput "typecheck")