aboutsummaryrefslogtreecommitdiffstats
path: root/src/parse.cpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2010-09-30 12:45:47 +0000
committerDavid Robillard <d@drobilla.net>2010-09-30 12:45:47 +0000
commit0faa00e9dfd221016ad26b5629617949fcce4676 (patch)
tree91ae7796712c83f8a3d9889b97b97ed8c630cfe7 /src/parse.cpp
parentc5e2f5dbb8922ba9bc5baa8e3194be89cb64f367 (diff)
downloadresp-0faa00e9dfd221016ad26b5629617949fcce4676.tar.gz
resp-0faa00e9dfd221016ad26b5629617949fcce4676.tar.bz2
resp-0faa00e9dfd221016ad26b5629617949fcce4676.zip
Preliminary work on algebraic data types and run-time typing.
git-svn-id: http://svn.drobilla.net/resp/resp@270 ad02d1e2-f140-0410-9f75-f8b11f17cedd
Diffstat (limited to 'src/parse.cpp')
-rw-r--r--src/parse.cpp26
1 files changed, 14 insertions, 12 deletions
diff --git a/src/parse.cpp b/src/parse.cpp
index 7482039..28279f9 100644
--- a/src/parse.cpp
+++ b/src/parse.cpp
@@ -170,13 +170,13 @@ void
initLang(PEnv& penv, TEnv& tenv)
{
// Types
- tenv.def(penv.sym("Nothing"), new AType(penv.sym("Nothing")));
- tenv.def(penv.sym("Bool"), new AType(penv.sym("Bool")));
- tenv.def(penv.sym("Int"), new AType(penv.sym("Int")));
- tenv.def(penv.sym("Float"), new AType(penv.sym("Float")));
- tenv.def(penv.sym("String"), new AType(penv.sym("String")));
- tenv.def(penv.sym("Lexeme"), new AType(penv.sym("Lexeme")));
- tenv.def(penv.sym("Quote"), new AType(penv.sym("Quote")));
+ tenv.def(penv.sym("Nothing"), new AType(penv.sym("Nothing"), AType::PRIM));
+ tenv.def(penv.sym("Bool"), new AType(penv.sym("Bool"), AType::PRIM));
+ tenv.def(penv.sym("Int"), new AType(penv.sym("Int"), AType::PRIM));
+ tenv.def(penv.sym("Float"), new AType(penv.sym("Float"), AType::PRIM));
+ tenv.def(penv.sym("String"), new AType(penv.sym("String"), AType::PRIM));
+ tenv.def(penv.sym("Lexeme"), new AType(penv.sym("Lexeme"), AType::PRIM));
+ tenv.def(penv.sym("Quote"), new AType(penv.sym("Quote"), AType::PRIM));
// Literals
static bool trueVal = true;
@@ -188,11 +188,13 @@ initLang(PEnv& penv, TEnv& tenv)
penv.defmac("def", macDef);
// Special forms
- penv.reg(true, "fn", PEnv::Handler(parseFn));
- penv.reg(true, "quote", PEnv::Handler(parseQuote));
- penv.reg(true, "if", PEnv::Handler(parseCall<AIf>));
- penv.reg(true, ".", PEnv::Handler(parseCall<ADot>));
- penv.reg(true, "def", PEnv::Handler(parseCall<ADef>));
+ penv.reg(true, "fn", PEnv::Handler(parseFn));
+ penv.reg(true, "quote", PEnv::Handler(parseQuote));
+ penv.reg(true, "if", PEnv::Handler(parseCall<AIf>));
+ penv.reg(true, ".", PEnv::Handler(parseCall<ADot>));
+ penv.reg(true, "def", PEnv::Handler(parseCall<ADef>));
+ penv.reg(true, "def-type", PEnv::Handler(parseCall<ADefType>));
+ penv.reg(true, "match", PEnv::Handler(parseCall<AMatch>));
// Numeric primitives
penv.reg(true, "+", PEnv::Handler(parseCall<APrimitive>));