import StdEnv
import Data.Either
+import Data.Func
import Text
import ast
-gen :: AST -> Either [String] [String]
-gen (AST fs) = Right (genCode fs [])
+gen :: Expression -> Either [String] [String]
+gen _ = Left ["genbork"]
+/*
+gen (AST fs) = Right
+ ["#include \"rts.h\"\n"
+ :genCode fs []
+ ]
class genCode a :: a [String] -> [String]
instance genCode String where genCode s c = [s:c]
genCode [a:as] c = genCode a (genCode as c)
instance genCode Function where
genCode (Function name args body) c
- = ["stackval_t ", toString name, "(":genCode (join ", " (map toString args)) [") { return ":genCode body ["; }\n":c]]]
+ = ["struct stackval_t *", toString name, "(":genCode (join ", " ["struct stackval_t *" +++ toString a\\a<-args]) [") { return ":genCode body ["; }\n":c]]]
instance genCode Value where
- genCode (Int i) c = genCode (toString i) c
- genCode (Char i) c = genCode ['\'',i,'\''] c
- genCode (Bool i) c = genCode (if i "true" "false") c
+ genCode (Int i) c = ["lit(",toString i,")":c]
+ genCode (Bool i) c = ["lit(",if i "true" "false",")":c]
genCode (Func _ _ _) c = abort "help"
instance genCode Expression where
genCode (Lit l) c = genCode l c
- genCode (Var v) c = genCode v c
+ genCode (Var ['if']) c = genCode (Var ['_if']) c
+ genCode (Var v) c = ["var(",toString v,")":c]
genCode (App a b) c = ["ap(":genCode a [", ":genCode b [")":c]]]
genCode (Lambda a b) c = abort "help"
genCode (Builtin b args) c = genCode b ["(":genCode args [")":c]]
+*/