diff options
author | David Robillard <d@drobilla.net> | 2010-09-30 12:45:47 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2010-09-30 12:45:47 +0000 |
commit | 0faa00e9dfd221016ad26b5629617949fcce4676 (patch) | |
tree | 91ae7796712c83f8a3d9889b97b97ed8c630cfe7 /src/parse.cpp | |
parent | c5e2f5dbb8922ba9bc5baa8e3194be89cb64f367 (diff) | |
download | resp-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.cpp | 26 |
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>)); |