فهرست منبع

fix HxbId insertion on fields without expression

Simon Krajewski 1 سال پیش
والد
کامیت
f9b02fe5fe
2فایلهای تغییر یافته به همراه11 افزوده شده و 10 حذف شده
  1. 10 9
      src/compiler/hxb/hxbReader.ml
  2. 1 1
      src/compiler/hxb/hxbWriter.ml

+ 10 - 9
src/compiler/hxb/hxbReader.ml

@@ -1382,31 +1382,32 @@ class hxb_reader
 		let flags = read_uleb128 ch in
 
 		let doc = self#read_option (fun () -> self#read_documentation) in
-		let meta = self#read_metadata in
+		cf.cf_meta <- self#read_metadata;
 		let kind = self#read_field_kind in
 
 		let expr,expr_unoptimized = match read_byte ch with
 			| 0 ->
 				None,None
-			| _ ->
+			| 1 ->
 				let fctx = self#start_texpr in
 				let e,e_unopt = self#read_expression fctx in
 				(Some e,e_unopt)
+			| 2 ->
+				(* store type parameter info for EXD *)
+				let info = ClassFieldInfo.create field_type_parameters in
+				ClassFieldInfos.set class_field_infos info cf;
+				None,None
+			| _ ->
+				die "" __LOC__
 		in
 
 		cf.cf_type <- t;
 		cf.cf_doc <- doc;
-		cf.cf_meta <- meta;
 		cf.cf_kind <- kind;
 		cf.cf_expr <- expr;
 		cf.cf_expr_unoptimized <- expr_unoptimized;
 		cf.cf_params <- params;
-		cf.cf_flags <- flags;
-
-		(* store type parameter info for EXD *)
-		let info = ClassFieldInfo.create field_type_parameters in
-		ClassFieldInfos.set class_field_infos info cf;
-
+		cf.cf_flags <- flags
 
 	method read_class_field_and_overloads_data (cf : tclass_field) =
 		let rec loop depth cfl = match cfl with

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

@@ -1835,7 +1835,7 @@ module HxbWriter = struct
 				Chunk.write_u8 writer.chunk 0;
 				None
 			| Some e when not write_expr_immediately ->
-				Chunk.write_u8 writer.chunk 0;
+				Chunk.write_u8 writer.chunk 2;
 				let fctx,close = start_texpr writer e.epos in
 				write_texpr writer fctx e;
 				Chunk.write_option writer.chunk cf.cf_expr_unoptimized (write_texpr writer fctx);