Module Cast

module Cast: sig .. end

type cexpr_detail = 
| This
| Null
| Id of string * Sast.varkind
| NewObj of string * string * cexpr list
| NewArr of string * string * cexpr list
| Literal of Ast.lit
| Assign of cexpr * cexpr
| Deref of cexpr * cexpr
| Field of cexpr * string
| Invoc of cexpr * string * cexpr list
| Unop of Ast.op * cexpr
| Binop of cexpr * Ast.op * cexpr
| Refine of cexpr list * string option * Sast.refine_switch
| Refinable of Sast.refine_switch
type cexpr = string * cexpr_detail 
type cstmt = 
| Decl of Ast.var_def * cexpr option * Sast.environment
| If of (cexpr option * cstmt list) list * Sast.environment
| While of cexpr * cstmt list * Sast.environment
| Expr of cexpr * Sast.environment
| Super of string * string * cexpr list
| Return of cexpr option * Sast.environment
type cfunc = {
   returns : string option;
   name : string;
   formals : Ast.var_def list;
   body : 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 = class_struct StringModules.lookup_map * cfunc list *
main_func list * ancestry_info