Commit Graph

58 Commits

Author SHA1 Message Date
brendan%mozilla.org
afe0723131 Fix Function.prototype.to{Source,String} to parenthesize function objects that were expressed rather than declared (73760, r=rogerl, sr=shaver).
git-svn-id: svn://10.0.0.236/trunk@91805 18797224-902f-48f8-a5cc-f745e15eee43
2001-04-10 01:10:28 +00:00
brendan%mozilla.org
38d9d8b234 Fix 'import *;' (70308, r=shaver, sr=jband).
git-svn-id: svn://10.0.0.236/trunk@88135 18797224-902f-48f8-a5cc-f745e15eee43
2001-02-28 00:17:19 +00:00
brendan%mozilla.org
713ac17d77 - Shaver hacked this fix with advice from me, and I carried it to check-in. We now avoid a heavyweight outer function when the inner one is defined at top-level or in an expression (is not a JSOP_CLOSURE, IOW), and it doesn't refer to any non-local names. See bug 65308 for details on the win. (r=rogerl, sr=brendan)
- Fix scope chain for nested functions at top-level (JSOP_DEFFUN), in a part of another statement (JSOP_CLOSURE), and unnamed in an expression (JSOP_ANONFUNOBJ) to match ECMA-262 13.2.  My bad: fp->varobj was used up till now, instead of fp->scopeChain; we still *bind* the name of a statement-level (top or not) nested function in fp->varobj.  This fixes bug 69559.  (r=rogerl, sr=jband)
- Add an Intern command to the shell, for GC vs. intern'ed atom testing.


