Commit Graph

1804 Commits

Author SHA1 Message Date
igor%mir2.org
a6a8297e30 Reorganization in jumping code to make the following patch to drop 32K
jump length restriction smaller
2004-05-17 19:19:18 +00:00
igor%mir2.org
7e1c77a956 Remove 256 limit on number of variable using index prefix for all variable
operations. To offset small performance loss for variable access new
index prefixes operation REG_IND_C[0123] are added to load 0,1,2,3 as index
value with one bytecode.
2004-05-17 17:57:43 +00:00
igor%mir2.org
bf289c6354 For GETPROP/SETPROP use explicit name prefix to load property name instead
of pusshing property to stack
2004-05-17 17:29:12 +00:00
igor%mir2.org
5b81311a84 Remove 256 limit on number of local slots using REG_IND* prefixes to load the
slot index
2004-05-17 16:27:39 +00:00
igor%mir2.org
c226bf5cde Splitting name_and_this bytecode into name_fast_this and name_slow_this to
avoid flag reading during simple function calls
2004-05-17 15:58:48 +00:00
igor%mir2.org
0681989924 Use the same of specal index prefix byte code for [] and {} literals 2004-05-17 14:55:45 +00:00
igor%mir2.org
e88881f3a6 Elimination of 64K restriction limit for various index-based opcodes. Now
they are prefixed with special Icode_REG_IND* that load the index of proper
size.
2004-05-17 14:34:29 +00:00
igor%mir2.org
696129bcb0 Removal of 64K limit of total number of strings per script/function: now
string operands are preloaded with special LOAD_STR opcodes that handles full
int indexes
2004-05-17 13:07:49 +00:00
igor%mir2.org
9a6e1fe15d In the interpreter loop avoid code duplication for calling instruction
observer after each jump: now all tsuch code blocks are merged into generic
code that follows the interpreter switch
2004-05-17 11:44:42 +00:00
igor%mir2.org
34e9dc56b7 Another small modifications to Interpreter to make the following patches
smaller: replacing all brek in the main switch of the interpreter with
"continue Loop"
2004-05-16 21:01:00 +00:00
igor%mir2.org
774204ecef In the interpreter loop increment pc immediately after icode read to avoid
ever adding +1 in post byte codes with arguments
2004-05-16 14:02:26 +00:00
igor%mir2.org
daaa920276 Inside the interpreter loop merger many almost identical icode
implementations into common block that use additional ifs to distinguish
between icode. It allows to shrink the ever growing Interpreter.interpret()
2004-05-16 13:30:53 +00:00
igor%mir2.org
aae93331f3 New implementation of ARRAYLIT and OBJECTLIT that does not requires stack
space to hold all literals values before they are copied to a temporary array
to pass to ScriptRuntime functions. The new code populates array during values
calculations.
2004-05-15 17:28:22 +00:00
igor%mir2.org
b4d0f698c9 Quote property names in object literals produced by toSource() if they
coincide with reserved keywords.
2004-05-15 17:23:06 +00:00
igor%mir2.org
37be8f9cfb Use special parse nodes for array and object literals to generate more compact
bytecode both for interpreter and compiler to have faster [] and {} literals.
It also fixes the bug of accessing local variables Array/Object for the
literals instead of top-scope objects.
2004-05-14 22:47:44 +00:00
igor%mir2.org
2494dc182a Use code similar to optimizer when generating call sequences to avoid tree mutations during code generation 2004-05-12 22:39:40 +00:00
igor%mir2.org
dbaff764ea 1. Fixing bug of forgotten updates to itsWithNesting
2. Optimization for calls like name() which similar to the optimizer code
2004-05-12 20:03:23 +00:00
igor%mir2.org
49aabab156 New function ScriptRuntime.notFoundError to throw error on missed properties
instead of scattered duplicated code
2004-05-12 19:59:57 +00:00
igor%mir2.org
8423b14b48 Removal of Token.GETBASE, Token.GETTHIS, Token.PARENT, Token.NEWTEMP, Token.USETEMP, Node.TEMP_PROP, Node.FIXUPS_PROP, Node.USES_PROP constants which are no longer used after the last changes 2004-05-12 15:00:41 +00:00
igor%mir2.org
92f45d1054 Instead of transforming parser tree to apply special treatment for call nodes, do that only during code generation . 2004-05-12 13:02:40 +00:00
igor%mir2.org
992ee898f2 Refactoring Codegen.visitCall: preprae for the following switch to generate call without transformer modifications 2004-05-12 10:34:46 +00:00
igor%mir2.org
aaf9cdfddc Improve error messages for the optimizer when accessing undefined values 2004-05-11 10:06:51 +00:00
igor%mir2.org
b9f058dfe3 Cleanup of hasVarsInRegs 2004-05-10 16:45:02 +00:00
igor%mir2.org
5d1aacca6a Apply direct call optimization only for functions that do not need activation. 2004-05-10 15:28:32 +00:00
igor%mir2.org
d2ab61c277 Determine functions that require activation during parsing and not in NodeTransformer 2004-05-10 13:39:14 +00:00
igor%mir2.org
27e2f6d328 Removal of checks for unitialized lVal.getJRegister(): the registers are always initialized in prelude. 2004-05-10 05:24:29 +00:00
igor%mir2.org
44deec93c2 Removal of JavaVariable interface in favor of simple method in ClassFileWriter. It allowed to shrink OptLocalVariable and made other code simpler. 2004-05-09 22:09:03 +00:00
igor%mir2.org
ed03829d75 Clenup the usage of getJRegister/assignJRegister 2004-05-09 21:07:08 +00:00
igor%mir2.org
5a48e9dc3a Move all logic regarding establishing type of variable into Block.java 2004-05-09 21:06:20 +00:00
igor%mir2.org
b7fec72bfc Removal of no longer used LASTUSE property and corresponding optimizer code 2004-05-09 12:38:45 +00:00
igor%mir2.org
0be4188b87 Remove code for CSE optimisation: it was used only to merger this.property calls but this optimisation changes program semantic if property is controlled by native getter. 2004-05-09 10:14:01 +00:00
igor%mir2.org
316271b0a9 OptLocalVariable cleanup: under optimization GETVAR/SETVAR nodes always has a reference to them 2004-05-08 22:24:02 +00:00
igor%mir2.org
07a54c7b74 Remove markLiveAcrossCall functionality that was never used for any optimizations 2004-05-08 21:05:00 +00:00
igor%mir2.org
1059cf02ce Merge addToken/addString into single addString 2004-05-08 19:21:37 +00:00
igor%mir2.org
749dfe5b5d Optimization of ++/-- and merge separated postIncrement/postDecrement to single postIncrDecr to remove too much code duplication 2004-05-07 15:05:11 +00:00
igor%mir2.org
fd2bfff2a7 FatBlock is moved to Block as a private class 2004-05-07 15:03:39 +00:00
igor%mir2.org
09b1d12d63 Added addPush(boolean) 2004-05-07 15:00:17 +00:00
igor%mir2.org
a06c84f791 Extend optimization ==, !=, ===, !== against null to check null presence on any side of the test. 2004-04-21 12:00:27 +00:00
igor%mir2.org
5a691b58fa Fix max stack calculations in dcpLoadAsObject/dcpLoadAsNunber and optimize visitIfJumpRelOp to take advantage of the fact that left and right numerical operands force numeric context. 2004-04-20 13:00:08 +00:00
igor%mir2.org
c39f4108d7 Reuse code to generate optimized if jumps for boolean operations that return Boolean instance 2004-04-18 20:29:41 +00:00
igor%mir2.org
8231a39a23 Cleanups:
1. Added addObjectToDouble() to replace explicit code generation for object to double convertion.
2. nodeIsDirectCallParameter returns dcp register to avoid double look up of OptVariable
2004-04-18 16:29:12 +00:00
igor%mir2.org
2957c844ca Layout cosmetics 2004-04-18 16:26:32 +00:00
igor%mir2.org
97dc2f98e4 Trust JVM to implement "<=" and "<" according to JVM specs and replace code like
d1 == d1 && d2 == d2 && d1 < d2
with simple
    d1 < d2

That in turn allows to simplify code generation and remove OptRuntime.cmp_ functions.
2004-04-18 14:53:34 +00:00
igor%mir2.org
b9219ca745 Trust JVM to implement "<=" and "<" according to JVM specs and replace code like
d1 == d1 && d2 == d2 && d1 < d2
with simple
    d1 < d2
