|
@@ -173,7 +173,7 @@ and expr_def =
|
|
| EBinop of binop * expr * expr
|
|
| EBinop of binop * expr * expr
|
|
| EField of expr * string
|
|
| EField of expr * string
|
|
| EParenthesis of expr
|
|
| EParenthesis of expr
|
|
- | EObjectDecl of (string * expr) list
|
|
|
|
|
|
+ | EObjectDecl of (placed_name * expr) list
|
|
| EArrayDecl of expr list
|
|
| EArrayDecl of expr list
|
|
| ECall of expr * expr list
|
|
| ECall of expr * expr list
|
|
| ENew of placed_type_path * expr list
|
|
| ENew of placed_type_path * expr list
|
|
@@ -556,7 +556,7 @@ let map_expr loop (e,p) =
|
|
| EBinop (op,e1,e2) -> EBinop (op,loop e1, loop e2)
|
|
| EBinop (op,e1,e2) -> EBinop (op,loop e1, loop e2)
|
|
| EField (e,f) -> EField (loop e, f)
|
|
| EField (e,f) -> EField (loop e, f)
|
|
| EParenthesis e -> EParenthesis (loop e)
|
|
| EParenthesis e -> EParenthesis (loop e)
|
|
- | EObjectDecl fl -> EObjectDecl (List.map (fun (f,e) -> f,loop e) fl)
|
|
|
|
|
|
+ | EObjectDecl fl -> EObjectDecl (List.map (fun ((f,p),e) -> (f,p),loop e) fl)
|
|
| EArrayDecl el -> EArrayDecl (List.map loop el)
|
|
| EArrayDecl el -> EArrayDecl (List.map loop el)
|
|
| ECall (e,el) -> ECall (loop e, List.map loop el)
|
|
| ECall (e,el) -> ECall (loop e, List.map loop el)
|
|
| ENew (t,el) -> ENew (tpath t,List.map loop el)
|
|
| ENew (t,el) -> ENew (tpath t,List.map loop el)
|
|
@@ -620,7 +620,7 @@ let s_expr e =
|
|
| EBinop (op,e1,e2) -> s_expr_inner tabs e1 ^ " " ^ s_binop op ^ " " ^ s_expr_inner tabs e2
|
|
| EBinop (op,e1,e2) -> s_expr_inner tabs e1 ^ " " ^ s_binop op ^ " " ^ s_expr_inner tabs e2
|
|
| EField (e,f) -> s_expr_inner tabs e ^ "." ^ f
|
|
| EField (e,f) -> s_expr_inner tabs e ^ "." ^ f
|
|
| EParenthesis e -> "(" ^ (s_expr_inner tabs e) ^ ")"
|
|
| EParenthesis e -> "(" ^ (s_expr_inner tabs e) ^ ")"
|
|
- | EObjectDecl fl -> "{ " ^ (String.concat ", " (List.map (fun (n,e) -> n ^ " : " ^ (s_expr_inner tabs e)) fl)) ^ " }"
|
|
|
|
|
|
+ | EObjectDecl fl -> "{ " ^ (String.concat ", " (List.map (fun ((n,_),e) -> n ^ " : " ^ (s_expr_inner tabs e)) fl)) ^ " }"
|
|
| EArrayDecl el -> "[" ^ s_expr_list tabs el ", " ^ "]"
|
|
| EArrayDecl el -> "[" ^ s_expr_list tabs el ", " ^ "]"
|
|
| ECall (e,el) -> s_expr_inner tabs e ^ "(" ^ s_expr_list tabs el ", " ^ ")"
|
|
| ECall (e,el) -> s_expr_inner tabs e ^ "(" ^ s_expr_list tabs el ", " ^ ")"
|
|
| ENew (t,el) -> "new " ^ s_complex_type_path tabs t ^ "(" ^ s_expr_list tabs el ", " ^ ")"
|
|
| ENew (t,el) -> "new " ^ s_complex_type_path tabs t ^ "(" ^ s_expr_list tabs el ", " ^ ")"
|
|
@@ -728,7 +728,7 @@ let s_expr e =
|
|
let get_value_meta meta =
|
|
let get_value_meta meta =
|
|
try
|
|
try
|
|
begin match Meta.get Meta.Value meta with
|
|
begin match Meta.get Meta.Value meta with
|
|
- | (_,[EObjectDecl values,_],_) -> List.fold_left (fun acc (s,e) -> PMap.add s e acc) PMap.empty values
|
|
|
|
|
|
+ | (_,[EObjectDecl values,_],_) -> List.fold_left (fun acc ((s,_),e) -> PMap.add s e acc) PMap.empty values
|
|
| _ -> raise Not_found
|
|
| _ -> raise Not_found
|
|
end
|
|
end
|
|
with Not_found ->
|
|
with Not_found ->
|
|
@@ -785,4 +785,11 @@ module Expr = struct
|
|
let ensure_block e = match fst e with
|
|
let ensure_block e = match fst e with
|
|
| EBlock _ -> e
|
|
| EBlock _ -> e
|
|
| _ -> (EBlock [e],pos e)
|
|
| _ -> (EBlock [e],pos e)
|
|
|
|
+
|
|
|
|
+ let field_assoc name fl =
|
|
|
|
+ let rec loop fl = match fl with
|
|
|
|
+ | ((name',_),e) :: fl -> if name' = name then e else loop fl
|
|
|
|
+ | [] -> raise Not_found
|
|
|
|
+ in
|
|
|
|
+ loop fl
|
|
end
|
|
end
|