Commit Graph

2540 Commits

Author SHA1 Message Date
beard%netscape.com
b955eb7e09 scope of loop variables fix 2000-07-21 05:00:10 +00:00
rogerl%netscape.com
84455b51d9 Implementing Object.prototype object and global object for ECMA 3
Adding Math class support.
2000-07-21 01:16:49 +00:00
jband%netscape.com
43adc72647 drastically reduce unnecessary malloc calls from js_Atomize. r=brendan@mozilla.org. a=brendan@mozilla.org 2000-07-21 00:57:19 +00:00
dougt%netscape.com
b5027cd07a more debug information. r=jband. 2000-07-21 00:53:07 +00:00
jband%netscape.com
f392c7097c fix for crash that can happen when wrapped JS objects get accessed after xpconnect shutdown. This was burning outside users of xpconnect. bug 45669. r=mccabe@netscape.com a=brendan@mozilla.org 2000-07-19 06:15:32 +00:00
jband%netscape.com
a09164a7d1 fix bustage from dougt's last change to this file. not part of build. r=dougt@netscape.com 2000-07-19 06:11:12 +00:00
jband%netscape.com
ff320436f0 patches from madams@janna.com to build xpconnect standalone. bug 42026. r=leaf@mozilla.org a=brendan@mozilla.org 2000-07-19 03:36:27 +00:00
rogerl%netscape.com
06f0a5261f Removed all xxxCall, using simple call for everything.
Changed methods to use mMethods vector instead.
Various other fixes etc.
2000-07-18 20:53:03 +00:00
beard%netscape.com
7a1c2d350a Added ClassOutput.java, WrapHandler.java. 2000-07-18 01:29:34 +00:00
beard%netscape.com
a5ef09a1a6 cleaned up by removing widenCString() calls when using world.identifiers 2000-07-17 20:39:19 +00:00
nboyd%atg.com
22adf6c37b Fix javadoc error. 2000-07-17 14:08:28 +00:00
brendan%mozilla.org
5ee77531dd Remove unused vars and WIN16 crap; improve freelist-scavenging code to avoid taking too big an arena off the freelist in the case where nb > arenasize (41381 again, r=jband@netscape.com). 2000-07-15 19:12:49 +00:00
mcafee%netscape.com
c77af9f272 Ignore generated files 2000-07-15 15:56:34 +00:00
rginda%netscape.com
950d90e264 removing bogus assert (per rogerl) 2000-07-15 00:01:25 +00:00
beard%netscape.com
96e8363f86 added operator[](const char*) to StringAtomTable. 2000-07-14 23:10:02 +00:00
rogerl%netscape.com
3def89ee0d Fixed slots for non-function vars, plus bug in slot xcrement. 2000-07-14 22:23:20 +00:00
brendan%mozilla.org
1735e9b50e Fix for..in loop bug that reopened 41126 (r=jband@netscape.com). 2000-07-14 05:37:40 +00:00
brendan%mozilla.org
d5fbbb870c Fix 41381 regression from last fix attempt (r=jband). 2000-07-14 05:35:08 +00:00
jband%netscape.com
cc7bff60f8 Fix dropProperty crash. This is needed because the JSObjects used by xpconnect wrapped natives need to act both as host objects with non-slot properties and as a plain JSObjects using the default JSOps and all that entails. So, we can't be passing the host-style props to dropProperty though we do still need to do so for other props. This has only been working up to now by luck. r=brendan@mozilla.org a=brendan@mozilla.org 2000-07-14 05:34:46 +00:00
rogerl%netscape.com
0d866e25b5 Backed out time() 2000-07-14 01:46:14 +00:00
rogerl%netscape.com
23e9d7c1c8 Type targetted binary operators.
Added 'time()' function as native.
2000-07-14 01:00:53 +00:00
jband%netscape.com
bd65f5dc54 add THREADSAFE nsISupports implementation macros to some of the classes which lacked them. bug 45404. a=brendan@mozilla.org 2000-07-13 23:04:15 +00:00
brendan%mozilla.org
f0b2ab9b86 Why didn't the lack of this break Linux, where I tested? 2000-07-13 05:56:28 +00:00
syd%netscape.com
dacf41392f Add support to JS profiler for collecting min, max, and average execution
times of functions. Doesn't yet handle rentrancy. Create Makefile.in files
so this stuff will build on *nix. r=jband, a=leaf
2000-07-13 05:19:22 +00:00
brendan%mozilla.org
2566f33358 Try again for bug 41381, r=wtc@netscape.com 2000-07-13 05:08:35 +00:00
brendan%mozilla.org
d63dccc79d Uh oh. Back out last change until I'm sure I'm not an idiot. 2000-07-13 04:00:33 +00:00
brendan%mozilla.org
ac90b0c17d Fix ancient bugs: compare-and-swap is not threadsafe given A-B-A address replay via malloc/free; release to mark in pool->first empty arena would not free anything, as troy@tellme.com found (41381, r=wtc@netscape.com). 2000-07-13 03:49:22 +00:00
beard%netscape.com
89608ef140 need <stdio.h> for fopen on the Mac. 2000-07-13 02:23:55 +00:00
beard%netscape.com
60feb5d1fd fixing readEvalFile to save off important Context data members. implemented identical_Default for string 2000-07-13 01:35:57 +00:00
beard%netscape.com
e9a25e0a62 fixing readEvalFile() by creating another Context 2000-07-13 00:44:30 +00:00
rogerl%netscape.com
58dc7e47b7 Switching to generic binary operator in order to distinguish situation
where Operators package had been loaded and be able to generate typed
versions of the binary operators otherwise.
2000-07-13 00:14:54 +00:00
dougt%netscape.com
d84c495203 bug 40750.
Adding followSymlink flag to nsILocalFile.
Adjusting callers.
windows shortcut optimizations.
r=blizzard@mozilla.org.
a=brendan@mozilla.org
2000-07-12 23:31:31 +00:00
jdunn%netscape.com
8e48251700 do not include -lm for HPUX (as well as BeOS)
r= leaf@mozilla.org
2000-07-12 22:41:17 +00:00
brendan%mozilla.org
7a8885ff90 Fix 'out of order' malloc failure-handling bug found by cgn1234@yahoo.com (41022, r=cgn1234). 2000-07-12 01:44:12 +00:00
rogerl%netscape.com
b8bd1adb30 Implemented Import -only it's not in the parser yet.
Added missing defineXXX functions.
2000-07-11 23:49:20 +00:00
rginda%netscape.com
3a02396fda cleaned up linux warnings, minor debugger tweaks 2000-07-11 23:08:03 +00:00
rogerl%netscape.com
774d010635 More on @ operator. Fixed R 4billion print bug. 2000-07-11 20:54:06 +00:00
rogerl%netscape.com
087d2475a7 Some parts of x@<name> working. 2000-07-10 23:18:07 +00:00
jband%netscape.com
6b88acecab 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 2000-07-10 22:39:37 +00:00
rogerl%netscape.com
68724857b9 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.
2000-07-10 20:23:54 +00:00
rogerl%netscape.com
abddb6b6be r=brendan@mozilla.org, Fix for #44013 - enforce security for defineGetter
& defineSetter by calling OBJ_CHECK_ACCESS.
2000-07-10 20:21:38 +00:00
brendan%mozilla.org
7acd9814b4 Fix an out-of-date comment. 2000-07-08 02:35:56 +00:00
brendan%mozilla.org
58ffa1e2e0 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). 2000-07-08 02:06:01 +00:00
rogerl%netscape.com
daba9186aa Support for 'constructor'. 2000-07-08 01:08:29 +00:00
nboyd%atg.com
0a9b985a17 Deprecate FlattenedObject. 2000-07-07 14:41:35 +00:00
waterson%netscape.com
c1a0e63f75 Brendan meant to add jsdhash.h to the Mac build, too. 2000-07-06 20:55:23 +00:00
waterson%netscape.com
1001bcd519 Brendan meant add jsdhash.c to the Mac build, too. 2000-07-06 20:54:17 +00:00
rogerl%netscape.com
1375151969 Removed preprocess step, consolidated identifier handling. 2000-07-06 18:26:26 +00:00
brendan%mozilla.org
b117e30fa4 Fix lying comment, pick control flow nit (r=lumpy,a=jack). 2000-07-06 07:38:11 +00:00
brendan%mozilla.org
6d7ae73603 Add jsdhash.h to export/install lists, and jsdhash.c/.obj. 2000-07-06 04:46:18 +00:00
brendan%mozilla.org
2ecb3888a2 Avoid 80th column violations and unnecessary local variable. 2000-07-06 01:15:08 +00:00
brendan%mozilla.org
e5ca3a7b1a Undo teeny optimization from rev 3.28, alas it breaks ECMA Ed. 3, 15.5.4.15. 2000-07-06 00:30:46 +00:00
nboyd%atg.com
a1f493ab08 Remove obsolete references to NodeFactory. 2000-07-05 17:08:26 +00:00
nboyd%atg.com
fdeea4b93b 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
2000-07-03 18:40:35 +00:00
jband%netscape.com
53edf6e9f7 updating readme. Not part of build 2000-07-02 19:37:57 +00:00
cls%seawood.org
1f3b6d75ab Removed obsolete REQUIRES variable from every Makefile.in/makefile.win 2000-06-30 08:08:04 +00:00
jband%netscape.com
1a7630d560 Fix dogfood/crash bugs: 42750, 39858 and fix 43897 and improve JS/XPConnect error reporting to help with crasher 40792. r=mccabe@netscape.com. 2000-06-30 04:04:46 +00:00
beard%netscape.com
0eeae607ae Fix build bustage. 2000-06-29 18:40:58 +00:00
rogerl%netscape.com
fd98adafce use handleDot for call, too. 2000-06-29 18:30:47 +00:00
beard%netscape.com
8f5fea173e delete property support. 2000-06-29 18:14:14 +00:00
beard%netscape.com
a4c5f704f4 DELETE_PROP 2000-06-29 18:13:46 +00:00
beard%netscape.com
7a6367c583 DELETE_PROP 2000-06-29 17:14:56 +00:00
beard%netscape.com
11134b4173 added DELETE_PROP instruction to implement the "delete" operation. 2000-06-29 17:11:50 +00:00
beard%netscape.com
97dfdc5f04 unused parameter warning 2000-06-29 05:48:09 +00:00
beard%netscape.com
8f4cadb250 complementary operator delete(void*, JSClass*). 2000-06-29 05:46:36 +00:00
beard%netscape.com
8891b0c7ba some classes to test js2 with. 2000-06-29 04:49:48 +00:00
beard%netscape.com
8da0055bc5 updated dependencies 2000-06-29 04:25:10 +00:00
beard%netscape.com
074f981eb4 Changed StaticCall to use static slot. 2000-06-29 04:23:56 +00:00
beard%netscape.com
b202adfd39 Fixing static dotted expressions. 2000-06-29 04:23:20 +00:00
beard%netscape.com
7a512866fd now uses conditional compilation #if defined(OPCODE_NAMES), so that a simple "icode.h" can be included by vmtypes.h and vmtypes.cpp. 2000-06-29 04:21:00 +00:00
beard%netscape.com
486b437613 moved all machine generated classes, etc. to icode.h. 2000-06-29 04:19:19 +00:00
beard%netscape.com
2a451cdd8b Generated by tools/gencode.pl. 2000-06-29 04:18:16 +00:00
beard%netscape.com
640ba6e24c fixed static calls. 2000-06-29 03:15:52 +00:00
rogerl%netscape.com
63744d7c1c Implicit this and class lookup stuff. 2000-06-29 01:21:41 +00:00
cls%seawood.org
e5efcb7528 wrap ifndef XPCONNECT_STANDALONE around xpconnect test components that require external interfaces. Thanks to Mark Adams <madams@janna.com> for the patch. Bug 42026 2000-06-28 22:53:55 +00:00
beard%netscape.com
237dd352ed implemented JSClass::printProperties(). 2000-06-28 19:46:13 +00:00
beard%netscape.com
9930edd0d5 Enhanced printing of types. 2000-06-28 19:45:44 +00:00
beard%netscape.com
c0e9f6d274 Type of a JSType* is Type_Type (wow, recursive). Changed mBaseType to be JSType* instead of const JSType*. 2000-06-28 19:45:09 +00:00
rogerl%netscape.com
52bffdadcf First set of unified 'dot' handling changes for statics. 2000-06-28 18:41:30 +00:00
beard%netscape.com
d40b8dd8cb added jsclasses.h 2000-06-28 18:10:04 +00:00
beard%netscape.com
941b505765 Fix string <. 2000-06-28 16:38:20 +00:00
beard%netscape.com
d9bf640477 Fixed dynamic lookup of static slots. Added code to compare strings. 2000-06-28 16:32:52 +00:00
beard%netscape.com
b1350d87b6 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.) 2000-06-28 16:15:06 +00:00
beard%netscape.com
866b5d3d8d 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. 2000-06-28 16:14:18 +00:00
beard%netscape.com
8132734212 GET_STATIC/SET_STATIC/STATIC_XCR now use an index rather than a name. 2000-06-28 16:13:12 +00:00
beard%netscape.com
970477555f Static slots. 2000-06-28 16:11:54 +00:00
cls%seawood.org
a9f6433fbe Tweaks to build xpconnect standalone. Bug #42024. Thanks to Mark Adams <madams@janna.com> for the patches. 2000-06-28 07:03:13 +00:00
beard%netscape.com
2b1351cc3b Win-specific operator== noise. 2000-06-27 03:52:56 +00:00
beard%netscape.com
4873ce7882 Fixed unitialized static class members. 2000-06-27 03:43:40 +00:00
beard%netscape.com
7b2b4a1e2f addSlot -> defineSlot, added defineStatic. 2000-06-27 03:42:42 +00:00
brendan%mozilla.org
9f75641ee2 Not again\! 2000-06-27 03:29:49 +00:00
beard%netscape.com
74e8d0a780 Fixed type management. 2000-06-27 03:21:33 +00:00
brendan%mozilla.org
af94bec8f7 Fix my stupid missing comma bustage. 2000-06-27 03:17:47 +00:00
rogerl%netscape.com
fbdb3fe1c1 lots of stuff me and Patrick did 2000-06-27 02:39:32 +00:00
brendan%mozilla.org
6afe0ed1a7 Fix JS_SetPrototype and __proto__ setting to deal with shared scopes; use JSObjectOps for setProto and setParent operations, and add spare op slots (41126, r=shaver@mozilla.org,pschwartau@netscape.com). 2000-06-27 02:37:25 +00:00
beard%netscape.com
965f10e915 JSValue::operator==: added CASE(type) to fix warning. 2000-06-26 17:47:07 +00:00
beard%netscape.com
f276cc3dfd added JSObject::deleteProperty(), and changed mName in JSType to be a JSString. Need to revisit other uses of String soon. 2000-06-26 17:42:20 +00:00
beard%netscape.com
07dff8c5d1 simplified string addition 2000-06-26 17:25:25 +00:00
beard%netscape.com
fef138fae2 defined JSStringBase, and constructors from in JSString 2000-06-26 17:24:57 +00:00
beard%netscape.com
769d11bcbf String addition: don't share structure with LHS. 2000-06-26 17:09:27 +00:00