aboutsummaryrefslogtreecommitdiff
path: root/src/lang/parser.clj
diff options
context:
space:
mode:
authorEduardo Julian2014-12-08 23:38:12 -0400
committerEduardo Julian2014-12-08 23:38:12 -0400
commit04259ac74894f5e0b3319efe17c833b179d483e3 (patch)
tree2f6db8ffda75fb162299b23fb4d9b7edc41eb0c2 /src/lang/parser.clj
parentc68be3366cb67ff96ec88904ccc9d1efd7a78bed (diff)
Can now define inside modules: simple classes with public fields.
Diffstat (limited to '')
-rw-r--r--src/lang/parser.clj9
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]