(* The type of primitives *)local open Const;indatatype primitive = Pidentity | Pget_global of QualifiedIdent * int | Pset_global of QualifiedIdent * int | Pdummy of int | Pupdate | Ptest of bool_test | Pmakeblock of BlockTag | Ptag_of | Pfield of int | Psetfield of int | Pccall of string * int | Praise | Pnot (* The next five are unsigned operations: *) | Paddint | Psubint | Pmulint | Pdivint | Pmodint | Pandint | Porint | Pxorint | Pshiftleftint | Pshiftrightintsigned | Pshiftrightintunsigned | Pintoffloat | Pfloatprim of float_primitive | Pstringlength | Pgetstringchar | Psetstringchar | Pmakevector | Pvectlength | Pgetvectitem | Psetvectitem | Psmlnegint | Psmlsuccint | Psmlpredint | Psmladdint | Psmlsubint | Psmlmulint | Psmldivint | Psmlmodint | Pmakerefvector | Patom of int | Psmlquotint | Psmlremint | Pclosure of int * int | Pswapand float_primitive = Pfloatofint | Psmlnegfloat | Psmladdfloat | Psmlsubfloat | Psmlmulfloat | Psmldivfloatand bool_test = Peq_test | Pnoteq_test | Pint_test of int prim_test | Pfloat_test of real prim_test | Pstring_test of string prim_test | Pword_test of word prim_test | Pnoteqtag_test of BlockTagand 'a prim_test = PTeq | PTnoteq | PTnoteqimm of 'a | PTlt | PTle | PTgt | PTge;end;
(* The type of primitives *)
local
open Const;
in
datatype primitive =
Pidentity
| Pget_global of QualifiedIdent * int
| Pset_global of QualifiedIdent * int
| Pdummy of int
| Pupdate
| Ptest of bool_test
| Pmakeblock of BlockTag
| Ptag_of
| Pfield of int
| Psetfield of int
| Pccall of string * int
| Praise
| Pnot
(* The next five are unsigned operations: *)
| Paddint | Psubint | Pmulint | Pdivint | Pmodint
| Pandint | Porint | Pxorint
| Pshiftleftint | Pshiftrightintsigned | Pshiftrightintunsigned
| Pintoffloat
| Pfloatprim of float_primitive
| Pstringlength | Pgetstringchar | Psetstringchar
| Pmakevector | Pvectlength | Pgetvectitem | Psetvectitem
| Psmlnegint | Psmlsuccint | Psmlpredint
| Psmladdint | Psmlsubint | Psmlmulint | Psmldivint | Psmlmodint
| Pmakerefvector
| Patom of int
| Psmlquotint | Psmlremint
| Pclosure of int * int
| Pswap
and float_primitive =
Pfloatofint
| Psmlnegfloat | Psmladdfloat | Psmlsubfloat | Psmlmulfloat | Psmldivfloat
and bool_test =
Peq_test
| Pnoteq_test
| Pint_test of int prim_test
| Pfloat_test of real prim_test
| Pstring_test of string prim_test
| Pword_test of word prim_test
| Pnoteqtag_test of BlockTag
and 'a prim_test =
PTeq
| PTnoteq
| PTnoteqimm of 'a
| PTlt
| PTle
| PTgt
| PTge
;
end;