From f25d7b52290853614506808954908226217aa2b2 Mon Sep 17 00:00:00 2001 From: "rogerl%netscape.com" Date: Fri, 11 Jun 1999 23:05:16 +0000 Subject: [PATCH] Mucking about with stuff. --- js/js2/java/Environment.java | 7 ++++++- js/js2/java/JSGrammar.g | 8 ++++---- js/js2/java/JSObject.java | 20 +++++++++++++++----- js/js2/java/NativeFunction.java | 3 +-- js/js2/java/NativeNumber.java | 2 +- 5 files changed, 27 insertions(+), 13 deletions(-) diff --git a/js/js2/java/Environment.java b/js/js2/java/Environment.java index 006320df63ab..76a393adc33b 100644 --- a/js/js2/java/Environment.java +++ b/js/js2/java/Environment.java @@ -3,7 +3,12 @@ import java.util.Hashtable; class Environment { - JSObject scope = new JSObject("globals"); + JSObject scope = new JSObject("globals", null); + + void enterNewScope(JSObject newScope) + { + + } String print() { diff --git a/js/js2/java/JSGrammar.g b/js/js2/java/JSGrammar.g index 4a0f2594bccb..78eb2fc33d1e 100644 --- a/js/js2/java/JSGrammar.g +++ b/js/js2/java/JSGrammar.g @@ -81,15 +81,15 @@ primary_expression[boolean initial] returns [ExpressionNode e] simple_expression returns [ExpressionNode e] { e = null; } - : "null" { e = new JSObject("null"); } + : "null" { e = new JSObject("null", null); } // XXX | "true" { e = JSBoolean.JSTrue; } | "false" { e = JSBoolean.JSFalse; } | opN:NUMBER { e = new JSDouble(opN.getText()); } | opS:STRING { e = new JSString(opS.getText()); } - | "this" { e = new JSObject("this"); } - | "super" { e = new JSObject("super"); } + | "this" { e = new JSObject("this", null); } // XXX + | "super" { e = new JSObject("super", null); } // XXX | e = qualified_identifier_or_parenthesized_expression[true] - | opR:REGEXP { e = new JSObject(opR.getText()); } + | opR:REGEXP { e = new JSObject(opR.getText(), null); } // XXX | e = array_literal ; diff --git a/js/js2/java/JSObject.java b/js/js2/java/JSObject.java index db444dafdda9..361fc4100171 100644 --- a/js/js2/java/JSObject.java +++ b/js/js2/java/JSObject.java @@ -3,11 +3,12 @@ import java.util.Hashtable; class JSObject extends JSValue { - static JSObject JSUndefined = new JSObject("undefined"); + static JSObject JSUndefined = new JSObject("undefined", null); - JSObject(String aValue) + JSObject(String aValue, JSObject aPrototype) { value = aValue; + prototype = aPrototype; } String print(String indent) @@ -38,9 +39,17 @@ class JSObject extends JSValue { JSDouble toJSDouble(Environment theEnv) { return toPrimitive(theEnv, "Number").toJSDouble(theEnv); } - - JSValue getProp(Environment theEnv, JSString id) { - return (JSValue)(contents.get(id.s)); + + JSValue getProp(Environment theEnv, JSString id) + { + Object v = contents.get(id.s); + if (v == null) + if (prototype == null) + return JSUndefined; + else + return prototype.getProp(theEnv, id); + else + return (JSValue)v; } JSValue putProp(Environment theEnv, JSString id, JSValue rV) { @@ -53,4 +62,5 @@ class JSObject extends JSValue { String value; + JSObject prototype; } \ No newline at end of file diff --git a/js/js2/java/NativeFunction.java b/js/js2/java/NativeFunction.java index 6e838be01cf3..99761a252fb6 100644 --- a/js/js2/java/NativeFunction.java +++ b/js/js2/java/NativeFunction.java @@ -2,7 +2,7 @@ class NativeFunction extends JSObject { NativeFunction(ControlNode aBody) { - super("Function"); + super("Function", null); body = aBody; } @@ -14,7 +14,6 @@ class NativeFunction extends JSObject { return theEnv.resultValue; } - ControlNode body; } \ No newline at end of file diff --git a/js/js2/java/NativeNumber.java b/js/js2/java/NativeNumber.java index e08063c14d3f..e5874497089e 100644 --- a/js/js2/java/NativeNumber.java +++ b/js/js2/java/NativeNumber.java @@ -1,7 +1,7 @@ class NativeNumber extends JSObject { NativeNumber(double p) { - super("Number"); + super("Number", null); d = p; }