2428 Commits

Author SHA1 Message Date
rogerl%netscape.com
11c82ac5b9 Some parts of x@<name> working.
git-svn-id: svn://10.0.0.236/trunk@73964 18797224-902f-48f8-a5cc-f745e15eee43
2000-07-10 23:18:07 +00:00
jband%netscape.com
473f5b8879 add previously overlooked support for nsIXPCNativeCallContext implementors to signal that they have set the method return value for the JS caller. a=brendan@mozilla.org r=vidur@netscape.com
git-svn-id: svn://10.0.0.236/trunk@73959 18797224-902f-48f8-a5cc-f745e15eee43
2000-07-10 22:39:37 +00:00
rogerl%netscape.com
09961860fe r=brendan@mozilla.org, Fix for #31255, support '-->' on line by itself as
a line comment - allows old, bogus HTML to execute a la 4.X.


git-svn-id: svn://10.0.0.236/trunk@73935 18797224-902f-48f8-a5cc-f745e15eee43
2000-07-10 20:23:54 +00:00
rogerl%netscape.com
babc9d3604 r=brendan@mozilla.org, Fix for #44013 - enforce security for defineGetter
& defineSetter by calling OBJ_CHECK_ACCESS.


git-svn-id: svn://10.0.0.236/trunk@73934 18797224-902f-48f8-a5cc-f745e15eee43
2000-07-10 20:21:38 +00:00
brendan%mozilla.org
c096fdd686 Fix an out-of-date comment.
git-svn-id: svn://10.0.0.236/trunk@73873 18797224-902f-48f8-a5cc-f745e15eee43
2000-07-08 02:35:56 +00:00
brendan%mozilla.org
e59f31abff Make it safe to nest a GC from js_AllocGCThing, ultimately from the interpreter; also make sure we collect all garbage (even garbage created by finalizers who unroot or unlock GC-things) when destroying the last context (39125, 44376, r=mccabe@netscape.com).
git-svn-id: svn://10.0.0.236/trunk@73871 18797224-902f-48f8-a5cc-f745e15eee43
2000-07-08 02:06:01 +00:00
rogerl%netscape.com
07b641917e Support for 'constructor'.
git-svn-id: svn://10.0.0.236/trunk@73865 18797224-902f-48f8-a5cc-f745e15eee43
2000-07-08 01:08:29 +00:00
nboyd%atg.com
6081b3a66b Deprecate FlattenedObject.
git-svn-id: svn://10.0.0.236/trunk@73818 18797224-902f-48f8-a5cc-f745e15eee43
2000-07-07 14:41:35 +00:00
waterson%netscape.com
1cebde4f7e Brendan meant to add jsdhash.h to the Mac build, too.
git-svn-id: svn://10.0.0.236/trunk@73776 18797224-902f-48f8-a5cc-f745e15eee43
2000-07-06 20:55:23 +00:00
waterson%netscape.com
c198a05e61 Brendan meant add jsdhash.c to the Mac build, too.
git-svn-id: svn://10.0.0.236/trunk@73775 18797224-902f-48f8-a5cc-f745e15eee43
2000-07-06 20:54:17 +00:00
rogerl%netscape.com
ceb54a7f92 Removed preprocess step, consolidated identifier handling.
git-svn-id: svn://10.0.0.236/trunk@73767 18797224-902f-48f8-a5cc-f745e15eee43
2000-07-06 18:26:26 +00:00
brendan%mozilla.org
352c59dcb8 Fix lying comment, pick control flow nit (r=lumpy,a=jack).
git-svn-id: svn://10.0.0.236/trunk@73753 18797224-902f-48f8-a5cc-f745e15eee43
2000-07-06 07:38:11 +00:00
brendan%mozilla.org
65b8bdd99e Add jsdhash.h to export/install lists, and jsdhash.c/.obj.
git-svn-id: svn://10.0.0.236/trunk@73747 18797224-902f-48f8-a5cc-f745e15eee43
2000-07-06 04:46:18 +00:00
brendan%mozilla.org
729aa3812c Avoid 80th column violations and unnecessary local variable.
git-svn-id: svn://10.0.0.236/trunk@73722 18797224-902f-48f8-a5cc-f745e15eee43
2000-07-06 01:15:08 +00:00
brendan%mozilla.org
2bec829503 Undo teeny optimization from rev 3.28, alas it breaks ECMA Ed. 3, 15.5.4.15.
git-svn-id: svn://10.0.0.236/trunk@73717 18797224-902f-48f8-a5cc-f745e15eee43
2000-07-06 00:30:46 +00:00
nboyd%atg.com
e100ec45de Remove obsolete references to NodeFactory.
git-svn-id: svn://10.0.0.236/trunk@73674 18797224-902f-48f8-a5cc-f745e15eee43
2000-07-05 17:08:26 +00:00
nboyd%atg.com
a1a769b259 Subject:
Re: Rhino1.5.R1: problems with multithreaded embedded application.
        Date:
             Mon, 03 Jul 2000 14:38:56 -0400
       From:
             Norris Boyd <nboyd@atg.com>
 Organization:
             Art Technology Group
         To:
             Fergus Gallagher <Fergus.Gallagher@orbisuk.com>
 Newsgroups:
             netscape.public.mozilla.jseng
  References:
             1




