aboutsummaryrefslogtreecommitdiff
path: root/src/cljcc/analyzer.clj
diff options
context:
space:
mode:
Diffstat (limited to 'src/cljcc/analyzer.clj')
-rw-r--r--src/cljcc/analyzer.clj9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/cljcc/analyzer.clj b/src/cljcc/analyzer.clj
index 7d82f53..5970be4 100644
--- a/src/cljcc/analyzer.clj
+++ b/src/cljcc/analyzer.clj
@@ -27,6 +27,9 @@
(resolve-exp (:right e) mp)
(:binary-operator e))
:unary-exp (p/unary-exp-node (:unary-operator e) (resolve-exp (:value e) mp))
+ :conditional-exp (p/conditional-exp-node (resolve-exp (:left e) mp)
+ (resolve-exp (:middle e) mp)
+ (resolve-exp (:right e) mp))
(throw (ex-info "Analyzer error. Invalid expression type" {:exp e}))))
(defn- resolve-declaration [d mp]
@@ -46,6 +49,12 @@
(condp = (:statement-type s)
:return (p/return-statement-node (resolve-exp (:value s) mp))
:expression (p/expression-statement-node (resolve-exp (:value s) mp))
+ :if (if (:else-statement s)
+ (p/if-statement-node (resolve-exp (:condition s) mp)
+ (resolve-statement (:then-statement s) mp)
+ (resolve-statement (:else-statement s) mp))
+ (p/if-statement-node (resolve-exp (:condition s) mp)
+ (resolve-statement (:then-statement s) mp)))
:empty (p/empty-statement-node)
(throw (ex-info "Analyzer error. Invalid statement." {:statement s}))))