|
@@ -32,6 +32,9 @@ let fcall e name el ret p =
|
|
let ft = tfun (List.map (fun e -> e.etype) el) ret in
|
|
let ft = tfun (List.map (fun e -> e.etype) el) ret in
|
|
mk (TCall (field e name ft p,el)) ret p
|
|
mk (TCall (field e name ft p,el)) ret p
|
|
|
|
|
|
|
|
+let mk_parent e =
|
|
|
|
+ mk (TParenthesis e) e.etype e.epos
|
|
|
|
+
|
|
let string com str p =
|
|
let string com str p =
|
|
mk (TConst (TString str)) com.basic.tstring p
|
|
mk (TConst (TString str)) com.basic.tstring p
|
|
|
|
|
|
@@ -870,7 +873,7 @@ let stack_context_init com stack_var exc_var pos_var tmp_var use_add p =
|
|
stack_restore = [
|
|
stack_restore = [
|
|
binop OpAssign exc_e (mk (TArrayDecl []) st p) st p;
|
|
binop OpAssign exc_e (mk (TArrayDecl []) st p) st p;
|
|
mk (TWhile (
|
|
mk (TWhile (
|
|
- binop OpGte (field stack_e "length" t.tint p) (mk (TLocal pos_var) t.tint p) t.tbool p,
|
|
|
|
|
|
+ mk_parent (binop OpGte (field stack_e "length" t.tint p) (mk (TLocal pos_var) t.tint p) t.tbool p),
|
|
fcall exc_e "unshift" [fcall stack_e "pop" [] t.tstring p] t.tvoid p,
|
|
fcall exc_e "unshift" [fcall stack_e "pop" [] t.tstring p] t.tvoid p,
|
|
NormalWhile
|
|
NormalWhile
|
|
)) t.tvoid p;
|
|
)) t.tvoid p;
|
|
@@ -1071,7 +1074,7 @@ let rec is_volatile t =
|
|
let set_default ctx a c t p =
|
|
let set_default ctx a c t p =
|
|
let ve = mk (TLocal a) t p in
|
|
let ve = mk (TLocal a) t p in
|
|
let cond = TBinop (OpEq,ve,mk (TConst TNull) t p) in
|
|
let cond = TBinop (OpEq,ve,mk (TConst TNull) t p) in
|
|
- mk (TIf (mk cond ctx.basic.tbool p, mk (TBinop (OpAssign,ve,mk (TConst c) t p)) t p,None)) ctx.basic.tvoid p
|
|
|
|
|
|
+ mk (TIf (mk_parent (mk cond ctx.basic.tbool p), mk (TBinop (OpAssign,ve,mk (TConst c) t p)) t p,None)) ctx.basic.tvoid p
|
|
|
|
|
|
let bytes_serialize data =
|
|
let bytes_serialize data =
|
|
let b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789%:" in
|
|
let b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789%:" in
|
|
@@ -1173,5 +1176,5 @@ let default_cast ?(vtmp="$t") com e texpr t p =
|
|
let is = mk (TField (std,"is")) (tfun [t_dynamic;t_dynamic] api.tbool) p in
|
|
let is = mk (TField (std,"is")) (tfun [t_dynamic;t_dynamic] api.tbool) p in
|
|
let is = mk (TCall (is,[vexpr;texpr])) api.tbool p in
|
|
let is = mk (TCall (is,[vexpr;texpr])) api.tbool p in
|
|
let exc = mk (TThrow (mk (TConst (TString "Class cast error")) api.tstring p)) t p in
|
|
let exc = mk (TThrow (mk (TConst (TString "Class cast error")) api.tstring p)) t p in
|
|
- let check = mk (TIf (is,mk (TCast (vexpr,None)) t p,Some exc)) t p in
|
|
|
|
|
|
+ let check = mk (TIf (mk_parent is,mk (TCast (vexpr,None)) t p,Some exc)) t p in
|
|
mk (TBlock [var;check;vexpr]) t p
|
|
mk (TBlock [var;check;vexpr]) t p
|