Răsfoiți Sursa

remove manual cl_build call, add enable_field_access to api

see #11493
Simon Krajewski 1 an în urmă
părinte
comite
3f6bed79ca

+ 3 - 2
src/compiler/hxb/hxbData.ml

@@ -32,13 +32,14 @@ type chunk_kind =
 	| TDR (* typedef references *)
 	(* Field references *)
 	| AFR (* anon field references *)
-	| EFR (* enum field references *)
-	| CFR (* class field references *)
 	(* Own module type definitions *)
 	| CLD (* class definition *)
 	| END (* enum definition *)
 	| ABD (* abstract definition *)
 	| TDD (* typedef definition *)
+	(* Field references *)
+	| EFR (* enum field references *)
+	| CFR (* class field references *)
 	(* Own field definitions *)
 	| CFD (* class fields *)
 	| EFD (* enum fields *)

+ 2 - 5
src/compiler/hxb/hxbReader.ml

@@ -1506,11 +1506,6 @@ class hxb_reader
 		let l = read_uleb128 ch in
 		let a = Array.init l (fun i ->
 			let c = self#read_class_ref in
-			begin try
-				ignore(c.cl_build())
-			with Error.Error err ->
-				error (Printf.sprintf "[HXB] [%s] Error while building class %s: %s" (s_type_path current_module.m_path) (s_type_path c.cl_path) (Error.error_msg err.err_message))
-			end;
 			let kind = match IO.read_byte ch with
 				| 0 -> CfrStatic
 				| 1 -> CfrMember
@@ -1790,8 +1785,10 @@ class hxb_reader
 		| ABD ->
 			self#read_abd;
 		| EFR ->
+			api#enable_field_access;
 			self#read_efr;
 		| CFR ->
+			api#enable_field_access;
 			self#read_cfr;
 		| CFD ->
 			self#read_cfd;

+ 1 - 0
src/compiler/hxb/hxbReaderApi.ml

@@ -7,4 +7,5 @@ class virtual hxb_reader_api = object(self)
 	method virtual resolve_type : string list -> string -> string -> module_type
 	method virtual basic_types : basic_types
 	method virtual get_var_id : int -> int
+	method virtual enable_field_access : unit
 end

+ 3 - 0
src/compiler/server.ml

@@ -442,6 +442,9 @@ class hxb_reader_api_server
 
 	method get_var_id (i : int) =
 		i
+
+	method enable_field_access =
+		()
 end
 
 let handle_cache_bound_objects com cbol =

+ 3 - 0
src/context/display/displayJson.ml

@@ -144,6 +144,9 @@ class hxb_reader_api_com
 
 	method get_var_id (i : int) =
 		i
+
+	method enable_field_access =
+		()
 end
 
 let find_module ~(headers_only : bool) com cc path =

+ 2 - 2
src/context/typecore.ml

@@ -454,8 +454,8 @@ let init_class_done ctx =
 	ctx.pass <- PConnectField
 
 let enter_field_typing_pass ctx info =
-	flush_pass ctx PConnectField info;
-	ctx.pass <- PTypeField
+	ctx.pass <- PTypeField;
+	flush_pass ctx PConnectField info
 
 let make_lazy ?(force=true) ctx t_proc f where =
 	let r = ref (lazy_available t_dynamic) in

+ 3 - 0
src/typing/typeloadModule.ml

@@ -801,6 +801,9 @@ class hxb_reader_api_typeload
 		let uid = fst alloc_var' in
 		incr uid;
 		!uid
+
+	method enable_field_access =
+		enter_field_typing_pass ctx ("enable_field_access",fst ctx.curclass.cl_path @ [snd ctx.curclass.cl_path;ctx.curfield.cf_name]);
 end
 
 let rec get_reader ctx p =