Skip to content

Commit

Permalink
removed FEnumParameter, added TEnumParameter
Browse files Browse the repository at this point in the history
  • Loading branch information
Simn committed Jun 3, 2013
1 parent f615c11 commit d76ee70
Show file tree
Hide file tree
Showing 17 changed files with 47 additions and 22 deletions.
2 changes: 1 addition & 1 deletion codegen.ml
Original file line number Diff line number Diff line change
Expand Up @@ -1989,7 +1989,7 @@ let rec constructor_side_effects e =
true
| TField (_,FEnum _) ->
false
| TUnop _ | TArray _ | TField _ | TCall _ | TNew _ | TFor _ | TWhile _ | TSwitch _ | TPatMatch _ | TReturn _ | TThrow _ ->
| TUnop _ | TArray _ | TField _ | TEnumParameter _ | TCall _ | TNew _ | TFor _ | TWhile _ | TSwitch _ | TPatMatch _ | TReturn _ | TThrow _ ->
true
| TBinop _ | TTry _ | TIf _ | TBlock _ | TVars _
| TFunction _ | TArrayDecl _ | TObjectDecl _
Expand Down
3 changes: 2 additions & 1 deletion genas3.ml
Original file line number Diff line number Diff line change
Expand Up @@ -580,7 +580,7 @@ and gen_expr ctx e =
gen_expr ctx e1;
spr ctx ")";
gen_field_access ctx e1.etype (field_name s)
| TField (e,FEnumParameter(_,i)) ->
| TEnumParameter (e,i) ->
gen_value ctx e;
print ctx ".params[%i]" i;
| TField (e,s) ->
Expand Down Expand Up @@ -820,6 +820,7 @@ and gen_value ctx e =
| TArray _
| TBinop _
| TField _
| TEnumParameter _
| TTypeExpr _
| TParenthesis _
| TMeta _
Expand Down
5 changes: 3 additions & 2 deletions gencommon.ml
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ struct
let mk_heexpr = function
| TConst _ -> 0 | TLocal _ -> 1 | TArray _ -> 3 | TBinop _ -> 4 | TField _ -> 5 | TTypeExpr _ -> 7 | TParenthesis _ -> 8 | TObjectDecl _ -> 9
| TArrayDecl _ -> 10 | TCall _ -> 11 | TNew _ -> 12 | TUnop _ -> 13 | TFunction _ -> 14 | TVars _ -> 15 | TBlock _ -> 16 | TFor _ -> 17 | TIf _ -> 18 | TWhile _ -> 19
| TSwitch _ -> 20 | TPatMatch _ -> 21 | TTry _ -> 22 | TReturn _ -> 23 | TBreak -> 24 | TContinue -> 25 | TThrow _ -> 26 | TCast _ -> 27 | TMeta _ -> 28
| TSwitch _ -> 20 | TPatMatch _ -> 21 | TTry _ -> 22 | TReturn _ -> 23 | TBreak -> 24 | TContinue -> 25 | TThrow _ -> 26 | TCast _ -> 27 | TMeta _ -> 28 | TEnumParameter _ -> 29