2004-04-18 14:52:22 +00:00
igor%mir2.org
d6576c5892 Remove commented out code to treat integer specially: it is not applicable any longer in any case. 2004-04-18 14:49:50 +00:00
igor%mir2.org
d62ad77af5 Work on bug 238649: no more support for ClassNameHelper and friends 2004-04-18 12:15:07 +00:00
igor%mir2.org
b71427a6ae Worj on bug 238649: removal of NotAFunctionException 2004-04-18 09:30:30 +00:00
igor%mir2.org
534c7d51d6 1. Change cmp_* functions to return boolean, not int, to simplify code.
2. Move optimizer-only functions from ScriptRuntime.java to optimizer/OptRuntime.java
3. Add ScriptRuntime.wrapBoolean to wrap boolean value and use it in the optimizer
2004-04-16 07:38:20 +00:00
igor%mir2.org
81470d5283 1. Throw IllegalArgumentException instead of EvaluatorException when argument does not belong to JS runtime types.
2. Optimize eq and shallowEq in ScriptRuntime to share code with optimized versions in Interpreter.
2004-04-14 14:50:24 +00:00
igor%mir2.org
cb3ccb29b3 Layout cosmetics 2004-04-14 14:46:58 +00:00
igor%mir2.org
153f7be2a2 Support for Date.now() 2004-04-14 11:04:55 +00:00
igor%mir2.org
c685edc692 Fixing bug 58118 : long overdue commit of patch from Mike McCabe, mike+mozilla@meer.net 2004-03-30 12:48:29 +00:00
igor%mir2.org
701ea21521 Since new x in Java never returns null, the check for null in date_format was redundant. 2004-03-30 10:35:42 +00:00
igor%mir2.org
eef0796b8a Faster implementation of MonthFromTime and DateFromTime:
1. Use day / 30 as month estimate with the following adjustment via switch()
2. Reuse year from day calculations in IsLeapYear
2004-03-29 15:19:04 +00:00
igor%mir2.org
021b376688 Fixing bug 239068: proper initialization of parent scope for functions of constructors. 2004-03-29 15:15:34 +00:00
igor%mir2.org
3a93fa2e8e DaysInYear is replaced by IsLeapYear since the former was used only to determine if a particular was leap or not 2004-03-29 14:16:23 +00:00
igor%mir2.org
ba8f69355a Cosmetics: layout fixes 2004-03-29 12:30:24 +00:00
igor%mir2.org
dfdd5ab46c Starting 1.5R5.1 development 2004-03-29 12:29:11 +00:00
igor%mir2.org
40db418d07 Fixing 238823 : throw explicit IllegalArgumentException when JS source for Context.compileFunction does not contain single JS function statement instead of producing silent empty functions or throwing obscure NullPointerExceptions 2004-03-27 09:35:22 +00:00
igor%mir2.org
e229fd6ab4 Better formating 2004-03-26 13:01:17 +00:00
igor%mir2.org
78ec796300 Fixing bug 238699 : refactoring to expose simpler code generation API caused to select wrong code path when compiling functions 2004-03-26 12:42:00 +00:00
igor%mir2.org
0292a753a1 Explicit date in Context.getImplementationVersion() for 1.5R5 release 2004-03-25 20:37:32 +00:00
igor%mir2.org
1aafe09612 Reflecting 1.5R5 release 2004-03-25 19:45:56 +00:00
igor%mir2.org
cbce2b4745 Starting 1.5R6 2004-03-25 17:58:03 +00:00
igor%mir2.org
420074b3a1 Removal of macbuild support: its Mac OS X time after all 2004-03-25 17:39:21 +00:00
igor%mir2.org
afe5a6cd9d Info about commercial support 2004-03-25 15:46:40 +00:00
igor%mir2.org
abf0a3a1ac *** empty log message *** 2004-03-25 11:04:04 +00:00
igor%mir2.org
37c396db64 Preparations for 1.5R5 2004-03-24 15:52:55 +00:00
igor%mir2.org
533e9f8489 Updates to reflect new extension to allow to pass function to Java method expecting interface: now interface with multiple methods are allowed as long as all methods has the same signature 2004-03-24 15:44:19 +00:00
igor%mir2.org
ae3df9d02a Finalizing 223435 : function can be converted to Java interface with more then one method as long as all methods has the same signature. 2004-03-24 14:15:37 +00:00
igor%mir2.org
76316f18dd More work on bug 223435 : pass method name for the interface as the last parameter to JS function so it can use for debug purposes 2004-03-23 16:24:32 +00:00
igor%mir2.org
f4ff06f911 Making BaseFunction.decompile package private: any new public function will always find its users even if the usage is broken. It was public to allow calls from debugger but simple call to Context.toString() would do the same job. 2004-03-18 13:37:29 +00:00
igor%mir2.org
0cbfdabe29 RUnit Software now includes a link on their page about JS (Declaimer: I work there!) 2004-03-18 13:32:52 +00:00
igor%mir2.org
f040fa2436 Added RUnit Software 2004-03-17 18:36:57 +00:00
igor%mir2.org
46abef99b9 Fixing bug 237771 : allow to transfer toSource implementation to different objects 2004-03-17 18:36:39 +00:00
igor%mir2.org
6b70acca26 Documenting new Context seal API and fixing obvious English mistakes. 2004-03-09 23:34:30 +00:00
igor%mir2.org
ecfd54c02f Updated file with license info from Eugene Aresteanu :
> Hi,
>
> Does it look right now?
>
> Regards,
> Eugene
>
> -----Original Message-----
> From: Igor Bukanov [mailto:igor@fastmail.fm]
> Sent: Friday, March 05, 2004 10:07 AM
> To: eugene aresteanu
> Subject: Re: Rhino and license for Messages_fr.properties
>
>
> eugene aresteanu wrote:
>
>>Hello,
>>
>>Here it is.  I hope it is right.
>>Why do you say the default Messages.properties lacks notices?
>>I used the header of Messages.properties as a template.
>
>
> Sorry for not been clear, but what I wanted to say is that did not have
> triple MPL/GPL/LGPL but rather the old NPL/GPL pair. Could you update
> the file one more time using
> http://www.mozilla.org/MPL/boilerplate-1.1/mpl-tri-license-sh as template?
>
> Regards, Igor
2004-03-05 19:17:43 +00:00
igor%mir2.org
5586a28481 Resolving bug 236117 : new API to seal Context 2004-03-03 19:59:25 +00:00
igor%mir2.org
58db1d9fd5 Resolving bug 236193: require enetered Context for compilation 2004-03-03 11:20:33 +00:00
igor%mir2.org
e0a2c2536d Making javaToJS static to match the rest of API 2004-03-01 19:19:47 +00:00
igor%mir2.org
40f5e70cee Fixing JavaDoc 2004-02-24 07:20:49 +00:00
igor%mir2.org
a3d001e0e8 Making NativeScript package private: if this will be controversial, then the public status can be restored 2004-02-24 07:19:56 +00:00
nboyd%atg.com
98a70b8580 Remove "pre" from a candidate build. 2004-02-18 17:28:40 +00:00
igor%mir2.org
4b836891b2 Preparations for 1.5R5 2004-02-18 12:24:27 +00:00
igor%mir2.org
8f085f363e Preparations for 15R5 release. 2004-02-13 18:50:51 +00:00
igor%mir2.org
adeccbc67c Fixing NativeGlobal.encode: it was broken for chars beyond 0xFFFF as it sb.setLength(k) was called after k was increased to consume the second char from UTF-16 encoding to build UCS-4. 2004-02-12 19:05:47 +00:00
igor%mir2.org
1e3f7aaaed Preparations for 1.5R5 2004-02-12 18:13:00 +00:00
igor%mir2.org
ec7de43908 Fixing bug 233274: for/in loop goes through array elements in wrong order
Fix: populate ids array in NativeArray with dense indexes first

