Граф коммитов

2108 Коммитов

Автор SHA1 Сообщение Дата
jband%netscape.com f7dc9f09e9 release the threadcontextstack to avoid a shutdown leak 2000-04-25 04:59:21 +00:00
jband%netscape.com 42defd8cf1 Cleanup at shutdown the JSContexts that xpconnect manages on a per thread basis. This should fix some shutdown leaks. 2000-04-25 04:57:32 +00:00
beard%netscape.com 27fc318bb1 changed Context constructor to take JSObject* not JSObject&, to be able to control lifetime a little more carefully. 2000-04-25 03:32:53 +00:00
beard%netscape.com 6a4bca91fe warning removal 2000-04-25 03:28:41 +00:00
beard%netscape.com 39551bc785 fixing mac bustage (we do reference argc/argv, to initialize them to something sensible). 2000-04-25 02:58:30 +00:00
beard%netscape.com 9d7aed4cd0 renamed not() -> complement() (not is a keyword in C++), implemented complement(). 2000-04-25 02:55:08 +00:00
brendan%mozilla.org 99896c816a Final destroy-context must await racing GCs before freeing atom state (32525, r=jband). 2000-04-25 01:12:36 +00:00
rogerl%netscape.com 1b75c7efbb Fixes for handling missing params. 2000-04-24 22:40:53 +00:00
rginda%netscape.com 5edf52ba65 adding comments 2000-04-24 21:43:49 +00:00
rginda%netscape.com 5945808db5 NotARegister check in GenericBranch::print() 2000-04-24 20:08:16 +00:00
norris%netscape.com 45ea2bb652 Patch from Matthias Radestock <rade@logee.com>:
Subject:
             JavaAdapter return type conversion
        Date:
             Wed, 19 Apr 2000 12:12:47 +0100
       From:
             Matthias Radestock <rade@logee.com>
 Organization:
             Logee
         To:
             norris@netscape.com
         CC:
             mccabe@netscape.com, beard@netscape.com, rogerl@netscape.com




Dear Rhino team,

When returning an array from a scripted Java object (i.e. a JS object
that implements a Java interface), no type conversion is performed, ie.
a NativeArray is returned instead of a Java array. Example:

Java:
interface Foo {
        public String[] boo();
        }

JS:
FooI = {
        boo: function() { return ["Boo"];}
        }
myFoo = new Packages.Foo(FooI);
myFoo.boo(); //==> breaks with a ClassCastException


Looking at the JavaAdapter code, there is no code for array conversion.
This is particularly bad because precisely such a conversion *does*
happen when calling a Java method from JS. So we end up with a
discrepancy.

See attachment for a patch to fix this and little test program. The
patch works by calling the coerceType function on NativeJavaObject,
which is the function responsible for doing the conversion when calling
from JS to Java. I've simplified the code so that this function gets
called for all non-primitive return type, not just arrays. There are
probably more efficient solutions but I'm not a Java bytecode hacker.


Matthias
PS: I didn't open a bug for this because I wasn't sure whether you guys
would agree that this is indeed a problem ;)





public interface JSReturnTest {

  public boolean returnBoolean();
  public char returnChar();
  public int returnInt();
  public String returnString();
  public org.mozilla.javascript.Scriptable returnScriptable();
  public Object returnObject();
  public boolean[] returnBooleanA();
  public char[] returnCharA();
  public int[] returnIntA();
  public String[] returnStringA();
  public org.mozilla.javascript.Scriptable[] returnScriptableA();
  public Object[] returnObjectA();
  public Object[][] returnObjectAA();
}




