Răsfoiți Sursa

Generated array dimension names are now unique to avoid weird error messages when array definitions have name clashes

Taddeus Kroes 12 ani în urmă
părinte
comite
b418c7c589
1 a modificat fișierele cu 2 adăugiri și 16 ștergeri
  1. 2 16
      phases/desug.ml

+ 2 - 16
phases/desug.ml

@@ -43,7 +43,7 @@ let rec consts_to_vars node =
  * array dimensions are used (e.g., after array dimension reduction). *)
 let rec array_dims node =
     let make_dims basename values make_dec =
-        let make_name i _ = basename ^ "$dim$$" ^ string_of_int (i + 1) in
+        let make_name i _ = fresh_const (basename ^ "$dim$" ^ string_of_int (i + 1)) in
         let names = mapi make_name values in
 
         let decs = List.map2 make_dec values names in
@@ -75,21 +75,8 @@ let rec array_dims node =
 
     | node -> transform_children array_dims node
 
-(* Split variable declaration and initialisation *)
+(* Split variable initialisation into declaration and assignment *)
 let rec split_inits = function
-    (*
-    (* Translate scalar array initialisation to ArrayScalar node, for easy
-     * replacement later on *)
-    | VarDec (ArrayDims (_, dims) as ctype, name, Some (Const _   as v), ann) ->
-        let init = Some (ArrayInit (ArrayScalar v, dims)) in
-        split_inits (VarDec (ctype, name, init, ann))
-
-    (* Wrap ArrayConst in ArrayInit to pass dimensions *)
-    | VarDec (ArrayDims (_, dims) as ctype, name, Some (ArrayConst _ as v), ann) ->
-        let init = Some (ArrayInit (v, dims)) in
-        split_inits (VarDec (ctype, name, init, ann))
-    *)
-
     (* Wrap array initialisation in ArrayInit to pass dimensions *)
     | VarDec (ArrayDims (_, dims) as ctype, name, Some value, ann) ->
         Block [
@@ -97,7 +84,6 @@ let rec split_inits = function
             Assign (name, None, ArrayInit (value, dims), ann);
         ]
 
-    (* Variable initialisations are split into dec;assign *)
     | VarDec (ctype, name, Some init, ann) ->
         Block [
             VarDec (ctype, name, None, ann);