Browse Source

use correct v_id when reading from .hxb

Simon Krajewski 1 năm trước cách đây
mục cha
commit
18f74f586a

+ 1 - 1
src/compiler/hxb/hxbReader.ml

@@ -906,7 +906,7 @@ class hxb_reader
 		let meta = self#read_metadata in
 		let pos = self#read_pos in
 		let v = {
-			v_id = id;
+			v_id = api#get_var_id id;
 			v_name = name;
 			v_type = t_dynamic;
 			v_kind = kind;

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

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

+ 3 - 0
src/compiler/server.ml

@@ -436,6 +436,9 @@ class hxb_reader_api_server
 
 	method basic_types =
 		ctx.com.basic
+
+	method get_var_id (i : int) =
+		i
 end
 
 let handle_cache_bound_objects com cbol =

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

@@ -139,6 +139,9 @@ class hxb_reader_api_com
 
 	method basic_types =
 		com.basic
+
+	method get_var_id (i : int) =
+		i
 end
 
 let find_module com cc path p =

+ 6 - 2
src/core/tFunctions.ml

@@ -58,9 +58,9 @@ let has_var_flag v (flag : flag_tvar) =
 
 (* ======= General utility ======= *)
 
-let alloc_var =
+let alloc_var' =
 	let uid = ref 0 in
-	(fun kind n t p ->
+	uid,(fun kind n t p ->
 		incr uid;
 		{
 			v_kind = kind;
@@ -74,6 +74,10 @@ let alloc_var =
 		}
 	)
 
+let alloc_var =
+	let _,alloc_var = alloc_var' in
+	alloc_var
+
 let alloc_mid =
 	let mid = ref 0 in
 	(fun() -> incr mid; !mid)

+ 6 - 0
src/typing/typeloadModule.ml

@@ -795,6 +795,12 @@ class hxb_reader_api_typeload
 
 	method basic_types =
 		ctx.com.basic
+
+	method get_var_id (i : int) =
+		(* The v_id in .hxb has no relation to this context, make a new one. *)
+		let uid = fst alloc_var' in
+		incr uid;
+		!uid
 end
 
 let rec get_reader ctx p =