diff options
author | Eduardo Julian | 2014-12-08 23:38:12 -0400 |
---|---|---|
committer | Eduardo Julian | 2014-12-08 23:38:12 -0400 |
commit | 04259ac74894f5e0b3319efe17c833b179d483e3 (patch) | |
tree | 2f6db8ffda75fb162299b23fb4d9b7edc41eb0c2 /src/lang/parser.clj | |
parent | c68be3366cb67ff96ec88904ccc9d1efd7a78bed (diff) |
Can now define inside modules: simple classes with public fields.
Diffstat (limited to '')
-rw-r--r-- | src/lang/parser.clj | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/src/lang/parser.clj b/src/lang/parser.clj index 5adf36030..beb14302d 100644 --- a/src/lang/parser.clj +++ b/src/lang/parser.clj @@ -107,6 +107,14 @@ [::&lexer/list ([[::&lexer/ident "module"]] :seq)] (return [::module])) +(defparser ^:private parse-defclass + [::&lexer/list ([[::&lexer/ident "defclass"] [::&lexer/ident ?name] [::&lexer/tuple ?fields]] :seq)] + (let [fields (for [field ?fields] + (match field + [::&lexer/tuple ([[::&lexer/ident ?class] [::&lexer/ident ?field]] :seq)] + [?class ?field]))] + (return [::defclass ?name fields]))) + (defparser ^:private parse-tagged [::&lexer/list ([[::&lexer/tag ?tag] ?data] :seq)] (exec [=data (apply-m parse-form (list ?data))] @@ -190,6 +198,7 @@ parse-dynamic-access parse-ann-class parse-module + parse-defclass parse-fn-call])) ;; [Interface] |