Since array literals in Rhino creates instances of NativeArray with the
internal dense array containing literal elements, the patch changes
NativeArray.getIds to return ids array with dense indexes coming first and
indexes for elements added later after that.
2004-02-06 20:16:36 +00:00
igor%mir2.org
3ba7b938c3 Adding backward compatibility to SecurityController so it can be used with Rhino 1.5R4.1 subclasses 2004-02-05 15:10:52 +00:00
igor%mir2.org
d3b31dac4f Fixing bug 210605 again: for now re-throw Error instances as is without wrapping them into WrappedException so scripts would not be able to catch them. 2004-01-29 17:04:31 +00:00
igor%mir2.org
a7573a8a91 Removal support for deprecated getTargetClassFileName/setTargetClassFileName: they throw exception instead of calling a special proxy to avoid having probably unused any more class. If this is not true, then the methods should be restored. 2004-01-18 21:26:34 +00:00
igor%mir2.org
7d76224ac8 Fixing JavaDoc comments 2004-01-18 21:23:53 +00:00
igor%mir2.org
b224c3704c EvaluatorException and WrappedException are public API now 2004-01-18 21:21:41 +00:00
igor%mir2.org
176a213396 Deprecating ClassNameHelper and ClassRepository in favor of new optimizer/ClassCompiler. 2004-01-17 21:52:30 +00:00
igor%mir2.org
b629e258d7 optimizer.ClassCompiler provides new simple API for generating of class files from scripts that does not require to create Context instances.
The jsc tool is updated to use the new interface instead of using ClassNamehelper and friends.
2004-01-17 21:02:32 +00:00
igor%mir2.org
134428fef2 1. optimizer/Codegen now just generates byte code classes, the instantiation of classes is done in a separated class optimizer/ClassCompiler. This is done to provide in future a simple interface to generate class files instead of complicated ClassNameHelper and friends implementation.
2. Parser now stores TokenStream instance in its field instead of having it present in each and every method signature. It allowed to simplify interaction between Parser and IRFactory where the later now uses Parser.reportError so parser van recover from syntax errors and provide better error reporting.
2004-01-16 18:20:22 +00:00
igor%mir2.org
0fc143dd7c Added setters for properties of CompilerEnvirons.java so it can be initialized
without having Context object.
2004-01-16 16:09:07 +00:00
igor%mir2.org
34ebe5f4c1 Renaming Context.hrowAsUncheckedException to Context.throwAsScriptRuntimeEx to better reflect its purpose, providing better documentation and making sure it throws only instances of EcmaError and EvaluatorException. 2004-01-16 15:14:25 +00:00
igor%mir2.org
497a0f766c Fixing bug 228336 :
This is a Rhino version of Brandan's patch from attachment 138844, bug 228087
plus code to fix overflow problem reported in bug 230216.
2004-01-16 15:11:31 +00:00
igor%mir2.org
a7050e5460 throwAsUncheckedException is moved from ScriptRuntime to Context as a useful API to use in external applications. 2004-01-15 20:41:57 +00:00
igor%mir2.org
f26418ea3f Fixing typo in comments 2004-01-15 20:40:56 +00:00
igor%mir2.org
96ea5ea515 Patch from Alex Bitney to fix bug 230883 2004-01-15 20:10:54 +00:00
igor%mir2.org
59ae0034a1 Fixing bug 229571 : code refactoring for speed optimization 2004-01-06 13:35:51 +00:00
igor%mir2.org
332cc13ae5 Move details of parsing/code generation from Context to interpreter/optimizer to allow more pluggable compilation interface. 2004-01-05 13:22:40 +00:00
igor%mir2.org
75d4dec8ea Cosmetics: removal of tabs left by the previous commit 2003-12-27 21:36:00 +00:00
igor%mir2.org
3cab5b3e26 Decompling parsing from code generation: compiler instances are created only when parsing tree is build. 2003-12-27 21:32:35 +00:00
igor%mir2.org
44e703307d Initial patch to separate parsing from code generation: changing IRFactory so it can be created in Context. 2003-12-27 09:53:57 +00:00
igor%mir2.org
d4590c48fa Renaming Kit.badArg() -> Kit.argBug() for consistency with Kit.codeBug() 2003-12-27 09:38:57 +00:00
igor%mir2.org
65aea23579 Moving parsing code from FunctionNode.finishParsing to IRFactory to have better overview of parsing code. The optimizer now calls explicitly OptFunctionNode initialization instead of overriding FunctionNode.finishParsing in OptFunctionNode. 2003-12-26 17:17:21 +00:00
igor%mir2.org
10e91b97ff Functions to report synatx errors are moved from TokenStream to Interpreter to remove dependancy on TokenStream in NodeTransformer. 2003-12-26 14:01:21 +00:00
igor%mir2.org
32ebb1d38d Dropping scope argument from Context.compileString/compileReader since it is no longer used as Script instances are scope independent.
For compatibility the old form of Context.compileReader is preserved but marked as deprecated.
2003-12-25 22:37:57 +00:00
nboyd%atg.com
8390b6a651 Contribution from earestea@scanpak.com. 2003-12-18 20:55:30 +00:00
nboyd%atg.com
3384c4c1f5 Add Aviva info. 2003-12-18 16:53:32 +00:00
igor%mir2.org
d7a98d84dc Message about overcapacity 2003-12-09 19:23:25 +00:00
igor%mir2.org
aeafac2fcf Cosmetics: removal of tabs 2003-12-09 19:22:58 +00:00
igor%mir2.org
6625e3229d To avoid bad performance when joining array with few small strings, js_join precalculate the resulting string size. 2003-12-09 19:22:11 +00:00
igor%mir2.org
f53203c746 Replacing custom buffer management in replace code with the standard StringBuffer 2003-12-08 17:10:23 +00:00
igor%mir2.org
528efdfe62 Inlining LabelTable into Interpreter and ClassFileWriter: to support jumps spanning over 64K in Interpreter in future LabelTable should be modified significantly and complexity of shared code would not justify it. In addition such inlining actually decrese total code size. 2003-12-08 14:16:53 +00:00
igor%mir2.org
44fae2ad68 Merger ReplaceData and MatchData helper classes into GlobData to reduce code size and rename helper methods to follow SpiderMonkey closely. 2003-12-08 13:24:49 +00:00
igor%mir2.org
aed233007b Fixing missed cleanup of old values stored in RegExpImpl.parens: now it has type SubString[] and reinitialized after running regexps and see bug 220367. 2003-12-07 21:56:29 +00:00
igor%mir2.org
dcd6522b88 Patch to fix bug 223451 :
Check for unbalanced ) and fix for ArrayIndexOutOfBoundsException

Check for unbalanced ')' is done differently then in SM since rhino uses
recursive version of SM code while fix for ArrayIndexOutOfBoundsException is
just a variation of my patch for bug 227705 in SM.
2003-12-07 16:00:38 +00:00
igor%mir2.org
21f15557ab Fixing bug 225926 : patch from Roger Lawrence 2003-12-07 15:35:40 +00:00
igor%mir2.org
c97a96edca Fixing bug 225366 : port of SM patch 2003-12-05 23:22:10 +00:00
igor%mir2.org
449bf5eadc In Object.toSource implementation if property is not valid Java identifier, print it as 'escaped_property' so the property will read as proper Java string. 2003-12-04 15:47:03 +00:00
igor%mir2.org
b1ba2b408e Fixing bug 225831 : use before_225831_merge to get code before the far reaching fix 2003-12-04 14:41:22 +00:00
igor%mir2.org
2997e9f7ee Fixing http://bugzilla.mozilla.org/show_bug.cgi?id=226045:
(new RegExp).toString/toSource() now gives /(?:)/ instead of  // which is comments and does not work with uneval.
2003-11-24 15:51:44 +00:00
igor%mir2.org
46e97e6ab7 Fixing debug printout of icode: CALLSPECIAL prinout was not updated to reflect proper value of only 6 additional bytes for bytecode. 2003-11-17 18:31:55 +00:00
igor%mir2.org
a9bb9a44ac To mark special properties __proto__ and __parent__ in parse tree use integer ids instead of strings so it is easier to check tree consitency. 2003-11-17 17:39:43 +00:00
igor%mir2.org
cbacb923d3 Finalizing toSource() support: do not put () arround {} for source representation of objects that are part of recursive toSource call.
For details, see http://bugzilla.mozilla.org/show_bug.cgi?id=225465
2003-11-17 17:37:21 +00:00
igor%mir2.org
02c0cb7a89 Changing wrapping of caught Java exceptions: now they are constructed with JavaException constructor, have fileName, lineNumber defined to point to script line that executed Java code triggering exception and have javaException property pointing to the wrapped exception object.
For details, see http://bugzilla.mozilla.org/show_bug.cgi?id=225817
2003-11-17 11:04:29 +00:00
igor%mir2.org
834efdbe71 Fixing http://bugzilla.mozilla.org/show_bug.cgi?id=225817 :
Proper support for fileName and lineNumber in Error objects.
2003-11-17 09:45:01 +00:00
igor%mir2.org
7c4e5d8424 Allow for scripts to catch instances of EvaluatorException 2003-11-14 20:38:06 +00:00
igor%mir2.org
8e546b9047 Transform StackOverflow during parsing into runtime exception so script can detect too deep recursion during parsing. 2003-11-14 20:33:43 +00:00
igor%mir2.org
7c0cff6574 Splitting Token.ASSIGN into Token.ASSIGN and Token.ASSIGNOP where the former represents only = while ASSIGNOP is used to denote +=, -= etc. Parse tree for the 2 operations is rather different and split allowed to simplify IRFactory code. 2003-11-14 16:03:31 +00:00
igor%mir2.org
2e75448c13 Implementing uneval/toSource functionality of SpiderMonkey. Foe details, see http://bugzilla.mozilla.org/show_bug.cgi?id=225465. 2003-11-13 17:15:31 +00:00
igor%mir2.org
7d1e5eda47 Passing to decompiler information about function type so it can use it to customize its output in future. 2003-11-12 15:47:50 +00:00
igor%mir2.org
f2ba87fed2 Changing Decompiler.decompile to take just encoded source, flag argument controlling output format and property table so it would be possible to add more options to decompiler without changing the rest of code. 2003-11-12 12:22:12 +00:00
igor%mir2.org
e734cecce2 Changing return type of NativeFunction.getEncodedSource() to String from Object since the idea of having anything else but String would require changes in API in any case. 2003-11-12 10:23:53 +00:00
igor%mir2.org
b7d4dfaa28 In ClassFileWriter.addPush(double) use DNEG to generate more compact code for -0.0 and -1.0 2003-11-11 20:31:36 +00:00
igor%mir2.org
f260baaf11 Changing just introduced CodeBlock into Callable that define call method with exactly the same signature as Function.call and changing Function to extend Callable.
Now Context defines new method "call" that provide optimized version of the following code:

Context cx = Context.enter()
try {
    callable.call(cx, scope, thisObj, args);
} finally {
    Context.exit();
}

Since Function extends Callable, it can be passed to this method directly thus simplifying ScriptableObject.call method and Java adapter code.

