Module BasilIR.AbsBasilIR

type bVTYPE =
  1. | BVTYPE of (int * int) * string
and iNTTYPE =
  1. | INTTYPE of (int * int) * string
and bOOLTYPE =
  1. | BOOLTYPE of (int * int) * string
and bIdent =
  1. | BIdent of (int * int) * string
and localIdent =
  1. | LocalIdent of (int * int) * string
and globalIdent =
  1. | GlobalIdent of (int * int) * string
and blockIdent =
  1. | BlockIdent of (int * int) * string
and procIdent =
  1. | ProcIdent of (int * int) * string
and beginList =
  1. | BeginList of (int * int) * string
and endList =
  1. | EndList of (int * int) * string
and beginRec =
  1. | BeginRec of (int * int) * string
and endRec =
  1. | EndRec of (int * int) * string
and lambdaSep =
  1. | LambdaSep of string
and str =
  1. | Str of string
and integerHex =
  1. | IntegerHex of (int * int) * string
and integerDec =
  1. | IntegerDec of (int * int) * string
and moduleT =
  1. | Module1 of decl list
and semicolons =
  1. | Semicolons_Empty
  2. | Semicolons_Some of semicolons
and decl =
  1. | Decl_Axiom of attribSet * expr
  2. | Decl_SharedMem of globalIdent * typeT
  3. | Decl_UnsharedMem of globalIdent * typeT
  4. | Decl_Var of globalIdent * typeT
  5. | Decl_UninterpFun of attribSet * globalIdent * typeT list * typeT
  6. | Decl_Fun of attribSet * globalIdent * params list * typeT * expr
  7. | Decl_ProgEmpty of procIdent * attribSet
  8. | Decl_ProgWithSpec of procIdent * attribSet * beginList * progSpec list * endList
  9. | Decl_Proc of procIdent * params list * params list * attribSet * funSpec list * procDef
and procDef =
  1. | ProcDef_Empty
  2. | ProcDef_Some of beginList * block list * endList
and intType =
  1. | IntType1 of iNTTYPE
and boolType =
  1. | BoolType1 of bOOLTYPE
and mapType =
  1. | MapType1 of typeT * typeT
and bVType =
  1. | BVType1 of bVTYPE
and typeT =
  1. | TypeIntType of intType
  2. | TypeBoolType of boolType
  3. | TypeMapType of mapType
  4. | TypeBVType of bVType
and intVal =
  1. | IntVal_Hex of integerHex
  2. | IntVal_Dec of integerDec
and bVVal =
  1. | BVVal1 of intVal * bVType
and endian =
  1. | Endian_Little
  2. | Endian_Big
and assignment =
  1. | Assignment1 of lVar * expr
and stmt =
  1. | Stmt_SingleAssign of assignment
  2. | Stmt_MultiAssign of assignment list
  3. | Stmt_Load of lVar * endian * globalIdent * expr * intVal
  4. | Stmt_Store of endian * globalIdent * expr * expr * intVal
  5. | Stmt_DirectCall of lVars * procIdent * expr list
  6. | Stmt_IndirectCall of expr
  7. | Stmt_Assume of expr
  8. | Stmt_Guard of expr
  9. | Stmt_Assert of expr
and localVar =
  1. | LocalVar1 of localIdent * typeT
and globalVar =
  1. | GlobalVar1 of globalIdent * typeT
and lVars =
  1. | LVars_Empty
  2. | LVars_LocalList of localVar list
  3. | LVars_List of lVar list
and jump =
  1. | Jump_GoTo of blockIdent list
  2. | Jump_Unreachable
  3. | Jump_Return of expr list
and lVar =
  1. | LVar_Local of localVar
  2. | LVar_Global of globalVar
and stmtWithAttrib =
  1. | StmtWithAttrib1 of stmt * attribSet
and jumpWithAttrib =
  1. | JumpWithAttrib1 of jump * attribSet
and block =
  1. | Block1 of blockIdent * attribSet * beginList * stmtWithAttrib list * jumpWithAttrib * endList
and attrKeyValue =
  1. | AttrKeyValue1 of bIdent * attr
and attribSet =
  1. | AttribSet_Some of beginRec * attrKeyValue list * semicolons * endRec
  2. | AttribSet_Empty