You found a bug in Rhino; I wonder if others have been running into the same thing.

The problem is with a class called LazilyLoadedCtor. I wrote this class to reduce the
time
required by initStandardObjects by only creating standard objects when the associated
constructors are first accessed. The problem is that this class was not threadsafe.
I've
made changes to that class, and to ScriptableObject as well. The design of dynamic
properties calling getters and setters (which LazilyLoadedCtor uses) didn't really
allow
any way for the getter/setter to replace itself without a thread hazard. I've now
extended
setters so that they can return a value which replaces the getter/setter to avoid this
problem.

Thanks for finding this problem. There have been a couple of other reports of problems
in
this area, so I hope this will fix them.

The patch follows.

--N

Index: LazilyLoadedCtor.java
===================================================================
RCS file: /cvsroot/mozilla/js/rhino/org/mozilla/javascript/LazilyLoadedCtor.java,v
retrieving revision 1.1
diff -u -r1.1 LazilyLoadedCtor.java
--- LazilyLoadedCtor.java 2000/02/29 21:34:37 1.1
+++ LazilyLoadedCtor.java 2000/07/03 18:31:03
@@ -58,9 +58,12 @@
     }

     public Object getProperty(ScriptableObject obj) {
-        obj.delete(ctorName);
         try {
-            ScriptableObject.defineClass(obj, Class.forName(className));
+            synchronized (obj) {
+                if (!isReplaced)
+                    ScriptableObject.defineClass(obj, Class.forName(className));
+                isReplaced = true;
+            }
         }
         catch (ClassNotFoundException e) {
             throw WrappedException.wrapException(e);
@@ -83,11 +86,14 @@
         return obj.get(ctorName, obj);
     }

-    public void setProperty(ScriptableObject obj, Object val) {
-        obj.delete(ctorName);
-        obj.put(ctorName, obj, val);
+    public Object setProperty(ScriptableObject obj, Object val) {
+        synchronized (obj) {
+            isReplaced = true;
+            return val;
+        }
     }

     private String ctorName;
     private String className;
+    private boolean isReplaced;
 }
Index: ScriptableObject.java
===================================================================
RCS file: /cvsroot/mozilla/js/rhino/org/mozilla/javascript/ScriptableObject.java,v
retrieving revision 1.17
diff -u -r1.17 ScriptableObject.java
--- ScriptableObject.java 2000/03/13 17:12:36 1.17
+++ ScriptableObject.java 2000/07/03 18:31:04
@@ -246,11 +246,21 @@
                             break;
                         }
                     }
-                    getterSlot.setter.invoke(start, arg);
+                    Object v = getterSlot.setter.invoke(start, arg);
+                    if (getterSlot.setterReturnsValue) {
+                        slots[slotIndex].value = v;
+                        if (!(v instanceof Method))
+                            slots[slotIndex].flags = 0;
+                    }
                     return;
                 }
                 Object[] args = { this, actualArg };
-                getterSlot.setter.invoke(getterSlot.delegateTo, args);
+                Object v = getterSlot.setter.invoke(getterSlot.delegateTo, args);
+                if (getterSlot.setterReturnsValue) {
+                    slots[slotIndex].value = v;
+                    if (!(v instanceof Method))
+                        slots[slotIndex].flags = 0;
+                }
                 return;
             }
             catch (InvocationTargetException e) {
@@ -1183,6 +1193,7 @@
         slot.delegateTo = delegateTo;
         slot.getter = getter;
         slot.setter = setter;
+        slot.setterReturnsValue = setter != null && setter.getReturnType() !=
Void.TYPE;
         slot.value = null;
         slot.attributes = (short) attributes;
         slot.flags = flags;
@@ -1551,6 +1562,7 @@
     Object delegateTo;  // OPT: merge with "value"
     Method getter;
     Method setter;
+    boolean setterReturnsValue;
 }




