Fixed types on functions in the code generator.
This commit is contained in:
parent
6d9c42a03e
commit
ab34666484
2 changed files with 18 additions and 5 deletions
|
|
@ -1,13 +1,20 @@
|
||||||
|
|
||||||
--tripplemagic : Int -> Int -> Int -> Int;
|
--tripplemagic : Int -> Int -> Int -> Int;
|
||||||
--tripplemagic x y z = ((\x:Int. x+x) x) + y + z;
|
--tripplemagic x y z = ((\x:Int. x+x) x) + y + z;
|
||||||
|
--main : Int;
|
||||||
-- main : Int;
|
--main = tripplemagic ((\x:Int. x+x+3) ((\x:Int. x) 2)) 5 3
|
||||||
-- main = tripplemagic ((\x:Int. x+x+3) ((\x:Int. x) 2)) 5 3
|
|
||||||
|
|
||||||
apply : (Int -> Int) -> Int -> Int;
|
apply : (Int -> Int) -> Int -> Int;
|
||||||
apply f x = f x;
|
apply f x = f x;
|
||||||
|
|
||||||
main : Int;
|
main : Int;
|
||||||
main = apply (\x:Int . x + 2) 5;
|
main = (\x : Int . x + 5) 5
|
||||||
|
|
||||||
|
|
||||||
|
--apply : (Int -> Int -> Int) -> Int -> Int;
|
||||||
|
--apply f x y = f x y;
|
||||||
|
--krimp: Int -> Int -> Int;
|
||||||
|
--krimp x y = x + y;
|
||||||
|
--main : Int;
|
||||||
|
--main = apply (krimp) 2 3;--apply (\y: Int . (\x: Int . x + y + 2)) 5 2;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -264,8 +264,14 @@ compile (Program prg) = do
|
||||||
type2LlvmType :: Type -> LLVMType
|
type2LlvmType :: Type -> LLVMType
|
||||||
type2LlvmType = \case
|
type2LlvmType = \case
|
||||||
TInt -> I64
|
TInt -> I64
|
||||||
TFun t xs -> Function (type2LlvmType t) [type2LlvmType xs]
|
TFun t xs -> do
|
||||||
|
let (t', xs') = function2LLVMType xs [type2LlvmType t]
|
||||||
|
Function t' xs'
|
||||||
t -> CustomType $ Ident ("\"" ++ show t ++ "\"")
|
t -> CustomType $ Ident ("\"" ++ show t ++ "\"")
|
||||||
|
where
|
||||||
|
function2LLVMType :: Type -> [LLVMType] -> (LLVMType, [LLVMType])
|
||||||
|
function2LLVMType (TFun t xs) s = function2LLVMType xs (type2LlvmType t : s)
|
||||||
|
function2LLVMType x s = (type2LlvmType x, s)
|
||||||
|
|
||||||
getType :: Exp -> LLVMType
|
getType :: Exp -> LLVMType
|
||||||
getType (EInt _) = I64
|
getType (EInt _) = I64
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue