Commit Graph

433 Commits

Author SHA1 Message Date
Andreas Gal
c41d151268 Follow-up fix for 479888. 2009-05-05 17:49:29 -07:00
44581945d7 kill builtins.tbl (479888, r=jorendorff). 2009-05-05 17:36:26 -07:00
igor
39d528e26c js_SetPropertyHelper does not null *entryp for read-only properties (489171, r=gal,brendan). 2009-04-20 17:00:59 -07:00
Brendan Eich
2d2a5dfe04 upvar2, aka the big one take 2 (452598, r=mrbkap). 2009-04-05 21:17:22 -07:00
Andreas Gal
00a608f948 Backed out changeset 972c44aa9d1f (bug 452598). 2009-04-04 10:14:52 -07:00
Brendan Eich
4af509178e upvar2, aka the big one (452598, r=mrbkap). 2009-04-04 10:05:49 +01:00
Jim Blandy
daab0107e2 Bug 479258: Include "jsstdint.h" for <stdint.h> type use within SpiderMonkey. r=brendan 2009-03-18 11:38:16 -07:00
Jim Blandy
b22ee55115 Bug 480132: Clone lexical blocks only when needed. r=igor
Terminology:

A "script block" is an object of class Block allocated by the byte
compiler and associated with a script.  Script blocks are never
modified, and may be used as a prototype for a "closure block":

A "closure block" is an object of class Block that holds variables
that have been closed over (although we actually leave the variables
on the stack until we leave their dynamic scope).  A closure block is
a clone of a script block (its prototype is a script block).

Adjust the meanings of fp->blockChain and fp->scopeChain:

  fp->blockChain is always the innermost script block in whose static
  scope we're executing.

  fp->scopeChain is the current scope chain, including 'call' objects
  and closure blocks for those function calls and blocks in whose
  static scope we are currently executing, and 'with' objects for with
  statements; the chain is typically terminated by a global object.
  However, as an optimization, the young end of the chain omits block
  objects we have not yet needed to clone.

Closures need fully reified scope chains, so have js_GetScopeChain
reify any closure blocks missing from the young end of fp->scopeChain
by cloning script blocks as needed from fp->blockChain.  Thus, if we
never actually close over a particular block, we never place a closure
block for it on fp->scopeChain.

Have JSOP_ENTERBLOCK and JSOP_LEAVEBLOCK always keep fp->blockChain
current.  When JSOP_LEAVEBLOCK pops a block from fp->blockChain that
has been cloned on fp->scopeChain, pop fp->scopeChain as well.

Remove the JSFRAME_POP_BLOCKS flag, as it is no longer needed.

Ensure that the JIT won't have to create closure blocks or call
js_PutBlockObject; it can't handle those things yet.  Note our current
script block when we begin recording.  Abort recording if we leave
that block; we can't tell in advance whether it will need to be "put"
in future trace invocations.  Leave trace if we call js_GetScopeChain
while in the static scope of lexical blocks.  Remove JIT tests based
on JSFRAME_POP_BLOCKS.

Verify that generators capture the correct value for blockChain.

