1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-11 16:20:19 +02:00

Fix ECMAScript object creation.

* module/language/ecmascript/compile-tree-il.scm (compile-tree-il):
  generate correct tree-il for construction of new objects.
* test-suite/tests/ecmascript.test (ecompile): Add pattern with EXPECTED
  omitted.
  ("compiler"): test whether we generate new objects correctly.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
This commit is contained in:
Noah Lavine 2011-01-03 02:22:35 -05:00 committed by Ludovic Courtès
parent 9dfcd9e2d6
commit 8891bd1b16
2 changed files with 18 additions and 11 deletions

View file

@ -366,16 +366,16 @@
`(apply ,(@implv new-array)
,@(map (lambda (x) (comp x e)) args)))
((object . ,args)
(@impl new-object
(map (lambda (x)
(pmatch x
((,prop ,val)
(-> (apply (-> (primitive 'cons))
(-> (const prop))
(comp val e))))
(else
(error "bad prop-val pair" x))))
args)))
`(apply (@ (language ecmascript impl) new-object)
,@(map (lambda (x)
(pmatch x
((,prop ,val)
(-> (apply (-> (primitive 'cons))
(-> (const prop))
(comp val e))))
(else
(error "bad prop-val pair" x))))
args)))
((pref ,obj ,prop)
(@impl pget
(comp obj e)

View file

@ -1,6 +1,6 @@
;;;; ecmascript.test --- ECMAScript. -*- mode: scheme; coding: utf-8; -*-
;;;;
;;;; Copyright (C) 2010 Free Software Foundation, Inc.
;;;; Copyright (C) 2010, 2011 Free Software Foundation, Inc.
;;;;
;;;; This library is free software; you can redistribute it and/or
;;;; modify it under the terms of the GNU Lesser General Public
@ -53,6 +53,12 @@
(define-syntax ecompile
(syntax-rules ()
((_ expression)
(pass-if expression
(not (not
(compile (call-with-input-string expression read-ecmascript)
#:from 'ecmascript
#:to 'value)))))
((_ expression expected)
(pass-if expression
(equal? expected
@ -65,6 +71,7 @@
(ecompile "true;" #t)
(ecompile "2 + 2;" 4)
(ecompile "\"hello\";" "hello")
(ecompile "var test = { bar: 1 };")
;; FIXME: Broken!
;; (ecompile "[1,2,3,4].map(function(x) { return x * x; });"