Index: JavaAdapter.java
===================================================================
RCS file: /cvsroot/mozilla/js/rhino/org/mozilla/javascript/JavaAdapter.java,v
retrieving revision 1.21
diff -r1.21 JavaAdapter.java
54c54,59
<
---
>
>     public static Object convertResult(Object result, String classname)
>     throws ClassNotFoundException {
>         return NativeJavaObject.coerceType(Class.forName(classname),
>                                            result);
>     }
467,474c472,474
<         } else  if (retType.equals(String.class)) {
<             cfw.add(ByteCode.INVOKESTATIC,
<                     "org/mozilla/javascript/Context",
<                     "toString", "(Ljava/lang/Object;)",
<                     "Ljava/lang/String;");
<             cfw.add(ByteCode.ARETURN);
<         } else if (retType.equals(Scriptable.class)) {
<             cfw.add(ByteCode.ALOAD_0);  // load 'this' to find scope from
---
>         } else {
>             String retTypeStr = retType.getName();
>             cfw.addLoadConstant(retTypeStr);
476,477c476,477
<                     "org/mozilla/javascript/Context",
<                     "toObject",
---
>                     "org/mozilla/javascript/JavaAdapter",
>                     "convertResult",
479,500c479,480
<                      "Lorg/mozilla/javascript/Scriptable;)",
<                     "Lorg/mozilla/javascript/Scriptable;");
<             cfw.add(ByteCode.ARETURN);
<         } else {
<             // If it is a wrapped type, cast to Wrapper and call unwrap()
<             cfw.add(ByteCode.DUP);
<             cfw.add(ByteCode.INSTANCEOF, "org/mozilla/javascript/Wrapper");
<             // skip 3 for IFEQ, 3 for CHECKCAST, and 5 for INVOKEINTERFACE
<             cfw.add(ByteCode.IFEQ, 11);
<             cfw.add(ByteCode.CHECKCAST, "org/mozilla/javascript/Wrapper");
<             cfw.add(ByteCode.INVOKEINTERFACE,
<                     "org/mozilla/javascript/Wrapper",
<                     "unwrap", "()", "Ljava/lang/Object;");
<
<             // If Undefined, return null
<             cfw.add(ByteCode.DUP);
<             cfw.add(ByteCode.INSTANCEOF, "org/mozilla/javascript/Undefined");
<             // skip 3 for IFEQ, 1 for ACONST_NULL, 1 for ARETURN
<             cfw.add(ByteCode.IFEQ, 5);
<             cfw.add(ByteCode.ACONST_NULL);
<             cfw.add(ByteCode.ARETURN);
<
---
>                     "Ljava/lang/String;)",
>                     "Ljava/lang/Object;");
502,503c482
<             String retTypeStr = retType.getName().replace('.', '/');
<             cfw.add(ByteCode.CHECKCAST, retTypeStr);
---
>             cfw.add(ByteCode.CHECKCAST, retTypeStr.replace('.', '/'));



   testpatch.js

               Name:
                     testpatch.js
                Type:
                     JavaScript Program (application/x-javascript)
             Encoding:
                     7bit
2000-04-24 19:36:51 +00:00
rginda%netscape.com 66299105f3 quieting linux warnings 2000-04-24 18:41:05 +00:00
jband%netscape.com 04051a0da0 belt and suspenders check of WITH_SERVICE results 2000-04-23 23:04:40 +00:00
jband%netscape.com c9fbfe6b3f fix a dangerous looking (but harmless) warning on Mac opt 2000-04-22 01:06:42 +00:00
rogerl%netscape.com f516a5722d Added a beginning for exception handling. 2000-04-21 22:52:52 +00:00
mccabe%netscape.com b83e22e2ea Fix to 23532. Check validity of JS_ARENA_ALLOCATE call before using it as an argument of memcpy in JS_ArenaGrow.
Thanks to wyeung@real.com for noticing we were being unsafe here and suggesting the fix.
2000-04-21 09:25:43 +00:00
brendan%mozilla.org c4dc0a590b Spruce up a couple of comments. 2000-04-21 01:49:49 +00:00
brendan%mozilla.org c65d2d6a93 Functions that use unqualified __parent__ or __proto__ must be heavyweight (36625, r=shaver). 2000-04-21 01:47:20 +00:00
rginda%netscape.com d6c8ec2a89 Add nsIScriptError.idl. Build it here rather than back in xpfe/components/console. Checkin by McCabe, on rginda's mac. 2000-04-21 00:57:27 +00:00
rogerl%netscape.com ca67259713 oops 2000-04-21 00:46:48 +00:00
rogerl%netscape.com 5e238bd7a5 Added labelled statements, fixed some VC++'isms 2000-04-21 00:37:51 +00:00
rginda%netscape.com 7615ee9226 icodegenerator.cpp
add m prefix to base and offset label members

interpreter.cpp,h
dual license
wrap interpret in a Context class
add RETURN_VOID case

js2.cpp
update to use context class
remove #if 0 code that'll probably never be used anyway.

jstypes.h
add defineProperty/function to JSObject

vmtypes.h
regerated opcode classes:
  added RETURN_VOID, removed LOAD/SAVE_VAR
  reverted bacl to the smaller print function (thanks to RETURN_VOID)
  fixed branch printing issue
  inherit print() from super if possible

