Module Cttm_abstree


module Cttm_abstree: sig  end

exception TypeError_typed = C_typing.TypeError_typed

type mexpr = {
   mexpr_type : Ctt_abstree.c_type;
   mexpr_t : mexpr_desc;
}

type binop = Ctt_abstree.binop =
| CTTbinTimes
| CTTbinDiv
| CTTbinPlusVV
| CTTbinMinusVV
| CTTbinPostPlusVV
| CTTbinPostMinusVV
| CTTbinPlusPV
| CTTbinMinusPP
| CTTbinMinusPV
| CTTbinPostPlusPV
| CTTbinPostMinusPV
| CTTbinModulo
| CTTbinLshift
| CTTbinRshift
| CTTbinLogAnd
| CTTbinLogOr
| CTTbinIntAnd
| CTTbinIntOr
| CTTbinIntXor
| CTTbinLessThan
| CTTbinLessEqual
| CTTbinGtrThan
| CTTbinGtrEqual
| CTTbinEqual
| CTTbinNotEqual


type unaryop = Ctt_abstree.unaryop =
| UnaryPlus
| UnaryMinus
| LogNot
| IntNot


type mexpr_desc =
| CTTMexpComma of mexpr * mexpr
| CTTMexpAddress of mem_object * field list
| CTTMexpRead of mem_object * field list
| CTTMexpWrite of mem_object * field list
* (binop * Ctt_abstree.c_type option) option
* mexpr
| CTTMexpConditional of mexpr * mexpr * mexpr
| CTTMexpBinExpr of binop * mexpr * mexpr
| CTTMexpCoerce of Ctt_abstree.c_type * mexpr
| CTTMexpUnaryExpr of unaryop * mexpr
| CTTMexpInvoke of mem_object * mexpr list
| CTTMexpConstant of c_constants


type mem_object =
| CTTMlvPtr of mexpr
| CTTMlvVar of Ctt_abstree.identifier * Ctt_abstree.c_type
| CTTMlvInvoke of mem_object * mexpr list * Ctt_abstree.c_type


type field = Ctt_abstree.identifier * Ctt_abstree.c_type

type c_constants = Ctt_abstree.c_constants =
| CTTconstNull
| CTTconstInteger of Big_int.big_int
| CTTconstFloat of float
| CTTconstString of string


type identifier_desc = {
   idd_name : Ctt_abstree.identifier;
   idd_type : Ctt_abstree.c_type;
}
val translate_field : Ctt_abstree.expr ->
Ctt_abstree.identifier ->
Ctt_abstree.c_type -> mem_object * field list
val translate : Ctt_abstree.expr -> mexpr
val translate_address : Ctt_abstree.expr -> mexpr_desc
val translate_invoke_lhs : Ctt_abstree.expr -> mem_object
val translate_assign : Ctt_abstree.expr ->
mexpr ->
(binop * Ctt_abstree.c_type option) option ->
mexpr_desc

type cttm_initializer =
| CTTMinitExp of mexpr
| CTTMinitList of cttm_initializer list

val translate_initializer : Ctt_abstree.ctt_initializer -> cttm_initializer
val translate_declaration : 'a * 'b * 'c * Ctt_abstree.ctt_initializer option ->
'a * 'b * 'c * cttm_initializer option