ソースを参照

[gencommon+genpy] some code re-use

Dan Korostelev 9 年 前
コミット
65a4fc1eb7
2 ファイル変更5 行追加8 行削除
  1. 3 5
      gencommon.ml
  2. 2 3
      genpy.ml

+ 3 - 5
gencommon.ml

@@ -233,17 +233,15 @@ let is_void t = match follow t with
 			true
 	| _ -> false
 
-let mk_local var pos = { eexpr = TLocal(var); etype = var.v_type; epos = pos }
+let mk_local = Codegen.ExprBuilder.make_local
 
 (* this function is used by CastDetection module *)
 let get_fun t =
 	match follow t with | TFun(r1,r2) -> (r1,r2) | _ -> (trace (s_type (print_context()) (follow t) )); assert false
 
-let mk_cast t e =
-	{ eexpr = TCast(e, None); etype = t; epos = e.epos }
+let mk_cast t e = Type.mk_cast e t e.epos
 
-let mk_classtype_access cl pos =
-	{ eexpr = TTypeExpr(TClassDecl(cl)); etype = anon_of_classtype cl; epos = pos }
+let mk_classtype_access cl pos = Codegen.ExprBuilder.make_static_this cl pos
 
 let mk_static_field_access_infer cl field pos params =
 	try

+ 2 - 3
genpy.ml

@@ -20,6 +20,7 @@
 open Ast
 open Type
 open Common
+open Codegen.ExprBuilder
 
 module Utils = struct
 	let class_of_module_type mt = match mt with
@@ -656,9 +657,7 @@ module Transformer = struct
 			let name = (ae.a_next_id ()) in
 			let t_var = alloc_var name e1.etype in
 
-			let mk_local v p = { eexpr = TLocal v; etype = v.v_type; epos = p } in
-
-			let ev = mk_local t_var e1.epos in
+			let ev = make_local t_var e1.epos in
 			let ehasnext = mk (TField(ev,quick_field e1.etype "hasNext")) (tfun [] (!t_bool) ) e1.epos in
 			let ehasnext = mk (TCall(ehasnext,[])) ehasnext.etype ehasnext.epos in