From 6b5e918e4f3cf011713e699c6af1c4e364bfae36 Mon Sep 17 00:00:00 2001 From: Sjoerd van Leent Date: Fri, 8 Jun 2012 21:21:08 -0400 Subject: Fix unbound variables and unbound values * module/language/ecmascript/base.scm: fix two wrong variable names and a wrong number of arguments in a function call. --- module/language/ecmascript/base.scm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'module/language') diff --git a/module/language/ecmascript/base.scm b/module/language/ecmascript/base.scm index b244bec01..6f5c65ba5 100644 --- a/module/language/ecmascript/base.scm +++ b/module/language/ecmascript/base.scm @@ -92,7 +92,7 @@ (pdel o (string->symbol p))) (define-method (has-property? (o ) p) - (if (hashq-get-handle (js-props o) v) + (if (hashq-get-handle (js-props o) p) #t (let ((proto (js-prototype o))) (if proto @@ -176,9 +176,9 @@ ((boolean? x) (if x 1 0)) ((null? x) 0) ((eq? x *undefined*) +nan.0) - ((is-a? x ) (object->number x)) + ((is-a? x ) (object->number x #t)) ((string? x) (string->number x)) - (else (throw 'TypeError o '->number)))) + (else (throw 'TypeError x '->number)))) (define (->integer x) (let ((n (->number x))) -- cgit v1.2.3 From 4d1ae112792cb8faaa1f42b5c7332e9de05001ee Mon Sep 17 00:00:00 2001 From: Andy Wingo Date: Fri, 22 Jun 2012 12:25:34 +0200 Subject: cse: expressions evaluated for effect do not provide predicates * module/language/tree-il/cse.scm (cse): When trying to fold conditionals, only look at entries in the database that were added in test context. * test-suite/tests/cse.test ("cse"): Add a test case. --- module/language/tree-il/cse.scm | 4 ++-- test-suite/tests/cse.test | 17 ++++++++++++++++- 2 files changed, 18 insertions(+), 3 deletions(-) (limited to 'module/language') diff --git a/module/language/tree-il/cse.scm b/module/language/tree-il/cse.scm index ceef15f70..b8e722967 100644 --- a/module/language/tree-il/cse.scm +++ b/module/language/tree-il/cse.scm @@ -276,11 +276,11 @@ #f))) (_ (cond - ((find-dominating-expression exp effects #f db) + ((find-dominating-expression exp effects 'test db) ;; We have an EXP fact, so we infer #t. (log 'inferring exp #t) (make-const (tree-il-src exp) #t)) - ((find-dominating-expression (negate exp 'test) effects #f db) + ((find-dominating-expression (negate exp 'test) effects 'test db) ;; We have a (not EXP) fact, so we infer #f. (log 'inferring exp #f) (make-const (tree-il-src exp) #f)) diff --git a/test-suite/tests/cse.test b/test-suite/tests/cse.test index ee3128511..d01d31874 100644 --- a/test-suite/tests/cse.test +++ b/test-suite/tests/cse.test @@ -271,4 +271,19 @@ (let ((x (car y))) (cons x (car y))) (let (x) (_) ((apply (primitive car) (toplevel y))) - (apply (primitive cons) (lexical x _) (lexical x _))))) + (apply (primitive cons) (lexical x _) (lexical x _)))) + + ;; Dominating expressions only provide predicates when evaluated in + ;; test context. + (pass-if-cse + (let ((t (car x))) + (if (car x) + 'one + 'two)) + ;; Actually this one should reduce in other ways, but this is the + ;; current reduction: + (begin + (apply (primitive car) (toplevel x)) + (if (apply (primitive car) (toplevel x)) + (const one) + (const two))))) -- cgit v1.2.3 From 2874f66017b7bfae256e85af84689d00ecc418ab Mon Sep 17 00:00:00 2001 From: Andy Wingo Date: Fri, 22 Jun 2012 12:30:39 +0200 Subject: add char->integer, number->string etc to interesting primitives * module/language/tree-il/primitives.scm (*interesting-primitive-names*): (*effect-free-primitives*): Add string->number, number->string, integer->char, and char->integer to allow for constant folding and better effects analysis. --- module/language/tree-il/primitives.scm | 3 +++ 1 file changed, 3 insertions(+) (limited to 'module/language') diff --git a/module/language/tree-il/primitives.scm b/module/language/tree-il/primitives.scm index dba31bdc8..a1c5adc71 100644 --- a/module/language/tree-il/primitives.scm +++ b/module/language/tree-il/primitives.scm @@ -54,6 +54,8 @@ char=? char>? + integer->char char->integer number->string string->number + acons cons cons* list vector @@ -154,6 +156,7 @@ pair? null? list? symbol? vector? struct? string? number? char? complex? real? rational? inf? nan? integer? exact? inexact? even? odd? char=? char>? + integer->char char->integer number->string string->number struct-vtable string-length ;; These all should get expanded out by expand-primitives!. -- cgit v1.2.3