sig
type cexpr_detail =
This
| Null
| Id of string * Sast.varkind
| NewObj of string * string * Cast.cexpr list
| NewArr of string * string * Cast.cexpr list
| Literal of Ast.lit
| Assign of Cast.cexpr * Cast.cexpr
| Deref of Cast.cexpr * Cast.cexpr
| Field of Cast.cexpr * string
| Invoc of Cast.cexpr * string * Cast.cexpr list
| Unop of Ast.op * Cast.cexpr
| Binop of Cast.cexpr * Ast.op * Cast.cexpr
| Refine of Cast.cexpr list * string option * Sast.refine_switch
| Refinable of Sast.refine_switch
and cexpr = string * Cast.cexpr_detail
and cstmt =
Decl of Ast.var_def * Cast.cexpr option * Sast.environment
| If of (Cast.cexpr option * Cast.cstmt list) list * Sast.environment
| While of Cast.cexpr * Cast.cstmt list * Sast.environment
| Expr of Cast.cexpr * Sast.environment
| Super of string * string * Cast.cexpr list
| Return of Cast.cexpr option * Sast.environment
and cfunc = {
returns : string option;
name : string;
formals : Ast.var_def list;
body : Cast.cstmt list;
builtin : bool;
inklass : string;
static : bool;
}
type class_struct = (string * Ast.var_def list) list
type main_func = string * string
type ancestry_info = string list StringModules.lookup_map
type program =
Cast.class_struct StringModules.lookup_map * Cast.cfunc list *
Cast.main_func list * Cast.ancestry_info
end