git-svn-id: svn://10.0.0.236/trunk@87871 18797224-902f-48f8-a5cc-f745e15eee43
2001-02-24 03:00:56 +00:00
brendan%mozilla.org
b32bfc9ddd Fix duplicate parsenode recycle in constant-folded if/else or ?: (69607, r=shaver, sr=jband).
git-svn-id: svn://10.0.0.236/trunk@87647 18797224-902f-48f8-a5cc-f745e15eee43
2001-02-22 07:30:57 +00:00
brendan%mozilla.org
94c7e8ce8d Fix constant folder to recycle moved node, not whole tree, when simplifying 'true ? foo() : bar()' into 'foo()' (69345, r=shaver, sr=jband).
git-svn-id: svn://10.0.0.236/trunk@87415 18797224-902f-48f8-a5cc-f745e15eee43
2001-02-20 01:25:39 +00:00
brendan%mozilla.org
c372c27928 Fix related eval and setTimeout regressions caused by bug 68498's patch (69165&69175, r=jband, sr=shaver).
git-svn-id: svn://10.0.0.236/trunk@87312 18797224-902f-48f8-a5cc-f745e15eee43
2001-02-19 00:31:20 +00:00
shaver%mozilla.org
e340798f8e Fold constants correctly when emitting as we compile (TCF_COMPILING).
(#69304, r=jband, sr=brendan)


git-svn-id: svn://10.0.0.236/trunk@87310 18797224-902f-48f8-a5cc-f745e15eee43
2001-02-18 20:58:08 +00:00
brendan%mozilla.org
cb6ad315e2 The rest of the fix for bug 68498, see the extensive comments in that bug (r=jband, sr=shaver).
git-svn-id: svn://10.0.0.236/trunk@87167 18797224-902f-48f8-a5cc-f745e15eee43
2001-02-16 02:04:12 +00:00
brendan%mozilla.org
554bf9f199 Fix compile-statements-as-we-go to work with warn-about-missing-final-return (66928, r=jband, sr=shaver).
git-svn-id: svn://10.0.0.236/trunk@86274 18797224-902f-48f8-a5cc-f745e15eee43
2001-02-06 01:23:29 +00:00
brendan%mozilla.org
88999be56e Fixes for bug 33390 (r=mccabe, sr=shaver)
- Optimize compile (parse+emit) operation to generate code for each top-level
  statement or function in turn, recycling JSParseNodes as we go for greatly
  reduced "long linear script" footprint.
- Fix O(n**2) growth problems in bytecode and srcnote generation.
- Add js_ParseTokenStream entry point to compiler, for tree-generation without
  code-generation.  Move JSOP_EVAL instruction selection from code-generator to
  parser, to match other such specializations and enable js_ParseTokenStream.
- Fix js_CompileTokenStream (and get it right in new js_ParseTokenStream) to
  respect JSOPTION_VAROBJFIX.
- Clean up bracing, multi-line conditions, and overlong lines.


git-svn-id: svn://10.0.0.236/trunk@85619 18797224-902f-48f8-a5cc-f745e15eee43
2001-01-27 08:00:45 +00:00
brendan%mozilla.org
1c7d4471fa Fixes for bug 61898 (which has morphed), r=rogerl, sr=jband.
- Optimize integer ++ and -- to avoid double-to-int, which is quite costly for
  some compilers (ftol on Windows with MSVC).
- Optimized arguments[i] and arguments.length references to use bytecodes that
  avoid creating an arguments object for the current frame.  This entailed
  simplifying the compiler to avoid flagging functions and scripts that set
  arguments, since we have code in jsfun.c to catch such sets at runtime.
- The code generator now eliminates useless expression statements, giving a
  strict warning about them.
- Rationalized jsemit.c's LookupArgOrVar to have well-defined results in *pn.
  Eliminate bytecode specializations for argument and local variable gets and
  sets from jsparse.c -- these precede jsemit.c's LookupArgOrVar and frustrate
  it, by setting pn_slot non-negative too early.
- Code generation errors set report->filename and report->lineno, rather than
  hacking "{0}, line {1}: " into the localized message.
- Bogus JSFRAME_VAROBJBUG removed, JSOPTION_VAROBJFIX is sufficient.
- Spruce up jsinterp.c macros to use JS_BEGIN/END_MACRO brackets if possible.
- Avoid calling JS_PropertyStub.  The call is too costly compared to a branch
  in the caller.


git-svn-id: svn://10.0.0.236/trunk@85537 18797224-902f-48f8-a5cc-f745e15eee43
2001-01-26 00:59:50 +00:00
sspitzer%netscape.com
7305affabb back out brendan (Career Limiting Move) to fix blocker bug #66545.
a=leaf


git-svn-id: svn://10.0.0.236/trunk@85497 18797224-902f-48f8-a5cc-f745e15eee43
2001-01-25 18:06:57 +00:00
brendan%mozilla.org
c1463a8801 Fixes for bug 61898 (which has morphed), r=rogerl, sr=jband.
- Optimize integer ++ and -- to avoid double-to-int, which is quite costly for
  some compilers (ftol on Windows with MSVC).
- Optimized arguments[i] and arguments.length references to use bytecodes that
  avoid creating an arguments object for the current frame.  This entailed
  simplifying the compiler to avoid flagging functions and scripts that set
  arguments, since we have code in jsfun.c to catch such sets at runtime.
- The code generator now eliminates useless expression statements, giving a
  strict warning about them.
- Rationalized jsemit.c's LookupArgOrVar to have well-defined results in *pn.
- Code generation errors set report->filename and report->lineno, rather than
  hacking "{0}, line {1}: " into the localized message.
- Bogus JSFRAME_VAROBJBUG removed, JSOPTION_VAROBJFIX is sufficient.
- Spruce up jsinterp.c macros to use JS_BEGIN/END_MACRO brackets if possible.
- Avoid calling JS_PropertyStub.  The call is too costly compared to a branch
  in the caller.


git-svn-id: svn://10.0.0.236/trunk@85488 18797224-902f-48f8-a5cc-f745e15eee43
2001-01-25 09:22:19 +00:00
brendan%mozilla.org
79e8b4e37f - Treat 08, 09, 078, 079, etc. as decimal, but warn that they're not legal
ECMA-262 octal literals.  Old code would split 08 into 0 and 8 if JS1.2 or
  other non-ECMA version, and always split 078 into 07 and 8, resulting in
  missing ; syntax errors.

- Fix CheckFinalReturn to be aware of JS_HAS_EXCEPTIONS, finally (sic).  Lots
  of help from jag (Peter Annema, disttsc@bart.nl), thank him.

Both changes got lumped under bug 49233, and are r=jband, sr=shaver.


git-svn-id: svn://10.0.0.236/trunk@81459 18797224-902f-48f8-a5cc-f745e15eee43
2000-10-19 19:21:53 +00:00
brendan%mozilla.org
612a3ff881 Fix uninitialized var bug found by one warning, silence another that's a can't-happen (r=jwbaker@acm.org).
git-svn-id: svn://10.0.0.236/trunk@78887 18797224-902f-48f8-a5cc-f745e15eee43
2000-09-12 19:42:01 +00:00
brendan%mozilla.org
c4ea797337 Fix C++ portability and AIX compilation problem due to last C++ porting attempt (48976, r=jdunn@netscape.com).
git-svn-id: svn://10.0.0.236/trunk@78593 18797224-902f-48f8-a5cc-f745e15eee43
2000-09-09 05:53:00 +00:00
brendan%mozilla.org
b0b7fd8115 Followup for 44997, r=shaver:
- #if JS_HAS_LVALUE_RETURN around cx->rval2/rval2set defs and uses.
- Instrument different kinds of invocations, #ifdef DEBUG only.
- Clean up basis case of empty switch statement to use high = -1, low = 0,
  requiring care when optimizing in-range tests using unsigned casts, but
  freeing the interpreter and decompiler from having to do an extra test
  before looping from low to high.
- Clean up all codegen to use JUMP_OFFSET_LEN, ATOM_INDEX_LEN, etc. instead of
  magic 2 or 4.
- Add JSOP_TRY and JSOP_FINALLY no-ops to save a srcnote per JSOP_NOP, and to
  make decompilation and jit'ing easier.
- Minimize number of source notes to maximize SRC_XDELTA span.
- Use JSSCRIPT_FIND_CATCH_START in throw code.
- Indentation and bracing nits picked.


git-svn-id: svn://10.0.0.236/trunk@77900 18797224-902f-48f8-a5cc-f745e15eee43
2000-09-01 18:42:22 +00:00
brendan%mozilla.org
3c54211db3 Support ECMA reference type return from native methods (44997, r=shaver).
git-svn-id: svn://10.0.0.236/trunk@77793 18797224-902f-48f8-a5cc-f745e15eee43
2000-09-01 00:45:50 +00:00
mccabe%netscape.com
aa91430462 Fix to 39141.
Check for empty element case in array literals ( first element in [,'foo'] ) now uses the next token instead of the previous one when constructing the node, so the first element gets TOK_COMMA instead of TOK_LB.

This fixes a crash from previously accepted JS.

r=rogerl


git-svn-id: svn://10.0.0.236/trunk@77230 18797224-902f-48f8-a5cc-f745e15eee43
2000-08-26 01:44:35 +00:00
brendan%mozilla.org
6c9b35da11 Add strict warning about trailing comma in object initializers being non-ECMA (50001, r=shaver).
git-svn-id: svn://10.0.0.236/trunk@76986 18797224-902f-48f8-a5cc-f745e15eee43
2000-08-23 23:55:43 +00:00
brendan%mozilla.org
d2bc829802 Cleanups from tlundeen@webcrossing.com, plus fun->call=>native renaming.
git-svn-id: svn://10.0.0.236/trunk@69736 18797224-902f-48f8-a5cc-f745e15eee43
2000-05-15 03:54:50 +00:00
brendan%mozilla.org
50400ce9b5 Functions that use unqualified __parent__ or __proto__ must be heavyweight (36625, r=shaver).
git-svn-id: svn://10.0.0.236/trunk@66641 18797224-902f-48f8-a5cc-f745e15eee43
2000-04-21 01:47:20 +00:00
brendan%mozilla.org
66bc1e6c09 Clean up ugly whitespace, some of which survived my r=brendan comments.
git-svn-id: svn://10.0.0.236/trunk@65282 18797224-902f-48f8-a5cc-f745e15eee43
2000-04-05 02:17:38 +00:00
rogerl%netscape.com
663a94b57f r=brendan,rginda
Added ECMA3 compliant getter/setter syntax.
Fixed bugs
	- #28686, mishandling of \$ in replace()
	- #27902, eval not detected as heavyweight indicator for non ECMA
			context version.


git-svn-id: svn://10.0.0.236/trunk@62083 18797224-902f-48f8-a5cc-f745e15eee43
2000-03-02 23:21:03 +00:00
brendan%mozilla.org
2e5e3a4050 Fix crash reported in bug 26595 (r=jband@netscape.com) via better compilation-frame conditioning.
git-svn-id: svn://10.0.0.236/trunk@59830 18797224-902f-48f8-a5cc-f745e15eee43
2000-02-05 01:54:13 +00:00
brendan%mozilla.org
43d1d6a141 - Eliminate ancient, bogus proxying of function object for its call objects (23346, r=jband@netscape.com).
- Tabs expanded as much as I could stand, without taking too much cvsblame.


git-svn-id: svn://10.0.0.236/trunk@59716 18797224-902f-48f8-a5cc-f745e15eee43
2000-02-04 02:01:49 +00:00
brendan%mozilla.org
b7a83ca82c JS1.5 fixes (17290, 21618, plus shaver's 22243 fix, r=shaver@mozilla.org).
git-svn-id: svn://10.0.0.236/trunk@58086 18797224-902f-48f8-a5cc-f745e15eee43
2000-01-18 11:06:05 +00:00
rogerl%netscape.com
2db1cd9984 r=brendan
Bug #20444, delete of non-reference


git-svn-id: svn://10.0.0.236/trunk@56426 18797224-902f-48f8-a5cc-f745e15eee43
1999-12-22 22:01:19 +00:00
brendan%mozilla.org
51687cf23b Fix obscure eval bug and ECMA conformance issue (20256, r=rginda@netscape.com).
git-svn-id: svn://10.0.0.236/trunk@54865 18797224-902f-48f8-a5cc-f745e15eee43
1999-12-01 04:30:04 +00:00
brendan%mozilla.org
ca2032e66d Eliminate Closure per ECMA ed. 3, fix brutal sharing of lambdas (20076, r=rogerl,shaver).
git-svn-id: svn://10.0.0.236/trunk@54474 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-25 03:25:30 +00:00
shaver%netscape.com
3676f93091 - report function name, if any, when warning about mismatched return
- change catchguard syntax to avoid ECMA conflict
- light XDR cleanup


git-svn-id: svn://10.0.0.236/trunk@54364 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-24 03:36:25 +00:00
brendan%mozilla.org
1c2d96a428 - Add JS_HAS_FUN_EXPR_STMT jsconfig.h macro and use it to ifdef a special case explicitly specified by ECMA ed. 3 to be an error: a function expression that's a statement (not at top-level). This allows one to wrap functions in if and else statements and conditionally define them.
(More work is needed to conform to ECMA ed. 3 by removing Closure objects; also we want more efficient closure calling, soon.)

- Move mislocated call to js_FoldConstants from jsemit.c's js_EmitTree, the TOK_FUNCTION case, back to jsparse.c.  This avoids redundant fold-walks over non-top-level functions.  Folding should be done at tree-gen time, not at code-gen time.

- Eliminate dead code in if-else and ?: when folding constants.

- Release tempPool arena space before early return on error in js_FoldConstants, just to be nice (all arena space gets released eventually, when the compiler finishes).


git-svn-id: svn://10.0.0.236/trunk@53898 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-18 20:19:56 +00:00
brendan%mozilla.org
693b8201bd Unregress top-level lambda expressions not in with statements to avoid full closure overhead.
git-svn-id: svn://10.0.0.236/trunk@53760 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-17 07:41:12 +00:00
brendan%mozilla.org
1f55285563 Brutal sharing followup (15146, r=shaver@mozilla.org)
- jsinterp.c changes: 
__- JSOP_CLOSURE comment fixes.
____(NB: ECMA ed 3 seems to require that we abolish the Closure object altogether, replacing it with a new Function object where we used to make a new closure.  That says we should use JS_CloneFunctionObject or an internal form (js_).) 
__- Use obj rather than the same-valued fp->scopeChain as fourth argument to js_ConstructObject. 
__- JSOP_DEFFUN change to auto-clone when running a script in a different scope from the one the compiler used for static function scope linkage. 
__- Remove bogus assertion from JSOP_DEFVAR/CONST: case.

- jsparse.c/.h changes:
__- Restored outerFun test to FunctionDef in jsparse.c, so that we make a closure if (outerFun || lambda || !funAtom) -- i.e., if we're compiling
____- A function statement within an active function via eval;
____- We're compiling a function expression statement (not at apparent-to-compiler top-level; part of some kind of compound statement, e.g. if or with);
____- Or the function, even at top statement level and not in another function, has no name. 
__- Don't predefine local variables at compile time if they're in with statement
__- Enforce const at compile time for local consts

- Minor jsemit.[ch] cleanup.


git-svn-id: svn://10.0.0.236/trunk@53746 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-17 04:13:05 +00:00
brendan%mozilla.org
5d2eac8479 XULDOMJS_19991106_BRANCH landing (15146, 18025, r=shaver@mozilla.org)
git-svn-id: svn://10.0.0.236/trunk@53326 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-12 06:03:40 +00:00
mccabe%netscape.com
b31e8409ff Fix most remaining warnings in js/src. Patch courtesy slamm.
r=mccabe.


git-svn-id: svn://10.0.0.236/trunk@53245 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-11 21:52:35 +00:00
brendan%mozilla.org
bed10de2c0 Fixed getter/setters, pave way for brutal sharing (15146, r=shaver@mozilla.org,rogerl@netscape.com)
git-svn-id: svn://10.0.0.236/trunk@52487 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-02 02:23:50 +00:00
rogerl%netscape.com
4e16b4e094 r=norris
Delayed functionDef from creating property until after the body parses
succesfully.


git-svn-id: svn://10.0.0.236/trunk@51176 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-19 21:07:45 +00:00
brendan%mozilla.org
f2330eb459 1. Fixed missing JS_LOCK_GC in JS_YieldRequest, commented other badness there.
2.  Cleaned up ugly JS_GC_Flag typedef name and put XXXbe comment in there for
    next time: someone seems to have patched around a deadlock that has since
    bit chouck@geocast.com.
3.  Fixed gcDisabled by moving it from cx to rt and updating it atomically.
4.  Fixed ECMA violation where for (var i, j in o) ... was permitted; only one
    variable is allowed.
(Item 4 was a bug on rogerl's list, since closed?  r=shaver@mozilla.org.)


git-svn-id: svn://10.0.0.236/trunk@50795 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-15 05:46:42 +00:00
dmose%mozilla.org
ec2434440d update license boilerplate to NPL-1.1 dual-licensed with the GPL. a=brendan, r=brendan.
git-svn-id: svn://10.0.0.236/trunk@49258 18797224-902f-48f8-a5cc-f745e15eee43
1999-09-28 23:12:09 +00:00
brendan%mozilla.org
1041763b2e - Bumped default compile-time JS version from 1.4 to 1.5.
- Add JS1.5 getter/setter support in all its glory:

  * getter function SN() {return ++x} at top-level or as a closure binds an SN
    property getter than returns the incremented value of x.  Likewise for
    setter function SN(y) {return y = x}.

  * getters and setters may be defined in an object literal:
      o = {p getter:function() {return ++this.x},
           p setter:function(y){return this.x = y},
           x:42};

  * getter= and setter= operators (compound tokens) may be used to bind getter
    and setter properties dynamically:
      o = new Object;
      o.p getter= function() {return ++this.x};
      o.p setter= function(y){return this.x = y};
      o.x = 42;

    Waldemar is concerned that this form will collide semantically with JS2, so
    I am not committing to keeping it in JS1.5.  I'd like to check my code in
    ASAP so shaver can use it, and I'd also like to see this form get used (or
    not) during Mozilla betas.  Caveat emptor, and if you find this "dynamic"
    or "imperative" form necessary and hard to substitute, please let me know.
    If this proves important to users, then I think JS1.5 should keep it.

- Cleaned up property flags (in a binary-incompatible fashion -- who cares?) by
  eliminating JSPROP_ASSIGNHACK and JSPROP_TINYIDHACK.

- Added JS_DONT_PRETTY_PRINT flag to be ORed with the indent argument to the
  several JS_Decompile*() API calls.  This avoids any newlines or identation in
  the decompiled string.
 
- Improved and extended (for getter/setter non-reservation) scanner lookahead
  by using a circular (power-of-2 sized) token buffer.

- Fix ECMA Edition 3 deviation where function f(){function g(){}} bound f.g by
  mistake (it should arrange to make a closure named g in activations of f, but
  it should not bind a property of function f).


git-svn-id: svn://10.0.0.236/trunk@48436 18797224-902f-48f8-a5cc-f745e15eee43
1999-09-21 00:13:48 +00:00
rogerl%netscape.com
205d4652bd Backed out preventing multiple var decls in for..in stmts - it impacted
all for stmts instead, duh.


git-svn-id: svn://10.0.0.236/trunk@47850 18797224-902f-48f8-a5cc-f745e15eee43
1999-09-16 22:12:29 +00:00
rogerl%netscape.com
77cf00d688 Disallowed multiple variable declaration in for (var X in...)
git-svn-id: svn://10.0.0.236/trunk@47166 18797224-902f-48f8-a5cc-f745e15eee43
1999-09-13 21:07:34 +00:00
brendan%mozilla.org
69185ecae9 Expand tabs to spaces per Emacs modeline; other space cleanups.
git-svn-id: svn://10.0.0.236/trunk@46138 18797224-902f-48f8-a5cc-f745e15eee43
1999-09-06 22:59:11 +00:00
mcafee%netscape.com
a954f31869 Fixing linux warning
git-svn-id: svn://10.0.0.236/trunk@39497 18797224-902f-48f8-a5cc-f745e15eee43
1999-07-15 03:02:44 +00:00
rogerl%netscape.com
632556d9fd Bug #7197 (related) - capture and free char pointers going to error
reporter.
Bug #5875 - eval of named function within a function resulted in the
function not being visible at the start of the eval string.


git-svn-id: svn://10.0.0.236/trunk@33359 18797224-902f-48f8-a5cc-f745e15eee43
1999-06-01 23:17:19 +00:00
fur%netscape.com
dc0c8d45d1 Merge changes from SpiderMonkey140_BRANCH. Note: none of the
added files participate in the client build.


git-svn-id: svn://10.0.0.236/trunk@29432 18797224-902f-48f8-a5cc-f745e15eee43
1999-04-27 15:18:57 +00:00
mccabe%netscape.com
a02a1efd96 Stable drop of JavaScript interpreter code from SpiderMonkey140_BRANCH
git-svn-id: svn://10.0.0.236/trunk@14116 18797224-902f-48f8-a5cc-f745e15eee43
1998-11-05 00:08:43 +00:00
fur%netscape.com
e655606d45 Checkpoint JS1.4 from JS_STABLE_10131998_BRANCH. Changes include:
+ merging of js/src and js/ref
 + elimination of most dependencies on NSPR
 + JS1.4 feature additions and accumulated bug fixes

More details are in last week's mozilla status report.


git-svn-id: svn://10.0.0.236/trunk@12797 18797224-902f-48f8-a5cc-f745e15eee43
1998-10-14 10:22:38 +00:00
brendan%netscape.com
68cdb7d0b0 Fix typos, int type mismatch, white-space, and layout style nits.
git-svn-id: svn://10.0.0.236/trunk@8438 18797224-902f-48f8-a5cc-f745e15eee43
1998-08-25 08:23:34 +00:00