tools/gencode.pl
generate smaller print functions again
don't generate print function if superclass can take care of it.
2000-04-21 00:04:14 +00:00
norris%netscape.com 0bca489fe4 Clean up new methods. 2000-04-20 23:08:07 +00:00
beard%netscape.com d7ad5021eb Simple dependency tracking with make depend target. 2000-04-20 23:02:19 +00:00
rogerl%netscape.com 215b1e19c7 Added ASSERT cases to FixNext child handling. 2000-04-20 23:00:37 +00:00
beard%netscape.com 30971c4c45 Simple dependencies list. Rebuilt with make depend target. 2000-04-20 22:58:23 +00:00
norris%netscape.com 35a0af1014 Fix build error. 2000-04-20 22:36:46 +00:00
norris%netscape.com e8b7e89546 Subject:
contextClassloader problem in ScriptRuntime.java
   Date:
        Tue, 11 Apr 2000 09:45:36 -0400
   From:
        "Howard Lin" <howard@softcom.com>
     To:
        "Norris Boyd" <norris@netscape.com>
    CC:
        "Andrew Wason" <aw@softcom.com>




Hi, Norris, we are trying to create a Java class in JavaScript. When security manager is on, everything works fine. But when security
manager is off, we got an error saying the "... is not defined". The problem is that in ScriptRuntime.java, when security is on,
getContextClassLoader is null due to SecurityException and Class.forName is used to find the class, which works fine. When security
is off, ContextClassLoaderMethod is invoked to find the class. Since we use a separate thread to load third party jar files,
ContextClassLoaderMethod will throw a ClassNotFound exception.

To illustrate this problem, I wrote a simple applet, evaluating a simple js file in its paint method, which is running on a separate thread.
When security is off, I got the following:

ReferenceError: "Global" is not defined.
        at org.mozilla.javascript.NativeGlobal.constructError(NativeGlobal.java:
494)
        at org.mozilla.javascript.ScriptRuntime.name(ScriptRuntime.java, Compile
d Code)
        at org.mozilla.javascript.Interpreter.interpret(Interpreter.java, Compil
ed Code)
        at org.mozilla.javascript.InterpretedScript.call(InterpretedScript.java:
67)
        at org.mozilla.javascript.InterpretedScript.exec(InterpretedScript.java:
54)
        at org.mozilla.javascript.Context.evaluateReader(Context.java:739)
        at test.evaluate(test.java:26)
        at test.paint(test.java:16)
        at sun.awt.windows.WComponentPeer.handleEvent(WComponentPeer.java:117)
        at java.awt.Component.dispatchEventImpl(Component.java:2447)
        at java.awt.Container.dispatchEventImpl(Container.java:1035)
        at java.awt.Component.dispatchEvent(Component.java:2307)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:287)
        at java.awt.EventDispatchThread.pumpOneEvent(EventDispatchThread.java:10
1)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:92)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:83)

When security is on, it runs fine. Or if the code moved to init method, it works fine regardless of security. We are using JDK 1.2.2.

Howard
2000-04-20 19:53:16 +00:00
jband%netscape.com 9b08d1ac85 Had the wrong clazz for the root! So it was better when the caching was broken. Now it works on MI objects with caching fixed. My bad copy/paste error from long ago. 2000-04-20 12:16:45 +00:00
jband%netscape.com 9c1badb1ca backing out little fix from earlier today because it causes crashes in some MI cases. I'll investigate and do the right fix 2000-04-20 11:06:48 +00:00
brendan%mozilla.org 3d6de092fd Check access and redeclaration legality when defining a getter/setter (36117, r=norris) 2000-04-20 07:10:14 +00:00
beard%netscape.com 9acaa398fe removed extraneous semi-colons after namespace declarations. 2000-04-20 06:20:31 +00:00
beard%netscape.com bb0348e64d warnings: commented out unused parameter name. 2000-04-20 06:19:43 +00:00
jband%netscape.com d727af1bbe fix typo bug that was causing wrapper cache misses on wrapper around objects implementing multiple interfaces when the first wrapper is made for an interface that is not leftmost 2000-04-20 03:38:47 +00:00
norris%netscape.com 62efd62f19 Add line number information. 2000-04-19 23:24:04 +00:00
rogerl%netscape.com 5199f6e49c Removing variables. 2000-04-19 22:45:57 +00:00
rogerl%netscape.com 772eb43e2e Added hasOwnProperty, propertyIsEnumerable, isPrototypeOf to Object. 2000-04-19 22:32:50 +00:00
rogerl%netscape.com 7b7fc3829f Began moving away from variables, fixed compare/branch ordering.
Testcases working.
2000-04-19 02:09:06 +00:00
scc%netscape.com 995abb7f46 making string conversions explicit 2000-04-18 23:53:10 +00:00
rginda%netscape.com 3a06b96f97 formatting changes. use only one tab regardless of nested namespaces 2000-04-18 21:51:45 +00:00
norris%netscape.com 5b52db907b Add missing method for 1.4R3 compatibility. 2000-04-18 16:53:28 +00:00
norris%netscape.com 1931f31f5b Fix bug where a bean property can conflict with a method name. 2000-04-18 16:52:00 +00:00
norris%netscape.com f10587a521 Fix bug:
var a = Math.abs;
  a(-245);

  gets the following error :

  org.mozilla.javascript.EvaluatorException: Method "abs" called on
  incompatible object.
