ソースを参照

remove overly fancy position optimization

Simon Krajewski 1 年間 前
コミット
a3f69343db
2 ファイル変更21 行追加33 行削除
  1. 20 31
      src/compiler/hxb/hxbReader.ml
  2. 1 2
      src/compiler/hxb/hxbWriter.ml

+ 20 - 31
src/compiler/hxb/hxbReader.ml

@@ -952,22 +952,26 @@ class hxb_reader
 		let update_p () =
 		let update_p () =
 			fctx.pos := self#read_pos;
 			fctx.pos := self#read_pos;
 		in
 		in
-		let read_relpos () =  match self#read_u8 with
-			| 0 ->
-				()
-			| 1 ->
-				update_pmin ()
-			| 2 ->
-				update_pmax ()
-			| 3 ->
-				update_pminmax ()
-			| 4 ->
-				update_p ()
-			| _ ->
-				assert false
+		let read_relpos () =
+			begin match self#read_u8 with
+				| 0 ->
+					()
+				| 1 ->
+					update_pmin ()
+				| 2 ->
+					update_pmax ()
+				| 3 ->
+					update_pminmax ()
+				| 4 ->
+					update_p ()
+				| _ ->
+					assert false
+			end;
+			!(fctx.pos)
 		in
 		in
 		let rec loop () =
 		let rec loop () =
 			let t = fctx.t_pool.(self#read_uleb128) in
 			let t = fctx.t_pool.(self#read_uleb128) in
+			let p = read_relpos () in
 			let rec loop2 () =
 			let rec loop2 () =
 				match IO.read_byte ch with
 				match IO.read_byte ch with
 					(* values 0-19 *)
 					(* values 0-19 *)
@@ -1162,15 +1166,13 @@ class hxb_reader
 						TField(e1,FDynamic s)
 						TField(e1,FDynamic s)
 
 
 					| 110 ->
 					| 110 ->
-						read_relpos ();
-						let p = !(fctx.pos) in
+						let p = read_relpos () in
 						let c = self#read_class_ref in
 						let c = self#read_class_ref in
 						let cf = self#read_field_ref in
 						let cf = self#read_field_ref in
 						let e1 = Texpr.Builder.make_static_this c p in
 						let e1 = Texpr.Builder.make_static_this c p in
 						TField(e1,FStatic(c,cf))
 						TField(e1,FStatic(c,cf))
 					| 111 ->
 					| 111 ->
-						read_relpos ();
-						let p = !(fctx.pos) in
+						let p = read_relpos () in
 						let c = self#read_class_ref in
 						let c = self#read_class_ref in
 						let tl = self#read_types in
 						let tl = self#read_types in
 						let cf = self#read_field_ref in
 						let cf = self#read_field_ref in
@@ -1214,19 +1216,6 @@ class hxb_reader
 						let e1 = loop () in
 						let e1 = loop () in
 						let e2 = loop () in
 						let e2 = loop () in
 						TBinop(op,e1,e2)
 						TBinop(op,e1,e2)
-					(* pos 241-244*)
-					| 241 ->
-						update_pmin();
-						loop2 ()
-					| 242 ->
-						update_pmax();
-						loop2 ()
-					| 243 ->
-						update_pminmax();
-						loop2 ()
-					| 244 ->
-						update_p();
-						loop2 ()
 					(* rest 250-254 *)
 					(* rest 250-254 *)
 					| 250 ->
 					| 250 ->
 						TIdent (self#read_string)
 						TIdent (self#read_string)
@@ -1238,7 +1227,7 @@ class hxb_reader
 				let e = {
 				let e = {
 					eexpr = e;
 					eexpr = e;
 					etype = t;
 					etype = t;
-					epos = !(fctx.pos);
+					epos = p;
 				} in
 				} in
 				e
 				e
 		and loop_el () =
 		and loop_el () =

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

@@ -1248,7 +1248,7 @@ class hxb_writer
 		let rec loop e =
 		let rec loop e =
 
 
 			self#write_texpr_type_instance fctx e.etype;
 			self#write_texpr_type_instance fctx e.etype;
-			fctx.pos_writer#write_pos chunk false 240 e.epos;
+			fctx.pos_writer#write_pos chunk true 0 e.epos;
 
 
 			match e.eexpr with
 			match e.eexpr with
 			(* values 0-19 *)
 			(* values 0-19 *)
@@ -1505,7 +1505,6 @@ class hxb_writer
 				self#write_texpr_byte (160 + binop_index op);
 				self#write_texpr_byte (160 + binop_index op);
 				loop e1;
 				loop e1;
 				loop e2;
 				loop e2;
-			(* pos 241-244 *)
 			(* rest 250-254 *)
 			(* rest 250-254 *)
 			| TIdent s ->
 			| TIdent s ->
 				self#write_texpr_byte 250;
 				self#write_texpr_byte 250;