|
@@ -43,7 +43,7 @@ let rec consts_to_vars node =
|
|
|
* array dimensions are used (e.g., after array dimension reduction). *)
|
|
* array dimensions are used (e.g., after array dimension reduction). *)
|
|
|
let rec array_dims node =
|
|
let rec array_dims node =
|
|
|
let make_dims basename values make_dec =
|
|
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 names = mapi make_name values in
|
|
|
|
|
|
|
|
let decs = List.map2 make_dec values names 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
|
|
| node -> transform_children array_dims node
|
|
|
|
|
|
|
|
-(* Split variable declaration and initialisation *)
|
|
|
|
|
|
|
+(* Split variable initialisation into declaration and assignment *)
|
|
|
let rec split_inits = function
|
|
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 *)
|
|
(* Wrap array initialisation in ArrayInit to pass dimensions *)
|
|
|
| VarDec (ArrayDims (_, dims) as ctype, name, Some value, ann) ->
|
|
| VarDec (ArrayDims (_, dims) as ctype, name, Some value, ann) ->
|
|
|
Block [
|
|
Block [
|
|
@@ -97,7 +84,6 @@ let rec split_inits = function
|
|
|
Assign (name, None, ArrayInit (value, dims), ann);
|
|
Assign (name, None, ArrayInit (value, dims), ann);
|
|
|
]
|
|
]
|
|
|
|
|
|
|
|
- (* Variable initialisations are split into dec;assign *)
|
|
|
|
|
| VarDec (ctype, name, Some init, ann) ->
|
|
| VarDec (ctype, name, Some init, ann) ->
|
|
|
Block [
|
|
Block [
|
|
|
VarDec (ctype, name, None, ann);
|
|
VarDec (ctype, name, None, ann);
|