The new interface is used in SecurityController implementation which allows to pass interpreted functions there directly as well removing the need to have intermediate class in Interpreter.
2003-11-11 20:30:08 +00:00
igor%mir2.org
dd1efd374f Extend constant folding to cover few unary operations 2003-11-11 20:18:34 +00:00
igor%mir2.org
12c1d23434 1. Make sure that -0.0 from parser are treated properly: new constant folding code there may produce it.
2. Instead of generating code to call Double constructor use the new method OptRuntime.wrapDouble() that allows to cut amount of produced byte code.
2003-11-11 20:04:38 +00:00
igor%mir2.org
8313023fae Patch from Dave Russo to wrap arguments array properly: the code has to allocate new Object[] array since Context.newObject needs instances of Object[], not SomeObjectSubclass[], to work properly. 2003-11-10 02:18:11 +00:00
igor%mir2.org
44c6535ad4 Check in Context.newArray(Scriptable scope, Object[] elements) that elements is instance of Object[] and not SomeObjectSubclass[] to expose broken usage of newArray as soon as possible. 2003-11-10 02:14:37 +00:00
igor%mir2.org
dc34ed3dc1 Changes in Security API: using CodeBlock interface instead of reusing Script to represent code that should be executed with different domain. 2003-11-07 22:29:59 +00:00
igor%mir2.org
49ffeac3df New interface to refer to code executed with a particular context and arguments. 2003-11-07 22:28:22 +00:00
igor%mir2.org
6006898229 1. Removal of very recently introduced hideFromContextListeners: it was a wrong solution to the problem of running scripts under independent Context instances on the same thread.
2. Optimization of Context.enter()/Context.exit() when ThreadLocal is available:
Store Context[1], not Context in the variable so  Context.enter()/Context.exit() would need to access ThreadVar only once and then update the reference.
2003-11-07 22:24:53 +00:00
igor%mir2.org
5b675f523e Added setDouble, setString that are used in IRFactory during constant folding 2003-11-07 22:18:49 +00:00
igor%mir2.org
8eb8104ae7 Move all contant folding logic to IRFactory where it simpler to do and possible to reuse tree nodes during folding. 2003-11-07 22:17:54 +00:00
igor%mir2.org
7ed29ee5a5 Do constant folding during parsing since it is cheap to do that at this stage then in optimizer during separated phase so even the interpreter will take advantage of the folding. 2003-11-07 15:58:57 +00:00
igor%mir2.org
d7d991d76f ClassRepository is removed from list of API classes to allow to replace it in future by direct access to optimizer. 2003-11-04 14:55:58 +00:00
igor%mir2.org
4da147d828 Adjusting examples not to assume that Context.initStandardObjects(ScriptableObject) returns ScriptableObject since that was changed back to Scriptable for compatibility. 2003-11-04 14:54:43 +00:00
igor%mir2.org
4c338669a9 Removal of initStandardObjects(boolean) not to proliferate versions of initStandardObjects: if Rhino would support recursive object sealing, it would not be necessary to call initStandardObjects with sealed flag at all. 2003-11-04 14:52:48 +00:00
igor%mir2.org
6cbd10e41c JavaDoc @link fixes 2003-11-04 14:49:20 +00:00
igor%mir2.org
da6b0bef31 Return type of Context.initStandardObject(ScriptableObject) is changed back to Scriptable for binary compatibility. 2003-11-03 20:42:32 +00:00
igor%mir2.org
8349b3ea49 Removal of possibility to alter JavaAdapter through an external property as such functionality is redundant and can be emulated with altering JavaAdapter in the scope object after Context.initStandardObjects returns. 2003-11-03 19:58:17 +00:00
igor%mir2.org
7d26c9eb27 Use reflection to access JavaAdapter to allow to use NativeJavaObject with JavaAdapter classes absent. 2003-11-03 19:55:37 +00:00
igor%mir2.org
80c54a080a When converting function to Java interface and checking for the previous wrapping, do not use key stored in ClassCache.javaAdapterIFGlueMasters as it can be thrown away when caches are emptied and instead construct a key object from the passed class and uniqueness tag. 2003-11-03 18:15:00 +00:00
igor%mir2.org
bef3bd17c6 In NativeJavaClass.constructSpecific use passed scope, not function pointer as scope source so shared system scope with custom top scope and custom wrap factory would work. 2003-11-03 18:06:49 +00:00
igor%mir2.org
2c30bb423d Added Kit.makeHashKeyFromPair to make combined key for hashtables from 2 objects 2003-11-03 18:04:27 +00:00
igor%mir2.org
ef93931896 Added Context.javaToJS as a convenient way to get JS values from Java objects and Context.emptyArgs so documentation does not need to refer to ScriptRuntime.emptyArgs. 2003-11-02 21:15:14 +00:00
igor%mir2.org
e793b86743 In WrapFactory.wrap use String.valueOf(charValue) instead of new String(new char[] { charValue }) to get string from character. 2003-11-02 21:12:08 +00:00
igor%mir2.org
314f3f5bc8 Deprecation of get/setAttributes forms that take start argument. It was never used to pass anything but this object. 2003-11-01 20:23:28 +00:00
igor%mir2.org
efd61a6673 Since Undefined inherits from Scriptable, not ScriptableObject, it does not need to override get/setAttributes() 2003-11-01 20:21:28 +00:00
igor%mir2.org
674cfbf1bb Removal of completely unnecessary getSlotToSet as its implementation repeated already unsuccessfully search done by getSlot. The put methods now call addSlot directly.
In addition, shared code in has and get to check/update lastAccess cache is moved to common method getNamedSlot.
2003-11-01 19:40:24 +00:00
igor%mir2.org
16dcc44df0 GlobalScope is removed as its introduction had to serious consequences with compatibility and usage. Instead a special purpose class ClassCache is introduces to hold various caches. The class binds itself to an arbitrary object by using new SciptableObject.associateValue method so arbitrary ScriptableObject can be used as a scope without performance penalties. 2003-11-01 15:34:23 +00:00
igor%mir2.org
f78d4de11b parent and prototype fields are made privatenot to allow to mess with them from subclasses. Althoygh setter and getter can be used still to do that, at least some sanity checks can be added there. 2003-10-30 16:40:43 +00:00
igor%mir2.org
2851be6c6c Use getPrototype instead of explicit reference to this.prototype 2003-10-30 16:40:42 +00:00
igor%mir2.org
6b0c1e82ad passing Context instance to NativeJavaMethod.findMethod not to call Context.getContext() id some form of API to override method selection will surface 2003-10-30 16:40:41 +00:00
igor%mir2.org
552126e233 Added readReader 2003-10-30 16:40:40 +00:00
igor%mir2.org
ba5928dd83 Not to call Context.getContext() in TokenStrea/IRFactory, an explicit Context instance is passed to TokenStream constructor 2003-10-30 16:40:39 +00:00
igor%mir2.org
85fcb8e2bc Use passed scope instead of the object parent scope 2003-10-30 16:39:46 +00:00
igor%mir2.org
a80d67208d First part of resolving http://bugzilla.mozilla.org/show_bug.cgi?id=223435 :
Allow to pass JS function to Java method accepting interface with single method. The function will be called when interface method will be called.
2003-10-28 08:37:30 +00:00
igor%mir2.org
c25c8fc58f Added getAssociatedValue()/associateValue() to allow to connect arbitrary application-specific object with ScriptableObject. 2003-10-27 19:19:50 +00:00
igor%mir2.org
7514a2a682 Added initHash which would put value into hashtable only if it is first. This is usable to ensure proper synchronization with lazy initialization. 2003-10-27 18:45:39 +00:00
igor%mir2.org
2b2f9d3303 If invoker master throws RuntimeException during creation of invoker, then disable invokerOptimization. It fixes regression when SecurityManager prevents InvokerMaster from creation of class loader. 2003-10-27 18:42:39 +00:00
igor%mir2.org
64affb2798 Added addPush version taking long argument. 2003-10-27 15:47:05 +00:00
igor%mir2.org
a9d220df39 Common logic to create and cache adapter class on demand is moved to the new method getAdapterClass 2003-10-25 11:46:18 +00:00
igor%mir2.org
8b796c2f63 In getApplicationClassLoader cache result of Thread.getContextClassLoader if it coincides with the loader that loaded Context class. 2003-10-25 11:42:34 +00:00
igor%mir2.org
e5b4886f58 Added information on shared scopes 2003-10-23 21:49:23 +00:00
igor%mir2.org
f813a31aa8 Updated to remove NotAFunction exception handler which is not generated any more and was deprecated. 2003-10-23 21:48:45 +00:00
igor%mir2.org
a23733fc96 The class is no longer used. 2003-10-22 08:02:37 +00:00
igor%mir2.org
00c2ae199e 1. Added Context.hideFromContextListeners() which makes invisible for listeners.
2. Made sure that ContextListener.contextCreated is called only once. After a resent change to call the method from Context.enter, not from Context constructor the method would be called each time on first enter which broke the debugger.

3. Using new listener utilities from Kit instead of ListenerArray methods that would create a special storage object only if there is more then one listener.
2003-10-22 08:01:46 +00:00
igor%mir2.org
0e4347e841 Added JavaDoc for listener utilities 2003-10-22 07:57:49 +00:00
igor%mir2.org
368bd47f1e Introduction of org.mozilla.javascript.Kit to contain generic support utilities. 2003-10-21 13:43:22 +00:00
igor%mir2.org
8c9720b2b3 Use getPrototype instead of explicit reference to this.prototype 2003-10-21 13:43:21 +00:00
igor%mir2.org
31bc498af4 Added readUrl method to shell 2003-10-21 09:13:59 +00:00
igor%mir2.org
d6cd0b4569 Reuse results of method.getParameterTypes() and better hash code for javaAdapterSignature. 2003-10-20 14:11:08 +00:00
igor%mir2.org
0e47d37a12 Count syntax error in TokenStream directly instead of going through Context object so it would be possible to use TokenStream without instantiating Context. 2003-10-20 14:06:12 +00:00
igor%mir2.org
36c079aa4c Cosmetics: indentation fixes 2003-10-20 14:02:53 +00:00
igor%mir2.org
136718b2e1 1. Static hash table in JavaAdapter is replaced by a non-static fields in GlobalScope.
2. NativeObject implements just Serializable, not Externalizable interface to simplify serialization.
2003-10-19 09:59:52 +00:00
igor%mir2.org
2d87a134ca Fixing http://bugzilla.mozilla.org/show_bug.cgi?id=222635 :
Now activation is always properly removed under the debugger.
2003-10-17 18:24:29 +00:00
igor%mir2.org
d939e7224e I changed FunctionObject and ScriptableObject to use MemberBox wrapper for native methods, getters and setters that allowed to get following:
1. Method serialization code in MemberBox takes care of all serialization so ScriptableObject and FunctionObject does not need anything on its own.

