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:
parent
9dfcd9e2d6
commit
8891bd1b16
2 changed files with 18 additions and 11 deletions
|
@ -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)
|
||||
|
|
|
@ -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; });"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue