diff options
author | Ian Price <ianprice90@googlemail.com> | 2015-06-24 19:57:28 +0100 |
---|---|---|
committer | Ian Price <ianprice90@googlemail.com> | 2015-06-24 19:57:28 +0100 |
commit | 89029a54f43e7698e7ddb5f72ada4c44ec5a1c68 (patch) | |
tree | e9619428de3e67d425f09541090e806a3ecd6071 /module/language/javascript.scm | |
parent | b631576f13677e7834a9604ee6b664f0ff2acc06 (diff) | |
download | guile-89029a54f43e7698e7ddb5f72ada4c44ec5a1c68.tar.gz |
Explicitly test for undefined arguments to handle false values like 0
Diffstat (limited to 'module/language/javascript.scm')
-rw-r--r-- | module/language/javascript.scm | 39 |
1 files changed, 36 insertions, 3 deletions
diff --git a/module/language/javascript.scm b/module/language/javascript.scm index 741282a61..8829b3be0 100644 --- a/module/language/javascript.scm +++ b/module/language/javascript.scm @@ -15,6 +15,8 @@ make-branch branch make-var var make-binop binop + make-ternary ternary + make-prefix prefix print-statement)) @@ -59,6 +61,8 @@ (define-js-type branch test then else) (define-js-type var id exp) (define-js-type binop op arg1 arg2) +(define-js-type ternary test then else) +(define-js-type prefix op expr) (define (unparse-js exp) (match exp @@ -85,7 +89,12 @@ (($ var id exp) `(var ,id ,(unparse-js exp))) (($ binop op arg1 arg2) - `(binop ,op ,(unparse-js arg1) ,(unparse-js arg2))))) + `(binop ,op ,(unparse-js arg1) ,(unparse-js arg2))) + (($ ternary test then else) + `(ternary ,(unparse-js test) ,(unparse-js then) ,(unparse-js else))) + (($ prefix op expr) + `(prefix ,op ,(unparse-js expr))) + )) (define (print-exp exp port) (match exp @@ -136,17 +145,41 @@ (print-binop op port) (display "(" port) (print-exp arg2 port) - (display ")" port)))) + (display ")" port)) + + (($ ternary test then else) + (display "(" port) + (print-exp test port) + (display ") ? (" port) + (print-exp then port) + (display ") : (" port) + (print-exp else port) + (display ")" port)) + + (($ prefix op exp) + (print-prefix op port) + (display "(" port) + (print-exp exp port) + (display ")" port)) + )) (define (print-binop op port) (case op ((or) (display "||" port)) ((and) (display "&&" port)) ((=) (display "==" port)) - ((+ - < <= > >=) (format port "~a" op)) + ((+ - < <= > >= ===) (format port "~a" op)) (else (throw 'unprintable-binop op)))) +(define (print-prefix op port) + (case op + ((not) (display "!" port)) + ((typeof + -) + (format port "~a" op)) + (else + (throw 'unprintable-prefix op)))) + (define (print-statement stmt port) (match stmt (($ var id exp) |