|
@@ -8,14 +8,14 @@ type field_reader_context = {
|
|
t_pool : Type.t Array.t;
|
|
t_pool : Type.t Array.t;
|
|
pos : pos ref;
|
|
pos : pos ref;
|
|
vars : tvar Array.t;
|
|
vars : tvar Array.t;
|
|
- mutable tthis : Type.t;
|
|
|
|
|
|
+ mutable tthis : Type.t option;
|
|
}
|
|
}
|
|
|
|
|
|
-let create_field_reader_context p ts vars = {
|
|
|
|
|
|
+let create_field_reader_context p ts vars tthis = {
|
|
t_pool = ts;
|
|
t_pool = ts;
|
|
pos = ref p;
|
|
pos = ref p;
|
|
vars = vars;
|
|
vars = vars;
|
|
- tthis = t_dynamic;
|
|
|
|
|
|
+ tthis = tthis;
|
|
}
|
|
}
|
|
|
|
|
|
type hxb_reader_stats = {
|
|
type hxb_reader_stats = {
|
|
@@ -932,15 +932,11 @@ class hxb_reader
|
|
!(fctx.pos)
|
|
!(fctx.pos)
|
|
in
|
|
in
|
|
let rec loop () =
|
|
let rec loop () =
|
|
- let t = fctx.t_pool.(read_uleb128 ch) in
|
|
|
|
- let p = read_relpos () in
|
|
|
|
let loop2 () =
|
|
let loop2 () =
|
|
match IO.read_byte ch with
|
|
match IO.read_byte ch with
|
|
(* values 0-19 *)
|
|
(* values 0-19 *)
|
|
| 0 -> TConst TNull
|
|
| 0 -> TConst TNull
|
|
- | 1 ->
|
|
|
|
- fctx.tthis <- t;
|
|
|
|
- TConst TThis
|
|
|
|
|
|
+ | 1 -> TConst TThis
|
|
| 2 -> TConst TSuper
|
|
| 2 -> TConst TSuper
|
|
| 3 -> TConst (TBool false)
|
|
| 3 -> TConst (TBool false)
|
|
| 4 -> TConst (TBool true)
|
|
| 4 -> TConst (TBool true)
|
|
@@ -1138,7 +1134,7 @@ class hxb_reader
|
|
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
|
|
- let ethis = mk (TConst TThis) fctx.tthis p in
|
|
|
|
|
|
+ let ethis = mk (TConst TThis) (Option.get fctx.tthis) p in
|
|
TField(ethis,FInstance(c,tl,cf))
|
|
TField(ethis,FInstance(c,tl,cf))
|
|
|
|
|
|
(* module types 120-139 *)
|
|
(* module types 120-139 *)
|
|
@@ -1186,6 +1182,8 @@ class hxb_reader
|
|
die (Printf.sprintf " [ERROR] Unhandled texpr %d at:" i) __LOC__
|
|
die (Printf.sprintf " [ERROR] Unhandled texpr %d at:" i) __LOC__
|
|
in
|
|
in
|
|
let e = loop2 () in
|
|
let e = loop2 () in
|
|
|
|
+ let t = fctx.t_pool.(read_uleb128 ch) in
|
|
|
|
+ let p = read_relpos () in
|
|
let e = {
|
|
let e = {
|
|
eexpr = e;
|
|
eexpr = e;
|
|
etype = t;
|
|
etype = t;
|
|
@@ -1215,6 +1213,7 @@ class hxb_reader
|
|
| i ->
|
|
| i ->
|
|
die "" __LOC__
|
|
die "" __LOC__
|
|
end;
|
|
end;
|
|
|
|
+ let tthis = self#read_option (fun () -> self#read_type_instance) in
|
|
let l = read_uleb128 ch in
|
|
let l = read_uleb128 ch in
|
|
let ts = Array.init l (fun _ ->
|
|
let ts = Array.init l (fun _ ->
|
|
self#read_type_instance
|
|
self#read_type_instance
|
|
@@ -1223,7 +1222,7 @@ class hxb_reader
|
|
let vars = Array.init l (fun _ ->
|
|
let vars = Array.init l (fun _ ->
|
|
self#read_var
|
|
self#read_var
|
|
) in
|
|
) in
|
|
- create_field_reader_context self#read_pos ts vars
|
|
|
|
|
|
+ create_field_reader_context self#read_pos ts vars tthis
|
|
|
|
|
|
method read_field_type_parameters =
|
|
method read_field_type_parameters =
|
|
let num_params = read_uleb128 ch in
|
|
let num_params = read_uleb128 ch in
|