diff options
author | Andy Wingo <wingo@pobox.com> | 2009-02-22 10:51:49 +0100 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2009-02-22 10:51:49 +0100 |
commit | 8c306808c25fb1f353dca2b1d6a1356193e72dea (patch) | |
tree | 0f4fc4f94a64627245232d768566ece9691ead36 /module/language/ecmascript/function.scm | |
parent | aec8febc4621e87d9c3c1a10341ead00f784ff7f (diff) | |
download | guile-8c306808c25fb1f353dca2b1d6a1356193e72dea.tar.gz |
+ 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.
Diffstat (limited to 'module/language/ecmascript/function.scm')
-rw-r--r-- | module/language/ecmascript/function.scm | 14 |
1 files changed, 6 insertions, 8 deletions
diff --git a/module/language/ecmascript/function.scm b/module/language/ecmascript/function.scm index cb85ef60d..1e2d726ca 100644 --- a/module/language/ecmascript/function.scm +++ b/module/language/ecmascript/function.scm @@ -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))) |