2. Invoker optimization is extended to getters and setters in ScriptableObject.

3. Recovery from IllegalAccessException is extended to all cases of method invocation via reflection.

4. All error wrapping happens in a single class so FunctionObject and ScriptableObject does not need to wary about it.
2003-10-16 14:27:53 +00:00
igor%mir2.org
d4413688b0 Updated ftp links to the download files due ftp server reorganization 2003-10-15 18:13:33 +00:00
igor%mir2.org
4b876ea459 Code to create invoker master instance is placed into Invoker itself since FunctionObject does not need to know which classes stays behind the implementation. 2003-10-13 16:04:20 +00:00
igor%mir2.org
c21ab0c7a0 FunctionObject.convertArg is split into FunctionObject.getTypeTag() and FunctionObject.convertArg version taking that tag for better error reporting and performance since the tag can be cached and an expensive sequence of if and instanceof to check for the type would be replaced by a simple switch. 2003-10-13 16:02:35 +00:00
igor%mir2.org
064afe0a07 Run ContextListener.contextCreated from Context.enter(), not Context constructor. In this way listeners will not be invoked for Context that are never associated with a thread and contextCreated will be more symmetric with Context.contextReleased. 2003-10-13 15:57:18 +00:00
igor%mir2.org
89318be0fd Inlining code into exceMethod to shrink code size. 2003-10-13 07:30:33 +00:00
igor%mir2.org
d50209987d In getLength check for version of compiled function, not version from the current context for consistency. 2003-10-13 07:29:43 +00:00
igor%mir2.org
27cae5bd87 In classOrNull and newInstanceOrNull catch and ignore LinkageError since it can be thrown if class links to unknown class. 2003-10-13 07:28:37 +00:00
igor%mir2.org
c23530f968 Added to build.xml the smalljar target to generate smalljs.jar. Its usage is documented in doc/footprint.html. 2003-10-12 13:45:41 +00:00
igor%mir2.org
6419c245b7 More optimizations to shrink code size. 2003-10-12 08:52:24 +00:00
igor%mir2.org
778fff4c99 Inlining of private functions and reorganization to shrink code size to offset resent Rhino size growth 2003-10-11 20:29:32 +00:00
igor%mir2.org
3cc6308b48 Using ScriptRuntime.splitSC to extract packages from semicolon-separated string instead of explicit code. 2003-10-11 20:27:08 +00:00
igor%mir2.org
0a5b59efe7 Added ScriptRuntime.splitSC 2003-10-11 20:24:27 +00:00
igor%mir2.org
bb5d66ddc1 Change JavaScriptException to include source and line information in Throwable.getMessage() 2003-10-11 19:36:25 +00:00
igor%mir2.org
6935fd4558 Optimization: for line counting use offset of line icode of interpreter instead of the line itself. In this way interpreter does not need to read encoded line data on each line marker which can occur quite frequently. 2003-10-11 19:34:29 +00:00
igor%mir2.org
fe83dbd84d BinaryDigitReader logic is inlined in ScriptRuntime.stringToNumber removing the need in the class. 2003-10-09 17:38:34 +00:00
igor%mir2.org
4f020527c8 Use newly introduced Context.initStandardObjects(), not initStandardObjects(null) in the examples 2003-10-09 07:00:40 +00:00
igor%mir2.org
13d75fc940 Use non-static functions in Shell 2003-10-09 07:00:01 +00:00
igor%mir2.org
2aa3f1b663 Cosmetics: removal of end-of-line junk space 2003-10-09 06:57:12 +00:00
igor%mir2.org
99ad0b5fed Use newly introduced Context.initStandardObjects(), not initStandardObjects(null) in the documentation 2003-10-09 06:55:49 +00:00
igor%mir2.org
a738d7b424 dist depends on deepclean to prevent erroneous distribution builds when ant fails to detect source code dependencies and misses recompilation. 2003-10-09 06:44:38 +00:00
igor%mir2.org
a95f9c4651 GlobalScope is a part of API now. 2003-10-09 06:42:30 +00:00
igor%mir2.org
0c39c2bd7b Cosmetics: change argument order for package-private EcmaError constructor to it matchers other cases when a method takes line and column number. 2003-10-09 06:41:28 +00:00
igor%mir2.org
75e6970c55 Added version of Context.initStandardObjects that does not take scope as its argument. 2003-10-09 06:37:25 +00:00
igor%mir2.org
2593ae88cb Adding getParent() to omg.debug.DebuggableScript to allow to browse whole script function tree from any function. 2003-10-01 15:03:06 +00:00
igor%mir2.org
2ab3731f6d Cosmetics: expanding tabs 2003-10-01 15:02:09 +00:00
igor%mir2.org
002127495a Changing ScriptRuntime.initScript to return vois since it does not and should not change scope 2003-10-01 11:55:56 +00:00
igor%mir2.org
c3fc6c32a5 Extending omj.debug.DebuggableScript interface with functions to access nested functions and check if it is top-level script. 2003-10-01 11:55:55 +00:00
igor%mir2.org
f8232c4663 Fixing http://bugzilla.mozilla.org/show_bug.cgi?id=220584 :
Script() result has no prototype and scope chains

Fix: initialize scope and prototype for Script instances in
NativeScript.jsConstructor

If Script is called as a constructor, it will get the proper parent and
prototype from the generic code to initialize newly constructed objects but if
it is called as a function, then it is the responsibility of the call
implementation to do the job.
2003-09-28 22:52:57 +00:00
igor%mir2.org
b74c0ad822 Fixing http://bugzilla.mozilla.org/show_bug.cgi?id=220362 :
Local functions lose scope when called from outside (compiled with dynamic scopes, optlevel >= 0)

Fix: ignore dynamic scope for nested functions and functions declared within
the with statement.

The patch makes optimizer to behave in the same way as the interpreter does
with regard to dynamic scope: it ignores it for nested functions and functions
declared under with statements. Now parser checks for such functions and set
new flag itsIgnoreDynamicScope in FunctionNode. The flag then checked both by
interpreter and optimizer during byte code generation.

The patch also changes slightly interaction between changing dynamic scope flag
and interpreted Script instances. Currently the dynamic flag is read during
script execution but patch changes interpreter to behave exactly as the
optimizer does: the dynamic flag only affect script compilation, changes in its
value does not affect already compiled scripts.
2003-09-28 20:01:27 +00:00
igor%mir2.org
1ef13c34c6 Self-documenting example 2003-09-28 19:49:07 +00:00
igor%mir2.org
caa446bcc0 Added msg.adapter.zero.args 2003-09-28 18:14:16 +00:00
igor%mir2.org
b976cc3dce JavaAdapter.createAdapterCode now takes the function name to function arity instead of Scriptable object. It allows to remove a hack from optimizer/Codegen where it created a temporary Scriptable just to populate it with FunctionNode as a source of arity values thus violating requirement on types of JS values.
The rest of JavaAdapter code is updated to use the ned form of the method as well.
2003-09-28 18:13:51 +00:00
igor%mir2.org
0335328a4b In ScriptRuntime.toInt32 check for Integer, not Byte when doing short-circuit optimization since Integer is always used to wrap int values. 2003-09-28 16:03:10 +00:00
igor%mir2.org
fc51c3df0e Fixing http://bugzilla.mozilla.org/show_bug.cgi?id=220367 :
Fix: if in RegExpImpl.getParenSubString parens.get(i) is null, return
emptySubstring