2000-04-18 16:34:36 +00:00
rginda%netscape.com 1952e14ff8 removed superfluous ;s after namespace decs. 2000-04-18 07:14:49 +00:00
rginda%netscape.com 531ede4f17 regenerated opcode classes after grncode.pl changes 2000-04-18 07:06:25 +00:00
rginda%netscape.com 33d0848741 modified to print R~ if NotARegister 2000-04-18 07:04:24 +00:00
dp%netscape.com 366ecea0fc Implemented component unregister. 2000-04-18 05:26:40 +00:00
mccabe%netscape.com 4c637c806e added files: mozilla/js/src/xpconnect/src/nsScriptError.cpp 2000-04-18 02:35:06 +00:00
mccabe%netscape.com b93c689e66 Move nsIConsoleService and implementation into xpcom/base, and nsIScriptError and implementation into js/src/xpconnect. (A place for JavaScript-specific XPCOM would be better, but xpconnect will do). 2000-04-18 02:34:54 +00:00
rogerl%netscape.com fce9fa62b1 added '(' for RegisterList output 2000-04-18 01:46:32 +00:00
rginda%netscape.com 8ac24b9045 regenerated opcodenames to include padding, added label printing back into icg::print 2000-04-18 01:31:24 +00:00
rginda%netscape.com b0eca07a47 space out opcodenames array 2000-04-18 01:19:12 +00:00
beard%netscape.com 52d7e01394 std::pair 2000-04-18 00:52:07 +00:00
beard%netscape.com 7add6915a1 moved initConsole() out to :: namespace. 2000-04-18 00:51:53 +00:00
beard%netscape.com c18125076f added vmtypes.h,.cpp 2000-04-18 00:50:58 +00:00
rogerl%netscape.com f163805c99 added vmtypes/jstypes 2000-04-18 00:46:18 +00:00
rogerl%netscape.com 0e17feea55 Fixed WINDOZE build issues 2000-04-18 00:38:26 +00:00
rginda%netscape.com 73017de6a1 initial add of perl script to generate icode classes 2000-04-18 00:22:51 +00:00
rginda%netscape.com 5a6fd84159 removing bogus file 2000-04-18 00:20:10 +00:00
rginda%netscape.com 0fac613959 adding files for namespace change 2000-04-18 00:19:09 +00:00
rginda%netscape.com 66cb26879d added js::VM, ICG, JSTypes, and Interpreter namespaces; messed around with lots of code.
Created class for each ICode, adding a print() method (using formatters)
2000-04-18 00:17:34 +00:00
beard%netscape.com 02798c9177 FASTLOCK changes. 2000-04-17 23:58:28 +00:00
braddr%puremagic.com 97d2f19960 Implicit types are evil. Add PRUint32.
r=mccabe
2000-04-16 00:21:07 +00:00
jband%netscape.com 70c7e60b98 add a test with an 'out' array of strings 2000-04-15 18:44:22 +00:00
mccabe%netscape.com 73dd1ab098 Print error diagnostics to stderr even when non-debug, to support those folks
that want to debug with the -console flag.
2000-04-15 06:59:21 +00:00
brendan%mozilla.org ec5a9e9229 Always call resolve for each object in a prototype chain (35738, r=shaver). 2000-04-15 02:01:02 +00:00
shaver%mozilla.org 024dad8f12 Replace stupid and evil BYTECODE_ITER hack with proper use of back-patch
chained PatchGotos goodness.  (PatchGotos seasoned to taste.)
r=brendan
2000-04-14 23:27:09 +00:00
norris%netscape.com a3caa18f07 Fix
28390, 28866, 34364
r=brendan@mozilla.org
35701
r=jst@netscape.com
2000-04-14 03:14:53 +00:00
rogerl%netscape.com 1e558f10e2 Fxied oboscure bug when user defines function Object(), the next new Object
gets a stack crash looking for the prototype. (bug #32174)
2000-04-13 17:58:18 +00:00
beard%netscape.com e82b4e2532 gc_base now used as common base class of GC allocated objects. 2000-04-13 04:54:41 +00:00
beard%netscape.com 56d97a71e9 added gc_base, which defines a more generic operator new(). 2000-04-13 04:53:56 +00:00
beard%netscape.com d92905d034 builds gc 2000-04-13 00:37:00 +00:00
beard%netscape.com 1468acd8d1 Added gc_allocator.h to project and gc.lib to link against. 2000-04-13 00:28:40 +00:00
beard%netscape.com a1bed20974 linking in gc.lib from ../../gc/boehm 2000-04-13 00:16:58 +00:00
beard%netscape.com 2922707730 enabling GC on all platforms 2000-04-13 00:14:23 +00:00
norris%netscape.com 1316603f7b Fix bug 33841. 2000-04-12 17:30:32 +00:00
norris%netscape.com 5999d2b51d Remove obsolete statement from javadoc. 2000-04-11 18:24:08 +00:00
norris%netscape.com eda51b9f12 Update javadoc 2000-04-11 18:22:36 +00:00
beard%netscape.com 12ccc48ec4 JSActivation, JSFunction 2000-04-11 05:11:58 +00:00
beard%netscape.com 95604b5bff Added JSFunction, defineFunction() 2000-04-11 05:10:40 +00:00
beard%netscape.com c721ec102b defineFunction, added assert 2000-04-11 05:09:38 +00:00
beard%netscape.com b574e77f13 _Charalloc, deallocate(void*) for _WIN32 only 2000-04-11 04:55:27 +00:00
beard%netscape.com 92ec71fb35 defineGlobalProperty 2000-04-11 03:11:47 +00:00
beard%netscape.com af1f41fb7d JSObject, JSArray : public JSMap, gc_object<T>. Frame -> JSFrame. Added JSFrameStack which is an std:stack<JSFrame*, std:vector<JSFrame*> >. 2000-04-11 03:11:00 +00:00
beard%netscape.com 8ef180ab04 use gc_allocator<T> everywhere, addGlobalProperty -> defineGlobalProperty 2000-04-11 03:07:39 +00:00
beard%netscape.com 2930dfd621 removed commented out GET_PROP/SET_PROP. 2000-04-11 02:59:52 +00:00
beard%netscape.com 8bd406efae added gc_object. 2000-04-11 02:59:14 +00:00
beard%netscape.com f7fdcbff8b fixing an assert and warnings 2000-04-11 01:10:26 +00:00
rogerl%netscape.com 2757a2004e CALL opcode & frames etc. (r=beard) 2000-04-11 00:32:17 +00:00
waldemar%netscape.com 84bdf052ab Fixed delete/delete[] mismatch 2000-04-10 22:23:17 +00:00
waldemar%netscape.com d1e89106de Fixed memory leak 2000-04-10 22:20:00 +00:00
beard%netscape.com 1edba28c48 Fixed warnings about member initializers on Linux. Whatever. 2000-04-08 04:49:41 +00:00
beard%netscape.com 14a585783b Reduced size of args arrays to minimum. 2000-04-08 04:41:19 +00:00
beard%netscape.com 138afee3b4 Reordered parameters to getProperty()/setProperty() to be consistent with operand ordering. Added array allocation/indexing to testObjects(). 2000-04-08 04:15:02 +00:00
beard%netscape.com 6337059f6f JSArray::elements(1), operator[](const JSValue&), fixed register-indexing. 2000-04-08 04:12:28 +00:00
beard%netscape.com f589a1ab24 Fixed NEW_ARRAY, GET_ELEMENT, SET_ELEMENT printing., 2000-04-08 04:11:16 +00:00
beard%netscape.com 8c93fb3d06 NEW_ARRAY 2000-04-08 03:37:49 +00:00
beard%netscape.com 0822793571 Reordered GetProp/SetProp operands to base, name. Added NewArray, GetElement, SetElement instructions. 2000-04-08 03:37:18 +00:00
beard%netscape.com afd93b4e07 added JSArray, GET_ELEMENT, SET_ELEMENT, changed some ops to dest/src. 2000-04-08 03:23:44 +00:00
beard%netscape.com 468bc29100 added JSArray, comments. 2000-04-08 02:44:34 +00:00