diff --git a/module/language/ecmascript/compile-ghil.scm b/module/language/ecmascript/compile-ghil.scm index 1d1a94c69..3aa007a7e 100644 --- a/module/language/ecmascript/compile-ghil.scm +++ b/module/language/ecmascript/compile-ghil.scm @@ -89,7 +89,8 @@ (this (@impl e l get-this '())) ((+ ,a) - (make-ghil-inline e l 'add (list (comp a e) (make-ghil-quote e l 0)))) + (make-ghil-inline e l 'add (list (@impl e l ->number (list (comp a e))) + (make-ghil-quote e l 0)))) ((- ,a) (make-ghil-inline e l 'sub (list (make-ghil-quote e l 0) (comp a e)))) ((~ ,a) diff --git a/module/language/ecmascript/impl.scm b/module/language/ecmascript/impl.scm index 737639fd4..c31c29d73 100644 --- a/module/language/ecmascript/impl.scm +++ b/module/language/ecmascript/impl.scm @@ -26,7 +26,7 @@ #:use-module (language ecmascript array) #:re-export (*undefined* *this* call/this* pget pput pdel has-property? - ->boolean + ->boolean ->number new-object new new-array) #:export (js-init get-this typeof @@ -110,3 +110,32 @@ (define-method (+ a b) (+ (->number a) (->number b))) + +(define-method (- a b) + (- (->number a) (->number b))) + +(define-method (* a b) + (* (->number a) (->number b))) + +(define-method (/ a b) + (/ (->number a) (->number b))) + +(define-method (< a b) + (< (->number a) (->number b))) +(define-method (< (a ) (b )) + (string< a b)) + +(define-method (<= a b) + (<= (->number a) (->number b))) +(define-method (<= (a ) (b )) + (string<= a b)) + +(define-method (>= a b) + (>= (->number a) (->number b))) +(define-method (>= (a ) (b )) + (string>= a b)) + +(define-method (> a b) + (> (->number a) (->number b))) +(define-method (> (a ) (b )) + (string> a b))