Fergus Gallagher wrote:

> I am having problems getting my head around contexts and scopes and my
> multi-threaded application fall over.
>
> If I set "global=false" the following code used a per-thread
> initStandardObject() and this seems to work.  But when I set
> "global=true", the global "parentScope" is used and I get some wierd
> errors.
>
> If I change "__CODE__.slice(0,5)" to
> 1. "__CODE__" - works
> 2. "__CODE__.substring(0,5)" - fails
> 3. "__CODE__.toString()" - works
>
> Any help appreciated.
>
> Fergus
>
> ===== Test.java =========================================
> import java.io.*;
> import org.mozilla.javascript.*;
>
> public class Test implements Runnable {
>         private Script script;
>         private Scriptable parentScope;
>         private String __CODE__="ABCDEFGHIJK";
>         private boolean global = true;
>         private static Context globalContext = null;
>         public Test() throws Exception {
>                 String js= "java.lang.System.out.println(__CODE__.slice(0,5));";
>                 globalContext.setCompileFunctionsWithDynamicScope(false);
>                 parentScope = globalContext.initStandardObjects(null);
>                 StringReader sr = new StringReader(js);
>                 script = globalContext.compileReader(parentScope, sr, "(compiled)",
> 1,null);
>         }
>
>         public void run() {
>                 try {
>                         Context context = Context.enter();
>                         Scriptable threadScope;
>                         if (global) {
>                                 threadScope = context.newObject(parentScope);
>                                 threadScope.setPrototype(parentScope);
>                                 threadScope.setParentScope(null);
>                         } else {
>                                 threadScope = context.initStandardObjects(null);
>                         }
>                         threadScope.put("__CODE__",threadScope,__CODE__);
>                         script.exec(context,threadScope);
>                 }
>                 catch (Exception e) {
>                         System.err.println(e.getClass().getName()+":
"+e.getMessage());
>                 }
>                 finally {
>                         Context.exit();
>                 }
>         }
>
>         public static void main(String args[]) throws Exception {
>         globalContext = Context.enter();
>                 Test me = new Test();
>                 int count=10;
>                 Thread[] threads = new Thread[count];
>                 for (int i=0; i<count; i++) {
>                         Thread t = new Thread(me);
>                         threads[i] = t;
>                         t.start();
>                 }
>                 for (int i=0; i<count; i++) {
>                         threads[i].join();
>                 }
>                 Context.exit();
>         }
> }
>
> ==== OUTPUT ===============================================
> ABCDE
> ABCDE
> org.mozilla.javascript.EcmaError: undefined is not a function.
> org.mozilla.javascript.EvaluatorException: Constructor for "String" not
> found.
> org.mozilla.javascript.EvaluatorException: Constructor for "String" not
> found.
> org.mozilla.javascript.EvaluatorException: Constructor for "String" not
> found.
> org.mozilla.javascript.EvaluatorException: Constructor for "String" not
> found.
> org.mozilla.javascript.EvaluatorException: Constructor for "String" not
> found.
> org.mozilla.javascript.EvaluatorException: Constructor for "String" not
> found.
> org.mozilla.javascript.EvaluatorException: Constructor for "String" not
> found.
> ===========================================================
>
> The number and type of exceptions is highly variable from run to run -
> anywhere from 1-9 out of 10.
> The EcmaError in particular only happens occasionally.
>
> --
> Fergus Gallagher          Tel: +44 (20) 8 987 0717
> Orbis                     Fax: +44 (20) 8 742 2649
> The Swan Centre           email: Fergus.Gallagher@orbisuk.com
> Fishers Lane              Web: http://www.orbisuk.com
> London W4 1RX / UK


git-svn-id: svn://10.0.0.236/trunk@73650 18797224-902f-48f8-a5cc-f745e15eee43
2000-07-03 18:40:35 +00:00
jband%netscape.com
1cf39227e9 updating readme. Not part of build
git-svn-id: svn://10.0.0.236/trunk@73645 18797224-902f-48f8-a5cc-f745e15eee43
2000-07-02 19:37:57 +00:00
cls%seawood.org
91d683a067 Removed obsolete REQUIRES variable from every Makefile.in/makefile.win
git-svn-id: svn://10.0.0.236/trunk@73583 18797224-902f-48f8-a5cc-f745e15eee43
2000-06-30 08:08:04 +00:00
jband%netscape.com
ce4fc31a2d Fix dogfood/crash bugs: 42750, 39858 and fix 43897 and improve JS/XPConnect error reporting to help with crasher 40792. r=mccabe@netscape.com.
git-svn-id: svn://10.0.0.236/trunk@73574 18797224-902f-48f8-a5cc-f745e15eee43
2000-06-30 04:04:46 +00:00
beard%netscape.com
57307567af Fix build bustage.
git-svn-id: svn://10.0.0.236/trunk@73530 18797224-902f-48f8-a5cc-f745e15eee43
2000-06-29 18:40:58 +00:00
rogerl%netscape.com
a02f6ce0d8 use handleDot for call, too.
git-svn-id: svn://10.0.0.236/trunk@73525 18797224-902f-48f8-a5cc-f745e15eee43
2000-06-29 18:30:47 +00:00
beard%netscape.com
ea7ae68414 delete property support.
git-svn-id: svn://10.0.0.236/trunk@73523 18797224-902f-48f8-a5cc-f745e15eee43
2000-06-29 18:14:14 +00:00
beard%netscape.com
8f71e889d8 DELETE_PROP
git-svn-id: svn://10.0.0.236/trunk@73522 18797224-902f-48f8-a5cc-f745e15eee43
2000-06-29 18:13:46 +00:00
beard%netscape.com
1ef1eb154f DELETE_PROP
git-svn-id: svn://10.0.0.236/trunk@73521 18797224-902f-48f8-a5cc-f745e15eee43
2000-06-29 17:14:56 +00:00
beard%netscape.com
aa7664867d added DELETE_PROP instruction to implement the "delete" operation.
git-svn-id: svn://10.0.0.236/trunk@73520 18797224-902f-48f8-a5cc-f745e15eee43
2000-06-29 17:11:50 +00:00
beard%netscape.com
b669d93d26 unused parameter warning
git-svn-id: svn://10.0.0.236/trunk@73512 18797224-902f-48f8-a5cc-f745e15eee43
2000-06-29 05:48:09 +00:00
beard%netscape.com
a0bbecd587 complementary operator delete(void*, JSClass*).
git-svn-id: svn://10.0.0.236/trunk@73511 18797224-902f-48f8-a5cc-f745e15eee43
2000-06-29 05:46:36 +00:00
beard%netscape.com
25cba868b5 some classes to test js2 with.
git-svn-id: svn://10.0.0.236/trunk@73507 18797224-902f-48f8-a5cc-f745e15eee43
2000-06-29 04:49:48 +00:00
beard%netscape.com
a2b5cc5c2b updated dependencies
git-svn-id: svn://10.0.0.236/trunk@73506 18797224-902f-48f8-a5cc-f745e15eee43
2000-06-29 04:25:10 +00:00
beard%netscape.com
963708a821 Changed StaticCall to use static slot.
git-svn-id: svn://10.0.0.236/trunk@73505 18797224-902f-48f8-a5cc-f745e15eee43
2000-06-29 04:23:56 +00:00
beard%netscape.com
e88e8c2639 Fixing static dotted expressions.
git-svn-id: svn://10.0.0.236/trunk@73504 18797224-902f-48f8-a5cc-f745e15eee43
2000-06-29 04:23:20 +00:00
beard%netscape.com
16f447e7ad now uses conditional compilation #if defined(OPCODE_NAMES), so that a simple "icode.h" can be included by vmtypes.h and vmtypes.cpp.
git-svn-id: svn://10.0.0.236/trunk@73503 18797224-902f-48f8-a5cc-f745e15eee43
2000-06-29 04:21:00 +00:00
beard%netscape.com
41cb724c61 moved all machine generated classes, etc. to icode.h.
git-svn-id: svn://10.0.0.236/trunk@73502 18797224-902f-48f8-a5cc-f745e15eee43
2000-06-29 04:19:19 +00:00
beard%netscape.com
4bd45aa1f8 Generated by tools/gencode.pl.
git-svn-id: svn://10.0.0.236/trunk@73501 18797224-902f-48f8-a5cc-f745e15eee43
2000-06-29 04:18:16 +00:00
beard%netscape.com
ca9ef8f4a5 fixed static calls.
git-svn-id: svn://10.0.0.236/trunk@73499 18797224-902f-48f8-a5cc-f745e15eee43
2000-06-29 03:15:52 +00:00
rogerl%netscape.com
0e43b9fadb Implicit this and class lookup stuff.
git-svn-id: svn://10.0.0.236/trunk@73493 18797224-902f-48f8-a5cc-f745e15eee43
2000-06-29 01:21:41 +00:00
cls%seawood.org
3e05da0165 wrap ifndef XPCONNECT_STANDALONE around xpconnect test components that require external interfaces. Thanks to Mark Adams <madams@janna.com> for the patch. Bug 42026
git-svn-id: svn://10.0.0.236/trunk@73465 18797224-902f-48f8-a5cc-f745e15eee43
2000-06-28 22:53:55 +00:00
beard%netscape.com
487de01748 implemented JSClass::printProperties().
git-svn-id: svn://10.0.0.236/trunk@73431 18797224-902f-48f8-a5cc-f745e15eee43
2000-06-28 19:46:13 +00:00
beard%netscape.com
43420973f7 Enhanced printing of types.
git-svn-id: svn://10.0.0.236/trunk@73430 18797224-902f-48f8-a5cc-f745e15eee43
2000-06-28 19:45:44 +00:00
beard%netscape.com
8d4ccf1e51 Type of a JSType* is Type_Type (wow, recursive). Changed mBaseType to be JSType* instead of const JSType*.
git-svn-id: svn://10.0.0.236/trunk@73429 18797224-902f-48f8-a5cc-f745e15eee43
2000-06-28 19:45:09 +00:00
rogerl%netscape.com
b1eb71fadb First set of unified 'dot' handling changes for statics.
git-svn-id: svn://10.0.0.236/trunk@73418 18797224-902f-48f8-a5cc-f745e15eee43
2000-06-28 18:41:30 +00:00
beard%netscape.com
9b99e9786f added jsclasses.h
git-svn-id: svn://10.0.0.236/trunk@73417 18797224-902f-48f8-a5cc-f745e15eee43
2000-06-28 18:10:04 +00:00
beard%netscape.com
fc7df849f1 Fix string <.
git-svn-id: svn://10.0.0.236/trunk@73414 18797224-902f-48f8-a5cc-f745e15eee43
2000-06-28 16:38:20 +00:00
beard%netscape.com
98b2fcbf59 Fixed dynamic lookup of static slots. Added code to compare strings.
git-svn-id: svn://10.0.0.236/trunk@73413 18797224-902f-48f8-a5cc-f745e15eee43
2000-06-28 16:32:52 +00:00
beard%netscape.com
e4a70d59c1 GET_STATIC/SET_STATIC/STATIC_XCR now use an index rather than a name. Implemented GET_PROP/SET_PROP for class objects (looks up slot dynamically, etc.)
git-svn-id: svn://10.0.0.236/trunk@73412 18797224-902f-48f8-a5cc-f745e15eee43
2000-06-28 16:15:06 +00:00
beard%netscape.com
a031ccd333 GET_STATIC/SET_STATIC/STATIC_XCR now use an index rather than a name. Now using JSClass::hasStatic() rather than looking up statics in class' scope.
git-svn-id: svn://10.0.0.236/trunk@73411 18797224-902f-48f8-a5cc-f745e15eee43
2000-06-28 16:14:18 +00:00
beard%netscape.com
c616ad04eb GET_STATIC/SET_STATIC/STATIC_XCR now use an index rather than a name.
git-svn-id: svn://10.0.0.236/trunk@73410 18797224-902f-48f8-a5cc-f745e15eee43
2000-06-28 16:13:12 +00:00
beard%netscape.com
05cbd424c7 Static slots.
git-svn-id: svn://10.0.0.236/trunk@73409 18797224-902f-48f8-a5cc-f745e15eee43
2000-06-28 16:11:54 +00:00
cls%seawood.org
94c6107c67 Tweaks to build xpconnect standalone. Bug #42024. Thanks to Mark Adams <madams@janna.com> for the patches.
git-svn-id: svn://10.0.0.236/trunk@73397 18797224-902f-48f8-a5cc-f745e15eee43
2000-06-28 07:03:13 +00:00