packages feed

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)
}