If a branch of | with capturing () does not match , then RegExpImpl.parens will
contain null for corresponding $<group-number> according to code in
NativeRegExp.executeRegExp(). The current code does not check for a possible
null in RegExpImpl.parens when calling toString and the patch fixes that by
making sure that getParenSubString return SubString.emptySubString in such
cases.
2003-09-26 17:25:33 +00:00
igor%mir2.org
9aed8fe664 Use ScriptableObject.getPropertyIds(jsObj) to get all object ids instead of explicit working throw prototype chain. 2003-09-24 13:35:52 +00:00
igor%mir2.org
0924111af4 Optimization in getPropertyIds: since Scriptable.getIds returns unique ids, check against id duplication only if prototype chain contains more then one object with enumerable ids. It this way there is no need to allocate hash map in the common case of objects without enumerable properties on the prototype chain. 2003-09-24 13:32:42 +00:00
igor%mir2.org
f04a8dec42 Optimization in IdEnumeration: since Scriptable.getIds returns unique ids, check against id duplication only if prototype chain contains more then one object with enumerable ids. It this way there is no need to allocate hash map in the common case of objects without enumerable properties on the prototype chain. 2003-09-24 13:29:17 +00:00
igor%mir2.org
7546dbbac4 Use special subclasses of Node to represent various jumps and control structures to avoid allocating of property objects for frequently occurring parse tree nodes. 2003-09-18 16:20:32 +00:00
igor%mir2.org
7848633a4a Mark parse subtree for finally statement with Token.FINALLY instead of using special property to mark USETEMP node. 2003-09-17 13:43:12 +00:00
igor%mir2.org
8df24a01d8 Addressing http://bugzilla.mozilla.org/show_bug.cgi?id=219055 :
Delay creation of NativeError wrapper for EcmaError until the exception is caught in the script.
2003-09-16 16:08:55 +00:00
igor%mir2.org
c7382925ac Changing Main.eval implementation to use compileString/exec instead of evalString to avoid dependancy on NativeGlobal when passing explicit thisObj to Script instances when they implement Function interface which holds currently in Rhino. 2003-09-12 17:12:20 +00:00
igor%mir2.org
9aa6317814 Cosmetics: identation fixes 2003-09-12 15:04:21 +00:00
igor%mir2.org
ca657b86ae Siplified code to extract error message from Throwable to reflect recent changes in exception-related API semantics. 2003-09-11 15:41:06 +00:00
igor%mir2.org
cf45db3956 Changing Context.newObject to use ScriptRuntime.getExistingCtor to get constructor Function instance. In this way Context.newObject will throw the same set of exceptions that other parts of Rhino will throw on bad access to constructor.
With this change NotAFunctionException is no longer used so it is deprecated and changed to extend from Error not Exception for source compatibility: otherwise compiler will complain about unreachable catch handler.
2003-09-10 12:44:23 +00:00
igor%mir2.org
f0adcfbccd Fixing http://bugzilla.mozilla.org/show_bug.cgi?id=218440 :
Making Script implementations by Interpreter and Optimizer scope independent while keeping while still supporting compiling of regexp literals only once per Script instance.
2003-09-10 11:06:25 +00:00
igor%mir2.org
207ceb33fe Restoring NativeJavaPackage(String) constructor as deprecated for compatibility with Batik. 2003-09-09 13:27:11 +00:00
igor%mir2.org
0296631e46 ScriptRuntime.getCatchObject is modified to allow to accept instances of EvaluatorException, not only its WrappedException subclass. 2003-09-09 13:25:15 +00:00
igor%mir2.org
68676e179e Restoring JavaScriptException(String) as deprecated constructor for compatibility with BSF. 2003-09-09 13:22:50 +00:00
igor%mir2.org
88c394e664 Explicit separation between regexp compilation and execution: all data structures that represent compiled regexp are moved to a separated RECompiled class. 2003-09-06 15:49:05 +00:00
igor%mir2.org
31b2256d97 To construct regexp objects the generated code now calls omj.RegExpProxy instead of explicit calls to NativeRegExp constructor. It removes dependence of compiled Script instances on details of RegExp implementation. 2003-09-06 15:44:41 +00:00
igor%mir2.org
f8c669f1dd Added ScriptRuntime.checkRegExpProxy which is used in Interpreter and NativeString to check for regexp package presence instead of own duplicating code.
RegExpProxy.find_split is changed to include Context argument to follow the rest of RegExpProxy functions.
2003-09-06 15:41:03 +00:00
igor%mir2.org
de7b10603e I made most internal functions of NativeRegExp static since they do not reference NativeRegExp. 2003-09-06 12:49:07 +00:00
igor%mir2.org
54f85a5212 ScriptRuntime.main now takes Script as the first argument since it is simpler instantiate Script directly and pass it to ScriptRuntime.main then load Script lass which will be then instantiated in ScriptRuntime.main 2003-09-06 07:51:02 +00:00
igor%mir2.org
c9d7ff074e Replace Context field In REGlobalData by boolean multiline since it is the only information that is needed for matching code from RegExpImpl which was previously accessed through Context. 2003-09-05 21:22:51 +00:00
igor%mir2.org
1fe8179c7b Fixing regression caused by optimizer changes to address http://bugzilla.mozilla.org/show_bug.cgi?id=198086 :
Now Script.exec can be called more then once.
2003-09-05 21:17:58 +00:00
igor%mir2.org
54563952a0 Fixing http://bugzilla.mozilla.org/show_bug.cgi?id=213279 :
Replacing static caches by global scope based storage.
2003-09-05 14:35:09 +00:00
igor%mir2.org
008e6de35a Patch from Nicolas JOUVE to address http://bugzilla.mozilla.org/show_bug.cgi?id=218163 2003-09-05 09:04:36 +00:00
igor%mir2.org
fbd31b0fe2 Cosmetics: removal of EOL blanks 2003-09-03 14:26:39 +00:00
igor%mir2.org
2956f5b69d Work for http://bugzilla.mozilla.org/show_bug.cgi?id=213279 :
Code for NativeJavaPackage.TopLevelPackage is moved to a separated file NativeJavaTopPackage.java
2003-09-03 10:42:36 +00:00
igor%mir2.org
6e967acb16 Fix from Merten Schumann to initialize lineNumber/sourceName in the constructor, see http://bugzilla.mozilla.org/show_bug.cgi?id=217584 . 2003-09-02 12:32:41 +00:00
igor%mir2.org
57f50e5f8d Fixing http://bugzilla.mozilla.org/show_bug.cgi?id=214594 :
In IRFactory.createLoop propagate line number information to the condition subtree for "while" and "for" loops so exceptions generated in a loop condition would have proper line number.
2003-09-02 06:23:20 +00:00
igor%mir2.org
0b3c7a2041 Fix from Olivier Oeuillot to address http://bugzilla.mozilla.org/show_bug.cgi?id=212395 . 2003-09-01 13:32:33 +00:00
igor%mir2.org
1dadf61103 Fix from Ming-Yee Iu to address http://bugzilla.mozilla.org/show_bug.cgi?id=217951 2003-09-01 11:06:03 +00:00
igor%mir2.org
2aa340aba8 Fixing http://bugzilla.mozilla.org/show_bug.cgi?id=217379 :
The code in RegExpImpl.findReplen did not take into account that a particular
parenthesis pair can be null if it is not captured. The patch fixes that to
send undefined to the replace function for that case.
2003-09-01 09:05:52 +00:00
igor%mir2.org
6814bf31f0 Fix for DToA.JS_dtoa() to resolve http://bugzilla.mozilla.org/show_bug.cgi?id=217268 2003-08-31 19:42:58 +00:00
igor%mir2.org
46c31c6a73 Fixing http://bugzilla.mozilla.org/show_bug.cgi?id=217346 :
I changed DToA.JS_dtobasestr to use BigInteger for its integer part when it does not fit long.
2003-08-30 15:34:44 +00:00
igor%mir2.org
4936fa3877 Finalizing work on http://bugzilla.mozilla.org/show_bug.cgi?id=198086 :
Now optimizer generates exactly one class per script and all its functions.
2003-08-30 12:02:19 +00:00
igor%mir2.org
d1be8de8ca Changing ScriptRuntime to return vois since it does not and should not change scope 2003-08-30 12:02:18 +00:00
igor%mir2.org
b8655920a5 More fixing for http://bugzilla.mozilla.org/show_bug.cgi?id=217584 :
Use Context.getSourcePositionFromStack in the EvaluatorException(String details) constructor to get line number information.
2003-08-30 11:59:15 +00:00
igor%mir2.org
cd2ce4c17c Cosmetics: removal end-of-line blanks 2003-08-29 15:28:08 +00:00
igor%mir2.org
965090841f Fixing http://bugzilla.mozilla.org/show_bug.cgi?id=217584 :
Implementation of Merten Schumann suggestion to add to EvaluatorException and JavaScripException information about script source name and error line .
2003-08-29 13:19:37 +00:00
igor%mir2.org
37375e32cf More work for http://bugzilla.mozilla.org/show_bug.cgi?id=198086 :
The patch changes omj.NativeScript to represent only instances of Script object
in scripts and removes its second role to server as a superclass for compiled
forms of JS scripts. In is not only allow to make optimizer to generate only
single class but also would make instances of Script generated by optimizer not
to depend on the scope. The later is essential for Script object reuse to
execute it against different scopes.
2003-08-29 10:42:23 +00:00
igor%mir2.org
3c9b841737 Working on http://bugzilla.mozilla.org/show_bug.cgi?id=198086 :
Now optimizer will generate only one class for all functions a script contains instead of class per function.
2003-08-28 12:40:10 +00:00
igor%mir2.org
89468875b8 Changing signature of addConstant from short to int and updating the code correspondingly to allow for constant indexes to exceed 32K since their type is unsigned short, not short and int allows to cover that while removing casts. 2003-08-28 12:29:01 +00:00
igor%mir2.org
6dd4d70e56 1. Removal of NativeScript.initScript which was empty and was never overridden by script function implementations.
2. Using in NativeScript.compile Context.compileString instead of compileReader to avoid unnecessary construction of StringReader.

