summaryrefslogtreecommitdiff
path: root/module/language/ecmascript/function.scm
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2009-02-22 10:51:49 +0100
committerAndy Wingo <wingo@pobox.com>2009-02-22 10:51:49 +0100
commit8c306808c25fb1f353dca2b1d6a1356193e72dea (patch)
tree0f4fc4f94a64627245232d768566ece9691ead36 /module/language/ecmascript/function.scm
parentaec8febc4621e87d9c3c1a10341ead00f784ff7f (diff)
downloadguile-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.scm14
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)))