|
@@ -1190,6 +1190,45 @@ let configure gen =
|
|
print w "//line %d \"%s\"" cur_line (Ast.s_escape file); newline w
|
|
print w "//line %d \"%s\"" cur_line (Ast.s_escape file); newline w
|
|
in
|
|
in
|
|
|
|
|
|
|
|
+ let extract_statements expr =
|
|
|
|
+ let ret = ref [] in
|
|
|
|
+ let rec loop expr = match expr.eexpr with
|
|
|
|
+ | TCall ({ eexpr = TLocal {
|
|
|
|
+ v_name = "__is__" | "__typeof__" | "__array__"
|
|
|
|
+ } }, el) ->
|
|
|
|
+ List.iter loop el
|
|
|
|
+ | TNew ({ cl_path = (["java"], "NativeArray") }, params, [ size ]) ->
|
|
|
|
+ ()
|
|
|
|
+ | TUnop (Ast.Increment, _, _)
|
|
|
|
+ | TUnop (Ast.Decrement, _, _)
|
|
|
|
+ | TBinop (Ast.OpAssign, _, _)
|
|
|
|
+ | TBinop (Ast.OpAssignOp _, _, _)
|
|
|
|
+ | TLocal { v_name = "__fallback__" }
|
|
|
|
+ | TLocal { v_name = "__sbreak__" } ->
|
|
|
|
+ ret := expr :: !ret
|
|
|
|
+ | TConst _
|
|
|
|
+ | TLocal _
|
|
|
|
+ | TArray _
|
|
|
|
+ | TBinop _
|
|
|
|
+ | TField _
|
|
|
|
+ | TEnumParameter _
|
|
|
|
+ | TTypeExpr _
|
|
|
|
+ | TObjectDecl _
|
|
|
|
+ | TArrayDecl _
|
|
|
|
+ | TCast _
|
|
|
|
+ | TMeta _
|
|
|
|
+ | TParenthesis _
|
|
|
|
+ | TUnop _ ->
|
|
|
|
+ Type.iter loop expr
|
|
|
|
+ | TFunction _ -> () (* do not extract parameters from inside of it *)
|
|
|
|
+ | _ ->
|
|
|
|
+ ret := expr :: !ret
|
|
|
|
+ in
|
|
|
|
+ loop expr;
|
|
|
|
+ (* [expr] *)
|
|
|
|
+ List.rev !ret
|
|
|
|
+ in
|
|
|
|
+
|
|
let expr_s w e =
|
|
let expr_s w e =
|
|
in_value := false;
|
|
in_value := false;
|
|
let rec expr_s w e =
|
|
let rec expr_s w e =
|
|
@@ -1431,22 +1470,14 @@ let configure gen =
|
|
expr_s w e
|
|
expr_s w e
|
|
| TBlock el ->
|
|
| TBlock el ->
|
|
begin_block w;
|
|
begin_block w;
|
|
- (*let last_line = ref (-1) in
|
|
|
|
- let line_directive p =
|
|
|
|
- let cur_line = Lexer.get_error_line p in
|
|
|
|
- let is_relative_path = (String.sub p.pfile 0 1) = "." in
|
|
|
|
- let file = if is_relative_path then "../" ^ p.pfile else p.pfile in
|
|
|
|
- if cur_line <> ((!last_line)+1) then begin print w "//#line %d \"%s\"" cur_line (Ast.s_escape file); newline w end;
|
|
|
|
- last_line := cur_line in*)
|
|
|
|
List.iter (fun e ->
|
|
List.iter (fun e ->
|
|
- in_value := false;
|
|
|
|
- (match e.eexpr with
|
|
|
|
- | TConst _ -> ()
|
|
|
|
- | _ ->
|
|
|
|
|
|
+ List.iter (fun e ->
|
|
|
|
+ in_value := false;
|
|
line_directive w e.epos;
|
|
line_directive w e.epos;
|
|
expr_s w e;
|
|
expr_s w e;
|
|
- (if has_semicolon e then write w ";");
|
|
|
|
- newline w);
|
|
|
|
|
|
+ if has_semicolon e then write w ";";
|
|
|
|
+ newline w;
|
|
|
|
+ ) (extract_statements e)
|
|
) el;
|
|
) el;
|
|
end_block w
|
|
end_block w
|
|
| TIf (econd, e1, Some(eelse)) when was_in_value ->
|
|
| TIf (econd, e1, Some(eelse)) when was_in_value ->
|