diff options
author | Eduardo Julian | 2015-01-03 01:48:08 -0400 |
---|---|---|
committer | Eduardo Julian | 2015-01-03 01:48:08 -0400 |
commit | 648110a554a13e1caaf846a60c85cccadcda6e0d (patch) | |
tree | b81414d285dd3d2fdf93f4f2059235ed4a184baf /src/lang/parser.clj | |
parent | 7ae54659d09aef5ced3544c650c80d7580a0dbb7 (diff) |
The language now supports macros.
Diffstat (limited to 'src/lang/parser.clj')
-rw-r--r-- | src/lang/parser.clj | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/src/lang/parser.clj b/src/lang/parser.clj index 48f624ba4..34f3e70b4 100644 --- a/src/lang/parser.clj +++ b/src/lang/parser.clj @@ -71,6 +71,12 @@ =body (apply-m parse-form (list ?body))] (return [::def =name =body]))) +(defparser ^:private parse-defmacro + [::&lexer/list ([[::&lexer/ident "defmacro"] ?name ?body] :seq)] + (exec [=name (apply-m parse-form (list ?name)) + =body (apply-m parse-form (list ?body))] + (return [::defmacro =name =body]))) + (defparser ^:private parse-defdata [::&lexer/list ([[::&lexer/ident "defdata"] ?type & ?cases] :seq)] (exec [=type (apply-m parse-form (list ?type)) @@ -195,6 +201,7 @@ parse-record parse-lambda parse-def + parse-defmacro parse-defdata parse-if parse-do |