rail-compiler-editor-0.3.0.0: src/RailCompiler/FunctionDeclarations.hs
{- |
Module : FunctionDeclarations.hs
Description : Function declarations for intermediate code generation
Maintainer : Philipp Borgers, Tilman Blumenbach, Lyudmila Vaseva, Sascha Zinke,
Maximilian Claus, Michal Ajchman, Nicolas Lehmann, Tudor Soroceanu
License : MIT
Stability : unstable
All function declarations live here.
-}
module FunctionDeclarations where
import LLVM.General.AST.AddrSpace
import LLVM.General.AST
import qualified LLVM.General.AST.Global as Global
import TypeDefinitions
-- |Function declaration for 'start'.
start :: Definition
start = GlobalDefinition $ Global.functionDefaults {
Global.name = Name "start",
Global.returnType = VoidType,
Global.parameters = ([], False)
}
-- |Function declaration for 'underflow_check'.
underflowCheck :: Definition
underflowCheck = GlobalDefinition $ Global.functionDefaults {
Global.name = Name "underflow_check",
Global.returnType = VoidType,
Global.parameters = ([], False)
}
-- |Function declaration for 'print'.
print :: Definition
print = GlobalDefinition $ Global.functionDefaults {
Global.name = Name "print",
Global.returnType = VoidType,
Global.parameters = ([], False)
}
-- |Function declaration for 'crash'.
crash :: Definition
crash = GlobalDefinition $ Global.functionDefaults {
Global.name = Name "crash",
Global.returnType = VoidType,
Global.parameters = ([ Parameter (IntegerType 1) (Name "is_custom_error") [] ], False)
}
-- |Function declaration for 'finish'.
finish :: Definition
finish = GlobalDefinition $ Global.functionDefaults {
Global.name = Name "finish",
Global.returnType = VoidType,
Global.parameters = ([], False)
}
-- |Function declaration for 'input'.
inputFunc :: Definition
inputFunc = GlobalDefinition $ Global.functionDefaults {
Global.name = Name "input",
Global.returnType = VoidType,
Global.parameters = ([], False)
}
-- |Function declaration for 'eof_check'.
eofCheck :: Definition
eofCheck = GlobalDefinition $ Global.functionDefaults {
Global.name = Name "eof_check",
Global.returnType = VoidType,
Global.parameters = ([], False)
}
-- |Function declaration for 'add'.
add :: Definition
add = GlobalDefinition $ Global.functionDefaults {
Global.name = Name "add",
Global.returnType = VoidType,
Global.parameters = ([], False)
}
-- |Function declaration for 'rem'.
rem1 :: Definition
rem1 = GlobalDefinition $ Global.functionDefaults {
Global.name = Name "rem",
Global.returnType = VoidType,
Global.parameters = ([], False)
}
-- |Function declaration for 'sub'.
sub :: Definition
sub = GlobalDefinition $ Global.functionDefaults {
Global.name = Name "sub",
Global.returnType = VoidType,
Global.parameters = ([], False)
}
-- |Function declaration for 'mul'.
mul :: Definition
mul = GlobalDefinition $ Global.functionDefaults {
Global.name = Name "mult",
Global.returnType = VoidType,
Global.parameters = ([], False)
}
-- |Function declaration for 'div'.
div1 :: Definition
div1 = GlobalDefinition $ Global.functionDefaults {
Global.name = Name "div",
Global.returnType = VoidType,
Global.parameters = ([], False)
}
-- |Function declaration for 'type'.
type1 :: Definition
type1 = GlobalDefinition $ Global.functionDefaults {
Global.name = Name "type",
Global.returnType = VoidType,
Global.parameters = ([], False)
}
-- |Function declaration for pushing constants.
pushStringCpy :: Definition
pushStringCpy = GlobalDefinition $ Global.functionDefaults {
Global.name = Name "push_string_cpy",
Global.returnType = stackElementPointerType,
Global.parameters = ([ Parameter bytePointerType (UnName 0) [] ], False)
}
-- |Function declaration for 'pop'.
pop :: Definition
pop = GlobalDefinition $ Global.functionDefaults {
Global.name = Name "pop",
Global.returnType = bytePointerType,
Global.parameters = ([], False)
}
-- |Function declaration for 'peek'
peek :: Definition
peek = GlobalDefinition $ Global.functionDefaults {
Global.name = Name "peek",
Global.returnType = bytePointerType,
Global.parameters = ([], False)
}
-- |Function declaration for 'streq'
streq :: Definition
streq = GlobalDefinition $ Global.functionDefaults {
Global.name = Name "streq",
Global.returnType = bytePointerType,
Global.parameters = ([], False)
}
-- |Function declaration for 'strlen'
strlen :: Definition
strlen = GlobalDefinition $ Global.functionDefaults {
Global.name = Name "strlen",
Global.returnType = bytePointerType,
Global.parameters = ([], False)
}
-- |Function declaration for 'strapp'
strapp :: Definition
strapp = GlobalDefinition $ Global.functionDefaults {
Global.name = Name "strapp",
Global.returnType = bytePointerType,
Global.parameters = ([], False)
}
-- |Function declaration for 'strcut'.
strcut :: Definition
strcut = GlobalDefinition $ Global.functionDefaults {
Global.name = Name "strcut",
Global.returnType = bytePointerType,
Global.parameters = ([], False)
}
-- |Function declaration for 'pop_int'
popInt :: Definition
popInt = GlobalDefinition $ Global.functionDefaults {
Global.name = Name "pop_int",
Global.returnType = IntegerType 64,
Global.parameters = ([], False)
}
-- |Function declaration for 'pop_bool'
popBool :: Definition
popBool = GlobalDefinition $ Global.functionDefaults {
Global.name = Name "pop_bool",
Global.returnType = IntegerType 64,
Global.parameters = ([], False)
}
-- |Function declaration for 'equal'
equal :: Definition
equal = GlobalDefinition $ Global.functionDefaults {
Global.name = Name "equal",
Global.returnType = VoidType,
Global.parameters = ([], False)
}
-- |Function declaration for 'greater'
greater :: Definition
greater = GlobalDefinition $ Global.functionDefaults {
Global.name = Name "greater",
Global.returnType = VoidType,
Global.parameters = ([], False)
}
-- |Function declaration for 'pop_into'
popInto :: Definition
popInto = GlobalDefinition $ Global.functionDefaults {
Global.name = Name "pop_into",
Global.returnType = VoidType,
Global.parameters = ( [ Parameter (PointerType (NamedTypeReference $ Name
"struct.table") (AddrSpace 0)) (UnName 0) [],
Parameter bytePointerType (UnName 0) [] ], False)
}
-- |Function declaration for 'push_from'
pushFrom :: Definition
pushFrom = GlobalDefinition $ Global.functionDefaults {
Global.name = Name "push_from",
Global.returnType = VoidType,
Global.parameters = ( [ Parameter (PointerType (NamedTypeReference $ Name
"struct.table") (AddrSpace 0)) (UnName 0) [],
Parameter bytePointerType (UnName 0) [] ], False)
}
-- |Function declaration for initialising of the symbol table
initialiseSymbolTable :: Definition
initialiseSymbolTable = GlobalDefinition $ Global.functionDefaults {
Global.name = Name "initialise",
Global.returnType = VoidType,
Global.parameters = ([ Parameter (PointerType (NamedTypeReference $
Name "struct.table") (AddrSpace 0)) (UnName 0) [] ], False)
}
-- |Function declaration for malloc
malloc :: Definition
malloc = GlobalDefinition $ Global.functionDefaults {
Global.name = Name "malloc",
Global.returnType = bytePointerType,
Global.parameters = ([ Parameter (IntegerType 64) (UnName 0) [] ], False)
}
-- |Function declaration for copying of the symbol table
copySymbolTable :: Definition
copySymbolTable = GlobalDefinition $ Global.functionDefaults {
Global.name = Name "copy_symbol_table",
Global.returnType = VoidType,
Global.parameters = ([ Parameter (PointerType (NamedTypeReference $
Name "struct.table") (AddrSpace 0)) (UnName 0) [],
Parameter (PointerType (NamedTypeReference $
Name "struct.table") (AddrSpace 0)) (UnName 0) [] ], False)
}
-- |Function declaration for pushing lambda
pushLambda :: Definition
pushLambda = GlobalDefinition $ Global.functionDefaults {
Global.name = Name "push_lambda",
Global.returnType = VoidType,
Global.parameters = ([ Parameter (PointerType (
PointerType functionReturnLambda (AddrSpace 0)) (AddrSpace 0)) (UnName 0) [],
Parameter (PointerType (NamedTypeReference $
Name "struct.table") (AddrSpace 0)) (UnName 0) [] ], False)
}
-- |Function declaration for popping a lambda element
popLambda :: Definition
popLambda = GlobalDefinition $ Global.functionDefaults {
Global.name = Name "pop_lambda",
Global.returnType = PointerType (NamedTypeReference $ Name "lambda_element") (AddrSpace 0),
Global.parameters = ([], False)
}
-- |Function declaration for getting a pointer to a lambda function
getLambda :: Definition
getLambda = GlobalDefinition $ Global.functionDefaults {
Global.name = Name "get_lambda_pointer",
Global.returnType = PointerType functionReturnLambda (AddrSpace 0),
Global.parameters = ([ Parameter (PointerType (NamedTypeReference $
Name "lambda_element") (AddrSpace 0)) (UnName 0) [] ], False)
}
-- |Function declaration for getting lambda symbol table
getTable :: Definition
getTable = GlobalDefinition $ Global.functionDefaults {
Global.name = Name "get_lambda_table",
Global.returnType = PointerType (NamedTypeReference $ Name "struct.table") (AddrSpace 0),
Global.parameters = ([ Parameter (PointerType (NamedTypeReference $
Name "lambda_element") (AddrSpace 0)) (UnName 0) [] ], False)
}
-- |Function declaration for pushing nil onto the stack.
listPushNil :: Definition
listPushNil = GlobalDefinition $ Global.functionDefaults {
Global.name = Name "gen_list_push_nil",
Global.returnType = VoidType,
Global.parameters = ([], False)
}
-- |Function declaration for list cons.
listCons :: Definition
listCons = GlobalDefinition $ Global.functionDefaults {
Global.name = Name "gen_list_cons",
Global.returnType = VoidType,
Global.parameters = ([], False)
}
-- |Function declaration for list breakup.
listBreakup :: Definition
listBreakup = GlobalDefinition $ Global.functionDefaults {
Global.name = Name "gen_list_breakup",
Global.returnType = VoidType,
Global.parameters = ([], False)
}