3. Overriding NativeFunction.getEncodedSource() in NativeScript to call this method on the delegated script object so decompilation of scripts constructed via script.compile would work.
2003-08-27 11:53:01 +00:00
igor%mir2.org
18456e5ca1 NativeFunction.decompile abd NativeFunction.initScriptFunction are final since script function implementations should not override them. 2003-08-27 11:47:19 +00:00
igor%mir2.org
894383d75f New form of markTableSwitchCase that allows to mark a switch case jump target and adjust stack top. 2003-08-27 11:44:46 +00:00
igor%mir2.org
51bf324448 Added NativeFunction.initScriptFunction to initialize NativeFunction.argNames, NativeFunction.version and its usage in InterpretedFunction/InterpretedScript.
It will allow to make the protected fields in NativeFunction private when the optimizer will be updated to use the new function.
2003-08-26 18:06:10 +00:00
igor%mir2.org
2709c61a4d Using ScriptRuntime.emptyStrings to return emoty var array 2003-08-26 15:45:16 +00:00
igor%mir2.org
cb46fe1b41 Added public static final String[] emptyStrings to denote zero-length string array 2003-08-26 15:45:15 +00:00
igor%mir2.org
7d0e681b6a Fixing http://bugzilla.mozilla.org/show_bug.cgi?id=217257 :
Patch from Larry Blair to fix decodeURIComponent()
2003-08-26 15:45:14 +00:00
igor%mir2.org
f9b335bf06 Making createObject public so optimizer implementation can access it outside BaseFunction subclass 2003-08-26 15:45:13 +00:00
igor%mir2.org
856b7cabb4 1. Support for generation tableswitch code
2. Utility method addLoadThis() as an alias for add(ByteCode.ALOAD_0)
2003-08-26 15:43:11 +00:00
igor%mir2.org
a803853242 Fixing line-table initialization issue: set itsLineNumberTableTop to 0 at the end of stopMethod so generation of multiple methods with source line information would work. 2003-08-22 09:10:14 +00:00
igor%mir2.org
9983fdb0e8 Cosmetics: removal of end-of-line blanks 2003-08-20 11:11:00 +00:00
igor%mir2.org
9be83bb44c Splitting Codegen into 2 Codegen and BodyCodegen where the second class contains code to generate butecode for the body of script. 2003-08-20 10:52:54 +00:00
igor%mir2.org
b6c1d3644c 1. Codegen.classNameToSignature is removed and call to the methods are replaced by cfw.classNameToSignature.
2. Calls to ClassFileWriter.fullyQualifiedForm are removed since all ClassFileWriter API accepts both dotted and slashed forms of Java class names.

3. Few identation fixes
2003-08-20 07:36:33 +00:00
igor%mir2.org
43cbf72f08 1. Added ClassFileWriter.classNameToSignature to convert Java class name into JVM signature.
2. The public method getFullyQualifieedForm that was used to replace . to / is removed since all classname API accepts both form of class names and convertion to the internal /-form can be done in ClassFileWriter in a more efficient way.
2003-08-20 07:32:48 +00:00
igor%mir2.org
040923febc More renames and preparations for code split. 2003-08-19 15:37:50 +00:00
igor%mir2.org
32e0764d1c More preparations for separating code to generate main script method and the rest of methods. 2003-08-19 13:19:57 +00:00
igor%mir2.org
bd2594e6eb 1. Renaming Codegen.classFile to Codegen.cfw and removal of methods like push/load/store in favour of directly calling ClassFileMethods.
2. Move all code related to generating of prologue for main function implementation to Codegen.generatePrologue.

In this way the following patch to split Codegen into 2 classes to factor away all generation code for the main function will look smaller.
2003-08-19 08:21:36 +00:00
igor%mir2.org
810aa53fd8 Renaming [ilfda]load/store into add[ILFDA]Load/Store for consistency and moving package-private functions from ByteCode to ClassFileWriter so JVM does not need to load ByteCode since it includes only constants. 2003-08-19 08:15:33 +00:00
igor%mir2.org
ed64a67527 Replace few usages of Node.cloneNode by a more explicit code to create a fesh childless node copy. 2003-08-18 14:27:51 +00:00
igor%mir2.org
abefa99b1e Using simple Token.<op> instead of (Token.EQOP, Token.<op>) to denote parser nodes for equality operations. It allowed to remove sharing of Node.intValue to mean line number and operation type so it was renamed to Node.lineno. 2003-08-18 11:53:00 +00:00
igor%mir2.org
5f6517906c Added store/load function to shortcut add(ByteCode.x, i) 2003-08-18 11:49:39 +00:00
igor%mir2.org
041149139b Using simple Token.<op> instead of (Token.RELOP, Token.<op>) to denote parser nodes for relational operation. 2003-08-18 09:55:19 +00:00
igor%mir2.org
5be8c599eb Move code to classify binary and relation operation tokens to IRFactory so parser does not need to know about details of tree implementation. 2003-08-18 08:05:06 +00:00
igor%mir2.org
0ee771b8c2 Changing order of parameters in ScriptRuntime.instanceOf to match order in ScriptRuntime.in to use simpler code in optimizer. 2003-08-18 08:00:55 +00:00
igor%mir2.org
7c70d93492 Removal of unnecessary instanceOf: Scriptable does not have such method and Undefined does not need to override it. 2003-08-18 07:57:40 +00:00
igor%mir2.org
fe402a8124 Make all convertions from == to === to support JavaScript 1.2 to single place in Parser 2003-08-15 16:48:56 +00:00
igor%mir2.org
b96ac683c8 Added explicit IRFactory.createIncDec to create ++/-- subtree which removed need to have Token.PRE/Token.POST. 2003-08-15 11:19:47 +00:00
igor%mir2.org
9fce703481 Removal of Token.UNARYOP: after the previous patches parse tree used Token.UNARYOP only to group Token.TYPEOF and Token.VOID into the same node type. Since they are very different, it is simpler to use the tokens directly as node type.
To remove ambiguity caused by re-use of Token.VOID to denote no-operation node, a new Token.EMPTY is added to denote the former usage.
2003-08-15 10:21:09 +00:00
igor%mir2.org
b63333276d Added Token.TYPEOFNAME to denote explicitly parser nodes for typeof(name) to make code more explicit about this case compared with typeof(expression) which is denote by Token.TYPEOF. Previously the ambiguity was resolved by using (Token.UNARY.OP, Token.TYPEOF) for parser tree nodes denoting the later and simple Token.TYPEOF for the former. 2003-08-15 09:00:42 +00:00
igor%mir2.org
7fdd9e85d1 Another replace of (Token.UNARYOP, Token.X) -> Token.X: this time it is for Token.BITNOT and Token.NOT 2003-08-15 08:11:32 +00:00
igor%mir2.org
09c327adc3 Changing Token.POS, Token.NEG to represent their parser tree nodes by the token themselves, not via pair Token.UNARYOP, POS/NEG. It simplifies code especially in optimizer/Optimizer.java 2003-08-15 07:15:07 +00:00
igor%mir2.org
9a1fbf3def Removal of Token.TONUMBER: it had exactly the same semantics as Token.POS, that is to convert its argument to number. 2003-08-15 06:08:44 +00:00
igor%mir2.org
e1290d4dbb Removal of Token.PRIMARY: it was used in parser to group primary tokens such as false, true, null, this but since the semantic of them is very different it is simpler to create parse tree nodes directly from tokens and check only for node type, not for type and operation. 2003-08-14 14:49:46 +00:00
igor%mir2.org
13865e4143 Parser tree nodes of Token.CONVERT type are replaced by Token.TONUMBER and additional optimizer nodes to convert to double or object eliminating the need to distinguish them by Node.TYPE_PROPERTY. 2003-08-14 11:21:46 +00:00
igor%mir2.org
0dec223435 Removal of TypeEvent since its essential functionality beyond the declaration of few constants was used only to implement OptLocalVariable.assignType. Inlining that code eliminated need in TypeEvent. 2003-08-14 06:03:22 +00:00
igor%mir2.org
a5f9d59614 Change TokenStream to return operational tokens as is without grouping them through Token.UNARY, Token.PRIMARY etc. Instead do grouping only in parser. In this way exceptional cases when grouping of tokens has to be changed by parser (like reinterpretation of Token.IN) it is easy to deal with. Another advantage is decompiler simplification since it does not need to perform nested switches to unwrap tokens. 2003-08-13 14:21:39 +00:00
igor%mir2.org
6fa381d49b I replaced Token.ADD/Token.SUB by Token.POS/Token.NEG as operands of UNARY operation nodes in parse tree. This is mostly for readability and to catch ADD/SUB misuse earlier. 2003-08-13 11:57:33 +00:00
igor%mir2.org
593784cb96 Cosmetics: nodeOp as variable name is replaced by assignOp in methods related to construction of assignment nodes. 2003-08-13 11:53:14 +00:00
igor%mir2.org
a4742a5fe9 Change Parser to use IRFactory.createAssignment to create assignment nodes instead of calling createBinary only to handle assignments explicitly in IRFactory later. 2003-08-13 10:51:38 +00:00
igor%mir2.org
a692d990fc Fixing http://bugzilla.mozilla.org/show_bug.cgi?id=215923 :
Search prototype chain of JS this until wrapped Java object is found that is compatible with Java this.
2003-08-13 06:04:41 +00:00
igor%mir2.org
9c0e1f0749 Making Decompiler.decompile public and changing NativeFunction.getSourceFunction() to return Object so it is easy to implement alternative presentation of encoded source. 2003-08-12 13:12:39 +00:00
igor%mir2.org
08560c4e86 Encoded source presentation changes.
Now encoded source does not encode sources of nested functions as external references. Rather they are encoded as any other source elements and to implement function.toString() runtime stores starting and ending offsets for function encoded source.

