|
@@ -111,7 +111,6 @@ type opcode =
|
|
(* unops *)
|
|
(* unops *)
|
|
| ONeg of reg * reg
|
|
| ONeg of reg * reg
|
|
| ONot of reg * reg
|
|
| ONot of reg * reg
|
|
- (* unops *)
|
|
|
|
| OIncr of reg
|
|
| OIncr of reg
|
|
| ODecr of reg
|
|
| ODecr of reg
|
|
(* calls *)
|
|
(* calls *)
|
|
@@ -135,6 +134,8 @@ type opcode =
|
|
| OSetField of reg * field index * reg
|
|
| OSetField of reg * field index * reg
|
|
| OGetThis of reg * field index
|
|
| OGetThis of reg * field index
|
|
| OSetThis of field index * reg
|
|
| OSetThis of field index * reg
|
|
|
|
+ | ODynGet of reg * reg * string index
|
|
|
|
+ | ODynSet of reg * string index * reg
|
|
(* jumps *)
|
|
(* jumps *)
|
|
| OJTrue of reg * int
|
|
| OJTrue of reg * int
|
|
| OJFalse of reg * int
|
|
| OJFalse of reg * int
|
|
@@ -149,10 +150,14 @@ type opcode =
|
|
| OJEq of reg * reg * int
|
|
| OJEq of reg * reg * int
|
|
| OJNotEq of reg * reg * int
|
|
| OJNotEq of reg * reg * int
|
|
| OJAlways of int
|
|
| OJAlways of int
|
|
|
|
+ (* coerce *)
|
|
| OToDyn of reg * reg
|
|
| OToDyn of reg * reg
|
|
| OToSFloat of reg * reg
|
|
| OToSFloat of reg * reg
|
|
| OToUFloat of reg * reg
|
|
| OToUFloat of reg * reg
|
|
| OToInt of reg * reg
|
|
| OToInt of reg * reg
|
|
|
|
+ | OSafeCast of reg * reg
|
|
|
|
+ | OUnsafeCast of reg * reg
|
|
|
|
+ | OToVirtual of reg * reg
|
|
(* control flow *)
|
|
(* control flow *)
|
|
| OLabel of unused
|
|
| OLabel of unused
|
|
| ORet of reg
|
|
| ORet of reg
|
|
@@ -177,16 +182,10 @@ type opcode =
|
|
| OSetArray of reg * reg * reg
|
|
| OSetArray of reg * reg * reg
|
|
(* type operations *)
|
|
(* type operations *)
|
|
| ONew of reg
|
|
| ONew of reg
|
|
- | OSafeCast of reg * reg
|
|
|
|
- | OUnsafeCast of reg * reg
|
|
|
|
| OArraySize of reg * reg
|
|
| OArraySize of reg * reg
|
|
| OType of reg * ttype
|
|
| OType of reg * ttype
|
|
| OGetType of reg * reg
|
|
| OGetType of reg * reg
|
|
| OGetTID of reg * reg
|
|
| OGetTID of reg * reg
|
|
- | OToVirtual of reg * reg
|
|
|
|
- (* dynamic *)
|
|
|
|
- | ODynGet of reg * reg * string index
|
|
|
|
- | ODynSet of reg * string index * reg
|
|
|
|
(* references *)
|
|
(* references *)
|
|
| ORef of reg * reg
|
|
| ORef of reg * reg
|
|
| OUnref of reg * reg
|
|
| OUnref of reg * reg
|
|
@@ -5526,12 +5525,14 @@ let write_code ch code =
|
|
byte 17;
|
|
byte 17;
|
|
write_index e.eid;
|
|
write_index e.eid;
|
|
write_index (Array.length e.efields);
|
|
write_index (Array.length e.efields);
|
|
- Array.iter (fun (_,n,tl) ->
|
|
|
|
- write_index (Array.length tl);
|
|
|
|
|
|
+ Array.iter (fun (_,nid,tl) ->
|
|
|
|
+ write_index nid;
|
|
|
|
+ if Array.length tl > 0xFF then assert false;
|
|
|
|
+ byte (Array.length tl);
|
|
Array.iter write_type tl;
|
|
Array.iter write_type tl;
|
|
) e.efields
|
|
) e.efields
|
|
| HNull t ->
|
|
| HNull t ->
|
|
- byte 0x18;
|
|
|
|
|
|
+ byte 18;
|
|
write_type t
|
|
write_type t
|
|
) types.arr;
|
|
) types.arr;
|
|
|
|
|