Browse Source

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

Taddeus Kroes 12 năm trước cách đây
mục cha
commit
b418c7c589
1 tập tin đã thay đổi với 2 bổ sung16 xóa
  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);