In this way decompiler is separated from the rest of runtime and external applications can access the encoded source with less efforts.
2003-08-12 11:50:48 +00:00
igor%mir2.org
a9944948f9 Using ScriptRuntime.emptyStrings to return emoty var array 2003-08-12 11:50:45 +00:00
igor%mir2.org
e725b9c0be Switching to use ClassFileWriter.addPush(String) instead of ClassFileWriter.addLoadConstant(String) to support string constants with JVM UTF8 encoding exceeding 64k. 2003-08-11 14:54:19 +00:00
igor%mir2.org
93e05fffaa Fixing bugs in the initial implementation of ClassFileWriter.addPush(String): now it works 2003-08-11 14:14:12 +00:00
igor%mir2.org
3594eb4b6b Use special token to encode function escape in Decompiler instead of using elaborated code to distinguish between start of function and function escape. 2003-08-11 11:06:21 +00:00
igor%mir2.org
8a8ca75068 Adding readFile function to the shell to read file context. 2003-08-11 10:54:40 +00:00
igor%mir2.org
af20fbe788 making decompiler class public so public method Parser.parser still can be called from outside omj. 2003-08-08 16:42:41 +00:00
igor%mir2.org
5523fffb09 Pass Decompiler object as an argument for Parser.parse instead of creating an instance there for better flexibility. 2003-08-08 15:42:19 +00:00
igor%mir2.org
6d6c104572 Calling Decompiler.decompile directly instead of calling Parser.decompile 2003-08-08 15:36:48 +00:00
igor%mir2.org
dda5331153 Decompiler class is moved to a separated file 2003-08-08 10:35:57 +00:00
igor%mir2.org
1c08dda3b8 1. Fixing Decompler.decopile for a function body when justBody is true Token.LC is added to the list of tokens to skip in function header.
2. Various cleanups in Decompiler to finalize Parser/Decompler split.
2003-08-08 09:35:36 +00:00
igor%mir2.org
0148813038 push(int/double) simply calls now ClassFileWriter.addPush() 2003-08-08 09:32:40 +00:00
igor%mir2.org
9ad008dd30 Added addPush(String) to generate code to push the given String into stack even if String does not fit the class file format restriction that JVM utf-8 encoding of strings in constant pool can not exceed 64K - 1.
Also added addPush(int/double) for symmetry, they are copied here from omj/optimizer/Codegen.java.
2003-08-08 09:30:57 +00:00
igor%mir2.org
99e484ca5b Restoring from bad commit of development uncompilable code 2003-08-07 15:10:10 +00:00
igor%mir2.org
666483b96d Notification of debugger about finished compilation of script/top-level-function is moved to a separated function. In this way Interpreter and ScriptOrFnNode does not need to pass original source around just to throw it away if debugger is not present. 2003-08-07 15:08:00 +00:00
igor%mir2.org
74d4f30e0e Replace anonymous/empty name play for functions constructed through Function in NativeFunction/Parser by using anonymous when necessary when assembling function source from Function arguments. 2003-08-07 10:46:41 +00:00
igor%mir2.org
954158fd2c Less generic code for interactioon between Parser and Decompiler 2003-08-07 07:19:16 +00:00
igor%mir2.org
db59f1d230 Code to generate/decode encoded source presentation is factored to a separated class Decompiler. 2003-08-06 16:18:28 +00:00
igor%mir2.org
2b68f1745e 1. Add Token.NOT as a byte code instead of generating if code to push false/true as "!" is frequent enough and interpreter does not have optimized mode to remove most of its usage in logical context.
2. When dumping icode, print it to System.out instead of icode.txt file for more convenient development.
2003-08-06 11:37:14 +00:00
igor%mir2.org
d153c65a1b build.xml reorganization to add deepclean, clean and help targets and making help a default target, see for details http://bugzilla.mozilla.org/show_bug.cgi?id=214997 2003-08-06 07:47:58 +00:00
igor%mir2.org
faf2a30c39 More tokens used only in Interpreter are moved from Token to Interpreter. I also added addToken/addIcode to be used instead of simple addByte to catch bugs about wrong byte code as soon as possible. 2003-08-06 07:39:37 +00:00
igor%mir2.org
f95ae1ab5b I changed Context.codeBug to return RuntimeException instead of void to be able to wright "throw Context.codeBug()" when simple "Context.codeBug()" leads to a compile error about unreachable code or missed return. 2003-08-06 07:37:27 +00:00
igor%mir2.org
87aeaade82 1. Constants in Token that are used only as Interpreter bytecode are moved to Interpreter.
2. LAST_BYTECODE_TOKEN is added to Token to server as a base for internal Interpreter bytecodes instead of Token.LAST_TOKEN. In this way compiler can generate more denser code for switches over interpreter bytecode.
2003-08-05 15:58:39 +00:00
igor%mir2.org
fa6d86fba0 SOURCEFILE bytecode used to restore interpreter source information is replaced by setting cx.interpreterSourceFile at the beginning of Interpreter.interpreter and restoring the old value at the end. 2003-08-05 11:16:14 +00:00
igor%mir2.org
61cd64260c I moved definitions of tokens in Tokenstream to separated class Token. In this way minimal Rhino distribution way remove Token class since it only necessary during compilation and strings with constant names would not be loaded into JVM. 2003-08-04 15:00:06 +00:00
igor%mir2.org
fb9ac64c2e Initialize cx.interpreterSourceFile with script o r function source name before starting bytecode execution so this information for the first script throw/runtime exception 2003-08-04 13:01:06 +00:00
igor%mir2.org
040a93626e Fixing http://bugzilla.mozilla.org/show_bug.cgi?id=214945 :
Optimize away empty try block only if finally is empty as well.
2003-08-04 12:57:15 +00:00
igor%mir2.org
30718f5ece <center><h1>... is replaced by <h1 align=center> to avoid warning from javadoc 2003-08-04 07:51:19 +00:00
igor%mir2.org
86bdaa37fc Fixing /** coments to remove JavaDoc errors/warnings 2003-08-03 21:40:22 +00:00
igor%mir2.org
9d44b5410e Fixing http://bugzilla.mozilla.org/show_bug.cgi?id=214608 :
The reason for the regression is that now JavaMembers.lookupClass never
attempts to reflect package-private classes. But this is wrong since even with
SecirutyManager installed JVM allows to call Class.getMethos()( and returns
list of all public methods in the class and its super classes.

The patch removes the restrictions while making JavaMembers.lookupClass much
simpler.
2003-07-31 17:08:58 +00:00
igor%mir2.org
3bad6fe1f8 Fixing http://bugzilla.mozilla.org/show_bug.cgi?id=213231 :
All information about exception handlers are stored in exception table eliminating the need to have TRY bytecode.
2003-07-24 10:50:29 +00:00
igor%mir2.org
6a3aad3989 Work in progress on http://bugzilla.mozilla.org/show_bug.cgi?id=213231 :
Replacing try stack by static table of exception handlers
2003-07-24 10:46:46 +00:00
igor%mir2.org
7625f8b519 Work in progress on http://bugzilla.mozilla.org/show_bug.cgi?id=213231 :
When handling exceptions, restore proper scope without using try stack
2003-07-24 10:45:30 +00:00
igor%mir2.org
dfd7e9d362 Restoring NativeJavaMethod(Method, String) for backward compatibility. 2003-07-24 09:06:44 +00:00
igor%mir2.org
e0de8aab17 Move code to adjust stack depth for finally handler from TARGET case of the main switch in generateICode to TRY switch generating all the code for try. It allows to remove special marking of JSR targets with FINALLY_PROP and make stack handling for catch and finally block uniform. 2003-07-22 13:41:35 +00:00
igor%mir2.org
687dff0fe1 Removal of JTHROW byte code: instead of generation byte code pair [GOSUB exception handler], JTHROW, RETSUB from finally now supports re-throwing of exception object directly when called from exception handler.
Now the exception handler invokes finally code with the exception object on the stack top, not PC to return which allows RETSUB to distinguish between this and GOSUB invocation.
2003-07-22 13:04:07 +00:00
igor%mir2.org
ebe60fb675 Move ENDTRY, JTHROW, GOSUB and RETSUB from TokenStream to Interpreter as they specific only to Interpreter implementation. 2003-07-22 11:16:54 +00:00
igor%mir2.org
cef7d514f9 Removal of code to handle stack chages when generationg GOSUB to finally code for finally handler: the stack size adjustments is done during FINALLY code generation already. 2003-07-22 08:58:08 +00:00
igor%mir2.org
a6ec3480e3 When generating code to invoke finally block from exception handler, do not store exception object in the local slot but rather leave it on JS stack and update finally block generation to expect potentially 2 objects on stack, not single return pc address. 2003-07-21 16:27:48 +00:00
igor%mir2.org
004397fe5e Fixing http://bugzilla.mozilla.org/show_bug.cgi?id=201893 :
New class MemberBox wraps Method or Constructor instances to cache results of getParameterType() and other information and to to replace Method instance by more accessible one recovery from IllegalAccessException is possible.
2003-07-15 20:47:29 +00:00
igor%mir2.org
697f7be97f Cosmetics: layot fixes 2003-07-15 20:44:17 +00:00
igor%mir2.org
6f97ac4088 Throw IllegalArgumentException from compileString/compileReader if script line number is negative instead of catching it much later via Context.codeBug(). 2003-07-09 19:27:46 +00:00