Add a constructor to JSAutoTempValueRooter for rooting JSObject
pointers.
2009-03-16 09:55:06 -07:00
Igor Bukanov
70838353dd bug 362910 - js_GetMethod cleanup. r=brendan 2009-03-14 17:41:47 +01:00
Jim Blandy
9a6e04e9e3 Back out 480132: orange on Linux (http://tinderbox.mozilla.org/showlog.cgi?log=TraceMonkey/1237017748.1237029269.2403.gz&fulltext=1) 2009-03-14 08:19:58 -07:00
Jim Blandy
6425c8e422 Bug 480132: Clone lexical blocks only when needed. r=igor
Terminology:

A "script block" is an object of class Block allocated by the byte
compiler and associated with a script.  Script blocks are never
modified, and may be used as a prototype for a "closure block":

A "closure block" is an object of class Block that holds variables
that have been closed over (although we actually leave the variables
on the stack until we leave their dynamic scope).  A closure block is
a clone of a script block (its prototype is a script block).

Adjust the meanings of fp->blockChain and fp->scopeChain:

  fp->blockChain is always the innermost script block in whose static
  scope we're executing.

  fp->scopeChain is the current scope chain, including 'call' objects
  and closure blocks for those function calls and blocks in whose
  static scope we are currently executing, and 'with' objects for with
  statements; the chain is typically terminated by a global object.
  However, as an optimization, the young end of the chain omits block
  objects we have not yet needed to clone.

Closures need fully reified scope chains, so have js_GetScopeChain
reify any closure blocks missing from the young end of fp->scopeChain
by cloning script blocks as needed from fp->blockChain.  Thus, if we
never actually close over a particular block, we never place a closure
block for it on fp->scopeChain.

Have JSOP_ENTERBLOCK and JSOP_LEAVEBLOCK always keep fp->blockChain
current.  When JSOP_LEAVEBLOCK pops a block from fp->blockChain that
has been cloned on fp->scopeChain, pop fp->scopeChain as well.

Remove the JSFRAME_POP_BLOCKS flag, as it is no longer needed.

Ensure that the JIT won't have to create closure blocks or call
js_PutBlockObject; it can't handle those things yet.  Note our current
script block when we begin recording.  Abort recording if we leave
that block; we can't tell in advance whether it will need to be "put"
in future trace invocations.  Leave trace if we call js_GetScopeChain
while in the static scope of lexical blocks.  Remove JIT tests based
on JSFRAME_POP_BLOCKS.

Verify that generators capture the correct value for blockChain.

Add a constructor to JSAutoTempValueRooter for rooting JSObject
pointers.
2009-03-14 00:58:27 -07:00
Jim Blandy
56f5bc77cd Back out 480132 fix; static analysis red 2009-03-14 00:57:54 -07:00
Jim Blandy
925b3e4fcf Bug 480132: Clone lexical blocks only when needed. r=igor
Terminology:

A "script block" is an object of class Block allocated by the byte
compiler and associated with a script.  Script blocks are never
modified, and may be used as a prototype for a "closure block":

A "closure block" is an object of class Block that holds variables
that have been closed over (although we actually leave the variables
on the stack until we leave their dynamic scope).  A closure block is
a clone of a script block (its prototype is a script block).

Adjust the meanings of fp->blockChain and fp->scopeChain:

  fp->blockChain is always the innermost script block in whose static
  scope we're executing.

  fp->scopeChain is the current scope chain, including 'call' objects
  and closure blocks for those function calls and blocks in whose
  static scope we are currently executing, and 'with' objects for with
  statements; the chain is typically terminated by a global object.
  However, as an optimization, the young end of the chain omits block
  objects we have not yet needed to clone.

Closures need fully reified scope chains, so have js_GetScopeChain
reify any closure blocks missing from the young end of fp->scopeChain
by cloning script blocks as needed from fp->blockChain.  Thus, if we
never actually close over a particular block, we never place a closure
block for it on fp->scopeChain.

Have JSOP_ENTERBLOCK and JSOP_LEAVEBLOCK always keep fp->blockChain
current.  When JSOP_LEAVEBLOCK pops a block from fp->blockChain that
has been cloned on fp->scopeChain, pop fp->scopeChain as well.

Remove the JSFRAME_POP_BLOCKS flag, as it is no longer needed.

Ensure that the JIT won't have to create closure blocks or call
js_PutBlockObject; it can't handle those things yet.  Note our current
script block when we begin recording.  Abort recording if we leave
that block; we can't tell in advance whether it will need to be "put"
in future trace invocations.  Abort recording if we call
js_GetScopeChain while in the static scope of lexical blocks.  Remove
JIT tests based on JSFRAME_POP_BLOCKS.

Verify that generators capture the correct value for blockChain.

Add a constructor to JSAutoTempValueRooter for rooting JSObject
pointers.
2009-03-13 23:43:32 -07:00
Robert Sayre
bfc73ce4c1 Backout patch for Bug 480132. Debug only nit fix busts static analysis compile. 2009-03-14 02:20:45 -04:00
Jim Blandy
1e32480aad Bug 480132. SpiderMonkey clones too many blocks into the heap. r=igor 2009-03-14 02:09:28 -04:00
Jim Blandy
918bbe5eae Bug 391488: Eliminate PTRDIFF macro; delete jssttddef.h. r=jimb
Delete jsstddef.h, since its only remaining purpose is to make certain
Win16-specific definitions; we don't support Win16 any more.  In
particular, we can just subtract pointers now, so the PTRDIFF macro is
unnecessary noise.

Most places get stddef.h via jstypes.h or some other header, so we can
just delete #inclusions of jstddef.h.  The exception is jskwgen.h, so
there we explicitly include <stddef.h> instead.
2009-02-18 09:14:51 -08:00
Jason Orendorff
4f417c163b Bug 477581 - "Assertion failure: !JSVAL_IS_PRIMITIVE(regs.sp[-2]), at ../jsinterp.cpp:3237" with generator on trace. r=brendan. 2009-02-09 14:23:24 -06:00
Blake Kaplan
c3f9344ad9 Bug 469405 - Handle an __iterator__ implementation returning a primitive value on trace. r=brendan 2009-02-07 11:28:23 -08:00
Jason Orendorff
5b0a24c8d7 Bug 476177 - TM: cx->stackPool must not be accessed on trace. r=brendan. 2009-01-30 17:40:05 -06:00
Jason Orendorff
aaadf0c55c Bug 460865 - Read barrier for cx->fp. r=mrbkap, r=dmandelin. 2008-12-09 10:38:32 -06:00
Brendan Eich
1a344ffefb Bug 456511 - (imacros) TM: Make conversion work on arbitrary JSObjects (r=gal). 2008-11-13 00:30:20 -08:00
Andreas Gal
fd9de39309 Backed out changeset a40f2117bcc0 2008-11-12 17:39:48 -08:00
Brendan
7b8d11c0f0 Add imacros to support conversion of arbitrary JSObjects (456511, r=gal). 2008-11-12 16:55:45 -08:00
Jason Orendorff
fccf374129 Bug 458735 - Improve internal API for traceable natives (r=brendan, nanojit r=edwsmith) 2008-10-08 17:08:33 -05:00
Jim Blandy
d8cc274426 Bug 97954: Give jsconfig.h a better name, and make room for the new js-config.h. r=bsmedberg
We'd like the SpiderMonkey configure script to generate a header file
named js-config.h to hold #definitions chosen at configure time that
affect the SpiderMonkey API, like JS_THREADSAFE.  However, that name
is very similar to that of an existing header file, jsconfig.h.  This
patch renames the existing header file, and updates all references to
it.
2008-09-05 10:19:17 -07:00
Brendan Eich
bcc1a490db - Avoid unnecessary FASTCALL builtin wrappers for existing js_* library-private or friend functions, which could be (and now are) fastcall (JS_FASTCALL). A couple of builtins avoid name collisions by using js_Fast instead of just js_ as their name prefix.
- Use GCF_DONT_BLOCK from fastcall builtins that call into the GC allocator (mostly; a few places need help still, or better: need to avoid allocation).
- Cope with C clients of jscntxt.h and its include files (these hacks should go away).
- Naming convention and function definition line-break style nit-picks.
2008-08-10 00:39:18 -07:00
Brendan Eich
e6aad74aae Merge from mozilla-central. 2008-08-08 18:58:04 -07:00
Igor Bukanov
11505a9ec5 bug 412296 - removal of minarg support for fast native 2008-08-08 18:02:50 +02:00
Brendan Eich
342e1a24b5 - Export JSSLOT_ITER_* from jsiter.cpp to jsiter.h, for jstracer.cpp to use.
- Fix OBJ_GET_SLOT to be STOBJ_GET_SLOT in jsiter.cpp, no thread safety here (bug on file).
- Move JSNativeEnumerator from jsobj.cpp to jsobj.h for jstracer.cpp as well.
- Rename JOF_2BYTE JOF_UINT8 for consistency, and actually decompile it.
- Trace JSOP_FORVAR (can't do anything in JSOP_ITER, it comes before the loop).
- Shortened some guardMyLongSummerVacationWithinBounds names ;-).
- Removed/refactored to avoid dslots_ins obligation on all callers.
2008-07-30 16:32:33 -07:00
Igor Bukanov
e9875f6677 bug 441686 - eliminating JSStackFrame.(nvars|vars). r=brendan 2008-07-20 22:13:17 +02:00
Benjamin Smedberg
86da87a6f2 Return to building spidermonkey as C++, because we believe we found the cause of the perf regression elsewhere (non-code). 2008-05-27 16:58:12 -04:00
Benjamin Smedberg
e310131a6f Back out revision bd9c9cbf9ec8 (build spidermonkey as C++) for perftesting and profit. 2008-05-27 12:19:17 -04:00
1650653ff4 Bug 387935, Always build JS as C++, r=benjamin 2007-07-16 11:40:49 -07:00