and attr =
  1. | Attr_Map of beginRec * attrKeyValue list * semicolons * endRec
  2. | Attr_List of beginList * attr list * endList
  3. | Attr_Lit of value
  4. | Attr_Str of str
and params =
  1. | Params1 of localIdent * typeT
and value =
  1. | Value_BV of bVVal
  2. | Value_Int of intVal
  3. | Value_True
  4. | Value_False
and expr =
  1. | Expr_Literal of value
  2. | Expr_Local of localVar
  3. | Expr_Global of globalVar
  4. | Expr_Forall of lambdaDef
  5. | Expr_Exists of lambdaDef
  6. | Expr_Old of expr
  7. | Expr_FunctionOp of globalIdent * expr list
  8. | Expr_Binary of binOp * expr * expr
  9. | Expr_Unary of unOp * expr
  10. | Expr_ZeroExtend of intVal * expr
  11. | Expr_SignExtend of intVal * expr
  12. | Expr_Extract of intVal * intVal * expr
  13. | Expr_Concat of expr * expr
and lambdaDef =
  1. | LambdaDef1 of localVar list * lambdaSep * expr
and binOp =
  1. | BinOpBVBinOp of bVBinOp
  2. | BinOpBVLogicalBinOp of bVLogicalBinOp
  3. | BinOpBoolBinOp of boolBinOp
  4. | BinOpIntLogicalBinOp of intLogicalBinOp
  5. | BinOpIntBinOp of intBinOp
  6. | BinOpEqOp of eqOp
and unOp =
  1. | UnOpBVUnOp of bVUnOp
  2. | UnOp_boolnot
  3. | UnOp_intneg
  4. | UnOp_booltobv1
and eqOp =
  1. | EqOp_eq
  2. | EqOp_neq
and bVUnOp =
  1. | BVUnOp_bvnot
  2. | BVUnOp_bvneg
and bVBinOp =
  1. | BVBinOp_bvand
  2. | BVBinOp_bvor
  3. | BVBinOp_bvadd
  4. | BVBinOp_bvmul
  5. | BVBinOp_bvudiv
  6. | BVBinOp_bvurem
  7. | BVBinOp_bvshl
  8. | BVBinOp_bvlshr
  9. | BVBinOp_bvnand
  10. | BVBinOp_bvnor
  11. | BVBinOp_bvxor
  12. | BVBinOp_bvxnor
  13. | BVBinOp_bvcomp
  14. | BVBinOp_bvsub
  15. | BVBinOp_bvsdiv
  16. | BVBinOp_bvsrem
  17. | BVBinOp_bvsmod
  18. | BVBinOp_bvashr
and bVLogicalBinOp =
  1. | BVLogicalBinOp_bvule
  2. | BVLogicalBinOp_bvugt
  3. | BVLogicalBinOp_bvuge
  4. | BVLogicalBinOp_bvult
  5. | BVLogicalBinOp_bvslt
  6. | BVLogicalBinOp_bvsle
  7. | BVLogicalBinOp_bvsgt
  8. | BVLogicalBinOp_bvsge
and intBinOp =
  1. | IntBinOp_intadd
  2. | IntBinOp_intmul
  3. | IntBinOp_intsub
  4. | IntBinOp_intdiv
  5. | IntBinOp_intmod
and intLogicalBinOp =
  1. | IntLogicalBinOp_intlt
  2. | IntLogicalBinOp_intle
  3. | IntLogicalBinOp_intgt
  4. | IntLogicalBinOp_intge
and boolBinOp =
  1. | BoolBinOp_booland
  2. | BoolBinOp_boolor
  3. | BoolBinOp_boolimplies
and requireTok =
  1. | RequireTok_require
  2. | RequireTok_requires
and ensureTok =
  1. | EnsureTok_ensure
  2. | EnsureTok_ensures
and funSpec =
  1. | FunSpec_Require of requireTok * expr
  2. | FunSpec_Ensure of ensureTok * expr
  3. | FunSpec_Invariant of blockIdent * expr
and progSpec =
  1. | ProgSpec_Rely of expr
  2. | ProgSpec_Guarantee of expr