Mass remove all the empty directories
[WebKit-https.git] / Source / JavaScriptCore / ChangeLog
1 2013-04-10  Benjamin Poulain  <bpoulain@apple.com>
2
3         Mass remove all the empty directories
4
5         Rubberstamped by Ryosuke Niwa.
6
7         * qt/api: Removed.
8         * qt/benchmarks/qscriptengine: Removed.
9         * qt/benchmarks/qscriptvalue: Removed.
10         * qt/tests/qscriptengine: Removed.
11         * qt/tests/qscriptstring: Removed.
12         * qt/tests/qscriptvalue: Removed.
13         * qt/tests/qscriptvalueiterator: Removed.
14
15 2013-04-10  Mark Hahnenberg  <mhahnenberg@apple.com>
16
17         JSObject::getOwnNonIndexPropertyNames calculates numCacheableSlots incorrectly
18         https://bugs.webkit.org/show_bug.cgi?id=114235
19
20         Reviewed by Filip Pizlo.
21
22         If the object doesn't have any properties but the prototype does, we'll assume those prototype properties are 
23         accessible in the base object's backing store, which is bad.
24
25         * runtime/JSObject.cpp:
26         (JSC::JSObject::getPropertyNames):
27         (JSC::JSObject::getOwnNonIndexPropertyNames):
28         * runtime/PropertyNameArray.h:
29         (JSC::PropertyNameArray::PropertyNameArray):
30         (JSC::PropertyNameArray::setNumCacheableSlotsForObject):
31         (JSC::PropertyNameArray::setBaseObject):
32         (PropertyNameArray):
33
34 2013-04-10  Patrick Gansterer  <paroga@webkit.org>
35
36         Remove code duplicates from MacroAssemblerARM
37         https://bugs.webkit.org/show_bug.cgi?id=104457
38
39         Reviewed by Oliver Hunt.
40
41         Reuse some existing methods to avoid duplicated code.
42
43         * assembler/MacroAssemblerARM.h:
44         (JSC::MacroAssemblerARM::store8):
45         (JSC::MacroAssemblerARM::store32):
46         (JSC::MacroAssemblerARM::swap):
47         (JSC::MacroAssemblerARM::add32):
48         (JSC::MacroAssemblerARM::sub32):
49
50 2013-04-10  Michael Saboff  <msaboff@apple.com>
51
52         DFG: Negative size for new Array() interpreted as large unsigned int
53         https://bugs.webkit.org/show_bug.cgi?id=114366
54
55         Reviewed by Oliver Hunt.
56
57         Added new check in operationNewArrayWithSize() for a negative
58         size.  If size is negative throw a "RangeError: Array size is not a
59         small enough positive integer" exception.
60
61         * dfg/DFGOperations.cpp:
62
63 2013-04-10  peavo@outlook.com  <peavo@outlook.com>
64
65         WinCairo build fails to link.
66         https://bugs.webkit.org/show_bug.cgi?id=114358
67
68         Reviewed by Brent Fulgham.
69
70         Export the symbol WTF::MD5::checksum().
71
72         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def:
73         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExports.def.in:
74
75 2013-04-08  Anders Carlsson  <andersca@apple.com>
76
77         Remove unneeded headers from FrameLoader.h
78         https://bugs.webkit.org/show_bug.cgi?id=114223
79
80         Reviewed by Geoffrey Garen.
81
82         Update for WTF changes.
83
84         * bytecode/SpeculatedType.h:
85         * runtime/JSCJSValue.h:
86
87 2013-04-09  Geoffrey Garen  <ggaren@apple.com>
88
89         Removed bitrotted TimeoutChecker code
90         https://bugs.webkit.org/show_bug.cgi?id=114336
91
92         Reviewed by Alexey Proskuryakov.
93
94         This mechanism hasn't worked for a while.
95
96         MarkL is working on a new version of this feature with a distinct
97         implementation.
98
99         * API/APIShims.h:
100         (JSC::APIEntryShim::~APIEntryShim):
101         (JSC::APIEntryShim::init):
102         * GNUmakefile.list.am:
103         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
104         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def:
105         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
106         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters:
107         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExports.def.in:
108         * JavaScriptCore.xcodeproj/project.pbxproj:
109         * Target.pri:
110         * dfg/DFGGPRInfo.h:
111         * jit/JIT.cpp:
112         * jit/JIT.h:
113         * jit/JITStubs.cpp:
114         * jit/JITStubs.h:
115         * jit/JSInterfaceJIT.h:
116         (JSInterfaceJIT):
117         * runtime/JSGlobalData.cpp:
118         (JSC::JSGlobalData::JSGlobalData):
119         * runtime/JSGlobalData.h:
120         * runtime/JSGlobalObject.cpp:
121         * runtime/JSONObject.cpp:
122         (JSC::Stringifier::appendStringifiedValue):
123         (JSC::Walker::walk):
124         * runtime/TimeoutChecker.cpp: Removed.
125         * runtime/TimeoutChecker.h: Removed.
126
127 2013-04-10  Oliver Hunt  <oliver@apple.com>
128
129         REGRESSION (r148073): WebKit Nightly r148082 crashes on launch in JSObjectSetPrivate
130         https://bugs.webkit.org/show_bug.cgi?id=114341
131
132         Reviewed by Alexey Proskuryakov.
133
134         Make JSObjectSetPrivate use uncheckedToJS as some clients
135         clear their private data during finalization for some reason.
136
137         * API/JSObjectRef.cpp:
138         (JSObjectSetPrivate):
139
140 2013-04-09  Oliver Hunt  <oliver@apple.com>
141
142         Add liveness tests to JSC API entry points
143         https://bugs.webkit.org/show_bug.cgi?id=114318
144
145         Reviewed by Geoffrey Garen.
146
147         Add simple checks for the existence of a method table on any
148         JSCells passed across the API.  This in turn forces a structure
149         validity test.
150
151         * API/APICast.h:
152         (toJS):
153         (toJSForGC):
154         (unsafeToJS):
155         * API/JSObjectRef.cpp:
156         (JSObjectGetPrivate):
157
158 2013-04-09  Oliver Hunt  <oliver@apple.com>
159
160         Rollout last patch as it destroyed everything
161
162         * API/APICast.h:
163         (toJS):
164         (toJSForGC):
165
166 2013-04-09  Oliver Hunt  <oliver@apple.com>
167
168         Add liveness tests to JSC API entry points
169         https://bugs.webkit.org/show_bug.cgi?id=114318
170
171         Reviewed by Filip Pizlo.
172
173         Add simple checks for the existence of a method table on any
174         JSCells passed across the API.  This in turn forces a structure
175         validity test.
176
177         * API/APICast.h:
178         (toJS):
179         (toJSForGC):
180
181 2013-04-09  Balazs Kilvady  <kilvadyb@homejinni.com>
182
183         LLInt conditional branch compilation fault on MIPS.
184         https://bugs.webkit.org/show_bug.cgi?id=114264
185
186         Reviewed by Filip Pizlo.
187
188         Fix conditional branch compilation in LLInt offlineasm.
189
190         * offlineasm/mips.rb:
191
192 2013-04-08  Mark Hahnenberg  <mhahnenberg@apple.com>
193
194         JSObject::getOwnNonIndexPropertyNames calculates numCacheableSlots incorrectly
195         https://bugs.webkit.org/show_bug.cgi?id=114235
196
197         Reviewed by Geoffrey Garen.
198
199         Due to the way that numCacheableSlots is currently calculated, checking an object's prototype for enumerable 
200         properties causes us not to cache any properties at all. We should only cache properties on the object itself
201         since we currently don't take advantage of any sort of name caching for properties in the prototype chain.
202         This fix undoes a ~2% SunSpider regression caused by http://trac.webkit.org/changeset/147570.
203
204         * runtime/JSObject.cpp:
205         (JSC::JSObject::getOwnNonIndexPropertyNames):
206
207 2013-04-09  Ryosuke Niwa  <rniwa@webkit.org>
208
209         Remove yarr.gyp
210         https://bugs.webkit.org/show_bug.cgi?id=114247
211
212         Reviewed by Benjamin Poulain.
213
214         * yarr/yarr.gyp: Removed.
215
216 2013-04-08  Ryosuke Niwa  <rniwa@webkit.org>
217
218         Remove JavaScriptCore.gyp/gypi
219         https://bugs.webkit.org/show_bug.cgi?id=114238
220
221         Reviewed by Benjamin Poulain.
222
223         * JavaScriptCore.gyp: Removed.
224         * JavaScriptCore.gyp/.gitignore: Removed.
225         * JavaScriptCore.gypi: Removed.
226
227 2013-04-08  Vahag Vardanyan  <vaag@ispras.ru>
228
229         Adds fromCharCode intrinsic support.
230         https://bugs.webkit.org/show_bug.cgi?id=104807
231
232         Reviewed by Oliver Hunt.
233
234         Switch to using fromCharCode intrinsic instead of call operation in some cases.
235
236         * dfg/DFGAbstractState.cpp:
237         (JSC::DFG::AbstractState::executeEffects):
238         * dfg/DFGByteCodeParser.cpp:
239         (JSC::DFG::ByteCodeParser::handleIntrinsic):
240         * dfg/DFGFixupPhase.cpp:
241         (JSC::DFG::FixupPhase::fixupNode):
242         * dfg/DFGNodeType.h:
243         (DFG):
244         * dfg/DFGOperations.cpp:
245         * dfg/DFGOperations.h:
246         * dfg/DFGPredictionPropagationPhase.cpp:
247         (JSC::DFG::PredictionPropagationPhase::propagate):
248         * dfg/DFGSpeculativeJIT.cpp:
249         (JSC::DFG::SpeculativeJIT::compileFromCharCode):
250         (DFG):
251         * dfg/DFGSpeculativeJIT.h:
252         (JSC::DFG::SpeculativeJIT::callOperation):
253         (SpeculativeJIT):
254         * dfg/DFGSpeculativeJIT32_64.cpp:
255         (JSC::DFG::SpeculativeJIT::compile):
256         * dfg/DFGSpeculativeJIT64.cpp:
257         (JSC::DFG::SpeculativeJIT::compile):
258         * runtime/StringConstructor.cpp:
259         (JSC::stringFromCharCode):
260         (JSC):
261         * runtime/StringConstructor.h:
262         (JSC):
263
264 2013-04-08  Benjamin Poulain  <benjamin@webkit.org>
265
266         Remove HTML Notification
267         https://bugs.webkit.org/show_bug.cgi?id=114231
268
269         Reviewed by Ryosuke Niwa.
270
271         * Configurations/FeatureDefines.xcconfig:
272
273 2013-04-05  Roger Fong  <roger_fong@apple.com>
274
275         Build fix.
276
277         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def:
278         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExports.def.in:
279
280 2013-04-08  Filip Pizlo  <fpizlo@apple.com>
281
282         DFG should be able to inline string equality comparisons
283         https://bugs.webkit.org/show_bug.cgi?id=114224
284
285         Reviewed by Oliver Hunt.
286         
287         Inline 8-bit string equality, go to slow path for 16-bit strings. 2x speed-up for string equality
288         comparisons on 8-bit strings. 20-50% speed-up on JSRegress/HashMap tests. 30% speed-up on
289         string-fasta. 2% speed-up on SunSpider overall. Some small speed-ups elsewhere.
290
291         This is a gnarly change but we have loads of test coverage already between the HashMap tests and
292         preexisting DFG string equality tests (which appear to have been designed to test OSR exits, but
293         also give us good overall coverage on string equality behavior).
294
295         * dfg/DFGFixupPhase.cpp:
296         (JSC::DFG::FixupPhase::fixupNode):
297         * dfg/DFGOperations.cpp:
298         * dfg/DFGOperations.h:
299         * dfg/DFGSpeculativeJIT.cpp:
300         (JSC::DFG::SpeculativeJIT::compilePeepHoleBranch):
301         (JSC::DFG::SpeculativeJIT::compare):
302         (JSC::DFG::SpeculativeJIT::compileStrictEq):
303         (JSC::DFG::SpeculativeJIT::compileStringEquality):
304         (DFG):
305         * dfg/DFGSpeculativeJIT.h:
306         (SpeculativeJIT):
307
308 2013-04-08  Geoffrey Garen  <ggaren@apple.com>
309
310         Stop #include-ing all of JavaScriptCore in every DOM-related file
311         https://bugs.webkit.org/show_bug.cgi?id=114220
312
313         Reviewed by Sam Weinig.
314
315         I separated WeakInlines.h from Weak.h so WebCore data types that need
316         to declare a Weak<T> data member don't have to #include all of the
317         infrastructure for accessing that data member.
318
319         This also required separating Weak<T> from PassWeak<T> by removing the
320         WeakImplAccessor class template and pushing code down into its subclasses.
321
322         * API/JSWeakObjectMapRefPrivate.cpp:
323         * JavaScriptCore.xcodeproj/project.pbxproj:
324         * bytecode/UnlinkedCodeBlock.h:
325         * heap/PassWeak.h:
326         (JSC):
327         (PassWeak):
328         (JSC::::PassWeak):
329         (JSC::::operator):
330         (JSC::::get):
331         * heap/SlotVisitorInlines.h:
332         * heap/Weak.h:
333         (JSC):
334         (Weak):
335         * heap/WeakInlines.h: Copied from Source/JavaScriptCore/heap/Weak.h.
336         (JSC):
337         (JSC::::Weak):
338         (JSC::::operator):
339         (JSC::::get):
340         (JSC::::was):
341         (JSC::weakClear):
342         * jit/JITThunks.h:
343         * runtime/RegExpCache.h:
344         * runtime/Structure.h:
345         * runtime/WeakGCMap.h:
346
347 2013-04-05  Roger Fong  <roger_fong@apple.com>
348
349         Windows build fix fix.
350
351         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def:
352
353 2013-04-05  Roger Fong  <roger_fong@apple.com>
354
355         Windows build fix.
356
357         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def:
358         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExports.def.in:
359
360 2013-04-08  Oliver Hunt  <oliver@apple.com>
361
362         Make resolve more robust in the face of lookup misses
363         https://bugs.webkit.org/show_bug.cgi?id=114211
364
365         Reviewed by Filip Pizlo.
366
367         This simply short circuits the resolve operations in the
368         event that we don't find a path to a property.  There's no
369         repro case for this happening unfortunately.
370
371         * llint/LLIntSlowPaths.cpp:
372         (JSC::LLInt::LLINT_SLOW_PATH_DECL):
373
374 2013-04-08  Oliver Hunt  <oliver@apple.com>
375
376         Build fix.
377
378         * assembler/ARMv7Assembler.h:
379         (ARMv7Assembler):
380
381 2013-04-08  Justin Haygood  <jhaygood@reaktix.com>
382
383         Allow KeywordLookupGenerator.py to work on Windows with Windows style line endings
384         https://bugs.webkit.org/show_bug.cgi?id=63234
385
386         Reviewed by Oliver Hunt.
387
388         * KeywordLookupGenerator.py:
389         (parseKeywords):
390
391 2013-04-08  Filip Pizlo  <fpizlo@apple.com>
392
393         REGRESSION(r146669): Assertion hit in JSC::DFG::SpeculativeJIT::fillSpeculateCell() running webgl tests
394         https://bugs.webkit.org/show_bug.cgi?id=114129
395         <rdar://problem/13594898>
396
397         Reviewed by Darin Adler.
398         
399         The check to see if we need a cell check when simplifying a GetById or PutById needs to be hoisted to
400         above where we abstractly execute the instruction, since after we abstracting execute it, it will
401         seem like it no longer needs the cell check.
402
403         * dfg/DFGConstantFoldingPhase.cpp:
404         (JSC::DFG::ConstantFoldingPhase::foldConstants):
405
406 2013-04-07  Oliver Hunt  <oliver@apple.com>
407
408         Add bounds checking for WTF::Vector::operator[]
409         https://bugs.webkit.org/show_bug.cgi?id=89600
410
411         Reviewed by Filip Pizlo.
412
413         Make a few JSC classes opt-out of release mode bounds checking.
414
415         * assembler/AssemblerBuffer.h:
416         (AssemblerBuffer):
417         * assembler/AssemblerBufferWithConstantPool.h:
418         (AssemblerBufferWithConstantPool):
419         * bytecode/CodeBlock.cpp:
420         (JSC::CodeBlock::CodeBlock):
421         (JSC::CodeBlock::bytecodeOffset):
422         (JSC):
423         (JSC::replaceExistingEntries):
424         * bytecode/CodeBlock.h:
425         (JSC::CodeBlock::bytecodeOffsetForCallAtIndex):
426         (JSC::CodeBlock::callReturnIndexVector):
427         (JSC::CodeBlock::codeOrigins):
428         (RareData):
429         * bytecode/UnlinkedCodeBlock.h:
430         (JSC::UnlinkedEvalCodeBlock::adoptVariables):
431         (UnlinkedEvalCodeBlock):
432         * bytecompiler/BytecodeGenerator.cpp:
433         (JSC::BytecodeGenerator::BytecodeGenerator):
434         (JSC::BytecodeGenerator::emitNewArray):
435         (JSC::BytecodeGenerator::emitCall):
436         (JSC::BytecodeGenerator::emitConstruct):
437         * bytecompiler/BytecodeGenerator.h:
438         (CallArguments):
439         (JSC::BytecodeGenerator::instructions):
440         (BytecodeGenerator):
441         * bytecompiler/StaticPropertyAnalysis.h:
442         (JSC::StaticPropertyAnalysis::create):
443         (JSC::StaticPropertyAnalysis::StaticPropertyAnalysis):
444         (StaticPropertyAnalysis):
445         * bytecompiler/StaticPropertyAnalyzer.h:
446         (StaticPropertyAnalyzer):
447         (JSC::StaticPropertyAnalyzer::StaticPropertyAnalyzer):
448         * dfg/DFGJITCompiler.cpp:
449         (JSC::DFG::JITCompiler::link):
450         * parser/ASTBuilder.h:
451         (ASTBuilder):
452         * runtime/ArgList.h:
453         (MarkedArgumentBuffer):
454         * runtime/ArrayPrototype.cpp:
455         (JSC::arrayProtoFuncSort):
456
457 2013-04-07  Benjamin Poulain  <benjamin@webkit.org>
458
459         Use Vector::reserveInitialCapacity() when possible in JavaScriptCore runtime
460         https://bugs.webkit.org/show_bug.cgi?id=114111
461
462         Reviewed by Andreas Kling.
463
464         Almost all the code was already using Vector::reserveInitialCapacity()
465         and Vector::uncheckedAppend(). Fix the remaining parts.
466
467         * runtime/ArgList.h:
468         (MarkedArgumentBuffer): The type VectorType is unused.
469
470         * runtime/ArrayPrototype.cpp:
471         (JSC::arrayProtoFuncSort):
472         Move the variable closer to where it is needed.
473
474         * runtime/JSArray.cpp:
475         (JSC::JSArray::setLengthWithArrayStorage):
476         * runtime/JSObject.cpp:
477         (JSC::JSObject::getOwnPropertyNames):
478
479 2013-04-07  Patrick Gansterer  <paroga@webkit.org>
480
481         Remove references to Skia and V8 from CMake files
482         https://bugs.webkit.org/show_bug.cgi?id=114130
483
484         Reviewed by Geoffrey Garen.
485
486         * shell/PlatformBlackBerry.cmake:
487
488 2013-04-07  David Kilzer  <ddkilzer@apple.com>
489
490         Remove the rest of SVG_DOM_OBJC_BINDINGS
491         <http://webkit.org/b/114112>
492
493         Reviewed by Geoffrey Garen.
494
495         * Configurations/FeatureDefines.xcconfig:
496         - Remove ENABLE_SVG_DOM_OBJC_BINDINGS macro.
497
498 2013-04-07  Oliver Hunt  <oliver@apple.com>
499
500         Inspector should display information about non-object exceptions
501         https://bugs.webkit.org/show_bug.cgi?id=114123
502
503         Reviewed by Adele Peterson.
504
505         Make sure we store the right stack information, even when throwing
506         a primitive.
507
508         * interpreter/CallFrame.h:
509         (JSC::ExecState::clearSupplementaryExceptionInfo):
510         (ExecState):
511         * interpreter/Interpreter.cpp:
512         (JSC::Interpreter::addStackTraceIfNecessary):
513         (JSC::Interpreter::throwException):
514
515 2013-04-06  Oliver Hunt  <oliver@apple.com>
516
517         Unify the many and varied stack trace mechanisms, and make the result sane.
518         https://bugs.webkit.org/show_bug.cgi?id=114072
519
520         Reviewed by Filip Pizlo.
521
522         Makes JSC::StackFrame record the bytecode offset and other necessary data
523         rather than requiring us to perform eager evaluation of the line number, etc.
524         Then remove most of the users of retrieveLastCaller, as most of them were
525         using it to create a stack trace in a fairly incomplete and inefficient way.
526
527         StackFrame now also has a couple of helpers to get the line and column info.
528
529         * API/JSContextRef.cpp:
530         (JSContextCreateBacktrace):
531         * bytecompiler/BytecodeGenerator.cpp:
532         (JSC::BytecodeGenerator::emitDebugHook):
533         * interpreter/Interpreter.cpp:
534         (JSC):
535         (JSC::Interpreter::dumpRegisters):
536         (JSC::Interpreter::unwindCallFrame):
537         (JSC::getBytecodeOffsetForCallFrame):
538         (JSC::getCallerInfo):
539         (JSC::StackFrame::line):
540         (JSC::StackFrame::column):
541         (JSC::StackFrame::expressionInfo):
542         (JSC::StackFrame::toString):
543         (JSC::Interpreter::getStackTrace):
544         (JSC::Interpreter::addStackTraceIfNecessary):
545         (JSC::Interpreter::retrieveCallerFromVMCode):
546         * interpreter/Interpreter.h:
547         (StackFrame):
548         (Interpreter):
549         * runtime/Error.cpp:
550         (JSC::throwError):
551         * runtime/JSGlobalData.h:
552         (JSC):
553         (JSGlobalData):
554         * runtime/JSGlobalObject.cpp:
555         (JSC::DynamicGlobalObjectScope::DynamicGlobalObjectScope):
556
557 2013-04-06  Geoffrey Garen  <ggaren@apple.com>
558
559         Removed v8 bindings hooks from IDL files
560         https://bugs.webkit.org/show_bug.cgi?id=114091
561
562         Reviewed by Anders Carlsson and Sam Weinig.
563
564         * heap/HeapStatistics.h:
565
566 2013-04-03  Roger Fong  <roger_fong@apple.com>
567
568         Windows VS2010 build fix.
569
570         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExports.def.in:
571
572 2013-04-06  Zan Dobersek  <zdobersek@igalia.com>
573
574         Remove the remaining PLATFORM(CHROMIUM) guard in JavaScriptCore
575         https://bugs.webkit.org/show_bug.cgi?id=114082
576
577         Reviewed by Ryosuke Niwa.
578
579         * runtime/JSExportMacros.h: Remove the remaining PLATFORM(CHROMIUM) guard.
580
581 2013-04-06  Ed Bartosh  <bartosh@gmail.com>
582
583         --minimal build fails with error: control reaches end of non-void function
584         https://bugs.webkit.org/show_bug.cgi?id=114085
585
586         Reviewed by Oliver Hunt.
587
588         * interpreter/Interpreter.cpp: return 0 if JIT is not enabled
589         (JSC::getBytecodeOffsetForCallFrame):
590
591 2013-04-06  Geoffrey Garen  <ggaren@apple.com>
592
593         Try to fix the Windows build.
594
595         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def:
596         Added back a symbol that is exported.
597
598 2013-04-06  Geoffrey Garen  <ggaren@apple.com>
599
600         Try to fix the Windows build.
601
602         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def:
603         Removed symbols that aren't exported.
604
605 2013-04-06  Geoffrey Garen  <ggaren@apple.com>
606
607         Rolled out 147820 and 147818 because they caused plugins tests to ASSERT
608         https://bugs.webkit.org/show_bug.cgi?id=114094
609
610         Reviewed by Anders Carlsson.
611
612         * API/JSContextRef.cpp:
613         (JSContextCreateBacktrace):
614         * bytecompiler/BytecodeGenerator.cpp:
615         (JSC::BytecodeGenerator::emitDebugHook):
616         * interpreter/Interpreter.cpp:
617         (JSC):
618         (JSC::Interpreter::dumpRegisters):
619         (JSC::Interpreter::unwindCallFrame):
620         (JSC::getLineNumberForCallFrame):
621         (JSC::getCallerInfo):
622         (JSC::Interpreter::getStackTrace):
623         (JSC::Interpreter::addStackTraceIfNecessary):
624         (JSC::Interpreter::retrieveCallerFromVMCode):
625         * interpreter/Interpreter.h:
626         (StackFrame):
627         (JSC::StackFrame::toString):
628         (JSC::StackFrame::friendlyLineNumber):
629         (Interpreter):
630         * runtime/Error.cpp:
631         (JSC::throwError):
632         * runtime/JSGlobalData.h:
633         (JSC):
634         (JSGlobalData):
635         * runtime/JSGlobalObject.cpp:
636         (JSC::DynamicGlobalObjectScope::DynamicGlobalObjectScope):
637
638 2013-04-06  Patrick Gansterer  <paroga@webkit.org>
639
640         Unreviewed build fix after r146932.
641
642         * profiler/ProfilerDatabase.cpp:
643         (Profiler):
644
645 2013-04-06  Patrick Gansterer  <paroga@webkit.org>
646
647         Do not call getenv() on Windows CE where it does not exist.
648
649         * runtime/JSGlobalData.cpp:
650         (JSC::JSGlobalData::JSGlobalData):
651
652 2013-04-05  Benjamin Poulain  <benjamin@webkit.org>
653
654         Second attempt to fix the Windows bot
655
656         Unreviewed.
657
658         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def:
659         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExports.def.in:
660
661 2013-04-05  Benjamin Poulain  <bpoulain@apple.com>
662
663         Attempt to fix the Windows bot
664
665         Unreviewed.
666
667         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def:
668         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExports.def.in:
669         r147825 removed the symbol for nullptr_t. Add it back.
670
671 2013-04-02  Roger Fong  <roger_fong@apple.com>
672
673         Build fix.
674
675         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def:
676         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExports.def.in:
677
678 2013-04-05  Oliver Hunt  <oliver@apple.com>
679
680         Build fix.
681
682         * interpreter/Interpreter.cpp:
683         (JSC::getBytecodeOffsetForCallFrame):
684
685 2013-04-05  Oliver Hunt  <oliver@apple.com>
686
687         Unify the many and varied stack trace mechanisms, and make the result sane.
688         https://bugs.webkit.org/show_bug.cgi?id=114072
689
690         Reviewed by Filip Pizlo.
691
692         Makes JSC::StackFrame record the bytecode offset and other necessary data
693         rather than requiring us to perform eager evaluation of the line number, etc.
694         Then remove most of the users of retrieveLastCaller, as most of them were
695         using it to create a stack trace in a fairly incomplete and inefficient way.
696
697         StackFrame now also has a couple of helpers to get the line and column info.
698
699         * API/JSContextRef.cpp:
700         (JSContextCreateBacktrace):
701         * bytecompiler/BytecodeGenerator.cpp:
702         (JSC::BytecodeGenerator::emitDebugHook):
703         * interpreter/Interpreter.cpp:
704         (JSC):
705         (JSC::Interpreter::dumpRegisters):
706         (JSC::Interpreter::unwindCallFrame):
707         (JSC::getBytecodeOffsetForCallFrame):
708         (JSC::getCallerInfo):
709         (JSC::StackFrame::line):
710         (JSC::StackFrame::column):
711         (JSC::StackFrame::expressionInfo):
712         (JSC::StackFrame::toString):
713         (JSC::Interpreter::getStackTrace):
714         (JSC::Interpreter::addStackTraceIfNecessary):
715         (JSC::Interpreter::retrieveCallerFromVMCode):
716         * interpreter/Interpreter.h:
717         (StackFrame):
718         (Interpreter):
719         * runtime/Error.cpp:
720         (JSC::throwError):
721         * runtime/JSGlobalData.h:
722         (JSC):
723         (JSGlobalData):
724         * runtime/JSGlobalObject.cpp:
725         (JSC::DynamicGlobalObjectScope::DynamicGlobalObjectScope):
726
727 2013-04-05  Mark Hahnenberg  <mhahnenberg@apple.com>
728
729         tryCacheGetByID sets StructureStubInfo accessType to an incorrect value
730         https://bugs.webkit.org/show_bug.cgi?id=114068
731
732         Reviewed by Geoffrey Garen.
733
734         In the case where we have a non-Value cacheable property, we set the StructureStubInfo accessType to 
735         get_by_id_self, but then we don't patch self and instead patch in a get_by_id_self_fail. This leads to 
736         incorrect profiling data so when the DFG compiles the function, it uses a GetByOffset rather than a GetById, 
737         which leads to loading a GetterSetter directly out of an object.
738
739         * jit/JITStubs.cpp:
740         (JSC::tryCacheGetByID):
741         (JSC::DEFINE_STUB_FUNCTION):
742
743 2013-04-05  Filip Pizlo  <fpizlo@apple.com>
744
745         If CallFrame::trueCallFrame() knows that it's about to read garbage instead of a valid CodeOrigin/InlineCallFrame, then it should give up and return 0 and all callers should be robust against this
746         https://bugs.webkit.org/show_bug.cgi?id=114062
747
748         Reviewed by Oliver Hunt.
749
750         * bytecode/CodeBlock.h:
751         (JSC::CodeBlock::canGetCodeOrigin):
752         (CodeBlock):
753         * interpreter/CallFrame.cpp:
754         (JSC::CallFrame::trueCallFrame):
755         * interpreter/Interpreter.cpp:
756         (JSC::Interpreter::getStackTrace):
757
758 2013-04-05  Geoffrey Garen  <ggaren@apple.com>
759
760         Made USE(JSC) unconditional
761         https://bugs.webkit.org/show_bug.cgi?id=114058
762
763         Reviewed by Anders Carlsson.
764
765         * config.h:
766
767 2013-04-05  Filip Pizlo  <fpizlo@apple.com>
768
769         Unreviewed, rolling out http://trac.webkit.org/changeset/147729
770
771         It's causing a bunch of breakage on some more strict compilers:
772         <inline asm>:1267:2: error: ambiguous instructions require an explicit suffix (could be 'ficomps', or 'ficompl')
773
774         * offlineasm/x86.rb:
775
776 2013-04-05  Roger Fong  <roger_fong@apple.com>
777
778         More VS2010 solution makefile fixes.
779         <rdar://problem/13588964>
780
781         * JavaScriptCore.vcxproj/JavaScriptCore.make:
782
783 2013-04-05  Allan Sandfeld Jensen  <allan.jensen@digia.com>
784
785         LLint should be able to use x87 instead of SSE for floating pointer
786
787         https://bugs.webkit.org/show_bug.cgi?id=112239
788
789         Reviewed by Filip Pizlo.
790
791         Implements LLInt floating point operations in x87, to ensure we support
792         x86 without SSE2.
793
794         X86 (except 64bit) now defaults to using x87 instructions in order to
795         support all 32bit x86 back to i686. The implementation uses the fucomi
796         instruction from i686 which sets the new minimum.
797
798         * offlineasm/x86.rb:
799
800 2013-04-04  Christophe Dumez  <ch.dumez@sisa.samsung.com>
801
802         Unreviewed EFL build fix.
803
804         We had undefined reference to `JSC::CodeOrigin::maximumBytecodeIndex'.
805
806         * bytecode/CodeBlock.cpp:
807         (JSC::CodeBlock::findClosureCallForReturnPC):
808         (JSC::CodeBlock::bytecodeOffset):
809
810 2013-04-04  Geoffrey Garen  <ggaren@apple.com>
811
812         Stop pretending that statements return a value
813         https://bugs.webkit.org/show_bug.cgi?id=113969
814
815         Reviewed by Oliver Hunt.
816
817         Expressions have an intrinsic value, which they return to their parent
818         in the AST.
819
820         Statements just execute for effect in sequence.
821
822         This patch moves emitBytecode into the ExpressionNode and StatementNode
823         subclasses, and changes the SatementNode subclass to return void. This
824         eliminates some cruft where we used to return 0, or try to save a bogus
825         register and return it, as if a statement had a consuming parent in the
826         AST.
827
828         * bytecompiler/BytecodeGenerator.h:
829         (JSC::BytecodeGenerator::emitNode):
830         (BytecodeGenerator):
831         (JSC::BytecodeGenerator::emitNodeInConditionContext):
832         * bytecompiler/NodesCodegen.cpp:
833         (JSC::ConstStatementNode::emitBytecode):
834         (JSC::BlockNode::emitBytecode):
835         (JSC::EmptyStatementNode::emitBytecode):
836         (JSC::DebuggerStatementNode::emitBytecode):
837         (JSC::ExprStatementNode::emitBytecode):
838         (JSC::VarStatementNode::emitBytecode):
839         (JSC::IfNode::emitBytecode):
840         (JSC::IfElseNode::emitBytecode):
841         (JSC::DoWhileNode::emitBytecode):
842         (JSC::WhileNode::emitBytecode):
843         (JSC::ForNode::emitBytecode):
844         (JSC::ForInNode::emitBytecode):
845         (JSC::ContinueNode::emitBytecode):
846         (JSC::BreakNode::emitBytecode):
847         (JSC::ReturnNode::emitBytecode):
848         (JSC::WithNode::emitBytecode):
849         (JSC::CaseClauseNode::emitBytecode):
850         (JSC::CaseBlockNode::emitBytecodeForBlock):
851         (JSC::SwitchNode::emitBytecode):
852         (JSC::LabelNode::emitBytecode):
853         (JSC::ThrowNode::emitBytecode):
854         (JSC::TryNode::emitBytecode):
855         (JSC::ScopeNode::emitStatementsBytecode):
856         (JSC::ProgramNode::emitBytecode):
857         (JSC::EvalNode::emitBytecode):
858         (JSC::FunctionBodyNode::emitBytecode):
859         (JSC::FuncDeclNode::emitBytecode):
860         * parser/NodeConstructors.h:
861         (JSC::PropertyListNode::PropertyListNode):
862         (JSC::ArgumentListNode::ArgumentListNode):
863         * parser/Nodes.h:
864         (Node):
865         (ExpressionNode):
866         (StatementNode):
867         (ConstStatementNode):
868         (BlockNode):
869         (EmptyStatementNode):
870         (DebuggerStatementNode):
871         (ExprStatementNode):
872         (VarStatementNode):
873         (IfNode):
874         (IfElseNode):
875         (DoWhileNode):
876         (WhileNode):
877         (ForNode):
878         (ForInNode):
879         (ContinueNode):
880         (BreakNode):
881         (ReturnNode):
882         (WithNode):
883         (LabelNode):
884         (ThrowNode):
885         (TryNode):
886         (ProgramNode):
887         (EvalNode):
888         (FunctionBodyNode):
889         (FuncDeclNode):
890         (CaseBlockNode):
891         (SwitchNode):
892
893 2013-04-04  Oliver Hunt  <oliver@apple.com>
894
895         Exception stack unwinding doesn't handle inline callframes correctly
896         https://bugs.webkit.org/show_bug.cgi?id=113952
897
898         Reviewed by Geoffrey Garen.
899
900         The basic problem here is that the exception stack unwinding was
901         attempting to be "clever" and avoid doing a correct stack walk
902         as it "knew" inline callframes couldn't have exception handlers.
903
904         This used to be safe as the exception handling machinery was
905         designed to fail gently and just claim that no handler existed.
906         This was "safe" and even "correct" inasmuch as we currently
907         don't run any code with exception handlers through the dfg.
908
909         This patch fixes the logic by simply making everything uniformly
910         use the safe stack walking machinery, and making the correct
911         boundary checks occur everywhere that they should.
912
913         * bytecode/CodeBlock.cpp:
914         (JSC::CodeBlock::findClosureCallForReturnPC):
915         (JSC::CodeBlock::bytecodeOffset):
916         * interpreter/Interpreter.cpp:
917         (JSC):
918         (JSC::Interpreter::dumpRegisters):
919         (JSC::Interpreter::unwindCallFrame):
920         (JSC::getCallerInfo):
921         (JSC::Interpreter::getStackTrace):
922         (JSC::Interpreter::retrieveCallerFromVMCode):
923
924 2013-04-04  Geoffrey Garen  <ggaren@apple.com>
925
926         Removed a defunct comment
927         https://bugs.webkit.org/show_bug.cgi?id=113948
928
929         Reviewed by Oliver Hunt.
930
931         This is also a convenient way to test the EWS.
932
933         * bytecompiler/BytecodeGenerator.cpp:
934         (JSC):
935
936 2013-04-04  Martin Robinson  <mrobinson@igalia.com>
937
938         [GTK] Remove the gyp build
939         https://bugs.webkit.org/show_bug.cgi?id=113942
940
941         Reviewed by Gustavo Noronha Silva.
942
943         * JavaScriptCore.gyp/JavaScriptCoreGTK.gyp: Removed.
944         * JavaScriptCore.gyp/redirect-stdout.sh: Removed.
945
946 2013-04-04  Geoffrey Garen  <ggaren@apple.com>
947
948         Simplified bytecode generation by merging prefix and postfix nodes
949         https://bugs.webkit.org/show_bug.cgi?id=113925
950
951         Reviewed by Filip Pizlo.
952
953         PostfixNode now inherits from PrefixNode, so when we detect that we're
954         in a context where postifx and prefix are equivalent, PostFixNode can
955         just call through to PrefixNode codegen, instead of duplicating the
956         logic.
957
958         * bytecompiler/NodesCodegen.cpp:
959         (JSC::PostfixNode::emitResolve):
960         (JSC::PostfixNode::emitBracket):
961         (JSC::PostfixNode::emitDot):
962         * parser/NodeConstructors.h:
963         (JSC::PostfixNode::PostfixNode):
964         * parser/Nodes.h:
965         (JSC):
966         (PrefixNode):
967         (PostfixNode):
968
969 2013-04-04  Andras Becsi  <andras.becsi@digia.com>
970
971         Fix the build with GCC 4.8
972         https://bugs.webkit.org/show_bug.cgi?id=113147
973
974         Reviewed by Allan Sandfeld Jensen.
975
976         Initialize JSObject* exception to suppress warnings that make
977         the build fail because of -Werror=maybe-uninitialized.
978
979         * runtime/Executable.cpp:
980         (JSC::FunctionExecutable::compileForCallInternal):
981         (JSC::FunctionExecutable::compileForConstructInternal):
982
983 2013-04-02  Mark Hahnenberg  <mhahnenberg@apple.com>
984
985         get_by_pname can become confused when iterating over objects with static properties
986         https://bugs.webkit.org/show_bug.cgi?id=113831
987
988         Reviewed by Geoffrey Garen.
989
990         get_by_pname doesn't take static properties into account when using a JSPropertyNameIterator to directly 
991         access an object's backing store. One way to fix this is to not cache any properties when iterating over 
992         objects with static properties. This patch fixes the bug that was originally reported on swisscom.ch.
993
994         * runtime/JSObject.cpp:
995         (JSC::JSObject::getOwnNonIndexPropertyNames):
996         * runtime/JSPropertyNameIterator.cpp:
997         (JSC::JSPropertyNameIterator::create):
998         * runtime/PropertyNameArray.h:
999         (JSC::PropertyNameArray::PropertyNameArray):
1000         (JSC::PropertyNameArray::numCacheableSlots):
1001         (JSC::PropertyNameArray::setNumCacheableSlots):
1002         (PropertyNameArray):
1003
1004 2013-04-02  Geoffrey Garen  <ggaren@apple.com>
1005
1006         DFG should compile a little sooner
1007         https://bugs.webkit.org/show_bug.cgi?id=113835
1008
1009         Unreviewed.
1010
1011         Rolled out r147511 because it was based on incorrect performance
1012         measurement.
1013
1014         * bytecode/CodeBlock.cpp:
1015         (JSC::CodeBlock::optimizationThresholdScalingFactor):
1016
1017 2013-04-02  Geoffrey Garen  <ggaren@apple.com>
1018
1019         DFG should compile a little sooner
1020         https://bugs.webkit.org/show_bug.cgi?id=113835
1021
1022         Reviewed by Michael Saboff.
1023
1024         2% speedup on SunSpider.
1025
1026         2% speedup on JSRegress.
1027
1028         Neutral on Octane, v8, and Kraken.
1029
1030         The worst-hit single sub-test is kraken-stanford-crypto-ccm.js, which gets
1031         18% slower. Since Kraken is neutral overall in its preferred mean, I
1032         think that's OK for now.
1033
1034         (Our array indexing speculation fails pathologically on
1035         kraken-stanford-crypto-ccm.js. Compiling sooner is a regression because
1036         it triggers those failures sooner. I'm going to file some follow-up bugs
1037         explaining how to fix our speculations on this sub-test, at which point
1038         compiling earlier should become a slight speedup on Kraken overall.)
1039
1040         * bytecode/CodeBlock.cpp:
1041         (JSC::CodeBlock::optimizationThresholdScalingFactor): I experimented
1042         with a few different options, including reducing the coefficient 'a'.
1043         A simple linear reduction on instruction count worked best.
1044
1045 2013-04-01  Benjamin Poulain  <benjamin@webkit.org>
1046
1047         Use Vector::reserveInitialCapacity and Vector::uncheckedAppend for JSC's APIs
1048         https://bugs.webkit.org/show_bug.cgi?id=113651
1049
1050         Reviewed by Andreas Kling.
1051
1052         This removes a bunch of branches on initialization and when
1053         filling the vector.
1054
1055         * API/JSCallbackConstructor.cpp:
1056         (JSC::constructJSCallback):
1057         * API/JSCallbackFunction.cpp:
1058         (JSC::JSCallbackFunction::call):
1059         * API/JSCallbackObjectFunctions.h:
1060         (JSC::::construct):
1061         (JSC::::call):
1062         * API/JSObjectRef.cpp:
1063         (JSObjectCopyPropertyNames):
1064
1065 2013-04-01  Mark Hahnenberg  <mhahnenberg@apple.com>
1066
1067         Fixing borked VS 2010 project file
1068
1069         Unreviewed bot greening.
1070
1071         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
1072         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters:
1073
1074 2013-04-01  Mark Hahnenberg  <mhahnenberg@apple.com>
1075
1076         One more Windows build fix
1077
1078         Unreviewed.
1079
1080         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExports.def.in:
1081
1082 2013-04-01  Mark Hahnenberg  <mhahnenberg@apple.com>
1083
1084         More build fallout fixes.
1085
1086         Unreviewed build fix.
1087
1088         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def: Add new export symbols.
1089         * heap/SuperRegion.cpp: Windows didn't like "LLU". 
1090
1091 2013-04-01  Mark Hahnenberg  <mhahnenberg@apple.com>
1092
1093         r147324 broke the world
1094         https://bugs.webkit.org/show_bug.cgi?id=113704
1095
1096         Unreviewed build fix.
1097
1098         Remove a bunch of unused variables and use the correctly sized types for 32-bit platforms.
1099
1100         * heap/BlockAllocator.cpp:
1101         (JSC::BlockAllocator::BlockAllocator):
1102         * heap/BlockAllocator.h:
1103         (BlockAllocator):
1104         * heap/Heap.cpp:
1105         (JSC::Heap::Heap):
1106         * heap/SuperRegion.cpp:
1107         (JSC::SuperRegion::SuperRegion):
1108         * heap/SuperRegion.h:
1109         (SuperRegion):
1110
1111 2013-04-01  Mark Hahnenberg  <mhahnenberg@apple.com>
1112
1113         32-bit Windows build fix
1114
1115         Unreviewed build fix.
1116
1117         * heap/SuperRegion.cpp:
1118         * heap/SuperRegion.h: Use uint64_t instead of size_t.
1119         (SuperRegion):
1120
1121 2013-04-01  Mark Hahnenberg  <mhahnenberg@apple.com>
1122
1123         EFL build fix
1124
1125         Unreviewed build fix.
1126
1127         * CMakeLists.txt:
1128
1129 2013-03-31  Mark Hahnenberg  <mhahnenberg@apple.com>
1130
1131         Regions should be allocated from the same contiguous segment of virtual memory
1132         https://bugs.webkit.org/show_bug.cgi?id=113662
1133
1134         Reviewed by Filip Pizlo.
1135
1136         Instead of letting the OS spread our Regions all over the place, we should allocate them all within 
1137         some range of each other. This change will open the door to some other optimizations, e.g. doing simple 
1138         range checks for our write barriers and compressing JSCell pointers to 32-bits.
1139
1140         Added new SuperRegion class that encapsulates allocating Regions from a contiguous reserved chunk of 
1141         virtual address space. It functions very similarly to the FixedVMPoolExecutableAllocator class used by the JIT.
1142
1143         Also added two new subclasses of Region, NormalRegion and ExcessRegion. 
1144         
1145         NormalRegion is the type of Region that is normally allocated when there is available space remaining 
1146         in the SuperRegion. If we ever run out of space in the SuperRegion, we fall back to allocating 
1147         ExcessRegions, which are identical to how Regions have behaved up until now, i.e. they contain a 
1148         PageAllocationAligned.
1149
1150         We only use the SuperRegion (and NormalRegions) on 64-bit systems, since it doesn't make sense to reserve the 
1151         entire 4 GB address space on 32-bit systems just for the JS heap.
1152
1153         * GNUmakefile.list.am:
1154         * JavaScriptCore.gypi:
1155         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
1156         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
1157         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters:
1158         * JavaScriptCore.xcodeproj/project.pbxproj:
1159         * Target.pri:
1160         * heap/BlockAllocator.cpp:
1161         (JSC::BlockAllocator::BlockAllocator):
1162         * heap/BlockAllocator.h:
1163         (JSC):
1164         (BlockAllocator):
1165         (JSC::BlockAllocator::allocate):
1166         (JSC::BlockAllocator::allocateCustomSize):
1167         (JSC::BlockAllocator::deallocateCustomSize):
1168         * heap/Heap.cpp:
1169         (JSC::Heap::Heap):
1170         (JSC):
1171         (JSC::Heap::didExceedFixedHeapSizeLimit):
1172         * heap/Heap.h:
1173         (Heap):
1174         * heap/MarkedBlock.cpp:
1175         (JSC::MarkedBlock::create):
1176         * heap/Region.h:
1177         (Region):
1178         (JSC):
1179         (NormalRegion):
1180         (JSC::NormalRegion::base):
1181         (JSC::NormalRegion::size):
1182         (ExcessRegion):
1183         (JSC::ExcessRegion::base):
1184         (JSC::ExcessRegion::size):
1185         (JSC::NormalRegion::NormalRegion):
1186         (JSC::NormalRegion::tryCreate):
1187         (JSC::NormalRegion::tryCreateCustomSize):
1188         (JSC::NormalRegion::reset):
1189         (JSC::ExcessRegion::ExcessRegion):
1190         (JSC::ExcessRegion::~ExcessRegion):
1191         (JSC::ExcessRegion::create):
1192         (JSC::ExcessRegion::createCustomSize):
1193         (JSC::ExcessRegion::reset):
1194         (JSC::Region::Region):
1195         (JSC::Region::initializeBlockList):
1196         (JSC::Region::create):
1197         (JSC::Region::createCustomSize):
1198         (JSC::Region::~Region):
1199         (JSC::Region::destroy):
1200         (JSC::Region::reset):
1201         (JSC::Region::deallocate):
1202         (JSC::Region::base):
1203         (JSC::Region::size):
1204         * heap/SuperRegion.cpp: Added.
1205         (JSC):
1206         (JSC::SuperRegion::SuperRegion):
1207         (JSC::SuperRegion::getAlignedBase):
1208         (JSC::SuperRegion::allocateNewSpace):
1209         (JSC::SuperRegion::notifyNeedPage):
1210         (JSC::SuperRegion::notifyPageIsFree):
1211         * heap/SuperRegion.h: Added.
1212         (JSC):
1213         (SuperRegion):
1214
1215 2013-04-01  Benjamin Poulain  <benjamin@webkit.org>
1216
1217         Remove an unused variable from the ARMv7 Assembler
1218         https://bugs.webkit.org/show_bug.cgi?id=113653
1219
1220         Reviewed by Andreas Kling.
1221
1222         * assembler/ARMv7Assembler.h:
1223         (ARMv7Assembler):
1224
1225 2013-03-31  Adam Barth  <abarth@webkit.org>
1226
1227         [Chromium] Yarr should build using a separate GYP file from JavaScriptCore
1228         https://bugs.webkit.org/show_bug.cgi?id=113652
1229
1230         Reviewed by Nico Weber.
1231
1232         This patch moves JavaScriptCore.gyp to yarr.gyp because Chromium only
1233         uses this GYP file to build yarr.
1234
1235         * JavaScriptCore.gyp/JavaScriptCoreGTK.gyp:
1236         * JavaScriptCore.gypi:
1237         * yarr/yarr.gyp: Renamed from Source/JavaScriptCore/JavaScriptCore.gyp/JavaScriptCore.gyp.
1238
1239 2013-03-31  Filip Pizlo  <fpizlo@apple.com>
1240
1241         Unreviewed, fix a comment. While thinking about TBAA for array accesses,
1242         I realized that we have to be super careful about aliasing of typed arrays.
1243
1244         * dfg/DFGCSEPhase.cpp:
1245         (JSC::DFG::CSEPhase::getByValLoadElimination):
1246
1247 2013-03-30  Mark Hahnenberg  <mhahnenberg@apple.com>
1248
1249         Move Region into its own header
1250         https://bugs.webkit.org/show_bug.cgi?id=113617
1251
1252         Reviewed by Geoffrey Garen.
1253
1254         BlockAllocator.h is getting a little crowded. We should move the Region class into its own 
1255         header, since it's pretty independent from the BlockAllocator.
1256
1257         * GNUmakefile.list.am:
1258         * JavaScriptCore.gypi:
1259         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
1260         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
1261         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters:
1262         * JavaScriptCore.xcodeproj/project.pbxproj:
1263         * heap/BlockAllocator.h:
1264         (JSC):
1265         * heap/Region.h: Added.
1266         (JSC):
1267         (DeadBlock):
1268         (JSC::DeadBlock::DeadBlock):
1269         (Region):
1270         (JSC::Region::blockSize):
1271         (JSC::Region::isFull):
1272         (JSC::Region::isEmpty):
1273         (JSC::Region::isCustomSize):
1274         (JSC::Region::create):
1275         (JSC::Region::createCustomSize):
1276         (JSC::Region::Region):
1277         (JSC::Region::~Region):
1278         (JSC::Region::reset):
1279         (JSC::Region::allocate):
1280         (JSC::Region::deallocate):
1281
1282 2013-03-29  Mark Hahnenberg  <mhahnenberg@apple.com>
1283
1284         Objective-C API: Remove -[JSManagedValue managedValueWithValue:owner:]
1285         https://bugs.webkit.org/show_bug.cgi?id=113602
1286
1287         Reviewed by Geoffrey Garen.
1288
1289         Since we put the primary way of keeping track of external object graphs (i.e. "managed" references) 
1290         in JSVirtualMachine, there is some overlap in the functionality of that interface and JSManagedValue.
1291         Specifically, we no longer need the methods that include an owner, since ownership is now tracked 
1292         by JSVirtualMachine. These JSManagedValues will become weak pointers unless they are used 
1293         with [JSVirtualMachine addManagedReference:withOwner:], in which case their lifetime is tied to that 
1294         of their owner.
1295
1296         * API/JSManagedValue.h:
1297         * API/JSManagedValue.mm:
1298         (-[JSManagedValue init]):
1299         (-[JSManagedValue initWithValue:]):
1300         (JSManagedValueHandleOwner::isReachableFromOpaqueRoots):
1301         * API/JSVirtualMachine.mm:
1302         (getInternalObjcObject):
1303         * API/tests/testapi.mm:
1304         (-[TextXYZ setOnclick:]):
1305         (-[TextXYZ dealloc]):
1306
1307 2013-03-29  Geoffrey Garen  <ggaren@apple.com>
1308
1309         Simplified bytecode generation by unforking "condition context" codegen
1310         https://bugs.webkit.org/show_bug.cgi?id=113554
1311
1312         Reviewed by Mark Hahnenberg.
1313
1314         Now, a node that establishes a condition context can always ask its child
1315         nodes to generate into that context.
1316
1317         This has a few advantages:
1318
1319         (*) Removes a bunch of code;
1320
1321         (*) Optimizes a few missed cases like "if (!(x < 2))", "if (!!x)", and
1322         "if (!x || !y)";
1323
1324         (*) Paves the way to removing more opcodes.
1325
1326         * bytecode/Opcode.h:
1327         (JSC): Separated out the branching opcodes for clarity.
1328         * bytecompiler/NodesCodegen.cpp:
1329         (JSC::ExpressionNode::emitBytecodeInConditionContext): All expressions
1330         can be emitted in a condition context now -- the default behavior is
1331         to branch based on the expression's value.
1332
1333         (JSC::LogicalNotNode::emitBytecodeInConditionContext):
1334         (JSC::LogicalOpNode::emitBytecodeInConditionContext):
1335         (JSC::ConditionalNode::emitBytecode):
1336         (JSC::IfNode::emitBytecode):
1337         (JSC::IfElseNode::emitBytecode):
1338         (JSC::DoWhileNode::emitBytecode):
1339         (JSC::WhileNode::emitBytecode):
1340         (JSC::ForNode::emitBytecode):
1341         * parser/Nodes.h:
1342         (JSC::ExpressionNode::isSubtract):
1343         (ExpressionNode):
1344         (LogicalNotNode):
1345         (LogicalOpNode): Removed lots of code for handling expressions
1346         that couldn't generate into a condition context because all expressions
1347         can now.
1348
1349 2013-03-28  Geoffrey Garen  <ggaren@apple.com>
1350
1351         Simplified the bytecode by removing op_loop and op_loop_if_*
1352         https://bugs.webkit.org/show_bug.cgi?id=113548
1353
1354         Reviewed by Filip Pizlo.
1355
1356         Regular jumps will suffice.
1357
1358         These opcodes are identical to branches, except they also do timeout
1359         checking. That style of timeout checking has been broken for a long 
1360         time, and when we add back timeout checking, it won't use these opcodes.
1361
1362         * JavaScriptCore.order:
1363         * bytecode/CodeBlock.cpp:
1364         (JSC::CodeBlock::dumpBytecode):
1365         * bytecode/Opcode.h:
1366         (JSC):
1367         (JSC::padOpcodeName):
1368         * bytecode/PreciseJumpTargets.cpp:
1369         (JSC::computePreciseJumpTargets):
1370         * bytecompiler/BytecodeGenerator.cpp:
1371         (JSC::BytecodeGenerator::emitJump):
1372         (JSC::BytecodeGenerator::emitJumpIfTrue):
1373         (JSC::BytecodeGenerator::emitJumpIfFalse):
1374         * dfg/DFGByteCodeParser.cpp:
1375         (JSC::DFG::ByteCodeParser::parseBlock):
1376         * dfg/DFGCapabilities.h:
1377         (JSC::DFG::canCompileOpcode):
1378         * jit/JIT.cpp:
1379         (JSC::JIT::privateCompileMainPass):
1380         (JSC::JIT::privateCompileSlowCases):
1381         * jit/JIT.h:
1382         (JIT):
1383         (JSC):
1384         * llint/LowLevelInterpreter.asm:
1385         * llint/LowLevelInterpreter32_64.asm:
1386         * llint/LowLevelInterpreter64.asm:
1387
1388 2013-03-28  Geoffrey Garen  <ggaren@apple.com>
1389
1390         Simplified the bytecode by removing op_jmp_scopes
1391         https://bugs.webkit.org/show_bug.cgi?id=113545
1392
1393         Reviewed by Filip Pizlo.
1394
1395         We already have op_pop_scope and op_jmp, so we don't need op_jmp_scopes.
1396         Using op_jmp_scopes was also adding a "jump to self" to codegen for
1397         return statements, which was pretty silly.
1398
1399         * JavaScriptCore.order:
1400         * bytecode/CodeBlock.cpp:
1401         (JSC::CodeBlock::dumpBytecode):
1402         * bytecode/Opcode.h:
1403         (JSC::padOpcodeName):
1404         * bytecode/PreciseJumpTargets.cpp:
1405         (JSC::computePreciseJumpTargets):
1406         * bytecompiler/BytecodeGenerator.cpp:
1407         (JSC::BytecodeGenerator::emitComplexPopScopes):
1408         (JSC::BytecodeGenerator::emitPopScopes):
1409         * bytecompiler/BytecodeGenerator.h:
1410         (BytecodeGenerator):
1411         * bytecompiler/NodesCodegen.cpp:
1412         (JSC::ContinueNode::emitBytecode):
1413         (JSC::BreakNode::emitBytecode):
1414         (JSC::ReturnNode::emitBytecode):
1415         * jit/JIT.cpp:
1416         (JSC::JIT::privateCompileMainPass):
1417         * jit/JIT.h:
1418         * jit/JITOpcodes.cpp:
1419         * jit/JITOpcodes32_64.cpp:
1420         * jit/JITStubs.cpp:
1421         * jit/JITStubs.h:
1422         * llint/LLIntSlowPaths.cpp:
1423         * llint/LLIntSlowPaths.h:
1424         * llint/LowLevelInterpreter.asm:
1425
1426 2013-03-28  Mark Hahnenberg  <mhahnenberg@apple.com>
1427
1428         Safari hangs during test262 run in CodeCache::pruneSlowCase
1429         https://bugs.webkit.org/show_bug.cgi?id=113469
1430
1431         Reviewed by Geoffrey Garen.
1432
1433         We can end up hanging for quite some time if we add a lot of small keys to the CodeCache.
1434         By the time we get around to pruning the cache, we have a potentially tens or hundreds of 
1435         thousands of small entries, which can cause a noticeable hang when pruning them.
1436
1437         To fix this issue we added a hard cap to the number of entries in the cache because we 
1438         could potentially have to remove every element in the map.
1439
1440         * runtime/CodeCache.cpp:
1441         (JSC::CodeCacheMap::pruneSlowCase): We need to prune until we're both under the hard cap and the
1442         capacity in bytes.
1443         * runtime/CodeCache.h:
1444         (CodeCacheMap):
1445         (JSC::CodeCacheMap::numberOfEntries): Convenience accessor function to the number of entries in 
1446         the map that does the cast to size_t of m_map.size() for us. 
1447         (JSC::CodeCacheMap::canPruneQuickly): Checks that the total number is under the hard cap. We put this 
1448         check inside a function to more accurately describe why we're doing the check and to abstract out 
1449         the actual calculation in case we want to coalesce calls to pruneSlowCase in the future.
1450         (JSC::CodeCacheMap::prune): Check the number of entries against our hard cap. If it's greater than
1451         the cap then we need to drop down to pruneSlowCase.
1452
1453 2013-03-28  Zan Dobersek  <zdobersek@igalia.com>
1454
1455         Unreviewed build fix for the EFL and GTK ports.
1456
1457         * runtime/CodeCache.cpp:
1458         (JSC::CodeCacheMap::pruneSlowCase): Pass a 0 casted to the int64_t type instead of 0LL
1459         to the std::max call so the arguments' types match.
1460
1461 2013-03-27  Geoffrey Garen  <ggaren@apple.com>
1462
1463         Unreviewed build fix: Removed a dead field.
1464
1465         Pointed out by Mark Lam.
1466
1467         * dfg/DFGByteCodeParser.cpp:
1468         (JSC::DFG::ByteCodeParser::ByteCodeParser):
1469         (ByteCodeParser):
1470
1471 2013-03-27  Geoffrey Garen  <ggaren@apple.com>
1472
1473         Unreviewed build fix: Removed a dead field.
1474
1475         * dfg/DFGByteCodeParser.cpp:
1476         (JSC::DFG::ByteCodeParser::ByteCodeParser):
1477         (ByteCodeParser):
1478
1479 2013-03-27  Geoffrey Garen  <ggaren@apple.com>
1480
1481         Removed some dead code in the DFG bytecode parser
1482         https://bugs.webkit.org/show_bug.cgi?id=113472
1483
1484         Reviewed by Sam Weinig.
1485
1486         Now that Phi creation and liveness analysis are separate passes, we can
1487         remove the vestiges of code that used to do that in the bytecode
1488         parser.
1489
1490         * dfg/DFGByteCodeParser.cpp:
1491         (ByteCodeParser):
1492         (JSC::DFG::ByteCodeParser::addToGraph):
1493         (JSC::DFG::ByteCodeParser::parse):
1494
1495 2013-03-27  Filip Pizlo  <fpizlo@apple.com>
1496
1497         JIT and DFG should NaN-check loads from Float32 arrays
1498         https://bugs.webkit.org/show_bug.cgi?id=113462
1499         <rdar://problem/13490804>
1500
1501         Reviewed by Mark Hahnenberg.
1502
1503         * dfg/DFGSpeculativeJIT.cpp:
1504         (JSC::DFG::SpeculativeJIT::compileGetByValOnFloatTypedArray):
1505         * jit/JITPropertyAccess.cpp:
1506         (JSC::JIT::emitFloatTypedArrayGetByVal):
1507
1508 2013-03-27  Mark Hahnenberg  <mhahnenberg@apple.com>
1509
1510         CodeCache::m_capacity can becoming negative, producing undefined results in pruneSlowCase
1511         https://bugs.webkit.org/show_bug.cgi?id=113453
1512
1513         Reviewed by Geoffrey Garen.
1514
1515         * runtime/CodeCache.cpp:
1516         (JSC::CodeCacheMap::pruneSlowCase): We make sure that m_minCapacity doesn't drop below zero now.
1517         This prevents m_capacity from doing the same.
1518
1519 2013-03-27  Filip Pizlo  <fpizlo@apple.com>
1520
1521         DFG should use CheckStructure for typed array checks whenever possible
1522         https://bugs.webkit.org/show_bug.cgi?id=113374
1523
1524         Reviewed by Geoffrey Garen.
1525         
1526         We used to do the right thing, but it appears that this regressed at some point. Since the
1527         FixupPhase now has the ability to outright remove spurious CheckStructures on array
1528         operations, it is profitable for the ByteCodeParser to insert CheckStructures whenver there
1529         is a chance that it might be profitable, and when the profiling tells us what structure to
1530         check.
1531         
1532         Also added some code for doing ArrayProfile debugging.
1533         
1534         This is a slightly speed-up. Maybe 3% on Mandreel.
1535
1536         * bytecode/ArrayProfile.cpp:
1537         (JSC::ArrayProfile::computeUpdatedPrediction):
1538         * dfg/DFGArrayMode.h:
1539         (JSC::DFG::ArrayMode::benefitsFromStructureCheck):
1540
1541 2013-03-27  Zeno Albisser  <zeno@webkit.org>
1542
1543         [Qt] Remove Qt specific WorkQueueItem definitions.
1544         https://bugs.webkit.org/show_bug.cgi?id=112891
1545
1546         This patch is preparation work for removing
1547         WorkQueue related code from TestRunnerQt and
1548         replacing it with generic TestRunner code.
1549
1550         Reviewed by Benjamin Poulain.
1551
1552         * API/JSStringRefQt.cpp:
1553         (JSStringCreateWithQString):
1554             Adding a convenience function to create a
1555             JSStringRef from a QString.
1556         * API/JSStringRefQt.h:
1557
1558 2013-03-26  Filip Pizlo  <fpizlo@apple.com>
1559
1560         REGRESSION: Sometimes, operations on proven strings ignore changes to the string prototype
1561         https://bugs.webkit.org/show_bug.cgi?id=113353
1562         <rdar://problem/13510778>
1563
1564         Reviewed by Mark Hahnenberg and Geoffrey Garen.
1565         
1566         ToString should call speculateStringObject() even if you know that it's a string object, since
1567         it calls it to also get the watchpoint. Note that even with this change, if you do
1568         Phantom(Check:StringObject:@a), it might get eliminated just because we proved that @a is a
1569         string object (thereby eliminating the prototype watchpoint); that's fine since ToString is
1570         MustGenerate and never decays to Phantom.
1571
1572         * dfg/DFGSpeculativeJIT.cpp:
1573         (JSC::DFG::SpeculativeJIT::compileToStringOnCell):
1574         (JSC::DFG::SpeculativeJIT::speculateStringObject):
1575         (JSC::DFG::SpeculativeJIT::speculateStringOrStringObject):
1576         * dfg/DFGSpeculativeJIT.h:
1577         (SpeculativeJIT):
1578         (JSC::DFG::SpeculativeJIT::speculateStringObjectForStructure):
1579
1580 2013-03-26  Mark Hahnenberg  <mhahnenberg@apple.com>
1581
1582         REGRESSION(r144131): It made fast/js/regress/string-repeat-arith.html assert on 32 bit
1583         https://bugs.webkit.org/show_bug.cgi?id=112106
1584
1585         Rubber stamped by Filip Pizlo.
1586
1587         * dfg/DFGSpeculativeJIT.cpp:
1588         (JSC::DFG::SpeculativeJIT::checkGeneratedTypeForToInt32): Get rid of the case for constants because
1589         we would have done constant folding anyways on a ValueToInt32.
1590         * dfg/DFGSpeculativeJIT32_64.cpp:
1591         (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean): Fixed a random compile error with this flag enabled.
1592
1593 2013-03-26  Filip Pizlo  <fpizlo@apple.com>
1594
1595         JSC_enableProfiler=true should also cause JSGlobalData to save the profiler output somewhere
1596         https://bugs.webkit.org/show_bug.cgi?id=113144
1597
1598         Reviewed by Geoffrey Garen.
1599         
1600         Forgot to include Geoff's requested change in the original commit.
1601
1602         * profiler/ProfilerDatabase.cpp:
1603         (Profiler):
1604
1605 2013-03-25  Filip Pizlo  <fpizlo@apple.com>
1606
1607         JSC_enableProfiler=true should also cause JSGlobalData to save the profiler output somewhere
1608         https://bugs.webkit.org/show_bug.cgi?id=113144
1609
1610         Reviewed by Geoffrey Garen.
1611         
1612         Added the ability to save profiler output with JSC_enableProfiler=true. It will save it
1613         to the current directory, or JSC_PROFILER_PATH if the latter was specified.
1614         
1615         This works by saving the Profiler::Database either when it is destroyed or atexit(),
1616         whichever happens first.
1617         
1618         This allows use of the profiler from any WebKit client.
1619
1620         * jsc.cpp:
1621         (jscmain):
1622         * profiler/ProfilerDatabase.cpp:
1623         (Profiler):
1624         (JSC::Profiler::Database::Database):
1625         (JSC::Profiler::Database::~Database):
1626         (JSC::Profiler::Database::registerToSaveAtExit):
1627         (JSC::Profiler::Database::addDatabaseToAtExit):
1628         (JSC::Profiler::Database::removeDatabaseFromAtExit):
1629         (JSC::Profiler::Database::performAtExitSave):
1630         (JSC::Profiler::Database::removeFirstAtExitDatabase):
1631         (JSC::Profiler::Database::atExitCallback):
1632         * profiler/ProfilerDatabase.h:
1633         (JSC::Profiler::Database::databaseID):
1634         (Database):
1635         * runtime/JSGlobalData.cpp:
1636         (JSC::JSGlobalData::JSGlobalData):
1637
1638 2013-03-25  Filip Pizlo  <fpizlo@apple.com>
1639
1640         ArrayMode should not consider SpecOther when refining the base
1641         https://bugs.webkit.org/show_bug.cgi?id=113271
1642
1643         Reviewed by Geoffrey Garen.
1644         
1645         9% speed-up on Octane/pdfjs.
1646
1647         * dfg/DFGArrayMode.cpp:
1648         (JSC::DFG::ArrayMode::refine):
1649
1650 2013-03-26  Csaba Osztrogonác  <ossy@webkit.org>
1651
1652         Fix unused parameter warnings in JITInlines.h
1653         https://bugs.webkit.org/show_bug.cgi?id=112560
1654
1655         Reviewed by Zoltan Herczeg.
1656
1657         * jit/JITInlines.h:
1658         (JSC::JIT::beginUninterruptedSequence):
1659         (JSC::JIT::endUninterruptedSequence):
1660         (JSC):
1661
1662 2013-03-25  Kent Tamura  <tkent@chromium.org>
1663
1664         Rename ENABLE_INPUT_TYPE_DATETIME
1665         https://bugs.webkit.org/show_bug.cgi?id=113254
1666
1667         Reviewed by Kentaro Hara.
1668
1669         Rename ENABLE_INPUT_TYPE_DATETIME to ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE.
1670         Actually I'd like to remove the code, but we shouldn't remove it yet
1671         because we shipped products with it on some platforms.
1672
1673         * Configurations/FeatureDefines.xcconfig:
1674
1675 2013-03-25  Mark Lam  <mark.lam@apple.com>
1676
1677         Offlineasm cloop backend compiles op+branch incorrectly.
1678         https://bugs.webkit.org/show_bug.cgi?id=113146.
1679
1680         Reviewed by Geoffrey Garen.
1681
1682         * dfg/DFGRepatch.h:
1683         (JSC::DFG::dfgResetGetByID):
1684         (JSC::DFG::dfgResetPutByID):
1685         - These functions never return when the DFG is dsiabled, not just when
1686           asserts are enabled. Changing the attribute from NO_RETURN_DUE_TO_ASSERT
1687           to NO_RETURN.
1688         * llint/LLIntOfflineAsmConfig.h:
1689         - Added some #defines needed to get the cloop building again.
1690         * offlineasm/cloop.rb:
1691         - Fix cloopEmitOpAndBranchIfOverflow() and cloopEmitOpAndBranch() to
1692           emit code that unconditionally executes the specified operation before
1693           doing the conditional branch.
1694
1695 2013-03-25  Mark Hahnenberg  <mhahnenberg@apple.com>
1696
1697         JSObject::enterDictionaryIndexingMode doesn't have a case for ALL_BLANK_INDEXING_TYPES
1698         https://bugs.webkit.org/show_bug.cgi?id=113236
1699
1700         Reviewed by Geoffrey Garen.
1701
1702         * runtime/JSObject.cpp:
1703         (JSC::JSObject::enterDictionaryIndexingMode): We forgot blank indexing types.
1704
1705 2013-03-23  Mark Hahnenberg  <mhahnenberg@apple.com>
1706
1707         HandleSet should use HeapBlocks for storing handles
1708         https://bugs.webkit.org/show_bug.cgi?id=113145
1709
1710         Reviewed by Geoffrey Garen.
1711
1712         * GNUmakefile.list.am: Build project changes.
1713         * JavaScriptCore.gypi: Ditto.
1714         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Ditto.
1715         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj: Ditto.
1716         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters: Ditto.
1717         * JavaScriptCore.xcodeproj/project.pbxproj: Ditto.
1718         * heap/BlockAllocator.cpp: Rename the RegionSet to m_fourKBBlockRegionSet because there are 
1719         too many block types to include them all in the name now.
1720         (JSC::BlockAllocator::BlockAllocator):
1721         * heap/BlockAllocator.h:
1722         (BlockAllocator): Add the appropriate override for regionSetFor.
1723         (JSC::WeakBlock):
1724         (JSC::MarkStackSegment):
1725         (JSC::HandleBlock):
1726         * heap/HandleBlock.h: Added.
1727         (HandleBlock): New class for HandleBlocks.
1728         (JSC::HandleBlock::blockFor): Static method to get the block of the given HandleNode pointer. Allows
1729         us to quickly figure out which HandleSet the HandleNode belongs to without storing the pointer to it
1730         in the HandleNode.
1731         (JSC::HandleBlock::handleSet): Getter.
1732         * heap/HandleBlockInlines.h: Added.
1733         (JSC::HandleBlock::create):
1734         (JSC::HandleBlock::HandleBlock):
1735         (JSC::HandleBlock::payloadEnd):
1736         (JSC::HandleBlock::payload):
1737         (JSC::HandleBlock::nodes):
1738         (JSC::HandleBlock::nodeAtIndex):
1739         (JSC::HandleBlock::nodeCapacity):
1740         * heap/HandleSet.cpp:
1741         (JSC::HandleSet::~HandleSet): 
1742         (JSC::HandleSet::grow):
1743         * heap/HandleSet.h:
1744         (HandleNode): Move the internal Node class from HandleSet to be its own public class so it can be 
1745         used by HandleBlock.
1746         (HandleSet): Add a typedef so that Node refers to the new HandleNode class.
1747         (JSC::HandleSet::toHandle):
1748         (JSC::HandleSet::toNode):
1749         (JSC::HandleSet::allocate):
1750         (JSC::HandleSet::deallocate):
1751         (JSC::HandleNode::HandleNode):
1752         (JSC::HandleNode::slot):
1753         (JSC::HandleNode::handleSet): Use the new blockFor static function to get the right HandleBlock and lookup 
1754         the HandleSet.
1755         (JSC::HandleNode::setPrev):
1756         (JSC::HandleNode::prev):
1757         (JSC::HandleNode::setNext):
1758         (JSC::HandleNode::next):
1759         (JSC::HandleSet::forEachStrongHandle):
1760         * heap/Heap.h: Friend HandleSet so that it can access the BlockAllocator when allocating HandleBlocks.
1761
1762 2013-03-22  David Kilzer  <ddkilzer@apple.com>
1763
1764         BUILD FIX (r145119): Make JSValue* properties default to (assign)
1765         <rdar://problem/13380794>
1766
1767         Reviewed by Mark Hahnenberg.
1768
1769         Fixes the following build failures:
1770
1771             Source/JavaScriptCore/API/tests/testapi.mm:106:1: error: no 'assign', 'retain', or 'copy' attribute is specified - 'assign' is assumed [-Werror,-Wobjc-property-no-attribute]
1772             @property JSValue *onclick;
1773             ^
1774             Source/JavaScriptCore/API/tests/testapi.mm:106:1: error: default property attrib ute 'assign' not appropriate for non-GC object [-Werror,-Wobjc-property-no-attribute]
1775             Source/JavaScriptCore/API/tests/testapi.mm:107:1: error: no 'assign', 'retain', or 'copy' attribute is specified - 'assign' is assumed [-Werror,-Wobjc-property-no-attribute]
1776             @property JSValue *weakOnclick;
1777             ^
1778             Source/JavaScriptCore/API/tests/testapi.mm:107:1: error: default property attribute 'assign' not appropriate for non-GC object [-Werror,-Wobjc-property-no-attribute]
1779             4 errors generated.
1780
1781         * API/tests/testapi.mm: Default to (assign) for JSValue*
1782         properties.
1783
1784 2013-03-22  Ryosuke Niwa  <rniwa@webkit.org>
1785
1786         testLeakingPrototypesAcrossContexts added in r146682 doesn't compile on Win and fails on Mac
1787         https://bugs.webkit.org/show_bug.cgi?id=113125
1788
1789         Reviewed by Mark Hahnenberg
1790
1791         Remove the test added in r146682 as it's now failing on Mac.
1792         This is the test that was causing a compilation failure on Windows.
1793
1794         * API/tests/testapi.c:
1795         (main):
1796
1797 2013-03-22  Ryosuke Niwa  <rniwa@webkit.org>
1798
1799         Fix the typo: WIN -> WINDOWS.
1800
1801         * API/tests/testapi.c:
1802         (main):
1803
1804 2013-03-22  Ryosuke Niwa  <rniwa@webkit.org>
1805
1806         I really can't figure out what's wrong with this one.
1807         Temporarily disable the test added by r146682 on Windows since it doesn't compile.
1808
1809         * API/tests/testapi.c:
1810         (main):
1811
1812 2013-03-22  Ryosuke Niwa  <rniwa@webkit.org>
1813
1814         Another build fix (after r146693) for r146682.
1815
1816         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def:
1817         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExports.def.in:
1818
1819 2013-03-22  Roger Fong  <roger_fong@apple.com>
1820
1821         Unreviewed. AppleWin build fix.
1822
1823         * JavaScriptCore.vcproj/JavaScriptCore/copy-files.cmd:
1824         * JavaScriptCore.vcxproj/copy-files.cmd:
1825
1826 2013-03-22  Mark Hahnenberg  <mhahnenberg@apple.com>
1827
1828         -[TinyDOMNode dealloc] should call [super dealloc] when ARC is not enabled
1829         https://bugs.webkit.org/show_bug.cgi?id=113054
1830
1831         Reviewed by Geoffrey Garen.
1832
1833         * API/tests/testapi.mm:
1834         (-[TinyDOMNode dealloc]):
1835
1836 2013-03-22  Mark Hahnenberg  <mhahnenberg@apple.com>
1837
1838         opaqueJSClassData should be cached on JSGlobalObject, not the JSGlobalData
1839         https://bugs.webkit.org/show_bug.cgi?id=113086
1840
1841         Reviewed by Geoffrey Garen.
1842
1843         opaqueJSClassData stores cached prototypes for JSClassRefs in the C API. It doesn't make sense to 
1844         share these prototypes within a JSGlobalData across JSGlobalObjects, and in fact doing so will cause 
1845         a leak of the original JSGlobalObject that these prototypes were created in. Therefore we should move 
1846         this cache to JSGlobalObject where it belongs and where it won't cause memory leaks.
1847
1848         * API/JSBase.cpp: Needed to add an extern "C" so that testapi.c can use the super secret GC function.
1849         * API/JSClassRef.cpp: We now grab the cached context data from the global object rather than the global data.
1850         (OpaqueJSClass::contextData):
1851         * API/JSClassRef.h: Remove this header because it's unnecessary and causes circular dependencies.
1852         * API/tests/testapi.c: Added a new test that makes sure that using the same JSClassRef in two different contexts
1853         doesn't cause leaks of the original global object.
1854         (leakFinalize):
1855         (nestedAllocateObject): This is a hack to bypass the conservative scan of the GC, which was unnecessarily marking
1856         objects and keeping them alive, ruining the test result.
1857         (testLeakingPrototypesAcrossContexts):
1858         (main):
1859         * API/tests/testapi.mm: extern "C" this so we can continue using it here.
1860         * runtime/JSGlobalData.cpp: Remove JSClassRef related stuff.
1861         (JSC::JSGlobalData::~JSGlobalData):
1862         * runtime/JSGlobalData.h:
1863         (JSGlobalData):
1864         * runtime/JSGlobalObject.h: Add the stuff that JSGlobalData had. We add it to JSGlobalObjectRareData so that 
1865         clients who don't use the C API don't have to pay the memory cost of this extra HashMap.
1866         (JSGlobalObject):
1867         (JSGlobalObjectRareData):
1868         (JSC::JSGlobalObject::opaqueJSClassData):
1869
1870 2013-03-19  Martin Robinson  <mrobinson@igalia.com>
1871
1872         [GTK] Add support for building the WebCore bindings to the gyp build
1873         https://bugs.webkit.org/show_bug.cgi?id=112638
1874
1875         Reviewed by Nico Weber.
1876
1877         * JavaScriptCore.gyp/JavaScriptCoreGTK.gyp: Export all include directories to direct
1878         dependents and fix the indentation of the libjavascriptcore target.
1879
1880 2013-03-21  Filip Pizlo  <fpizlo@apple.com>
1881
1882         Fix some minor issues in the DFG's profiling of heap accesses
1883         https://bugs.webkit.org/show_bug.cgi?id=113010
1884
1885         Reviewed by Goeffrey Garen.
1886         
1887         1) If a CodeBlock gets jettisoned by GC, we should count the exit sites.
1888
1889         2) If a CodeBlock clears a structure stub during GC, it should record this, and
1890         the DFG should prefer to not inline that access (i.e. treat it as if it had an
1891         exit site).
1892
1893         3) If a PutById was seen by the baseline JIT, and the JIT attempted to cache it,
1894         but it chose not to, then assume that it will take slow path.
1895
1896         4) If we frequently exited because of a structure check on a weak constant,
1897         don't try to inline that access in the future.
1898
1899         5) Treat all exits that were counted as being frequent.
1900         
1901         81% speed-up on Octane/gbemu. Small speed-ups elsewhere, and no regressions.
1902
1903         * bytecode/CodeBlock.cpp:
1904         (JSC::CodeBlock::finalizeUnconditionally):
1905         (JSC):
1906         (JSC::CodeBlock::resetStubDuringGCInternal):
1907         (JSC::CodeBlock::reoptimize):
1908         (JSC::CodeBlock::jettison):
1909         (JSC::ProgramCodeBlock::jettisonImpl):
1910         (JSC::EvalCodeBlock::jettisonImpl):
1911         (JSC::FunctionCodeBlock::jettisonImpl):
1912         (JSC::CodeBlock::tallyFrequentExitSites):
1913         * bytecode/CodeBlock.h:
1914         (CodeBlock):
1915         (JSC::CodeBlock::tallyFrequentExitSites):
1916         (ProgramCodeBlock):
1917         (EvalCodeBlock):
1918         (FunctionCodeBlock):
1919         * bytecode/GetByIdStatus.cpp:
1920         (JSC::GetByIdStatus::computeFor):
1921         * bytecode/PutByIdStatus.cpp:
1922         (JSC::PutByIdStatus::computeFor):
1923         * bytecode/StructureStubInfo.h:
1924         (JSC::StructureStubInfo::StructureStubInfo):
1925         (StructureStubInfo):
1926         * dfg/DFGByteCodeParser.cpp:
1927         (JSC::DFG::ByteCodeParser::handleGetById):
1928         (JSC::DFG::ByteCodeParser::parseBlock):
1929         * dfg/DFGOSRExit.cpp:
1930         (JSC::DFG::OSRExit::considerAddingAsFrequentExitSiteSlow):
1931         * dfg/DFGOSRExit.h:
1932         (JSC::DFG::OSRExit::considerAddingAsFrequentExitSite):
1933         (OSRExit):
1934         * jit/JITStubs.cpp:
1935         (JSC::DEFINE_STUB_FUNCTION):
1936         * runtime/Options.h:
1937         (JSC):
1938
1939 2013-03-22  Filip Pizlo  <fpizlo@apple.com>
1940
1941         DFG folding of PutById to SimpleReplace should consider the specialized function case
1942         https://bugs.webkit.org/show_bug.cgi?id=113093
1943
1944         Reviewed by Geoffrey Garen and Mark Hahnenberg.
1945
1946         * bytecode/PutByIdStatus.cpp:
1947         (JSC::PutByIdStatus::computeFor):
1948
1949 2013-03-22  David Kilzer  <ddkilzer@apple.com>
1950
1951         BUILD FIX (r146558): Build testapi.mm with ARC enabled for armv7s
1952         <http://webkit.org/b/112608>
1953
1954         Fixes the following build failure:
1955
1956             Source/JavaScriptCore/API/tests/testapi.mm:205:1: error: method possibly missing a [super dealloc] call [-Werror,-Wobjc-missing-super-calls]
1957             }
1958             ^
1959             1 error generated.
1960
1961         * Configurations/ToolExecutable.xcconfig: Enable ARC for armv7s
1962         architecture.
1963
1964 2013-03-22  David Kilzer  <ddkilzer@apple.com>
1965
1966         Revert "BUILD FIX (r146558): Call [super dealloc] from -[TinyDOMNode dealloc]"
1967
1968         This fixes a build failure introduced by this change:
1969
1970             Source/JavaScriptCore/API/tests/testapi.mm:206:6: error: ARC forbids explicit message send of 'dealloc'
1971                 [super dealloc];
1972                  ^     ~~~~~~~
1973             1 error generated.
1974
1975         Not sure why this didn't fail locally on my Mac Pro.
1976
1977         * API/tests/testapi.mm:
1978         (-[TinyDOMNode dealloc]): Remove call to [super dealloc].
1979
1980 2013-03-22  David Kilzer  <ddkilzer@apple.com>
1981
1982         BUILD FIX (r146558): Call [super dealloc] from -[TinyDOMNode dealloc]
1983         <http://webkit.org/b/112608>
1984
1985         Fixes the following build failure:
1986
1987             Source/JavaScriptCore/API/tests/testapi.mm:205:1: error: method possibly missing a [super dealloc] call [-Werror,-Wobjc-missing-super-calls]
1988             }
1989             ^
1990             1 error generated.
1991
1992         * API/tests/testapi.mm:
1993         (-[TinyDOMNode dealloc]): Call [super dealloc].
1994
1995 2013-03-22  Ryosuke Niwa  <rniwa@webkit.org>
1996
1997         Leak bots erroneously report JSC::WatchpointSet as leaking
1998         https://bugs.webkit.org/show_bug.cgi?id=107781
1999
2000         Reviewed by Filip Pizlo.
2001
2002         Since leaks doesn't support tagged pointers, avoid using it by flipping the bit flag to indicate
2003         the entry is "fat". We set the flag when the entry is NOT fat; i.e. slim.
2004
2005         Replaced FatFlag by SlimFlag and initialized m_bits with this flag to indicate that the entry is
2006         initially "slim".
2007
2008         * runtime/SymbolTable.cpp:
2009         (JSC::SymbolTableEntry::copySlow): Don't set FatFlag since it has been replaced by SlimFlag.
2010         (JSC::SymbolTableEntry::inflateSlow): Ditto.
2011
2012         * runtime/SymbolTable.h:
2013         (JSC::SymbolTableEntry::Fast::Fast): Set SlimFlag by default.
2014         (JSC::SymbolTableEntry::Fast::isNull): Ignore SlimFlag.
2015         (JSC::SymbolTableEntry::Fast::isFat): An entry is fat when m_bits is not entirely zero and SlimFlag
2016         is not set.
2017
2018         (JSC::SymbolTableEntry::SymbolTableEntry): Set SlimFlag by default.
2019         (JSC::SymbolTableEntry::SymbolTableEntry::getFast): Set SlimFlag when creating Fast from a fat entry.
2020         (JSC::SymbolTableEntry::isNull): Ignore SlimFlag.
2021         (JSC::SymbolTableEntry::FatEntry::FatEntry): Strip SlimFlag.
2022         (JSC::SymbolTableEntry::isFat): An entry is fat when m_bits is not entirely zero and SlimFlag is unset.
2023         (JSC::SymbolTableEntry::fatEntry): Don't strip FatFlag as this flag doesn't exist anymore.
2024         (JSC::SymbolTableEntry::pack): Preserve SlimFlag.
2025
2026         (JSC::SymbolTableIndexHashTraits): empty value is no longer zero so don't set emptyValueIsZero true.
2027
2028 2013-03-21  Mark Hahnenberg  <mhahnenberg@apple.com>
2029
2030         Objective-C API: Need a good way to preserve custom properties on JS wrappers
2031         https://bugs.webkit.org/show_bug.cgi?id=112608
2032
2033         Reviewed by Geoffrey Garen.
2034
2035         Currently, we just use a weak map, which means that garbage collection can cause a wrapper to 
2036         disappear if it isn't directly exported to JavaScript.
2037
2038         The most straightforward and safe way (with respect to garbage collection and concurrency) is to have 
2039         clients add and remove their external references along with their owners. Effectively, the client is 
2040         recording the structure of the external object graph so that the garbage collector can make sure to 
2041         mark any wrappers that are reachable through either the JS object graph of the external Obj-C object 
2042         graph. By keeping these wrappers alive, this has the effect that custom properties on these wrappers 
2043         will also remain alive.
2044
2045         The rule for if an object needs to be tracked by the runtime (and therefore whether the client should report it) is as follows:
2046         For a particular object, its references to its children should be added if:
2047         1. The child is referenced from JavaScript.
2048         2. The child contains references to other objects for which (1) or (2) are true.
2049
2050         * API/JSAPIWrapperObject.mm:
2051         (JSAPIWrapperObjectHandleOwner::finalize):
2052         (JSAPIWrapperObjectHandleOwner::isReachableFromOpaqueRoots): A wrapper object is kept alive only if its JSGlobalObject
2053         is marked and its corresponding Objective-C object was added to the set of opaque roots.
2054         (JSC::JSAPIWrapperObject::visitChildren): We now call out to scanExternalObjectGraph, which handles adding all Objective-C
2055         objects to the set of opaque roots.
2056         * API/JSAPIWrapperObject.h:
2057         (JSAPIWrapperObject):
2058         * API/JSContext.mm: Moved dealloc to its proper place in the main implementation.
2059         (-[JSContext dealloc]):
2060         * API/JSVirtualMachine.h:
2061         * API/JSVirtualMachine.mm:
2062         (-[JSVirtualMachine initWithContextGroupRef:]):
2063         (-[JSVirtualMachine dealloc]):
2064         (getInternalObjcObject): Helper funciton to get the Objective-C object out of JSManagedValues or JSValues if there is one.
2065         (-[JSVirtualMachine addManagedReference:withOwner:]): Adds the Objective-C object to the set of objects 
2066         owned by the owner object in that particular virtual machine.
2067         (-[JSVirtualMachine removeManagedReference:withOwner:]): Removes the relationship between the two objects.
2068         (-[JSVirtualMachine externalObjectGraph]):
2069         (scanExternalObjectGraph): Does a depth-first search of the external object graph in a particular virtual machine starting at
2070         the specified root. Each new object it encounters it adds to the set of opaque roots. These opaque roots will keep their 
2071         corresponding wrapper objects alive if they have them. 
2072         * API/JSManagedReferenceInternal.h: Added.
2073         * API/JSVirtualMachine.mm: Added the per-JSVirtualMachine map between objects and the objects they own, which is more formally
2074         known as that virtual machine's external object graph.
2075         * API/JSWrapperMap.mm:
2076         (-[JSWrapperMap dealloc]): We were leaking this before :-(
2077         (-[JSVirtualMachine initWithContextGroupRef:]):
2078         (-[JSVirtualMachine dealloc]):
2079         (-[JSVirtualMachine externalObjectGraph]):
2080         * API/JSVirtualMachineInternal.h:
2081         * API/tests/testapi.mm: Added two new tests using the TinyDOMNode class. The first tests that a custom property added to a wrapper 
2082         doesn't vanish after GC, even though that wrapper isn't directly accessible to the JS garbage collector but is accessible through 
2083         the external Objective-C object graph. The second test makes sure that adding an object to the external object graph with the same 
2084         owner doesn't cause any sort of problems.
2085         (+[TinyDOMNode sharedVirtualMachine]):
2086         (-[TinyDOMNode init]):
2087         (-[TinyDOMNode dealloc]):
2088         (-[TinyDOMNode appendChild:]):
2089         (-[TinyDOMNode numberOfChildren]):
2090         (-[TinyDOMNode childAtIndex:]):
2091         (-[TinyDOMNode removeChildAtIndex:]):
2092         * JavaScriptCore.xcodeproj/project.pbxproj:
2093         * heap/SlotVisitor.h:
2094         (SlotVisitor):
2095         * heap/SlotVisitorInlines.h:
2096         (JSC::SlotVisitor::containsOpaqueRootTriState): Added a new method to SlotVisitor to allow scanExternalObjectGraph to have a 
2097         thread-safe view of opaque roots during parallel marking. The set of opaque roots available to any one SlotVisitor isn't guaranteed
2098         to be 100% correct, but that just results in a small duplication of work in scanExternalObjectGraph. To indicate this change for
2099         false negatives we return a TriState that's either true or mixed, but never false.
2100
2101 2013-03-21  Mark Lam  <mark.lam@apple.com>
2102
2103         Fix O(n^2) op_debug bytecode charPosition to column computation.
2104         https://bugs.webkit.org/show_bug.cgi?id=112957.
2105
2106         Reviewed by Geoffrey Garen.
2107
2108         The previous algorithm does a linear reverse scan of the source string
2109         to find the line start for any given char position. This results in a
2110         O(n^2) algortithm when the source string has no line breaks.
2111
2112         The new algorithm computes a line start column table for a
2113         SourceProvider on first use. This line start table is used to fix up
2114         op_debug's charPosition operand into a column operand when an
2115         UnlinkedCodeBlock is linked into a CodeBlock. The initialization of
2116         the line start table is O(n), and the CodeBlock column fix up is
2117         O(log(n)).
2118
2119         * bytecode/CodeBlock.cpp:
2120         (JSC::CodeBlock::dumpBytecode): 
2121         (JSC::CodeBlock::CodeBlock): - do column fix up.
2122         * interpreter/Interpreter.cpp:
2123         (JSC::Interpreter::debug): - no need to do column fixup anymore.
2124         * interpreter/Interpreter.h:
2125         * jit/JITStubs.cpp:
2126         (JSC::DEFINE_STUB_FUNCTION):
2127         * llint/LLIntSlowPaths.cpp:
2128         (JSC::LLInt::LLINT_SLOW_PATH_DECL):
2129         * parser/SourceProvider.cpp:
2130         (JSC::SourceProvider::lineStarts):
2131         (JSC::charPositionExtractor):
2132         (JSC::SourceProvider::charPositionToColumnNumber):
2133         - initialize line start column table if needed.
2134         - look up line start for the given char position.
2135         * parser/SourceProvider.h:
2136
2137 2013-03-21  Filip Pizlo  <fpizlo@apple.com>
2138
2139         JSC profiler should have an at-a-glance report of the success of DFG optimization
2140         https://bugs.webkit.org/show_bug.cgi?id=112988
2141
2142         Reviewed by Geoffrey Garen.
2143
2144         * dfg/DFGByteCodeParser.cpp:
2145         (JSC::DFG::ByteCodeParser::handleCall):
2146         (JSC::DFG::ByteCodeParser::handleGetById):
2147         (JSC::DFG::ByteCodeParser::parseBlock):
2148         * profiler/ProfilerCompilation.cpp:
2149         (JSC::Profiler::Compilation::Compilation):
2150         (JSC::Profiler::Compilation::toJS):
2151         * profiler/ProfilerCompilation.h:
2152         (JSC::Profiler::Compilation::noticeInlinedGetById):
2153         (JSC::Profiler::Compilation::noticeInlinedPutById):
2154         (JSC::Profiler::Compilation::noticeInlinedCall):
2155         (Compilation):
2156         * runtime/CommonIdentifiers.h:
2157
2158 2013-03-21  Mark Lam  <mark.lam@apple.com>
2159
2160         Fix lexer charPosition computation when "rewind"ing the lexer.
2161         https://bugs.webkit.org/show_bug.cgi?id=112952.
2162
2163         Reviewed by Michael Saboff.
2164
2165         Changed the Lexer to no longer keep a m_charPosition. Instead, we compute
2166         currentCharPosition() from m_code and m_codeStartPlusOffset, where
2167         m_codeStartPlusOffset is the SourceProvider m_codeStart + the SourceCode
2168         start offset. This ensures that the charPosition is always in sync with
2169         m_code.
2170
2171         * parser/Lexer.cpp:
2172         (JSC::::setCode):
2173         (JSC::::internalShift):
2174         (JSC::::shift):
2175         (JSC::::lex):
2176         * parser/Lexer.h:
2177         (JSC::Lexer::currentCharPosition):
2178         (JSC::::lexExpectIdentifier):
2179
2180 2013-03-21  Alberto Garcia  <agarcia@igalia.com>
2181
2182         [BlackBerry] GCActivityCallback: replace JSLock with JSLockHolder
2183         https://bugs.webkit.org/show_bug.cgi?id=112448
2184
2185         Reviewed by Xan Lopez.
2186
2187         This changed in r121381.
2188
2189         * runtime/GCActivityCallbackBlackBerry.cpp:
2190         (JSC::DefaultGCActivityCallback::doWork):
2191
2192 2013-03-21  Mark Hahnenberg  <mhahnenberg@apple.com>
2193
2194         Objective-C API: wrapperClass holds a static JSClassRef, which causes JSGlobalObjects to leak
2195         https://bugs.webkit.org/show_bug.cgi?id=112856
2196
2197         Reviewed by Geoffrey Garen.
2198
2199         Through a very convoluted path that involves the caching of prototypes on the JSClassRef, we can leak 
2200         JSGlobalObjects when inserting an Objective-C object into multiple independent JSContexts.
2201
2202         * API/JSAPIWrapperObject.cpp: Removed.
2203         * API/JSAPIWrapperObject.h:
2204         (JSAPIWrapperObject):
2205         * API/JSAPIWrapperObject.mm: Copied from Source/JavaScriptCore/API/JSAPIWrapperObject.cpp. Made this an
2206         Objective-C++ file so that we can call release on the wrappedObject. Also added a WeakHandleOwner for 
2207         JSAPIWrapperObjects. This will also be used in a future patch for https://bugs.webkit.org/show_bug.cgi?id=112608.
2208         (JSAPIWrapperObjectHandleOwner):
2209         (jsAPIWrapperObjectHandleOwner):
2210         (JSAPIWrapperObjectHandleOwner::finalize): This finalize replaces the old finalize that was done through
2211         the C API.
2212         (JSC::JSAPIWrapperObject::finishCreation): Allocate the WeakImpl. Balanced in finalize.
2213         (JSC::JSAPIWrapperObject::setWrappedObject): We now do the retain of the wrappedObject here rather than in random
2214         places scattered around JSWrapperMap.mm
2215         * API/JSObjectRef.cpp: Added some ifdefs for platforms that don't support the Obj-C API.
2216         (JSObjectGetPrivate): Ditto.
2217         (JSObjectSetPrivate): Ditto.
2218         (JSObjectGetPrivateProperty): Ditto.
2219         (JSObjectSetPrivateProperty): Ditto.
2220         (JSObjectDeletePrivateProperty): Ditto.
2221         * API/JSValueRef.cpp: Ditto.
2222         (JSValueIsObjectOfClass): Ditto.
2223         * API/JSWrapperMap.mm: Remove wrapperClass().
2224         (objectWithCustomBrand): Change to no longer use a parent class, which was only used to give the ability to 
2225         finalize wrapper objects.
2226         (-[JSObjCClassInfo initWithContext:forClass:superClassInfo:]): Change to no longer use wrapperClass(). 
2227         (-[JSObjCClassInfo allocateConstructorAndPrototypeWithSuperClassInfo:]): Ditto.
2228         (tryUnwrapObjcObject): We now check if the object inherits from JSAPIWrapperObject.
2229         * API/tests/testapi.mm: Added a test that exports an Objective-C object to two different JSContexts and makes 
2230         sure that the first one is collected properly by using a weak JSManagedValue for the wrapper in the first JSContext.
2231         * CMakeLists.txt: Build file modifications.
2232         * GNUmakefile.list.am: Ditto.
2233         * JavaScriptCore.gypi: Ditto.
2234         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Ditto.
2235         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj: Ditto.
2236         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters: Ditto.
2237         * JavaScriptCore.xcodeproj/project.pbxproj: Ditto.
2238         * runtime/JSGlobalObject.cpp: More ifdefs for unsupported platforms.
2239         (JSC::JSGlobalObject::reset): Ditto.
2240         (JSC::JSGlobalObject::visitChildren): Ditto.
2241         * runtime/JSGlobalObject.h: Ditto.
2242         (JSGlobalObject): Ditto.
2243         (JSC::JSGlobalObject::objcCallbackFunctionStructure): Ditto.
2244
2245 2013-03-21  Anton Muhin  <antonm@chromium.org>
2246
2247         Unreviewed, rolling out r146483.
2248         http://trac.webkit.org/changeset/146483
2249         https://bugs.webkit.org/show_bug.cgi?id=111695
2250
2251         Breaks debug builds.
2252
2253         * bytecode/GlobalResolveInfo.h: Removed property svn:mergeinfo.
2254
2255 2013-03-21  Gabor Rapcsanyi  <rgabor@webkit.org>
2256
2257         Implement LLInt for CPU(ARM_TRADITIONAL)
2258         https://bugs.webkit.org/show_bug.cgi?id=97589
2259
2260         Reviewed by Zoltan Herczeg.
2261
2262         Enable LLInt for ARMv5 and ARMv7 traditional as well.
2263
2264         * llint/LLIntOfflineAsmConfig.h:
2265         * llint/LowLevelInterpreter.asm:
2266         * llint/LowLevelInterpreter32_64.asm:
2267         * offlineasm/arm.rb:
2268         * offlineasm/backends.rb:
2269         * offlineasm/instructions.rb:
2270
2271 2013-03-20  Cosmin Truta  <ctruta@blackberry.com>
2272
2273         [QNX][ARM] REGRESSION(r135330): Various failures in Octane
2274         https://bugs.webkit.org/show_bug.cgi?id=112863
2275
2276         Reviewed by Yong Li.
2277
2278         This was fixed in http://trac.webkit.org/changeset/146396 on Linux only.
2279         Enable this fix on QNX.
2280
2281         * assembler/ARMv7Assembler.h:
2282         (ARMv7Assembler):
2283         (JSC::ARMv7Assembler::replaceWithJump):
2284         (JSC::ARMv7Assembler::maxJumpReplacementSize):
2285         * assembler/MacroAssemblerARMv7.h:
2286         (JSC::MacroAssemblerARMv7::revertJumpReplacementToBranchPtrWithPatch):
2287
2288 2013-03-20  Filip Pizlo  <fpizlo@apple.com>
2289
2290         Fix indentation of JSString.h
2291
2292         Rubber stamped by Mark Hahnenberg.
2293
2294         * runtime/JSString.h:
2295
2296 2013-03-20  Filip Pizlo  <fpizlo@apple.com>
2297
2298         "" + x where x is not a string should be optimized by the DFG to some manner of ToString conversion
2299         https://bugs.webkit.org/show_bug.cgi?id=112845
2300
2301         Reviewed by Mark Hahnenberg.
2302         
2303         I like to do "" + x. So I decided to make DFG recognize it, and related idioms.
2304
2305         * dfg/DFGFixupPhase.cpp:
2306         (JSC::DFG::FixupPhase::fixupNode):
2307         (JSC::DFG::FixupPhase::fixupToPrimitive):
2308         (FixupPhase):
2309         (JSC::DFG::FixupPhase::fixupToString):
2310         (JSC::DFG::FixupPhase::attemptToMakeFastStringAdd):
2311         * dfg/DFGPredictionPropagationPhase.cpp:
2312         (JSC::DFG::resultOfToPrimitive):
2313         (DFG):
2314         (JSC::DFG::PredictionPropagationPhase::propagate):
2315         * dfg/DFGPredictionPropagationPhase.h:
2316         (DFG):
2317
2318 2013-03-20  Zoltan Herczeg  <zherczeg@webkit.org>
2319
2320         ARMv7 replaceWithJump ASSERT failure after r135330.
2321         https://bugs.webkit.org/show_bug.cgi?id=103146
2322
2323         Reviewed by Filip Pizlo.
2324
2325         On Linux, the 24 bit distance range of jumps sometimes does not
2326         enough to cover all targets addresses. This patch supports jumps
2327         outside of this range using a mov/movt/bx 10 byte long sequence.
2328
2329         * assembler/ARMv7Assembler.h:
2330         (ARMv7Assembler):
2331         (JSC::ARMv7Assembler::revertJumpTo_movT3movtcmpT2):
2332         (JSC::ARMv7Assembler::nopw):
2333         (JSC::ARMv7Assembler::label):
2334         (JSC::ARMv7Assembler::replaceWithJump):
2335         (JSC::ARMv7Assembler::maxJumpReplacementSize):
2336         * assembler/MacroAssemblerARMv7.h:
2337         (JSC::MacroAssemblerARMv7::revertJumpReplacementToBranchPtrWithPatch):
2338
2339 2013-03-20  Mark Hahnenberg  <mhahnenberg@apple.com>
2340
2341         Objective-C API: Fix over-releasing in allocateConstructorAndPrototypeWithSuperClassInfo:
2342         https://bugs.webkit.org/show_bug.cgi?id=112832
2343
2344         Reviewed by Geoffrey Garen.
2345
2346         If either the m_constructor or m_prototype (but not both) is collected, we will call 
2347         allocateConstructorAndPrototypeWithSuperClassInfo, which will create a new object to replace the one 
2348         that was collected, but at the end of the method we call release on both of them. 
2349         This is incorrect since we autorelease the JSValue in the case that the object doesn't need to be 
2350         reallocated. Thus we'll end up overreleasing later during the drain of the autorelease pool.
2351
2352         * API/JSWrapperMap.mm:
2353         (objectWithCustomBrand): We no longer alloc here. We instead call the JSValue valueWithValue class method,
2354         which autoreleases for us.
2355         (-[JSObjCClassInfo allocateConstructorAndPrototypeWithSuperClassInfo:]): We no longer call release on the 
2356         constructor or prototype JSValues.
2357         * API/tests/testapi.mm: Added a new test that crashes on ToT due to over-releasing.
2358
2359 2013-03-19  Filip Pizlo  <fpizlo@apple.com>
2360
2361         It's called "Hash Consing" not "Hash Consting"
2362         https://bugs.webkit.org/show_bug.cgi?id=112768
2363
2364         Rubber stamped by Mark Hahnenberg.
2365         
2366         See http://en.wikipedia.org/wiki/Hash_consing
2367
2368         * heap/GCThreadSharedData.cpp:
2369         (JSC::GCThreadSharedData::GCThreadSharedData):
2370         (JSC::GCThreadSharedData::reset):
2371         * heap/GCThreadSharedData.h:
2372         (GCThreadSharedData):
2373         * heap/SlotVisitor.cpp:
2374         (JSC::SlotVisitor::SlotVisitor):
2375         (JSC::SlotVisitor::setup):
2376         (JSC::SlotVisitor::reset):
2377         (JSC::JSString::tryHashConsLock):
2378         (JSC::JSString::releaseHashConsLock):
2379         (JSC::JSString::shouldTryHashCons):
2380         (JSC::SlotVisitor::internalAppend):
2381         * heap/SlotVisitor.h:
2382         (SlotVisitor):
2383         * runtime/JSGlobalData.cpp:
2384         (JSC::JSGlobalData::JSGlobalData):
2385         * runtime/JSGlobalData.h:
2386         (JSGlobalData):
2387         (JSC::JSGlobalData::haveEnoughNewStringsToHashCons):
2388         (JSC::JSGlobalData::resetNewStringsSinceLastHashCons):
2389         * runtime/JSString.h:
2390         (JSC::JSString::finishCreation):
2391         (JSString):
2392         (JSC::JSString::isHashConsSingleton):
2393         (JSC::JSString::clearHashConsSingleton):
2394         (JSC::JSString::setHashConsSingleton):
2395
2396 2013-03-20  Filip Pizlo  <fpizlo@apple.com>
2397
2398         DFG implementation of op_strcat should inline rope allocations
2399         https://bugs.webkit.org/show_bug.cgi?id=112780
2400
2401         Reviewed by Oliver Hunt.
2402         
2403         This gets rid of the StrCat node and adds a MakeRope node. The MakeRope node can
2404         take either two or three operands, and allocates a rope string with either two or
2405         three fibers. (The magic choice of three children for non-VarArg nodes happens to
2406         match exactly with the magic choice of three fibers for rope strings.)
2407         
2408         ValueAdd on KnownString is replaced with MakeRope with two children.
2409         
2410         StrCat gets replaced by an appropriate sequence of MakeRope's.
2411         
2412         MakeRope does not do the dynamic check to see if its children are empty strings.
2413         This is replaced by a static check, instead. The downside is that we may use more
2414         memory if the strings passed to MakeRope turn out to dynamically be empty. The
2415         upside is that we do fewer checks in the cases where either the strings are not
2416         empty, or where the strings are statically known to be empty. I suspect both of
2417         those cases are more common, than the case where the string is dynamically empty.
2418         
2419         This also results in some badness for X86. MakeRope needs six registers if it is
2420         allocating a three-rope. We don't have six registers to spare on X86. Currently,
2421         the code side-steps this problem by just never usign three-ropes in optimized
2422         code on X86. All other architectures, including X86_64, don't have this problem.
2423         
2424         This is a shocking speed-up. 9% progressions on both V8/splay and
2425         SunSpider/date-format-xparb. 1% progression on V8v7 overall, and ~0.5% progression
2426         on SunSpider. 2x speed-up on microbenchmarks that test op_strcat.
2427
2428         * dfg/DFGAbstractState.cpp:
2429         (JSC::DFG::AbstractState::executeEffects):
2430         * dfg/DFGAdjacencyList.h:
2431         (AdjacencyList):
2432         (JSC::DFG::AdjacencyList::removeEdge):
2433         * dfg/DFGArgumentsSimplificationPhase.cpp:
2434         (JSC::DFG::ArgumentsSimplificationPhase::removeArgumentsReferencingPhantomChild):
2435         * dfg/DFGBackwardsPropagationPhase.cpp:
2436         (JSC::DFG::BackwardsPropagationPhase::propagate):
2437         * dfg/DFGByteCodeParser.cpp:
2438         (JSC::DFG::ByteCodeParser::parseBlock):
2439         * dfg/DFGCSEPhase.cpp:
2440         (JSC::DFG::CSEPhase::putStructureStoreElimination):
2441         (JSC::DFG::CSEPhase::eliminateIrrelevantPhantomChildren):
2442         (JSC::DFG::CSEPhase::performNodeCSE):
2443         * dfg/DFGDCEPhase.cpp:
2444         (JSC::DFG::DCEPhase::eliminateIrrelevantPhantomChildren):
2445         * dfg/DFGFixupPhase.cpp:
2446         (JSC::DFG::FixupPhase::fixupNode):
2447         (JSC::DFG::FixupPhase::createToString):
2448         (JSC::DFG::FixupPhase::attemptToForceStringArrayModeByToStringConversion):
2449         (JSC::DFG::FixupPhase::convertStringAddUse):
2450         (FixupPhase):
2451         (JSC::DFG::FixupPhase::convertToMakeRope):
2452         (JSC::DFG::FixupPhase::fixupMakeRope):
2453         (JSC::DFG::FixupPhase::attemptToMakeFastStringAdd):
2454         * dfg/DFGNodeType.h:
2455         (DFG):
2456         * dfg/DFGOperations.cpp:
2457         * dfg/DFGOperations.h:
2458         * dfg/DFGPredictionPropagationPhase.cpp:
2459         (JSC::DFG::PredictionPropagationPhase::propagate):
2460         * dfg/DFGSpeculativeJIT.cpp:
2461         (JSC::DFG::SpeculativeJIT::compileAdd):
2462         (JSC::DFG::SpeculativeJIT::compileMakeRope):
2463         (DFG):
2464         * dfg/DFGSpeculativeJIT.h:
2465         (JSC::DFG::SpeculativeJIT::callOperation):
2466         (SpeculativeJIT):
2467         (JSC::DFG::SpeculateCellOperand::SpeculateCellOperand):
2468         (JSC::DFG::SpeculateCellOperand::~SpeculateCellOperand):
2469         (JSC::DFG::SpeculateCellOperand::gpr):
2470         (JSC::DFG::SpeculateCellOperand::use):
2471         * dfg/DFGSpeculativeJIT32_64.cpp:
2472         (JSC::DFG::SpeculativeJIT::compile):
2473         * dfg/DFGSpeculativeJIT64.cpp:
2474         (JSC::DFG::SpeculativeJIT::compile):
2475         * runtime/JSString.h:
2476         (JSRopeString):
2477
2478 2013-03-20  Peter Gal  <galpeter@inf.u-szeged.hu>
2479
2480         Implement and32 on MIPS platform
2481         https://bugs.webkit.org/show_bug.cgi?id=112665
2482
2483         Reviewed by Zoltan Herczeg.
2484
2485         * assembler/MacroAssemblerMIPS.h:
2486         (JSC::MacroAssemblerMIPS::and32): Added missing method.
2487         (MacroAssemblerMIPS):
2488
2489 2013-03-20  Mark Lam  <mark.lam@apple.com>
2490
2491         Fix incorrect debugger column number value.
2492         https://bugs.webkit.org/show_bug.cgi?id=112741.
2493
2494         Reviewed by Oliver Hunt.
2495
2496         1. In lexer, parser, and debugger code, renamed column to charPosition.
2497         2. Convert the charPosition to the equivalent column number before
2498            passing it to the debugger.
2499         3. Changed ScopeNodes to take both a startLocation and an endLocation.
2500            This allows FunctionBodyNodes, ProgramNodes, and EvalNodess to emit
2501            correct debug hooks with correct starting line and column numbers.
2502         4. Fixed the Lexer to not reset the charPosition (previously
2503            columnNumber) in Lexer::lex().
2504
2505         * JavaScriptCore.order:
2506         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def:
2507         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExports.def.in:
2508         * bytecode/CodeBlock.cpp:
2509         (JSC::CodeBlock::dumpBytecode):
2510         * bytecompiler/BytecodeGenerator.cpp:
2511         (JSC::BytecodeGenerator::emitDebugHook):
2512         * bytecompiler/BytecodeGenerator.h:
2513         (JSC::BytecodeGenerator::emitExpressionInfo):
2514         * bytecompiler/NodesCodegen.cpp:
2515         (JSC::ArrayNode::toArgumentList):
2516         (JSC::ConstStatementNode::emitBytecode):
2517         (JSC::EmptyStatementNode::emitBytecode):
2518         (JSC::DebuggerStatementNode::emitBytecode):
2519         (JSC::ExprStatementNode::emitBytecode):
2520         (JSC::VarStatementNode::emitBytecode):
2521         (JSC::IfNode::emitBytecode):
2522         (JSC::IfElseNode::emitBytecode):
2523         (JSC::DoWhileNode::emitBytecode):
2524         (JSC::WhileNode::emitBytecode):
2525         (JSC::ForNode::emitBytecode):
2526         (JSC::ForInNode::emitBytecode):
2527         (JSC::ContinueNode::emitBytecode):
2528         (JSC::BreakNode::emitBytecode):
2529         (JSC::ReturnNode::emitBytecode):
2530         (JSC::WithNode::emitBytecode):
2531         (JSC::SwitchNode::emitBytecode):
2532         (JSC::LabelNode::emitBytecode):
2533         (JSC::ThrowNode::emitBytecode):
2534         (JSC::TryNode::emitBytecode):
2535         (JSC::ProgramNode::emitBytecode):
2536         (JSC::EvalNode::emitBytecode):
2537         (JSC::FunctionBodyNode::emitBytecode):
2538         * interpreter/Interpreter.cpp:
2539         (JSC::Interpreter::debug):
2540         - convert charPosition to column for the debugger.
2541         * interpreter/Interpreter.h:
2542         * jit/JITStubs.cpp:
2543         (DEFINE_STUB_FUNCTION(void, op_debug)):
2544         * llint/LLIntSlowPaths.cpp:
2545         (LLINT_SLOW_PATH_DECL(slow_op_debug)):
2546         * parser/ASTBuilder.h:
2547         (JSC::ASTBuilder::createFunctionExpr):
2548         (JSC::ASTBuilder::createFunctionBody):
2549         (JSC::ASTBuilder::createGetterOrSetterProperty):
2550         (JSC::ASTBuilder::createFuncDeclStatement):
2551         (JSC::ASTBuilder::createBlockStatement):
2552         (JSC::ASTBuilder::createExprStatement):
2553         (JSC::ASTBuilder::createIfStatement):
2554         (JSC::ASTBuilder::createForLoop):
2555         (JSC::ASTBuilder::createForInLoop):
2556         (JSC::ASTBuilder::createVarStatement):
2557         (JSC::ASTBuilder::createReturnStatement):
2558         (JSC::ASTBuilder::createBreakStatement):
2559         (JSC::ASTBuilder::createContinueStatement):
2560         (JSC::ASTBuilder::createTryStatement):
2561         (JSC::ASTBuilder::createSwitchStatement):
2562         (JSC::ASTBuilder::createWhileStatement):
2563         (JSC::ASTBuilder::createDoWhileStatement):
2564         (JSC::ASTBuilder::createWithStatement):
2565         (JSC::ASTBuilder::createThrowStatement):
2566         (JSC::ASTBuilder::createDebugger):
2567         (JSC::ASTBuilder::createConstStatement):
2568         * parser/Lexer.cpp:
2569         (JSC::::setCode):
2570         (JSC::::internalShift):
2571         (JSC::::shift):
2572         (JSC::::lex):
2573         * parser/Lexer.h:
2574         (JSC::Lexer::currentCharPosition):
2575         (Lexer):
2576         (JSC::::lexExpectIdentifier):
2577         * parser/NodeConstructors.h:
2578         (JSC::Node::Node):
2579         * parser/Nodes.cpp:
2580         (JSC::StatementNode::setLoc):
2581         (JSC::ScopeNode::ScopeNode):
2582         (JSC::ProgramNode::ProgramNode):
2583         (JSC::ProgramNode::create):
2584         (JSC::EvalNode::EvalNode):
2585         (JSC::EvalNode::create):
2586         (JSC::FunctionBodyNode::FunctionBodyNode):
2587         (JSC::FunctionBodyNode::create):
2588         * parser/Nodes.h:
2589         (JSC::Node::charPosition):
2590         (Node):
2591         (StatementNode):
2592         (JSC::StatementNode::lastLine):
2593         (ScopeNode):
2594         (JSC::ScopeNode::startLine):
2595         (JSC::ScopeNode::startCharPosition):
2596         (ProgramNode):
2597         (EvalNode):
2598         (FunctionBodyNode):
2599         * parser/Parser.cpp:
2600         (JSC::::Parser):
2601         (JSC::::parseFunctionBody):
2602         (JSC::::parseFunctionInfo):
2603         * parser/Parser.h:
2604         (JSC::::parse):
2605         * parser/ParserTokens.h:
2606         (JSC::JSTokenLocation::JSTokenLocation):
2607         (JSTokenLocation):
2608         * parser/SyntaxChecker.h:
2609         (JSC::SyntaxChecker::createFunctionBody):
2610
2611 2013-03-20  Csaba Osztrogonác  <ossy@webkit.org>
2612
2613         REGRESSION(r146089): It broke 20 sputnik tests on ARM traditional and Thumb2
2614         https://bugs.webkit.org/show_bug.cgi?id=112676
2615
2616         Rubber-stamped by Filip Pizlo.
2617
2618         Add one more EABI_32BIT_DUMMY_ARG to make DFG JIT ARM EABI compatible
2619         again after r146089 similar to https://bugs.webkit.org/show_bug.cgi?id=84449
2620
2621         * dfg/DFGSpeculativeJIT.h:
2622         (JSC::DFG::SpeculativeJIT::callOperation):
2623
2624 2013-03-19  Michael Saboff  <msaboff@apple.com>
2625
2626         Crash when loading http://www.jqchart.com/jquery/gauges/RadialGauge/LiveData
2627         https://bugs.webkit.org/show_bug.cgi?id=112694
2628
2629         Reviewed by Filip Pizlo.
2630
2631         We were trying to convert an NewArray to a Phantom, but convertToPhantom doesn't handle
2632         nodes with variable arguments.  Added code to insert a Phantom node in front of all the
2633         live children of a var args node.  Added ASSERT not var args for convertToPhantom to
2634         catch any other similar cases.  Added a new convertToPhantomUnchecked() for converting 
2635         var arg nodes.
2636
2637         * dfg/DFGDCEPhase.cpp:
2638         (JSC::DFG::DCEPhase::run):
2639         * dfg/DFGNode.h:
2640         (Node):
2641         (JSC::DFG::Node::setOpAndDefaultNonExitFlags): Added ASSERT(!(m_flags & NodeHasVarArgs))
2642         (JSC::DFG::Node::setOpAndDefaultNonExitFlagsUnchecked):
2643         (JSC::DFG::Node::convertToPhantomUnchecked):
2644
2645 2013-03-19  Mark Hahnenberg  <mhahnenberg@apple.com>
2646
2647         Crash in SpeculativeJIT::fillSpeculateIntInternal<false> on http://bellard.org/jslinux
2648         https://bugs.webkit.org/show_bug.cgi?id=112738
2649
2650         Reviewed by Filip Pizlo.
2651
2652         * dfg/DFGFixupPhase.cpp:
2653         (JSC::DFG::FixupPhase::fixIntEdge): We shouldn't be killing this node because it could be
2654         referenced by other people.
2655
2656 2013-03-19  Oliver Hunt  <oliver@apple.com>
2657
2658         RELEASE_ASSERT fires in exception handler lookup
2659
2660         RS=Geoff Garen.
2661
2662         Temporarily switch this RELEASE_ASSERT into a regular ASSERT 
2663         as currently this is producing fairly bad crashiness.
2664
2665         * bytecode/CodeBlock.cpp:
2666         (JSC::CodeBlock::handlerForBytecodeOffset):
2667
2668 2013-03-18  Filip Pizlo  <fpizlo@apple.com>
2669
2670         DFG should optimize StringObject.length and StringOrStringObject.length
2671         https://bugs.webkit.org/show_bug.cgi?id=112658
2672
2673         Reviewed by Mark Hahnenberg.
2674         
2675         Implemented by injecting a ToString(StringObject:@a) or ToString(StringOrStringObject:@a) prior
2676         to GetArrayLength with ArrayMode(Array::String) if @a is predicted StringObject or
2677         StringOrStringObject.
2678
2679         * dfg/DFGFixupPhase.cpp:
2680         (JSC::DFG::FixupPhase::fixupNode):
2681         (JSC::DFG::FixupPhase::createToString):
2682         (FixupPhase):
2683         (JSC::DFG::FixupPhase::attemptToForceStringArrayModeByToStringConversion):
2684         (JSC::DFG::FixupPhase::convertStringAddUse):
2685
2686 2013-03-19  Gabor Rapcsanyi  <rgabor@webkit.org>
2687
2688         Implement and32 on ARMv7 and ARM traditional platforms
2689         https://bugs.webkit.org/show_bug.cgi?id=112663
2690
2691         Reviewed by Zoltan Herczeg.
2692
2693         * assembler/MacroAssemblerARM.h:
2694         (JSC::MacroAssemblerARM::and32): Add missing method.
2695         (MacroAssemblerARM):
2696         * assembler/MacroAssemblerARMv7.h:
2697         (JSC::MacroAssemblerARMv7::and32): Add missing method.
2698         (MacroAssemblerARMv7):
2699
2700 2013-03-18  Filip Pizlo  <fpizlo@apple.com>
2701
2702         DFG ToString generic cases should work correctly
2703         https://bugs.webkit.org/show_bug.cgi?id=112654
2704         <rdar://problem/13447250>
2705
2706         Reviewed by Geoffrey Garen.
2707
2708         * dfg/DFGSpeculativeJIT.cpp:
2709         (JSC::DFG::SpeculativeJIT::compileToStringOnCell):
2710         * dfg/DFGSpeculativeJIT32_64.cpp:
2711         (JSC::DFG::SpeculativeJIT::compile):
2712         * dfg/DFGSpeculativeJIT64.cpp:
2713         (JSC::DFG::SpeculativeJIT::compile):
2714
2715 2013-03-18  Michael Saboff  <msaboff@apple.com>
2716
2717         Unreviewed build fix for 32 bit builds.
2718
2719         * dfg/DFGSpeculativeJIT32_64.cpp:
2720         (JSC::DFG::SpeculativeJIT::compile):
2721
2722 2013-03-18  Michael Saboff  <msaboff@apple.com>
2723
2724         EFL: Unsafe branch detected in compilePutByValForFloatTypedArray()
2725         https://bugs.webkit.org/show_bug.cgi?id=112609
2726
2727         Reviewed by Geoffrey Garen.
2728
2729         Created local valueFPR and scratchFPR and filled them with valueOp.fpr() and scratch.fpr()
2730         respectively so that if valueOp.fpr() causes a spill during allocation, it occurs before the
2731         branch and also to follow convention.  Added register allocation checks to FPRTemporary.
2732         Cleaned up a couple of other places to follow the "AllocatVirtualRegType foo, get machine
2733         reg from foo" pattern.
2734
2735         * dfg/DFGSpeculativeJIT.cpp:
2736         (JSC::DFG::SpeculativeJIT::compilePutByValForFloatTypedArray):
2737         * dfg/DFGSpeculativeJIT.h:
2738         (JSC::DFG::SpeculativeJIT::fprAllocate):
2739         * dfg/DFGSpeculativeJIT32_64.cpp:
2740         (JSC::DFG::SpeculativeJIT::convertToDouble):
2741         (JSC::DFG::SpeculativeJIT::compile):
2742         * dfg/DFGSpeculativeJIT64.cpp:
2743         (JSC::DFG::SpeculativeJIT::compile):
2744
2745 2013-03-18  Filip Pizlo  <fpizlo@apple.com>
2746
2747         DFG should inline binary string concatenations (i.e. ValueAdd with string children)
2748         https://bugs.webkit.org/show_bug.cgi?id=112599
2749
2750         Reviewed by Oliver Hunt.
2751         
2752         This does as advertised: if you do x + y where x and y are strings, you'll get
2753         a fast inlined JSRopeString allocation (along with whatever checks are necessary).
2754         It also does good things if either x or y (or both) are StringObjects, or some
2755         other thing like StringOrStringObject. It also lays the groundwork for making this
2756         fast if either x or y are numbers, or some other reasonably-cheap-to-convert
2757         value.
2758
2759         * dfg/DFGAbstractState.cpp:
2760         (JSC::DFG::AbstractState::executeEffects):
2761         * dfg/DFGFixupPhase.cpp:
2762         (JSC::DFG::FixupPhase::fixupNode):
2763         (FixupPhase):
2764         (JSC::DFG::FixupPhase::isStringObjectUse):
2765         (JSC::DFG::FixupPhase::convertStringAddUse):
2766         (JSC::DFG::FixupPhase::attemptToMakeFastStringAdd):
2767         * dfg/DFGOperations.cpp:
2768         * dfg/DFGOperations.h:
2769         * dfg/DFGSpeculativeJIT.cpp:
2770         (JSC::DFG::SpeculativeJIT::compileAdd):
2771         * dfg/DFGSpeculativeJIT.h:
2772         (JSC::DFG::SpeculativeJIT::callOperation):
2773         (SpeculativeJIT):
2774         (JSC::DFG::SpeculativeJIT::emitAllocateJSCell):
2775         (JSC::DFG::SpeculativeJIT::emitAllocateJSObject):
2776         * runtime/JSString.h:
2777         (JSC::JSString::offsetOfFlags):
2778         (JSString):
2779         (JSRopeString):
2780         (JSC::JSRopeString::offsetOfFibers):
2781
2782 2013-03-18  Filip Pizlo  <fpizlo@apple.com>
2783
2784         JSC_NATIVE_FUNCTION() takes an identifier for the name and then uses #name, which is unsafe if name was already #define'd to something else
2785         https://bugs.webkit.org/show_bug.cgi?id=112639
2786
2787         Reviewed by Michael Saboff.
2788         
2789         Change it to take a string instead.
2790
2791         * runtime/JSObject.h:
2792         (JSC):
2793         * runtime/ObjectPrototype.cpp:
2794         (JSC::ObjectPrototype::finishCreation):
2795         * runtime/StringPrototype.cpp:
2796         (JSC::StringPrototype::finishCreation):
2797
2798 2013-03-18  Brent Fulgham  <bfulgham@webkit.org>
2799
2800         [WinCairo] Get build working under VS2010.
2801         https://bugs.webkit.org/show_bug.cgi?id=112604
2802
2803         Reviewed by Tim Horton.
2804
2805         * JavaScriptCore.vcxproj/testapi/testapi.vcxproj: Use CFLite-specific
2806         build target (standard version links against CoreFoundation.lib
2807         instead of CFLite.lib).
2808         * JavaScriptCore.vcxproj/testapi/testapiCommonCFLite.props: Added.
2809         * JavaScriptCore.vcxproj/testapi/testapiDebugCFLite.props: Added.
2810         * JavaScriptCore.vcxproj/testapi/testapiReleaseCFLite.props: Added.
2811
2812 2013-03-18  Roger Fong  <roger_fong@apple.com>
2813
2814         AppleWin VS2010 Debug configuration build fix..
2815
2816         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
2817
2818 2013-03-18  Brent Fulgham  <bfulgham@webkit.org>
2819
2820         [WinCairo] Get build working under VS2010.
2821         https://bugs.webkit.org/show_bug.cgi?id=112604
2822
2823         Reviewed by Tim Horton.
2824
2825         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj: Add build targets for
2826         Debug_WinCairo and Release_WinCairo using CFLite.
2827         * JavaScriptCore.vcxproj/JavaScriptCoreCFLite.props: Added.
2828         * JavaScriptCore.vcxproj/JavaScriptCoreDebugCFLite.props: Added.
2829         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExportGenerator.vcxproj:
2830         Add Debug_WinCairo and Release_WinCairo build targets to
2831         make sure headers are copied to proper build folder.
2832         * JavaScriptCore.vcxproj/JavaScriptCoreGenerated.vcxproj: Ditto.
2833         * JavaScriptCore.vcxproj/JavaScriptCoreReleaseCFLite.props: Added.
2834         * JavaScriptCore.vcxproj/LLInt/LLIntAssembly/LLIntAssembly.vcxproj:
2835         Add Debug_WinCairo and Release_WinCairo build targets to
2836         make sure headers are copied to proper build folder.
2837         * JavaScriptCore.vcxproj/LLInt/LLIntDesiredOffsets/LLIntDesiredOffsets.vcxproj:
2838         Ditto.
2839         * JavaScriptCore.vcxproj/LLInt/LLIntOffsetsExtractor/LLIntOffsetsExtractor.vcxproj:
2840         Ditto.
2841         * JavaScriptCore.vcxproj/jsc/jsc.vcxproj: Ditto.
2842         * JavaScriptCore.vcxproj/testRegExp/testRegExp.vcxproj: Ditto.
2843         * JavaScriptCore.vcxproj/testapi/testapi.vcxproj: Ditto.
2844
2845 2013-03-18  Michael Saboff  <msaboff@apple.com>
2846
2847         Potentially unsafe register allocations in DFG code generation
2848         https://bugs.webkit.org/show_bug.cgi?id=112477
2849
2850         Reviewed by Geoffrey Garen.
2851
2852         Moved allocation of temporary GPRs to be before any generated branches in the functions below.
2853
2854         * dfg/DFGSpeculativeJIT32_64.cpp:
2855         (JSC::DFG::SpeculativeJIT::compileObjectToObjectOrOtherEquality):
2856         (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectToObjectOrOtherEquality):
2857         (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot):
2858         * dfg/DFGSpeculativeJIT64.cpp:
2859         (JSC::DFG::SpeculativeJIT::compileObjectToObjectOrOtherEquality):
2860         (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectToObjectOrOtherEquality):
2861         (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot):
2862
2863 2013-03-15  Filip Pizlo  <fpizlo@apple.com>
2864
2865         DFG string conversions and allocations should be inlined
2866         https://bugs.webkit.org/show_bug.cgi?id=112376
2867
2868         Reviewed by Geoffrey Garen.
2869         
2870         This turns new String(), String(), String.prototype.valueOf(), and
2871         String.prototype.toString() into intrinsics. It gives the DFG the ability to handle
2872         conversions from StringObject to JSString and vice-versa, and also gives it the
2873         ability to handle cases where a variable may be either a StringObject or a JSString.
2874         To do this, I added StringObject to value profiling (and removed the stale
2875         distinction between Myarguments and Foreignarguments). I also cleaned up ToPrimitive
2876         handling, using some of the new functionality but also taking advantage of the
2877         existence of Identity(String:@a).
2878         
2879         This is a 2% SunSpider speed-up. Also there are some speed-ups on V8v7 and Kraken.
2880         On microbenchmarks that stress new String() this is a 14x speed-up.
2881
2882         * CMakeLists.txt:
2883         * DerivedSources.make:
2884         * DerivedSources.pri:
2885         * GNUmakefile.list.am:
2886         * bytecode/CodeBlock.h:
2887         (CodeBlock):
2888         (JSC::CodeBlock::hasExitSite):
2889         (JSC):
2890         * bytecode/DFGExitProfile.cpp:
2891         (JSC::DFG::ExitProfile::hasExitSite):
2892         (DFG):
2893         * bytecode/DFGExitProfile.h:
2894         (ExitProfile):
2895         (JSC::DFG::ExitProfile::hasExitSite):
2896         * bytecode/ExitKind.cpp:
2897         (JSC::exitKindToString):
2898         * bytecode/ExitKind.h:
2899         * bytecode/SpeculatedType.cpp:
2900         (JSC::dumpSpeculation):
2901         (JSC::speculationToAbbreviatedString):
2902         (JSC::speculationFromClassInfo):
2903         * bytecode/SpeculatedType.h:
2904         (JSC):
2905         (JSC::isStringObjectSpeculation):
2906         (JSC::isStringOrStringObjectSpeculation):
2907         * create_hash_table:
2908         * dfg/DFGAbstractState.cpp:
2909         (JSC::DFG::AbstractState::executeEffects):
2910         * dfg/DFGAbstractState.h:
2911         (JSC::DFG::AbstractState::filterEdgeByUse):
2912         * dfg/DFGByteCodeParser.cpp:
2913         (ByteCodeParser):
2914         (JSC::DFG::ByteCodeParser::handleCall):
2915         (JSC::DFG::ByteCodeParser::emitArgumentPhantoms):
2916         (DFG):
2917         (JSC::DFG::ByteCodeParser::handleConstantInternalFunction):
2918         * dfg/DFGCSEPhase.cpp:
2919         (JSC::DFG::CSEPhase::putStructureStoreElimination):
2920         * dfg/DFGEdge.h:
2921         (JSC::DFG::Edge::shift):
2922         * dfg/DFGFixupPhase.cpp:
2923         (JSC::DFG::FixupPhase::fixupNode):
2924         (JSC::DFG::FixupPhase::isStringPrototypeMethodSane):
2925         (FixupPhase):
2926         (JSC::DFG::FixupPhase::canOptimizeStringObjectAccess):
2927         (JSC::DFG::FixupPhase::observeUseKindOnNode):
2928         * dfg/DFGGraph.h:
2929         (JSC::DFG::Graph::hasGlobalExitSite):
2930         (Graph):
2931         (JSC::DFG::Graph::hasExitSite):
2932         (JSC::DFG::Graph::clobbersWorld):
2933         * dfg/DFGNode.h:
2934         (JSC::DFG::Node::convertToToString):
2935         (Node):
2936         (JSC::DFG::Node::hasStructure):
2937         (JSC::DFG::Node::shouldSpeculateStringObject):
2938         (JSC::DFG::Node::shouldSpeculateStringOrStringObject):
2939         * dfg/DFGNodeType.h:
2940         (DFG):
2941         * dfg/DFGOperations.cpp:
2942         * dfg/DFGOperations.h:
2943         * dfg/DFGPredictionPropagationPhase.cpp:
2944         (JSC::DFG::PredictionPropagationPhase::propagate):
2945         * dfg/DFGSpeculativeJIT.cpp:
2946         (JSC::DFG::SpeculativeJIT::compileToStringOnCell):
2947         (DFG):
2948         (JSC::DFG::SpeculativeJIT::compileNewStringObject):
2949         (JSC::DFG::SpeculativeJIT::speculateObject):
2950         (JSC::DFG::SpeculativeJIT::speculateObjectOrOther):
2951         (JSC::DFG::SpeculativeJIT::speculateString):
2952         (JSC::DFG::SpeculativeJIT::speculateStringObject):
2953         (JSC::DFG::SpeculativeJIT::speculateStringOrStringObject):
2954         (JSC::DFG::SpeculativeJIT::speculate):
2955         * dfg/DFGSpeculativeJIT.h:
2956         (JSC::DFG::SpeculativeJIT::callOperation):
2957         (SpeculativeJIT):
2958         (JSC::DFG::SpeculateCellOperand::SpeculateCellOperand):
2959         (DFG):
2960         (JSC::DFG::SpeculativeJIT::speculateStringObjectForStructure):
2961         * dfg/DFGSpeculativeJIT32_64.cpp:
2962         (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
2963         (JSC::DFG::SpeculativeJIT::compile):
2964         * dfg/DFGSpeculativeJIT64.cpp:
2965         (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
2966         (JSC::DFG::SpeculativeJIT::compile):
2967         * dfg/DFGUseKind.cpp:
2968         (WTF::printInternal):
2969         * dfg/DFGUseKind.h:
2970         (JSC::DFG::typeFilterFor):
2971         * interpreter/CallFrame.h:
2972         (JSC::ExecState::regExpPrototypeTable):
2973         * runtime/CommonIdentifiers.h:
2974         * runtime/Intrinsic.h:
2975         * runtime/JSDestructibleObject.h:
2976         (JSDestructibleObject):
2977         (JSC::JSDestructibleObject::classInfoOffset):
2978         * runtime/JSGlobalData.cpp:
2979         (JSC):
2980         (JSC::JSGlobalData::JSGlobalData):
2981         (JSC::JSGlobalData::~JSGlobalData):
2982         * runtime/JSGlobalData.h:
2983         (JSGlobalData):
2984         * runtime/JSObject.cpp:
2985         * runtime/JSObject.h:
2986         (JSC):
2987         * runtime/JSWrapperObject.h:
2988         (JSC::JSWrapperObject::allocationSize):
2989         (JSWrapperObject):
2990         (JSC::JSWrapperObject::internalValueOffset):
2991         (JSC::JSWrapperObject::internalValueCellOffset):
2992         * runtime/StringPrototype.cpp:
2993         (JSC):
2994         (JSC::StringPrototype::finishCreation):
2995         (JSC::StringPrototype::create):
2996         * runtime/StringPrototype.h:
2997         (StringPrototype):
2998
2999 2013-03-18  Filip Pizlo  <fpizlo@apple.com>
3000
3001         ObjectPrototype properties should be eagerly created rather than lazily via static tables
3002         https://bugs.webkit.org/show_bug.cgi?id=112539
3003
3004         Reviewed by Oliver Hunt.
3005         
3006         This is the first part of https://bugs.webkit.org/show_bug.cgi?id=112233. Rolling this
3007         in first since it's the less-likely-to-be-broken part.
3008
3009         * CMakeLists.txt:
3010         * DerivedSources.make:
3011         * DerivedSources.pri:
3012         * GNUmakefile.list.am:
3013         * interpreter/CallFrame.h:
3014         (JSC::ExecState::objectConstructorTable):
3015         * runtime/CommonIdentifiers.h:
3016         * runtime/JSGlobalData.cpp:
3017         (JSC):
3018         (JSC::JSGlobalData::JSGlobalData):
3019         (JSC::JSGlobalData::~JSGlobalData):
3020         * runtime/JSGlobalData.h:
3021         (JSGlobalData):
3022         * runtime/JSObject.cpp:
3023         (JSC::JSObject::putDirectNativeFunction):
3024         (JSC):
3025         * runtime/JSObject.h:
3026         (JSObject):
3027         (JSC):
3028         * runtime/Lookup.cpp:
3029         (JSC::setUpStaticFunctionSlot):
3030         * runtime/ObjectPrototype.cpp:
3031         (JSC):
3032         (JSC::ObjectPrototype::finishCreation):
3033         (JSC::ObjectPrototype::create):
3034         * runtime/ObjectPrototype.h:
3035         (ObjectPrototype):
3036
3037 2013-03-16  Pratik Solanki  <psolanki@apple.com>
3038
3039         Disable High DPI Canvas on iOS
3040         https://bugs.webkit.org/show_bug.cgi?id=112511
3041
3042         Reviewed by Joseph Pecoraro.
3043
3044         * Configurations/FeatureDefines.xcconfig:
3045
3046 2013-03-15  Andreas Kling  <akling@apple.com>
3047
3048         Don't also clone StructureRareData when cloning Structure.
3049         <http://webkit.org/b/111672>
3050
3051         Reviewed by Mark Hahnenberg.
3052
3053         We were cloning a lot of StructureRareData with only the previousID pointer set since
3054         the enumerationCache is not shared between clones.
3055
3056         Let the Structure copy constructor decide whether it wants to clone the rare data.
3057         The decision is made by StructureRareData::needsCloning() and will currently always
3058         return false, since StructureRareData only holds on to caches at present.
3059         This may change in the future as more members are added to StructureRareData.
3060
3061         * runtime/Structure.cpp:
3062         (JSC::Structure::Structure):
3063         (JSC::Structure::cloneRareDataFrom):
3064         * runtime/StructureInlines.h:
3065         (JSC::Structure::create):
3066
3067 2013-03-15  Mark Hahnenberg  <mhahnenberg@apple.com>
3068
3069         Roll out r145838
3070         https://bugs.webkit.org/show_bug.cgi?id=112458
3071
3072         Unreviewed. Requested by Filip Pizlo.
3073
3074         * CMakeLists.txt:
3075         * DerivedSources.make:
3076         * DerivedSources.pri:
3077         * GNUmakefile.list.am:
3078         * dfg/DFGOperations.cpp:
3079         * interpreter/CallFrame.h:
3080         (JSC::ExecState::objectPrototypeTable):
3081         * jit/JITStubs.cpp:
3082         (JSC::getByVal):
3083         * llint/LLIntSlowPaths.cpp:
3084         (JSC::LLInt::getByVal):
3085         * runtime/CommonIdentifiers.h:
3086         * runtime/JSCell.cpp:
3087         (JSC):
3088         * runtime/JSCell.h:
3089         (JSCell):
3090         * runtime/JSCellInlines.h:
3091         (JSC):
3092         (JSC::JSCell::fastGetOwnProperty):
3093         * runtime/JSGlobalData.cpp:
3094         (JSC):
3095         (JSC::JSGlobalData::JSGlobalData):
3096         (JSC::JSGlobalData::~JSGlobalData):
3097         * runtime/JSGlobalData.h:
3098         (JSGlobalData):
3099         * runtime/JSObject.cpp:
3100         (JSC):
3101         * runtime/JSObject.h:
3102         (JSObject):
3103         (JSC):
3104         * runtime/Lookup.cpp:
3105         (JSC::setUpStaticFunctionSlot):
3106         * runtime/ObjectPrototype.cpp:
3107         (JSC):
3108         (JSC::ObjectPrototype::finishCreation):
3109         (JSC::ObjectPrototype::getOwnPropertySlot):
3110         (JSC::ObjectPrototype::getOwnPropertyDescriptor):
3111         * runtime/ObjectPrototype.h:
3112         (JSC::ObjectPrototype::create):
3113         (ObjectPrototype):
3114         * runtime/PropertyMapHashTable.h:
3115         (JSC::PropertyTable::findWithString):
3116         * runtime/Structure.h:
3117         (Structure):
3118         * runtime/StructureInlines.h:
3119         (JSC::Structure::get):
3120
3121 2013-03-15  Michael Saboff  <msaboff@apple.com>
3122
3123         Cleanup of DFG and Baseline JIT debugging code
3124         https://bugs.webkit.org/show_bug.cgi?id=111871
3125
3126         Reviewed by Geoffrey Garen.
3127
3128         Fixed various debug related issue in baseline and DFG JITs. See below.
3129
3130         * dfg/DFGRepatch.cpp:
3131         (JSC::DFG::dfgLinkClosureCall): Used pointerDump() to handle when calleeCodeBlock is NULL.
3132         * dfg/DFGScratchRegisterAllocator.h: Now use ScratchBuffer::activeLengthPtr() to get
3133         pointer to scratch register length.
3134         (JSC::DFG::ScratchRegisterAllocator::preserveUsedRegistersToScratchBuffer):
3135         (JSC::DFG::ScratchRegisterAllocator::restoreUsedRegistersFromScratchBuffer):
3136         * dfg/DFGSpeculativeJIT.cpp:
3137         (JSC::DFG::SpeculativeJIT::checkConsistency): Added missing case labels for DataFormatOSRMarker,
3138         DataFormatDead, and DataFormatArguments and made them RELEASE_ASSERT_NOT_REACHED();
3139         * jit/JITCall.cpp:
3140         (JSC::JIT::privateCompileClosureCall): Used pointerDump() to handle when calleeCodeBlock is NULL.
3141         * jit/JITCall32_64.cpp:
3142         (JSC::JIT::privateCompileClosureCall): Used pointerDump() to handle when calleeCodeBlock is NULL.
3143         * runtime/JSGlobalData.h:
3144         (JSC::ScratchBuffer::ScratchBuffer): Fixed buffer allocation alignment to
3145         be on a double boundary.
3146         (JSC::ScratchBuffer::setActiveLength):
3147         (JSC::ScratchBuffer::activeLength):
3148         (JSC::ScratchBuffer::activeLengthPtr):
3149
3150 2013-03-15  Michael Saboff  <msaboff@apple.com>
3151
3152         Add runtime check for improper register allocations in DFG
3153         https://bugs.webkit.org/show_bug.cgi?id=112380
3154
3155         Reviewed by Geoffrey Garen.
3156
3157         Added framework to check for register allocation within a branch source - target range.  All register allocations
3158         are saved using the offset in the code stream where the allocation occurred.  Later when a jump is linked, the
3159         currently saved register allocations are checked to make sure that they didn't occur in the range of code that was
3160         jumped over.  This protects against the case where an allocation could have spilled register contents to free up 
3161         a register and that spill only occurs on one path of a many through the code.  A subsequent fill of the spilled
3162         register may load garbage.  See https://bugs.webkit.org/show_bug.cgi?id=111777 for one such bug.
3163         This code is protected by the compile time check of #if ENABLE(DFG_REGISTER_ALLOCATION_VALIDATION).
3164         The check is only done during the processing of SpeculativeJIT::compile(Node* node) and its callees.
3165  
3166         * assembler/AbstractMacroAssembler.h:
3167         (JSC::AbstractMacroAssembler::Jump::link): Invoke register allocation checks using source and target of link.
3168         (JSC::AbstractMacroAssembler::Jump::linkTo): Invoke register allocation checks using source and target of link.
3169         (AbstractMacroAssembler):
3170         (RegisterAllocationOffset): New helper class to store the instruction stream offset and compare against a 
3171         jump range.
3172         (JSC::AbstractMacroAssembler::RegisterAllocationOffset::RegisterAllocationOffset):
3173         (JSC::AbstractMacroAssembler::RegisterAllocationOffset::check):
3174         (JSC::AbstractMacroAssembler::addRegisterAllocationAtOffset):
3175         (JSC::AbstractMacroAssembler::clearRegisterAllocationOffsets): 
3176         (JSC::AbstractMacroAssembler::checkRegisterAllocationAgainstBranchRange):
3177         * dfg/DFGSpeculativeJIT.h:
3178         (JSC::DFG::SpeculativeJIT::allocate):
3179         * dfg/DFGSpeculativeJIT32_64.cpp:
3180         (JSC::DFG::SpeculativeJIT::compile):
3181         * dfg/DFGSpeculativeJIT64.cpp:
3182         (JSC::DFG::SpeculativeJIT::compile):
3183
3184 2013-03-14  Oliver Hunt  <oliver@apple.com>
3185
3186         REGRESSION(r145000): Crash loading arstechnica.com when Safari Web Inspector is open
3187         https://bugs.webkit.org/show_bug.cgi?id=111868
3188
3189         Reviewed by Antti Koivisto.
3190
3191         Don't allow non-local property lookup when the debugger is enabled.
3192
3193         * bytecompiler/BytecodeGenerator.cpp:
3194         (JSC::BytecodeGenerator::resolve):
3195
3196 2013-03-11  Mark Hahnenberg  <mhahnenberg@apple.com>
3197
3198         Objective-C API: Objective-C functions exposed to JavaScript have the wrong type (object instead of function)
3199         https://bugs.webkit.org/show_bug.cgi?id=105892
3200
3201         Reviewed by Geoffrey Garen.
3202
3203         Changed ObjCCallbackFunction to subclass JSCallbackFunction which already has all of the machinery to call
3204         functions using the C API. Since ObjCCallbackFunction is now a JSCell, we changed the old implementation of
3205         ObjCCallbackFunction to be the internal implementation and keep track of all the proper data so that we 
3206         don't have to put all of that in the header, which will now be included from C++ files (e.g. JSGlobalObject.cpp).
3207
3208         * API/JSCallbackFunction.cpp: Change JSCallbackFunction to allow subclassing. Originally it was internally
3209         passing its own Structure up the chain of constructors, but we now want to be able to pass other Structures as well.
3210         (JSC::JSCallbackFunction::JSCallbackFunction):
3211         (JSC::JSCallbackFunction::create):
3212         * API/JSCallbackFunction.h:
3213         (JSCallbackFunction):
3214         * API/JSWrapperMap.mm: Changed interface to tryUnwrapBlock.
3215         (tryUnwrapObjcObject):
3216         * API/ObjCCallbackFunction.h:
3217         (ObjCCallbackFunction): Moved into the JSC namespace, just like JSCallbackFunction.
3218         (JSC::ObjCCallbackFunction::createStructure): Overridden so that the correct ClassInfo gets used since we have 
3219         a destructor.
3220         (JSC::ObjCCallbackFunction::impl): Getter for the internal impl.
3221         * API/ObjCCallbackFunction.mm:
3222         (JSC::ObjCCallbackFunctionImpl::ObjCCallbackFunctionImpl): What used to be ObjCCallbackFunction is now 
3223         ObjCCallbackFunctionImpl. It handles the Objective-C specific parts of managing callback functions.
3224         (JSC::ObjCCallbackFunctionImpl::~ObjCCallbackFunctionImpl):
3225         (JSC::objCCallbackFunctionCallAsFunction): Same as the old one, but now it casts to ObjCCallbackFunction and grabs the impl 
3226         rather than using JSObjectGetPrivate.
3227         (JSC::ObjCCallbackFunction::ObjCCallbackFunction): New bits to allow being part of the JSCell hierarchy.
3228         (JSC::ObjCCallbackFunction::create):
3229         (JSC::ObjCCallbackFunction::destroy):
3230         (JSC::ObjCCallbackFunctionImpl::call): Handles the actual invocation, just like it used to.
3231         (objCCallbackFunctionForInvocation):
3232         (tryUnwrapBlock): Changed to check the ClassInfo for inheritance directly, rather than going through the C API call.
3233         * API/tests/testapi.mm: Added new test to make sure that doing Function.prototype.toString.call(f) won't result in 
3234         an error when f is an Objective-C method or block underneath the covers.
3235         * runtime/JSGlobalObject.cpp: Added new Structure for ObjCCallbackFunction.
3236         (JSC::JSGlobalObject::reset):
3237         (JSC::JSGlobalObject::visitChildren):
3238         * runtime/JSGlobalObject.h:
3239         (JSGlobalObject):
3240         (JSC::JSGlobalObject::objcCallbackFunctionStructure):
3241
3242 2013-03-14  Mark Hahnenberg  <mhahnenberg@apple.com>
3243
3244         Objective-C API: Nested dictionaries are not converted properly in the Objective-C binding
3245         https://bugs.webkit.org/show_bug.cgi?id=112377
3246
3247         Reviewed by Oliver Hunt.
3248
3249         Accidental reassignment of the root task in the container conversion logic was causing the last 
3250         array or dictionary processed to be returned in the case of nested containers.
3251
3252         * API/JSValue.mm:
3253         (containerValueToObject):
3254         * API/tests/testapi.mm:
3255
3256 2013-03-13  Filip Pizlo  <fpizlo@apple.com>
3257
3258         JSObject fast by-string access optimizations should work even on the prototype chain, and even when the result is undefined
3259         https://bugs.webkit.org/show_bug.cgi?id=112233
3260
3261         Reviewed by Oliver Hunt.
3262         
3263         Extended the existing fast access path for String keys to work over the entire prototype chain,
3264         not just the self access case. This will fail as soon as it sees an object that intercepts
3265         getOwnPropertySlot, so this patch also ensures that ObjectPrototype does not fall into that
3266         category. This is accomplished by making ObjectPrototype eagerly reify all of its properties.
3267         This is safe for ObjectPrototype because it's so common and we expect all of its properties to
3268         be reified for any interesting programs anyway. A new idiom for adding native functions to
3269         prototypes is introduced, which ought to work well for any other prototypes that we wish to do
3270         this conversion for.
3271         
3272         This is a >60% speed-up in the case that you frequently do by-string lookups that "miss", i.e.
3273         they don't turn up anything.
3274
3275         * CMakeLists.txt:
3276         * DerivedSources.make:
3277         * DerivedSources.pri:
3278         * GNUmakefile.list.am:
3279         * dfg/DFGOperations.cpp:
3280         * interpreter/CallFrame.h:
3281         (JSC::ExecState::objectConstructorTable):
3282         * jit/JITStubs.cpp:
3283         (JSC::getByVal):
3284         * llint/LLIntSlowPaths.cpp:
3285         (JSC::LLInt::getByVal):
3286         * runtime/CommonIdentifiers.h:
3287         * runtime/JSCell.cpp:
3288         (JSC::JSCell::getByStringSlow):
3289         (JSC):
3290         * runtime/JSCell.h:
3291         (JSCell):
3292         * runtime/JSCellInlines.h:
3293         (JSC):
3294         (JSC::JSCell::getByStringAndKey):
3295         (JSC::JSCell::getByString):
3296         * runtime/JSGlobalData.cpp:
3297         (JSC):
3298         (JSC::JSGlobalData::JSGlobalData):
3299         (JSC::JSGlobalData::~JSGlobalData):
3300         * runtime/JSGlobalData.h:
3301         (JSGlobalData):
3302         * runtime/JSObject.cpp:
3303         (JSC::JSObject::putDirectNativeFunction):
3304         (JSC):
3305         * runtime/JSObject.h:
3306         (JSObject):
3307         (JSC):
3308         * runtime/Lookup.cpp:
3309         (JSC::setUpStaticFunctionSlot):
3310         * runtime/ObjectPrototype.cpp:
3311         (JSC):
3312         (JSC::ObjectPrototype::finishCreation):
3313         (JSC::ObjectPrototype::create):
3314         * runtime/ObjectPrototype.h:
3315         (ObjectPrototype):
3316         * runtime/PropertyMapHashTable.h:
3317         (JSC::PropertyTable::findWithString):
3318         * runtime/Structure.h:
3319         (Structure):
3320         * runtime/StructureInlines.h:
3321         (JSC::Structure::get):
3322         (JSC):
3323
3324 2013-03-13  Filip Pizlo  <fpizlo@apple.com>
3325
3326         DFG bytecode parser is too aggressive about getting rid of GetLocals on captured variables
3327         https://bugs.webkit.org/show_bug.cgi?id=112287
3328         <rdar://problem/13342340>
3329
3330         Reviewed by Oliver Hunt.
3331
3332         * bytecode/CodeBlock.cpp:
3333         (JSC::CodeBlock::dumpBytecode):
3334         (JSC::CodeBlock::finalizeUnconditionally):
3335         * dfg/DFGByteCodeParser.cpp:
3336         (JSC::DFG::ByteCodeParser::getLocal):
3337
3338 2013-03-13  Ryosuke Niwa  <rniwa@webkit.org>
3339
3340         Threaded HTML Parser is missing feature define flags in all but Chromium port's build files
3341         https://bugs.webkit.org/show_bug.cgi?id=112277
3342
3343         Reviewed by Adam Barth.
3344
3345         * Configurations/FeatureDefines.xcconfig:
3346
3347 2013-03-13  Csaba Osztrogonác  <ossy@webkit.org>
3348
3349         LLINT C loop warning fix for GCC
3350         https://bugs.webkit.org/show_bug.cgi?id=112145
3351
3352         Reviewed by Filip Pizlo.
3353
3354         * llint/LowLevelInterpreter.cpp:
3355         (JSC::CLoop::execute):
3356
3357 2013-02-13  Simon Hausmann  <simon.hausmann@digia.com>
3358
3359         Add support for convenient conversion from JSStringRef to QString
3360         https://bugs.webkit.org/show_bug.cgi?id=109694
3361
3362         Reviewed by Allan Sandfeld Jensen.
3363
3364         Add JSStringCopyQString helper function that allows for the convenient
3365         extraction of a QString out of a JSStringRef.
3366
3367         * API/JSStringRefQt.cpp: Added.
3368         (JSStringCopyQString):
3369         * API/JSStringRefQt.h: Added.
3370         * API/OpaqueJSString.h:
3371         (OpaqueJSString):
3372         (OpaqueJSString::qString):
3373         (OpaqueJSString::OpaqueJSString):
3374         * Target.pri:
3375
3376 2013-03-13  Peter Gal  <galpeter@inf.u-szeged.hu>
3377
3378         Token 'not' is ignored in the offlineasm.
3379         https://bugs.webkit.org/show_bug.cgi?id=111568
3380
3381         Reviewed by Filip Pizlo.
3382
3383         * offlineasm/parser.rb: Build the Not AST node if the 'not' token is found.
3384
3385 2013-03-12  Tim Horton  <timothy_horton@apple.com>
3386
3387         WTF uses macros for exports. Try to fix the Windows build. Unreviewed.
3388
3389         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def:
3390         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExports.def.in:
3391
3392 2013-03-12  Filip Pizlo  <fpizlo@apple.com>
3393
3394         Array.prototype.sort should at least try to be PTIME even when the array is in some bizarre mode
3395         https://bugs.webkit.org/show_bug.cgi?id=112187
3396         <rdar://problem/13393550>
3397
3398         Reviewed by Michael Saboff and Gavin Barraclough.
3399         
3400         If we have an array-like object in crazy mode passed into Array.prototype.sort, and its length is large,
3401         then first copy all elements into a separate, compact, un-holy array and sort that. Then copy back.
3402         This means that sorting will be at worst O(n^2) in the actual number of things in the array, rather than
3403         O(n^2) in the array's length.
3404
3405         * runtime/ArrayPrototype.cpp:
3406         (JSC::attemptFastSort):
3407         (JSC::performSlowSort):
3408         (JSC):
3409         (JSC::arrayProtoFuncSort):
3410
3411 2013-03-12  Tim Horton  <timothy_horton@apple.com>
3412
3413         Try to fix the Windows build.
3414
3415         Not reviewed.
3416
3417         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def:
3418
3419 2013-03-12  Geoffrey Garen  <ggaren@apple.com>
3420
3421         Try to fix the Windows build.
3422
3423         Not reviewed.
3424
3425         * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExports.def.in:
3426         Export a thing.
3427
3428 2013-03-11  Oliver Hunt  <oliver@apple.com>
3429
3430         Harden JSStringJoiner
3431         https://bugs.webkit.org/show_bug.cgi?id=112093
3432
3433         Reviewed by Filip Pizlo.
3434
3435         Harden JSStringJoiner, make it use our CheckedArithmetic