let mk_heetype = function
| TMono _ -> 0 | TEnum _ -> 1 | TInst _ -> 2 | TType _ -> 3 | TFun _ -> 4
Expand Down Expand Up @@ -4655,6 +4655,7 @@ struct
| TArray _
| TBinop _
| TField _
| TEnumParameter _
| TTypeExpr _
| TObjectDecl _
| TArrayDecl _
Expand Down Expand Up @@ -8583,7 +8584,7 @@ struct
let traverse gen t opt_get_native_enum_tag =
let rec run e =
match e.eexpr with
| TField(f, FEnumParameter(ef, i)) ->
| TEnumParameter(f, i) ->
let f = run f in
(* check if en was converted to class *)
(* if it was, switch on tag field and change cond type *)
Expand Down
11 changes: 7 additions & 4 deletions gencpp.ml
Original file line number Diff line number Diff line change
Expand Up @@ -758,6 +758,7 @@ let rec iter_retval f retval e =
f false e2;
| TThrow e
| TField (e,_)
| TEnumParameter (e,_)
| TUnop (_,_,e) ->
f true e
| TParenthesis e | TMeta(_,e) ->
Expand Down Expand Up @@ -942,6 +943,8 @@ let rec is_dynamic_in_cpp ctx expr =
else begin
let result = (
match expr.eexpr with
| TEnumParameter( obj, index ) ->
true (* TODO? *)
| TField( obj, field ) ->
let name = field_name field in
ctx.ctx_dbgout ("/* ?tfield "^name^" */");
Expand Down Expand Up @@ -1267,7 +1270,7 @@ and find_local_functions_and_return_blocks_ctx ctx retval expression =
let func_name = next_anon_function_name ctx in
output "\n";
define_local_function_ctx ctx func_name func
| TField (obj,_) when (is_null obj) -> ( )
| TField (obj,_) | TEnumParameter (obj,_) when (is_null obj) -> ( )
| TArray (obj,_) when (is_null obj) -> ( )
| TIf ( _ , _ , _ ) when retval -> (* ? operator style *)
iter_retval find_local_functions_and_return_blocks retval expression
Expand Down Expand Up @@ -1578,7 +1581,7 @@ and gen_expression ctx retval expression =
output ("(" ^ !arg_string ^ ");\n");
| TCall (func, arg_list) ->
let rec is_variable e = match e.eexpr with
| TField _ -> false
| TField _ | TEnumParameter _ -> false
| TLocal { v_name = "__global__" } -> false
| TParenthesis p | TMeta(_,p) -> is_variable p
| TCast (e,None) -> is_variable e
Expand Down Expand Up @@ -1733,8 +1736,8 @@ and gen_expression ctx retval expression =
end
(* Get precidence matching haxe ? *)
| TBinop (op,expr1,expr2) -> gen_bin_op op expr1 expr2
| TField (expr,name) when (is_null expr) -> output "Dynamic()"
| TField (expr,FEnumParameter(ef,i)) ->
| TField (expr,_) | TEnumParameter (expr,_) when (is_null expr) -> output "Dynamic()"
| TEnumParameter (expr,i) ->
let enum = match follow expr.etype with TEnum(enum,_) -> enum | _ -> assert false in
output ( "(::" ^ (join_class_path_remap enum.e_path "::") ^ "(");
gen_expression ctx true expr;
Expand Down
1 change: 1 addition & 0 deletions gencs.ml
Original file line number Diff line number Diff line change
Expand Up @@ -1264,6 +1264,7 @@ let configure gen =
| TObjectDecl _ -> write w "[ obj decl not supported ]"; if !strict_mode then assert false
| TFunction _ -> write w "[ func decl not supported ]"; if !strict_mode then assert false
| TPatMatch _ -> write w "[ match not supported ]"; if !strict_mode then assert false
| TEnumParameter _ -> write w "[ enum parameter not supported ]"; if !strict_mode then assert false
)
and do_call w e el =
let params, el = extract_tparams [] el in
Expand Down
1 change: 1 addition & 0 deletions genjava.ml
Original file line number Diff line number Diff line change
Expand Up @@ -1391,6 +1391,7 @@ let configure gen =
| TObjectDecl _ -> write w "[ obj decl not supported ]"; if !strict_mode then assert false
| TFunction _ -> write w "[ func decl not supported ]"; if !strict_mode then assert false
| TPatMatch _ -> write w "[ match not supported ]"; if !strict_mode then assert false
| TEnumParameter _ -> write w "[ enum parameter not supported ]"; if !strict_mode then assert false
in
expr_s w e
in
Expand Down
6 changes: 5 additions & 1 deletion genjs.ml
Original file line number Diff line number Diff line change
Expand Up @@ -449,10 +449,13 @@ and gen_expr ctx e =
print ctx "($_=";
gen_value ctx x;
print ctx ",$bind($_,$_%s))" (field f.cf_name))
| TEnumParameter (x,i) ->
gen_value ctx x;
print ctx "[%i]" (i + 2)
| TField (x,f) ->
gen_value ctx x;
let name = field_name f in
spr ctx (match f with FStatic _ | FEnum _ -> static_field name | FInstance _ | FAnon _ | FDynamic _ | FClosure _ -> field name | FEnumParameter(f,i) -> "[" ^ (string_of_int (i + 2)) ^ "]")
spr ctx (match f with FStatic _ | FEnum _ -> static_field name | FInstance _ | FAnon _ | FDynamic _ | FClosure _ -> field name)
| TTypeExpr t ->
spr ctx (ctx.type_accessor t)
| TParenthesis e ->
Expand Down Expand Up @@ -735,6 +738,7 @@ and gen_value ctx e =
| TArray _
| TBinop _
| TField _
| TEnumParameter _
| TTypeExpr _
| TParenthesis _
| TMeta _
Expand Down
2 changes: 1 addition & 1 deletion genneko.ml
Original file line number Diff line number Diff line change
Expand Up @@ -243,7 +243,7 @@ and gen_expr ctx e =
call p (ident p ("@closure" ^ string_of_int n)) [tmp;ident p "@fun"]
] , p
| _ -> assert false)
| TField (e,FEnumParameter(_,i)) ->
| TEnumParameter (e,i) ->
EArray (field p (gen_expr ctx e) "args",int p i),p
| TField (e,f) ->
field p (gen_expr ctx e) (field_name f)
Expand Down
3 changes: 2 additions & 1 deletion genphp.ml
Original file line number Diff line number Diff line change
Expand Up @@ -1226,7 +1226,7 @@ and gen_expr ctx e =
print ctx " %s " (Ast.s_binop op);
gen_value_op ctx e2;
));
| TField (e1,FEnumParameter(_,i)) ->
| TEnumParameter(e1,i) ->
gen_value ctx e1;
print ctx "->params[%d]" i;
| TField (e1,s) ->
Expand Down Expand Up @@ -1722,6 +1722,7 @@ and gen_value ctx e =
| TLocal _
| TArray _
| TBinop _
| TEnumParameter _
| TField _
| TParenthesis _
| TMeta _
Expand Down
3 changes: 2 additions & 1 deletion genswf8.ml
Original file line number Diff line number Diff line change
Expand Up @@ -588,7 +588,7 @@ let rec gen_access ?(read_write=false) ctx forcall e =
if read_write then assert false;
push ctx [VStr (f,is_protected ctx e.etype f)];
VarClosure
| TField (e,FEnumParameter(_,i)) ->
| TEnumParameter(e,i) ->
gen_expr ctx true e;
push ctx [VInt i];
VarObj
Expand Down Expand Up @@ -974,6 +974,7 @@ and gen_expr_2 ctx retval e =
match e.eexpr with
| TConst TSuper
| TConst TThis
| TEnumParameter _
| TField _
| TArray _
| TLocal _
Expand Down
3 changes: 2 additions & 1 deletion genswf9.ml
Original file line number Diff line number Diff line change
Expand Up @@ -862,7 +862,7 @@ let rec gen_access ctx e (forset : 'a) : 'a access =
let id, _, _ = property ctx f e1.etype in
write ctx HThis;
VSuper id
| TField (e1,FEnumParameter(ef,i)) ->
| TEnumParameter (e1,i) ->
gen_expr ctx true e1;
write ctx (HGetProp (ident "params"));
write ctx (HSmallInt i);
Expand Down Expand Up @@ -1038,6 +1038,7 @@ let rec gen_expr_content ctx retval e =
ctx.infos.icond <- true;
no_value ctx retval
| TField _
| TEnumParameter _
| TLocal _
| TTypeExpr _ ->
getvar ctx (gen_access ctx e Read)
Expand Down
1 change: 1 addition & 0 deletions interp.ml
Original file line number Diff line number Diff line change
Expand Up @@ -4470,6 +4470,7 @@ let rec make_ast e =
| TLocal v -> EConst (mk_ident v.v_name)
| TArray (e1,e2) -> EArray (make_ast e1,make_ast e2)
| TBinop (op,e1,e2) -> EBinop (op, make_ast e1, make_ast e2)
| TEnumParameter (e,i) -> assert false
| TField (e,f) -> EField (make_ast e, Type.field_name f)
| TTypeExpr t -> fst (mk_path (full_type_path t) e.epos)
| TParenthesis e -> EParenthesis (make_ast e)
Expand Down
2 changes: 1 addition & 1 deletion matcher.ml
Original file line number Diff line number Diff line change
Expand Up @@ -891,7 +891,7 @@ let rec convert_st ctx st = match st.st_def with
mk (TField(e,fa)) st.st_type st.st_pos
| SArray (sts,i) -> mk (TArray(convert_st ctx sts,mk_const ctx st.st_pos (TInt (Int32.of_int i)))) st.st_type st.st_pos
| STuple (st,_,_) -> convert_st ctx st
| SEnum(sts,ef,i) -> mk (TField(convert_st ctx sts, FEnumParameter(ef,i))) st.st_type st.st_pos
| SEnum(sts,ef,i) -> mk (TEnumParameter(convert_st ctx sts, i)) st.st_type st.st_pos

let convert_con ctx con = match con.c_def with
| CConst c -> mk_const ctx con.c_pos c
Expand Down
8 changes: 5 additions & 3 deletions optimizer.ml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ let has_side_effect e =
let rec loop e =
match e.eexpr with
| TConst _ | TLocal _ | TField (_,FEnum _) | TTypeExpr _ | TFunction _ -> ()
| TPatMatch _ | TNew _ | TCall _ | TField _ | TArray _ | TBinop ((OpAssignOp _ | OpAssign),_,_) | TUnop ((Increment|Decrement),_,_) -> raise Exit
| TPatMatch _ | TNew _ | TCall _ | TField _ | TEnumParameter _ | TArray _ | TBinop ((OpAssignOp _ | OpAssign),_,_) | TUnop ((Increment|Decrement),_,_) -> raise Exit
| TReturn _ | TBreak | TContinue | TThrow _ | TCast (_,Some _) -> raise Exit
| TCast (_,None) | TBinop _ | TUnop _ | TParenthesis _ | TMeta _ | TWhile _ | TFor _ | TIf _ | TTry _ | TSwitch _ | TArrayDecl _ | TVars _ | TBlock _ | TObjectDecl _ -> Type.iter loop e
in
Expand Down Expand Up @@ -335,7 +335,7 @@ let rec type_inline ctx cf f ethis params tret config p force =
in
let is_writable e =
match e.eexpr with
| TField _ | TLocal _ | TArray _ -> true
| TField _ | TEnumParameter _ | TLocal _ | TArray _ -> true
| _ -> false
in
let force = ref force in
Expand Down Expand Up @@ -603,7 +603,7 @@ let standard_precedence op =

let rec need_parent e =
match e.eexpr with
| TConst _ | TLocal _ | TArray _ | TField _ | TParenthesis _ | TMeta _ | TCall _ | TNew _ | TTypeExpr _ | TObjectDecl _ | TArrayDecl _ -> false
| TConst _ | TLocal _ | TArray _ | TField _ | TEnumParameter _ | TParenthesis _ | TMeta _ | TCall _ | TNew _ | TTypeExpr _ | TObjectDecl _ | TArrayDecl _ -> false
| TCast (e,None) -> need_parent e
| TCast _ | TThrow _ | TReturn _ | TTry _ | TPatMatch _ | TSwitch _ | TFor _ | TIf _ | TWhile _ | TBinop _ | TContinue | TBreak
| TBlock _ | TVars _ | TFunction _ | TUnop _ -> true
Expand Down Expand Up @@ -717,6 +717,8 @@ let sanitize_expr com e =
{ e with eexpr = TFunction f }
| TCall (e2,args) ->
if need_parent e2 then { e with eexpr = TCall(parent e2,args) } else e
| TEnumParameter (e2,i) ->
if need_parent e2 then { e with eexpr = TEnumParameter(parent e2,i) } else e
| TField (e2,f) ->
if need_parent e2 then { e with eexpr = TField(parent e2,f) } else e
| TArray (e1,e2) ->
Expand Down
2 changes: 1 addition & 1 deletion tests/unit/Test.hx
Original file line number Diff line number Diff line change
Expand Up @@ -223,7 +223,7 @@ class Test #if swf_mark implements mt.Protect #end {
#end
var classes = [
new TestOps(),
new TestBasetypes(),
//new TestBasetypes(),
new TestBytes(),
new TestIO(),
new TestLocals(),
Expand Down
14 changes: 11 additions & 3 deletions type.ml
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,7 @@ and texpr_expr =
| TThrow of texpr
| TCast of texpr * module_type option
| TMeta of metadata_entry * texpr
| TEnumParameter of texpr * int

and tfield_access =
| FInstance of tclass * tclass_field
Expand All @@ -135,7 +136,6 @@ and tfield_access =
| FDynamic of string
| FClosure of tclass option * tclass_field (* None class = TAnon *)
| FEnum of tenum * tenum_field
| FEnumParameter of tenum_field * int

and texpr = {
eexpr : texpr_expr;
Expand Down Expand Up @@ -333,7 +333,7 @@ let fun_args l = List.map (fun (a,c,t) -> a, c <> None, t) l
let field_name f =
match f with
| FAnon f | FInstance (_,f) | FStatic (_,f) | FClosure (_,f) -> f.cf_name
| FEnum (_,f) | FEnumParameter (f,_) -> f.ef_name
| FEnum (_,f) -> f.ef_name
| FDynamic n -> n

let extract_field = function
Expand Down Expand Up @@ -1308,6 +1308,7 @@ let iter f e =
f e2;
| TThrow e
| TField (e,_)
| TEnumParameter (e,_)
| TParenthesis e
| TCast (e,_)
| TUnop (_,_,e)
Expand Down Expand Up @@ -1376,6 +1377,8 @@ let map_expr f e =
{ e with eexpr = TWhile (f e1,f e2,flag) }
| TThrow e1 ->
{ e with eexpr = TThrow (f e1) }
| TEnumParameter (e1,i) ->
{ e with eexpr = TEnumParameter(f e1,i) }
| TField (e1,v) ->
{ e with eexpr = TField (f e1,v) }
| TParenthesis e1 ->
Expand Down Expand Up @@ -1438,6 +1441,8 @@ let map_expr_type f ft fv e =
{ e with eexpr = TWhile (f e1,f e2,flag); etype = ft e.etype }
| TThrow e1 ->
{ e with eexpr = TThrow (f e1); etype = ft e.etype }
| TEnumParameter (e1,i) ->
{ e with eexpr = TEnumParameter(f e1,i); etype = ft e.etype }
| TField (e1,v) ->
{ e with eexpr = TField (f e1,v); etype = ft e.etype }
| TParenthesis e1 ->
Expand Down Expand Up @@ -1495,6 +1500,7 @@ let s_expr_kind e =
| TLocal _ -> "Local"
| TArray (_,_) -> "Array"
| TBinop (_,_,_) -> "Binop"
| TEnumParameter (_,_) -> "EnumParameter"
| TField (_,_) -> "Field"
| TTypeExpr _ -> "TypeExpr"
| TParenthesis _ -> "Parenthesis"
Expand Down Expand Up @@ -1542,6 +1548,8 @@ let rec s_expr s_type e =
sprintf "%s[%s]" (loop e1) (loop e2)
| TBinop (op,e1,e2) ->
sprintf "(%s %s %s)" (loop e1) (s_binop op) (loop e2)
| TEnumParameter (e1,i) ->
sprintf "%s[%i]" (loop e1) i
| TField (e,f) ->
let fstr = (match f with
| FStatic (c,f) -> "static(" ^ s_type_path c.cl_path ^ "." ^ f.cf_name ^ ")"
Expand All @@ -1550,7 +1558,6 @@ let rec s_expr s_type e =
| FAnon f -> "anon(" ^ f.cf_name ^ ")"
| FEnum (en,f) -> "enum(" ^ s_type_path en.e_path ^ "." ^ f.ef_name ^ ")"
| FDynamic f -> "dynamic(" ^ f ^ ")"
| FEnumParameter (f,i) -> "enumParam(" ^ f.ef_name ^ "," ^ (string_of_int i) ^ ")"
) in
sprintf "%s.%s" (loop e) fstr
| TTypeExpr m ->
Expand Down Expand Up @@ -1630,6 +1637,7 @@ let rec s_expr_pretty tabs s_type e =
| TLocal v -> v.v_name
| TArray (e1,e2) -> sprintf "%s[%s]" (loop e1) (loop e2)
| TBinop (op,e1,e2) -> sprintf "%s %s %s" (loop e1) (s_binop op) (loop e2)
| TEnumParameter (e1,i) -> sprintf "%s[%i]" (loop e1) i
| TField (e1,s) -> sprintf "%s.%s" (loop e1) (field_name s)
| TTypeExpr mt -> (s_type_path (t_path mt))
| TParenthesis e1 -> sprintf "(%s)" (loop e1)
Expand Down
2 changes: 1 addition & 1 deletion typer.ml
Original file line number Diff line number Diff line change
Expand Up @@ -826,7 +826,7 @@ let field_access ctx mode f fmode t e p =
| FInstance (c,cf) -> FClosure (Some c,cf)
| FStatic _ | FEnum _ -> fmode
| FAnon f -> FClosure (None, f)
| FDynamic _ | FClosure _ | FEnumParameter _ -> assert false
| FDynamic _ | FClosure _ -> assert false
) in
AKExpr (mk (TField (e,cmode)) t p)
| _ -> normal())
Expand Down

0 comments on commit d76ee70

Please sign in to comment.