summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Price <ianprice90@googlemail.com>2015-06-08 18:02:01 +0100
committerIan Price <ianprice90@googlemail.com>2015-06-18 04:14:42 +0100
commit30afdcd97678e7aceb9bea187752f307a936f5ca (patch)
tree5d1a735f996db95b187a9e608493883647dcb49f
parent41023d5b4cd322d51319ba8e9bbd1a7f3cfb7091 (diff)
downloadguile-30afdcd97678e7aceb9bea187752f307a936f5ca.tar.gz
Add binop type
-rw-r--r--module/language/javascript.scm26
1 files changed, 24 insertions, 2 deletions
diff --git a/module/language/javascript.scm b/module/language/javascript.scm
index 37b7b28da..748621355 100644
--- a/module/language/javascript.scm
+++ b/module/language/javascript.scm
@@ -14,6 +14,7 @@
make-refine refine
make-branch branch
make-var var
+ make-binop binop
print-statement))
@@ -57,6 +58,7 @@
(define-js-type refine id field)
(define-js-type branch test then else)
(define-js-type var id exp)
+(define-js-type binop op arg1 arg2)
(define (unparse-js exp)
(match exp
@@ -81,7 +83,9 @@
(block ,@(map unparse-js then))
(block ,@(map unparse-js else))))
(($ var id exp)
- `(var ,id ,(unparse-js exp)))))
+ `(var ,id ,(unparse-js exp)))
+ (($ binop op arg1 arg2)
+ `(binop ,op ,arg1 ,arg2))))
(define (print-exp exp port)
(match exp
@@ -123,7 +127,25 @@
(($ new expr)
(format port "new ")
- (print-exp expr port))))
+ (print-exp expr port))
+
+ (($ binop op arg1 arg2)
+ (display "(" port)
+ (print-exp arg1 port)
+ (display ")" port)
+ (print-binop op port)
+ (display "(" port)
+ (print-exp arg2 port)
+ (display ")" port))))
+
+(define (print-binop op port)
+ (case op
+ ((or) (display "||" port))
+ ((and) (display "&&" port))
+ ((=) (display "==" port))
+ ((+ - < <= > >=) (format port "~a" op))
+ (else
+ (throw 'unprintable-binop op))))
(define (print-statement stmt port)
(match stmt