Ver código fonte

[hxb] introduce minor version, bump to hxb version 2.1

Rudy Ges 6 dias atrás
pai
commit
6fe3e8dd08

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

@@ -122,12 +122,23 @@ let error (s : string) =
 	Printf.eprintf "[error] %s\n" s;
 	raise (HxbFailure s)
 
-let hxb_version = 1
+(*
+	With the exception of 1.0 => 2.x because we introduced minor version in 2.1,
+	major versions are incompatible with each other, while minor version mismatch
+	will be handled by the reader (for retro compatibility only)
+
+	When further bumping hxb major:
+	- code related to the 1.0 => 2.0 exception can be dropped (see `HxbReader.read`)
+	- all minor checks in hxb reader become obsolete and can be dropped too
+*)
+let hxb_major = 2
+let hxb_minor = 1
 
 let write_header ch =
 	IO.nwrite_string ch "hxb";
-	IO.write_byte ch hxb_version
+	IO.write_byte ch hxb_major;
+	IO.write_byte ch hxb_minor
 
 let write_chunk_prefix kind length ch =
 	IO.nwrite ch (Bytes.unsafe_of_string (string_of_chunk_kind kind));
-	IO.write_real_i32 ch (Int32.of_int length)
+	IO.write_real_i32 ch (Int32.of_int length)

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

@@ -152,6 +152,7 @@ class hxb_reader
 = object(self)
 	val mutable api = Obj.magic ""
 	val mutable full_restore = true
+	val mutable hxb_minor = 0
 	val mutable current_module = null_module
 
 	val mutable ch = BytesWithPosition.create (Bytes.create 0)
@@ -2113,9 +2114,14 @@ class hxb_reader
 		ch <- BytesWithPosition.create bytes;
 		if (Bytes.to_string (read_bytes ch 3)) <> "hxb" then
 			raise (HxbFailure "magic");
-		let version = read_byte ch in
-		if version <> hxb_version then
-			raise (HxbFailure (Printf.sprintf "version mismatch: hxb version %i, reader version %i" version hxb_version));
+
+		(* Note: as minor version was only added in 2.1, version "1" is now considered to be "2.0" *)
+		let major = read_byte ch in
+		hxb_minor <- if major == 1 then 0 else read_byte ch;
+		let major = if major == 1 then 2 else major in
+		if major <> HxbData.hxb_major || hxb_minor > HxbData.hxb_minor then
+			raise (HxbFailure (Printf.sprintf "version mismatch: hxb version %i.%i, reader version %i.%i" major hxb_minor HxbData.hxb_major HxbData.hxb_minor));
+
 		(fun end_chunk ->
 			let rec loop () =
 				let (name,size) = self#read_chunk_prefix in

+ 13 - 4
src/compiler/hxb/hxbWriterConfig.ml

@@ -5,7 +5,8 @@ type writer_target_config = {
 	mutable generate : bool;
 	mutable exclude : string list list;
 	mutable include' : string list list;
-	mutable hxb_version : int;
+	mutable hxb_major : int;
+	mutable hxb_minor : int;
 	mutable generate_docs : bool;
 }
 
@@ -19,7 +20,8 @@ let create_target_config () = {
 	generate = true;
 	exclude = [];
 	include'= [];
-	hxb_version = HxbData.hxb_version;
+	hxb_major = HxbData.hxb_major;
+	hxb_minor = HxbData.hxb_minor;
 	generate_docs = true;
 }
 
@@ -47,7 +49,12 @@ module WriterConfigReader (API : DataReaderApi.DataReaderApi) = struct
 					config.include'<- List.map (fun data -> ExtString.String.nsplit (API.read_string data) ".") l
 				)
 			| "hxbVersion" ->
-				config.hxb_version <- API.read_int data
+				config.hxb_major <- API.read_int data;
+				config.hxb_minor <- 0
+			| "hxbMajor" ->
+				config.hxb_major <- API.read_int data
+			| "hxbMinor" ->
+				config.hxb_minor <- API.read_int data
 			| "generateDocumentation" ->
 				config.generate_docs <- API.read_bool data
 			| s ->
@@ -80,7 +87,9 @@ module WriterConfigWriter (API : DataWriterApi.DataWriterApi) = struct
 			"generate",API.write_bool config.generate;
 			"exclude",API.write_array (List.map (fun sl -> API.write_string (String.concat "." sl)) config.exclude);
 			"include",API.write_array (List.map (fun sl -> API.write_string (String.concat "." sl)) config.include');
-			"hxbVersion",API.write_int config.hxb_version;
+			"hxbVersion",API.write_int config.hxb_major;
+			"hxbMajor",API.write_int config.hxb_major;
+			"hxbMinor",API.write_int config.hxb_minor;
 			"generateDocumentation",API.write_bool config.generate_docs;
 		]