Browse Source

[hxb] module level fields

Rudy Ges 2 years ago
parent
commit
00581783aa
3 changed files with 7 additions and 13 deletions
  1. 4 6
      src/compiler/hxb/hxbReader.ml
  2. 0 2
      src/compiler/hxb/hxbWriter.ml
  3. 3 5
      tests/unit/src/unit/TestMain.hx

+ 4 - 6
src/compiler/hxb/hxbReader.ml

@@ -1098,7 +1098,7 @@ class hxb_reader
 		in
 		let _ = self#read_list (fun () -> f c.cl_fields) in
 		let _ = self#read_list (fun () -> f c.cl_statics) in
-		()
+		(match c.cl_kind with KModuleFields md -> md.m_statics <- Some c; | _ -> ());
 
 	method read_enum_fields (m : module_def) (e : tenum) =
 		ignore(self#read_list (fun () ->
@@ -1132,7 +1132,7 @@ class hxb_reader
 			(c,p)
 		)
 
-	method read_class_kind = match self#read_u8 with
+	method read_class_kind m = match self#read_u8 with
 		| 0 -> KNormal
 		| 1 -> KTypeParameter self#read_types
 		| 2 -> KExpr self#read_expr
@@ -1144,16 +1144,14 @@ class hxb_reader
 		| 5 -> KMacroType
 		| 6 -> KGenericBuild (self#read_list (fun () -> self#read_cfield))
 		| 7 -> KAbstractImpl self#read_abstract_ref
-		| 8 ->
-			(* TODO KModuleFields *)
-			KNormal
+		| 8 -> KModuleFields m
 		| i ->
 			error (Printf.sprintf "Invalid class kind id: %i" i)
 
 	method read_class (m : module_def) (c : tclass) =
 		(* Printf.eprintf "  Read class %s\n" (s_type_path c.cl_path); *)
 		self#read_common_module_type m (Obj.magic c);
-		c.cl_kind <- self#read_class_kind;
+		c.cl_kind <- self#read_class_kind m;
 		c.cl_flags <- (Int32.to_int self#read_u32);
 		let read_relation () =
 			let c = self#read_class_ref in

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

@@ -1115,8 +1115,6 @@ class ['a] hxb_writer
 			self#write_abstract_ref a;
 		| KModuleFields md ->
 			chunk#write_byte 8;
-			(* TODO *)
-			Printf.eprintf "  %s KModuleFields\n" todo;
 
 	method write_class (c : tclass) =
 		begin match c.cl_kind with

+ 3 - 5
tests/unit/src/unit/TestMain.hx

@@ -5,16 +5,15 @@ import unit.Test.*;
 import utest.Runner;
 import utest.ui.Report;
 
-class TestMain {
-static final asyncWaits = new Array<haxe.PosInfos>();
-static final asyncCache = new Array<() -> Void>();
+final asyncWaits = new Array<haxe.PosInfos>();
+final asyncCache = new Array<() -> Void>();
 
 @:access(unit.Test)
 #if js
 @:expose("unit.TestMain.main")
 @:keep
 #end
-static function main() {
+function main() {
 	#if js
 	if (js.Browser.supported) {
 		var oTrace = haxe.Log.trace;
@@ -163,4 +162,3 @@ static function main() {
 	flash.Lib.fscommand("quit");
 	#end
 }
-}