mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-14 15:40:19 +02:00
+ for strings, global js object, new Foo() works
* module/language/ecmascript/array.scm (*array-prototype*): Declare the constructor. * module/language/ecmascript/base.scm (pput, pdel): Remove some needless checks. (new): Move definition of new here, and use the constructor. * module/language/ecmascript/compile-ghil.scm (compile-ghil): Add a stub so that when we load a compiled JS program, we make sure the runtime has been booted. * module/language/ecmascript/function.scm (js-constructor): Export a js-constructor method instead of a new method. * module/language/ecmascript/impl.scm (<js-global-object>): Define a new class for the global "this" object, wrapping bindings from the current module. (init-js-bindings!): Define the dozen or so global properties, in the current module. (+): Define addition operations for non-numbers. This is efficient because the generics are only dispatched if the fast-path fails.
This commit is contained in:
parent
aec8febc46
commit
8c306808c2
6 changed files with 97 additions and 35 deletions
|
@ -22,7 +22,7 @@
|
|||
(define-module (language ecmascript function)
|
||||
#:use-module (oop goops)
|
||||
#:use-module (language ecmascript base)
|
||||
#:export (*function-prototype* *program-wrappers* new))
|
||||
#:export (*function-prototype* *program-wrappers*))
|
||||
|
||||
|
||||
(define-class <js-program-wrapper> (<js-object>))
|
||||
|
@ -72,10 +72,8 @@
|
|||
(js-prototype wrapper)
|
||||
#f)))
|
||||
|
||||
(define-method (new (f <applicable>) . initargs)
|
||||
(let ((o (make <js-object>
|
||||
#:prototype (or (js-prototype f) *object-prototype*))))
|
||||
(let ((new-o (with-fluid *this* o (lambda () (apply f initargs)))))
|
||||
(if (is-a? new-o <js-object>)
|
||||
new-o
|
||||
o))))
|
||||
(define-method (js-constructor (o <applicable>))
|
||||
(let ((wrapper (hashq-ref *program-wrappers* o)))
|
||||
(if wrapper
|
||||
(js-constructor wrapper)
|
||||
#f)))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue