2
0
Эх сурвалжийг харах

map FInstance when expanding generics (fixed issue #1683)

Simon Krajewski 12 жил өмнө
parent
commit
df1fad85d7
1 өөрчлөгдсөн 7 нэмэгдсэн , 1 устгасан
  1. 7 1
      codegen.ml

+ 7 - 1
codegen.ml

@@ -263,7 +263,13 @@ let generic_substitute_expr gctx e =
 			Hashtbl.add vars v.v_id v2;
 			v2
 	in
-	let rec build_expr e = map_expr_type build_expr (generic_substitute_type gctx) build_var e in
+	let rec build_expr e =
+		match e.eexpr with
+		| TField({eexpr = TConst TThis} as e1, FInstance({cl_kind = KGeneric},cf)) ->
+			let cg = match follow (generic_substitute_type gctx (e1.etype)) with TInst(c,_) -> c | _ -> assert false in
+			build_expr {e with eexpr = TField(e1,FInstance(cg,cf))}
+		| _ -> map_expr_type build_expr (generic_substitute_type gctx) build_var e
+	in
 	build_expr e
 
 let is_generic_parameter ctx c =