Commit Graph

826 Commits

Author SHA1 Message Date
Brendan Eich
e9b635b38a 1. Add activeCallOrGlobalSlot, used by JSOP_NAME, JSOP_CALLNAME, etc. recorders to cope with Call objects on the scope chain, if they represent still-active frames covered by callDepth.
2. Add builtin for eval, to be optimized further, to handle very short eval'ed programs as found in popular benchmarks.
3. Add common scopeChain TraceRecorder helper, to generate the LIR to load cx->fp->scopeChain.
4. Add ABORT_TRACE to LeaveFrame for clarity.
2008-08-20 22:40:39 -07:00
Andreas Gal
8468ac7444 Support multiple returns from called trees by continueing the outer tree with a new nested guard. 2008-08-20 22:37:00 -07:00
Andreas Gal
36ddb45efb Restore state.sp and state.rp before the nested guard exit point so we can have a sequence of them and still have rp/sp adjusted correctly. 2008-08-20 22:23:17 -07:00
Andreas Gal
e9f3ccf839 Push actual guard that failed in a nested call, not the expected. 2008-08-20 20:12:19 -07:00
Andreas Gal
87295d3d95 Merge. 2008-08-20 19:25:26 -07:00
Andreas Gal
1b99fe0e1e Don't emit a guard at the end of CALLNAME and friends since the values CALLNAME puts on the stack (callee, this) are not seen by the interpreter yet, and thus get store killed. Instead, emit the guard in CALL, at which point the values are properly stacked. 2008-08-20 19:24:57 -07:00
shaver@mozilla.org
9817a0cd97 fix js_IsLoopExit to better handle for-in exits, r=mrbkap 2008-08-20 18:50:49 -07:00
Andreas Gal
49f0b4f6cb Add a switch to disable the oracle, in which case we never demote any slots. 2008-08-20 16:10:56 -07:00
Andreas Gal
fdb661bd5e Clear the oracle on every GC. 2008-08-20 16:01:56 -07:00
Andreas Gal
3e55729492 If at loop entry we expect a double, but at the loop tail we store an int because we suck the i2f into the side exit, we have to explicitly cast back up to double using i2f otherwise we won't be able to make sense of the value when we load it at the top of the next iteration. 2008-08-20 15:43:26 -07:00
Andreas Gal
98f67af6d0 Add a way to clear the oracle. 2008-08-20 15:18:43 -07:00
Andreas Gal
ccfca5d79f Clear global slots and global type map when clearing the code cache. 2008-08-20 15:03:51 -07:00
Andreas Gal
f3972bfb84 Backed out changeset be63a51a0a3b. Breaks tofte if run from ./time.sh. 2008-08-20 14:57:49 -07:00
Brendan Eich
6bc330ef33 Don't disable property caching in eval (this requires GC'ing eval scripts). Do tolerate active Call object at head of scope chain in record_JSOP_CALLNAME, and go straight to the stack slots. 2008-08-20 14:04:37 -07:00
Andreas Gal
8df2fc18c8 When adjusting integers to doubles in tree calls start with the current stack frame only. 2008-08-20 12:47:39 -07:00
David Anderson
d6aef7cf26 Fixed some valgrind whinings (not actual bug fixes). 2008-08-20 12:17:31 -07:00
David Anderson
54cfb5e424 Fixed typo that broke the tree. Sorry! 2008-08-20 10:38:50 -07:00
shaver@mozilla.org
d1f7543e1b default to non-verbose for DEBUG, set TRACEMONKEY=verbose in env to go verbose 2008-08-20 10:15:42 -07:00
David Anderson
738ce385fa Merge. 2008-08-20 09:50:41 -07:00
Brendan Eich
deca6a9d50 Add str + obj concatenation for 3d-raytrace.js. 2008-08-20 02:35:17 -07:00
Andreas Gal
3a4d105a0f If the outer tree has a slot in an integer register, but the inner tree expects a double, make sure to promote the value before calling the tree, otherwise the inner tree will read the value from the stack incorrectly. 2008-08-20 00:51:56 -07:00
Andreas Gal
fb3cf056d9 Correctly calculate tree call stack adjustment, even if we don't have any arguments in the current frame and hand pick some cleanups from the backed-out changeset. 2008-08-19 23:31:33 -07:00
Andreas Gal
39d9d53d83 Back out multi-trees. There is absolutely no way this will be debugged in time for tomorrow. Need a bit more gdb man-power. 2008-08-19 23:28:13 -07:00
Andreas Gal
55c1e3d15d Always blacklist the first fragment in the peer list, and blacklist if we see a loop that is not type-stable. 2008-08-19 23:10:28 -07:00
Andreas Gal
25bf562fe6 Don't build trees inside tree calls if no suitable tree can be found (for now.) 2008-08-19 23:00:19 -07:00
Andreas Gal
4ee5ead209 Improved debug output. 2008-08-19 22:59:08 -07:00
David Anderson
69c4638355 Merge. 2008-08-19 22:33:43 -07:00
Andreas Gal
8569359e49 Add debugging facilities for typemaps and fix sp_adj calculation for tree calls. 2008-08-19 22:29:02 -07:00
David Anderson
9fa5be54af Merge. 2008-08-19 21:32:22 -07:00
Andreas Gal
454c89d72b Support multiple fragments with different entry maps per PC location. 2008-08-19 20:30:16 -07:00
David Anderson
9a5b3b4307 AMD64 trace-tests.js passes now (hacked in LIR_qcmov opcode, corrected builtin return types). 2008-08-19 17:19:19 -07:00
Andreas Gal
b3efe4fbeb Clear out the list of global slots when the shape changes. 2008-08-19 13:34:20 -07:00
Andreas Gal
1ee261ca2e Emit the tree call stack setup code before executing the inner tree, otherwise we might see stale references to instructions prior to the call that no longer guarantee certain types (since the inner tree overwrite them.) 2008-08-19 13:11:18 -07:00
Andreas Gal
1ded8ec0ad Merge. 2008-08-19 11:32:52 -07:00
Andreas Gal
e79f9ed689 Intern globals per-context, not per tree, which allows transitioning between trees that use globals. The type of all global slots compiled code uses is expected to remain stable, otherwise the entire code cache has to be flushed. Changes to the shape of the global object also flush the code cache. Working for trace-tests.js, but fails math-partial-sum.js 2008-08-19 11:32:36 -07:00
David Anderson
ee4a887045 Merge. 2008-08-19 11:02:57 -07:00
Brendan Eich
c2229dbd5e Back out changeset 1d0574db8320 (for 450997), it was based on a bum steer. 2008-08-18 22:18:33 -07:00
Andreas Gal
dfb94ccec1 Add a global type map to the monitor and rename slotList to globalSlots. 2008-08-18 21:08:35 -07:00
Brendan Eich
76380c598b Add a final js_ReconstructStackDepth assert after setting fp->regs->sp in js_ExecuteTree's bail-out epilog. 2008-08-18 19:26:47 -07:00
Brendan Eich
87a6e416ef 1. Fix json2.js (it crashes later, another bug) to restore a non-empty stack for a call with missing args after a nested bail-out. This involves changing js_SynthesizeFrame to return the number of stack slots it reconstructed that map to native slots. It also means not counting the missing args in the spdist uint16 pushed onto the state.rp stack (this was the root of all over-counting evil, for this bug).
2. Use if (C) { do {...} while (C); } instead of if (C) { while (C) {...} } and other style fixage.
2008-08-18 18:36:05 -07:00
David Anderson
e503629dbe Fixed AMD64 accidentally treating the shape as a 64-bit integer. 2008-08-18 17:36:24 -07:00
David Anderson
908183cf6f Merge. 2008-08-18 16:38:32 -07:00
David Anderson
0f46c5d568 Fixed some bugs in the AMD64 port, still crash in 5 sunspider tests. 2008-08-18 16:23:37 -07:00
Brendan Eich
21b6e353e2 Cosmetic cleanup. 2008-08-18 15:32:17 -07:00
Andreas Gal
ad4bfa3b5b Add a global slot list to the trace monitor. 2008-08-18 13:12:19 -07:00
David Anderson
751ef6d2af Improved AMD64 nanojit compatibility. 2008-08-18 12:54:04 -07:00
Andreas Gal
afc782cbe2 Make sure to trasm the vmprivate of dependent trees as well. 2008-08-18 12:53:38 -07:00
Andreas Gal
f7aac4002e Tighter fencepost in getTop, don't overshoot the stack (450997). 2008-08-18 10:09:24 -07:00
Andreas Gal
202a9de38b Doh. Deep bailots are pretty rare and js_SynthesizeFrame already uses the fairly slow js_ReconstructStackDepth helper internally, so anotherone to avoid counting stack slots via spbase can't hurt. 2008-08-18 10:04:03 -07:00
Andreas Gal
e7645176d5 Merge. 2008-08-18 08:03:51 -07:00
Andreas Gal
535584eecb Add a method to type map that captures missing slots (which have been lazily added to the slot list since the type map was created.) 2008-08-18 07:32:42 -07:00
Brendan Eich
4d8c1fda9b Fix missing paren in comment; also s/scope/frame/ in same comment. 2008-08-17 12:04:33 -07:00
Andreas Gal
9f71dd226f Extend the globalTypeMap import(), not in the caller, since we missed extending it in case of re-reading registers after a tree call. 2008-08-17 11:38:49 -07:00
Andreas Gal
f08e18fc14 If RecordTree is triggered, create a new peer fragment (or recycle and unused one) if we already have a tree for this location. 2008-08-17 00:49:59 -07:00
Andreas Gal
2d983bcee2 Try to execute the tree first, and if that fails worry about counting and triggering compilation. This speeds up trace activiation by a tiny bit, but makes code that we can't trace a little bit slower. We use a micro optimization to bypass the call to js_ExecuteTree when its clear that it wouldn't find a tree to executed to reduce this overhead. This change is necessary for multiple trees per bytecode location. 2008-08-17 00:30:36 -07:00
Andreas Gal
ef8a6041cc Give root fragments a treeInfo decorator only if the trace was successfully compiled. Otherwise just keep a reference in the recorder and delete it when the recorder is destroyed. Review welcome. The involved state machine is a bit complex. Added lots of asserts as safety net. 2008-08-16 23:43:49 -07:00
Andreas Gal
26fc76213a Only capture the shape of the global object in a tree once that tree tries to access a global, and only check the stored global shape in trees against the current global shape if the tree actually uses globals (which also doesn't trash trees when global variables are added if that tree doesn't actually use globals.) This is approx. a 1% win for sunspider. 2008-08-16 21:05:03 -07:00
Andreas Gal
efd76e5daf Change interface of js_ExecuteTree to indicate which of the peer fragments it really executed (since we soon will have more than one tree that could be activated for that particular bytecode location). 2008-08-16 15:45:48 -07:00
Andreas Gal
b9e946d830 Merge. 2008-08-15 20:16:46 -07:00
Andreas Gal
7b954b5cd7 Add the concept of peer fragments to nanojit. Each loop fragment can have a number of peer fragments, which we can use to have several different specialized variants of a loop (i.e. for different types). The makefile doesn't pick up the change to Fragmento.h, so make sure you clobber by hand or you will end up wasting an hour of your life in gdb (like me.) 2008-08-15 20:15:47 -07:00
Brendan Eich
ede29d299e Merge. 2008-08-15 18:02:30 -07:00
Brendan Eich
bfc9f75d14 Update stale comment. 2008-08-15 18:01:26 -07:00
Andreas Gal
10a24ff80c Don't allow inner trees to lazily pick up any globals since we currently can't handle that. We already ensure that we don't inline trees that have globals. This patch merely makes sure they don't get some additional globals on the fly. 2008-08-15 18:00:22 -07:00
Andreas Gal
dea1843401 Similarly to attaching new branches to a side exit, we might end up with a partial type map when exiting from a trace during tree execution, so make sure to merge in missing types from the tree's entry map in this case as well. 2008-08-15 17:11:57 -07:00
Andreas Gal
d51fdd4130 If we extend a tree along a side exit that knew about fewer global slots that we have now in the tree, merge in the types for those additional slots from the entry map (450535). 2008-08-15 16:00:24 -07:00
Andreas Gal
d356a10871 Funnel all write-backs to the stack and the global frame through TraceRecorder::writeBack() so we can intercept and manipulate them in one central location. 2008-08-15 14:47:49 -07:00
Andreas Gal
8938c62c44 Enable nested trees by default. This is going to be exciting. 2008-08-15 10:21:07 -07:00
Andreas Gal
432ca408ef I honestly to god don't know why this change is necessary but with this nesting works now for SunSpider and all of my test cases. The stack layout calculation needs some reviewing, seriously. 2008-08-15 10:19:24 -07:00
Andreas Gal
c42833b03c Merge. 2008-08-15 10:12:47 -07:00
Andreas Gal
91a71447a9 Change sp_adj in guards to always reflect the current stack depth, so if we enter a trace/loop with something on the stack, sp_adj will reflect always at least that minimum amount. InterpState->sp now always runs in parallel with regs->sp of the current frame. This breaks nesting badly. I really need help with the stack layout logic. 2008-08-15 10:09:36 -07:00
Blake Kaplan
a6f7e7c0f7 Merge 2008-08-15 09:35:16 -07:00
Blake Kaplan
5aa5360905 bug 450529 - pass pc to String.prototype.match so we can avoid unnecessary object creation when tracing. r=brendan 2008-08-15 09:29:03 -07:00
Andreas Gal
9474c22bf7 Merge. 2008-08-14 23:23:15 -07:00
Andreas Gal
07cb6236c0 Add callee onto the stack to make sure our native frame layout matches the interpreter during calls. 2008-08-14 23:22:51 -07:00
Brendan Eich
bb1e475a4d Fix gc hazard just introduced in fix for bug 450538. 2008-08-14 23:20:24 -07:00
Andreas Gal
1274eac1f3 Merge. I love hg. 2008-08-14 17:52:37 -07:00
Andreas Gal
6ba62a6fa7 Cleanup stack adjustment during tree calling. 2008-08-14 17:52:11 -07:00
David Anderson
238cf072dd Merge. 2008-08-14 17:28:32 -07:00
David Anderson
a41cb6c005 Fixed js_ValueToNumber overwriting values on the stack as different types, causing the exit type map to assert. The breaking conversion was JSVAL_VOID becoming a NaN. (bug 450538) 2008-08-14 17:27:45 -07:00
Andreas Gal
801923081c Make sure sp points to the native stack base of the inner tree when calling a nested tree. 2008-08-14 16:22:01 -07:00
Andreas Gal
13a4a98604 Merge. 2008-08-14 16:04:14 -07:00
Andreas Gal
1edbe7e6bf Don't over-compensate sp_adj (exclude the callee). 2008-08-14 16:02:33 -07:00
Vladimir Vukicevic
61a89af8e6 b=450176; trace parseInt and parseFloat; r=gal 2008-08-14 15:13:39 -07:00
David Anderson
9f7d261303 Fixed the known native arg handler from accidentally using 'continue' to break out of a loop one level higher. This was causing crashes when the arg didn't match the expected types (bug 450530). 2008-08-14 11:48:43 -07:00
Andreas Gal
bfcf6a784d Write back outer tree frames, but exclude the current frame (which the next tree will do). This still crashes the trace-tests.js test case with nesting enabled and for the life of me I can't figure out why (try with TRACEMONKEY=nesting). 2008-08-14 01:44:32 -07:00
Andreas Gal
fa52d00c5a Backed out changeset 089406b2b0aa 2008-08-14 00:45:39 -07:00
Andreas Gal
55bc4df432 Add an explicit start frame parameter to the FORALL macros, which allows FlushNativeStackFrame to be used for other frames than just the topmost N ones. 2008-08-13 23:20:44 -07:00
Andreas Gal
a5e83b133c Fix outrageously incorrect comment. 2008-08-13 22:54:23 -07:00
Andreas Gal
0530506440 Restore state of the outer frames in case of a nested exit. Should be feature complete but needs more debugging. 2008-08-13 21:34:41 -07:00
Andreas Gal
8d4c97dbef FlushNativeStackFrame currently only handles the innermost nested trees writeback, so at least make it use the proper adjusted stack base for that. 2008-08-13 19:23:28 -07:00
Andreas Gal
01efe3882f Update inlineCallCount with the total call stack height, which is the sum of rp_adj and any adjustments nested trees added. Also make sure to read all stack adjustment information from the tree we exit on, not the tree we entered (might be different in case of nesting.) 2008-08-13 19:09:05 -07:00
Andreas Gal
30b82dbcbd Print relative stack instead of absolute stack address upon side exit (debug mode). 2008-08-13 18:28:43 -07:00
Andreas Gal
9350282579 Implement nested side exits. 2008-08-13 18:10:19 -07:00
Andreas Gal
222e746fe7 Merge. If I had a cent for every merge. Sigh. 2008-08-13 17:48:04 -07:00
Andreas Gal
f1d87d6234 Reshuffle code lines in the side-exit return path (do asserts closer to the GlobalFrame writeback.) 2008-08-13 17:47:18 -07:00
David Anderson
4d25c18771 Merge. 2008-08-13 17:46:58 -07:00
David Anderson
87d9c2089d Merge. 2008-08-13 17:45:50 -07:00
Brendan Eich
fc782418ee Set rval_ins with initializing=true because nothing will get the callee, so the tracker won't have tracked it yet if it's in virgin stack. 2008-08-13 17:45:49 -07:00
David Anderson
3652f7c126 Fix from brendan for propertyIsEnumerable having an inconsistent return type. 2008-08-13 17:44:26 -07:00
Andreas Gal
eac5c3ed47 Merge. Lame. 2008-08-13 17:13:53 -07:00
Andreas Gal
201341cfc5 Add nestedExit to InterpState and comment its fields. 2008-08-13 17:12:55 -07:00
David Anderson
a9922db939 Merge. 2008-08-13 17:12:08 -07:00
David Anderson
4c7aaa248b Merge. 2008-08-13 17:11:22 -07:00
Brendan Eich
ca1e2a283a Fix prototype hit case in prop to advance obj and obj_ins up the proto chain. 2008-08-13 17:10:18 -07:00
David Anderson
fe66e966ca Fixed from brendan for counting disparity between nativeStackSlots and FORALL_SLOTS_IN_PENDING_FRAMES.
Added debug code to catch future disparities.
2008-08-13 17:09:16 -07:00
Andreas Gal
ee55743358 Don't print LeaveFrame debug info when falling out of the global frame. 2008-08-13 16:57:14 -07:00
Andreas Gal
9c95a20382 Merge. 2008-08-13 16:43:46 -07:00
Andreas Gal
e702dc5ac4 When re-importing register values after a tree call, make sure to use the inner tree's nativeStackBase, since we also use the inner tree's sp. 2008-08-13 16:29:59 -07:00
Brendan Eich
7fc14c40cf Fix bogus varval assert. 2008-08-13 16:14:22 -07:00
Andreas Gal
27c128f706 Merge. 2008-08-13 15:50:40 -07:00
Andreas Gal
e68f9ee859 Read back registers used by inner tree relative to inner_sp (the adjusted sp value). Print frames we enter into and return to in Enter/LeaveFrame. 2008-08-13 15:50:11 -07:00
Brendan Eich
3d21588b2c Major and winning overhaul to for-in codegen (mad props to Andreas for advice). 2008-08-13 14:02:35 -07:00
Andreas Gal
892137794b Don't call inner trees if they use global slots since we don't support those in inner trees yet. 2008-08-13 14:00:37 -07:00
Andreas Gal
1d809d7adf Merge. 2008-08-13 13:52:21 -07:00
Andreas Gal
fa09943222 Flexible call stack allocation with proper guarding for call stack overflows. 2008-08-13 13:51:59 -07:00
David Anderson
ff9bb9ea9d Fixed ifop predicting NaNs as true when they should be false. 2008-08-13 12:25:50 -07:00
Andreas Gal
fa3085ca3d Merge. Nothing to see here. Move along. 2008-08-13 03:55:24 -07:00
Andreas Gal
5d7914a698 Blacklist a trace if we hit a global shape mismatch. This makes us suck less on date-format-tofte until we find a way to fix the property cache misses. 2008-08-13 03:54:54 -07:00
Andreas Gal
2a60d7a27b Only trash the tree, not the entire cash, on global shape mismatch. 2008-08-13 03:50:53 -07:00
Brendan Eich
ed5f8343a2 Fix deep for-in loop bug (450334). 2008-08-13 00:41:13 -07:00
Andreas Gal
335fb1edd8 Merge. 2008-08-12 23:31:12 -07:00
Andreas Gal
91e81a361d Don't cache loads in import into the nativeFrameTracker, since when coming back from a nested tree we re-load the frame state into registers using import() based on the called tree's state, which pushes loads into the nativeFrameTracker that are relative to the inner tree's call depth. Only cache on writes now, which should be always safe. 2008-08-12 23:30:49 -07:00
Brendan Eich
17a4dd5c46 Remove bogus assertion. 2008-08-12 23:30:38 -07:00
Andreas Gal
8af146d25b Merge. 2008-08-12 23:25:40 -07:00
Andreas Gal
a271a0ee0e When re-importing registers after a tree call, make sure to use the inner trees calldepth at its side exit, not the call depths of the calling tree. 2008-08-12 23:25:17 -07:00
Brendan Eich
452bea0c69 Fix missing argument stack offset computation (in both places: FORALL_FRAME_SLOTS and nativeStackOffset). Clear missing args in nativeFrameTracker. 2008-08-12 23:21:52 -07:00
Andreas Gal
58cd4dc419 Introduce a large fixed-size native frame stack and store its ceiling in state->eos. 2008-08-12 21:39:44 -07:00
Andreas Gal
3fd013cd9b Merge. 2008-08-12 20:19:05 -07:00
Andreas Gal
ed3125b915 Hands down the hardest bug I had to debug in TM so far. Make sure to read back any registers an inner tree might have changed before writing out the typemap for the nested_exit guard, otherwise we might be pointing to old stale pre-(inner-)loop state and pick an incorrect (in this case too narrow) type. fannkuch=2.8x with this. 2008-08-12 20:18:29 -07:00
Brendan Eich
967ec56341 - Add String match and three replace overloadings, and allow known native matching to continue in search of exact match (not best, and not abort on first mismatch).
- Add CallGetter built-in and use it for regexp class-getter-implemented prototype properties.
- Add BUILTIN5 support (this should be "it" ;-).
2008-08-12 18:52:28 -07:00
Brendan Eich
48181da4e7 Use aobj consistently in test_property_cache (450317). 2008-08-12 17:21:32 -07:00
Andreas Gal
d56662f293 Enumerate missing argument slots on the caller's stack and initialize them to undefined (450304). 2008-08-12 16:51:55 -07:00
Andreas Gal
1819586877 js_obj_hasOwnProperty is supposed to return a boolean but was incorrectly generating code to return a number, resulting on a failure in the boolean comparison due to an unexpected i2f (450304). 2008-08-12 14:28:15 -07:00
Brendan Eich
64fa74acf5 More guard argument formatting. 2008-08-12 11:36:52 -07:00
Brendan Eich
827b341985 Consolidate common name (global slot) addressing code. 2008-08-12 09:42:29 -07:00
Brendan Eich
26c7507913 Put trailing args on their own lines when they otherwise would seem to associate with a nested call in a previous arg position. 2008-08-12 09:27:54 -07:00
Brendan Eich
fd08308ba0 Fix goto over init whinage. 2008-08-12 09:18:19 -07:00
shaver@mozilla.org
1813fb2fa7 NAMEINC, INCNAME, NAMEDEC, DECNAME 2008-08-12 11:33:40 -04:00
Andreas Gal
b94f5433e5 Merge. 2008-08-12 03:40:16 -07:00
Andreas Gal
b4f7639e6e Don't read type from typemap if we already have it in a local variable. 2008-08-12 02:00:05 -07:00
Andreas Gal
7e95e972d8 Don't re-record traces over and over in case of excessive type mismatches. Instead, blacklist the fragment and slowly back away from recording it. 2008-08-12 01:31:28 -07:00
Brendan Eich
8d77aad49c JSOP_FORNAME. 2008-08-12 01:06:02 -07:00
Brendan Eich
d2e6e9e641 Factor forInOp from JSOP_FORLOCAL, use it from JSOP_FORARG's recorder too; tighten up JSOP_SETNAME. 2008-08-12 00:34:43 -07:00
Brendan Eich
e90731a3b6 Comments for JSOP_{,STRICT}{EQ,NE} about the layering and constraints on evolution of the non-strict equality ops' recorders. 2008-08-11 23:44:43 -07:00
shaver@mozilla.org
cfc93a30d9 cmp over number and (string or bool or undefined) 2008-08-12 01:05:33 -04:00
shaver@mozilla.org
2b16f54740 reland eb01b1d55d9b after the mismerge 2008-08-12 00:37:16 -04:00
shaver@mozilla.org
ba5a56aa89 reland 3ea1e1317707 after the mismerge 2008-08-12 00:36:25 -04:00
Brendan Eich
2cbfd79ea0 Restore lost shaver rev 0e50c89c476b -- how did that get lost? 2008-08-11 20:27:47 -07:00
Brendan Eich
a63e9a65ba Merge, sigh. 2008-08-11 19:21:42 -07:00
Brendan Eich
bba0ea3906 Rename js_DestroyJIT to js_FinishJIT to match Init/Finish vs. New/Destroy naming scheme used elsewhere; use same #if conditions around #include jstracer.h as around code depending on it. 2008-08-11 19:17:30 -07:00