2014-11-05: Version 3.30.33

        `1..isPrototypeOf.call(null)` should return false, not throw TypeError
        (issue 3483).

        Refactor ObjectGetOwnPropertyKeys to accept bitmask rather than boolean
        (issue 3549).

        Add debug mirror support for ES6 Map/Set iterators (Chromium issue
        427868).

        Performance and stability improvements on all platforms.


2014-11-04: Version 3.30.30

        Performance and stability improvements on all platforms.


2014-11-02: Version 3.30.27

        Performance and stability improvements on all platforms.


2014-11-02: Version 3.30.26

        Performance and stability improvements on all platforms.


2014-11-01: Version 3.30.25

        Performance and stability improvements on all platforms.


2014-11-01: Version 3.30.24

        Ensure we don't try to inline raw access to indexed interceptor
        receivers (Chromium issue 419220).

        Performance and stability improvements on all platforms.


2014-10-31: Version 3.30.23

        Introduce v8::Exception::GetMessage to find location of an error object
        (Chromium issue 427954).

        Performance and stability improvements on all platforms.


2014-10-30: Version 3.30.22

        MIPS: Classes: Add super support in methods and accessors (issue 3330).

        Classes: Add super support in methods and accessors (issue 3330).

        Performance and stability improvements on all platforms.


2014-10-29: Version 3.30.21

        MIPS: Classes: Add basic support for properties (issue 3330).

        Classes: Add more tests for prototype edge cases (Chromium issue 3655).

        Classes: Add test for method prototype (issue 3330).

        Get stack trace for uncaught exceptions/promise rejections from the
        simple stack when available.

        Classes: Add basic support for properties (issue 3330).

        Allow duplicate property names in classes (issue 3570).

        Windows: use SystemTimeToTzSpecificLocalTime instead of localtime_s
        (Chromium issue 417640).

        Performance and stability improvements on all platforms.


2014-10-28: Version 3.30.20

        Performance and stability improvements on all platforms.


2014-10-27: Version 3.30.19

        Check string literals with escapes in PreParserTraits::GetSymbol()
        (issue 3606).

        only define ARRAYSIZE_UNSAFE for NaCl builds (Chromium issue 405225).

        Performance and stability improvements on all platforms.


2014-10-24: Version 3.30.18

        Narrow cases where Sparse/Smart versions of Array methods are used
        (issues 2615, 3612, 3621).

        Shrink new space in idle notification (Chromium issue 424423).

        Performance and stability improvements on all platforms.


2014-10-23: Version 3.30.17

        ARM64: Fix stack manipulation (Chromium issue 425585).

        Speed up creation of Objects whose prototype has dictionary elements
        (Chromium issue 422754).

        Enable libstdc++ debug mode in debug builds (issue 3638).

        Performance and stability improvements on all platforms.


2014-10-22: Version 3.30.16

        Remove v8stdint.h, it doesn't serve a purpose anymore.

        Performance and stability improvements on all platforms.


2014-10-21: Version 3.30.15

        Avoid the Marsaglia effect in 3D (Chromium issue 423311).

        Performance and stability improvements on all platforms.


2014-10-20: Version 3.30.14

        Performance and stability improvements on all platforms.


2014-10-17: Version 3.30.13

        Don't expose Array.prototype.values as it breaks webcompat (Chromium
        issue 409858).

        Fix break location calculation (Chromium issue 419663).

        Enable libstdc++ debug mode in debug builds (issue 3638).

        Performance and stability improvements on all platforms.


2014-10-17: Version 3.30.12

        Implement .forEach() on typed arrays (issue 3578).

        Introduce v8::Exception::GetStackTrace API method.

        Remove SmartMove, bringing Array methods further into spec compliance
        (issue 2615).

        Convert argument toObject() in Object.getOwnPropertyNames/Descriptors
        (issue 3443).

        Performance and stability improvements on all platforms.


2014-10-15: Version 3.30.11

        Array.prototype.{every, filter, find, findIndex, forEach, map, some}:
        Use fresh primitive wrapper for calls (issue 3536).

        Correctly expand literal buffer for surrogate pairs (Chromium issue
        423212).

        Performance and stability improvements on all platforms.


2014-10-15: Version 3.30.10

        Squeeze the layout of various AST node types (Chromium issue 417697).

        Performance and stability improvements on all platforms.


2014-10-14: Version 3.30.9

        Performance and stability improvements on all platforms.


2014-10-13: Version 3.30.8

        AST nodes have at most one bailout/typefeedback ID now, saving lots of
        memory (Chromium issue 417697).

        Allow identifier code points from supplementary multilingual planes
        (issue 3617).

        Performance and stability improvements on all platforms.


2014-10-10: Version 3.30.7

        Fix computation of UTC time from local time at DST change points (issue
        3116, Chromium issues 415424, 417640).

        Convert `obj` ToObject in Object.keys() (issue 3587).

        Performance and stability improvements on all platforms.


2014-10-09: Version 3.30.6

        Update unicode to 7.0.0 (issue 2892).

        Classes: Add support for toString (issue 3330).

        Don't enable WPO on Win64 and require Server 2003 / x64 for win64
        (Chromium issue 421363).

        Performance and stability improvements on all platforms.


2014-10-08: Version 3.30.5

        Performance and stability improvements on all platforms.


2014-10-08: Version 3.30.4

        This uses a runtime function to set up the the constructor and its
        prototype (issue 3330).

        Remove PersistentBase::ClearAndLeak.

        Squeeze the layout of variable proxy nodes (Chromium issue 417697).

        Add MonotonicallyIncreasingTime to V8 Platform (Chromium issue 417668).

        Fix representation of HLoadRoot (Chromium issue 419036).

        Performance and stability improvements on all platforms.


2014-10-03: Version 3.30.3

        Removed the Isolate* field from literal nodes (Chromium issue 417697).

        Squeeze the layout of expression nodes a bit (Chromium issue 417697).

        Merged FeedbackSlotInterface into AstNode, removing the need for a 2nd
        vtable (Chromium issue 417697).

        Extend CPU profiler with mapping ticks to source lines.

        Remove support for parallel sweeping.

        Introduce v8::Object::GetIsolate().

        Performance and stability improvements on all platforms.


2014-10-02: Version 3.30.2

        Fix Hydrogen's BuildStore() (Chromium issue 417508).

        Move unit tests to test/unittests (issue 3489).

        Changes to ALLOW_UNUSED to match upcoming changes to the Chromium trunk:
        * Eliminate usage of ALLOW_UNUSED to define COMPILE_ASSERT and just use
        static_assert() in all cases now that all platforms build with C++11. *
        Convert remaining uses of ALLOW_UNUSED to ALLOW_UNUSED_TYPE to match how
        Chromium will be splitting this functionality.  (In Chromium we'll have
        both   ALLOW_UNUSED_TYPE and ALLOW_UNUSED_LOCAL, which have different
        syntax to   enable us to use these with MSVC.) (Chromium issue 81439).

        Performance and stability improvements on all platforms.


2014-10-01: Version 3.30.1

        Introduce PromiseRejectCallback (issue 3093).

        ES6: Implement object literal property shorthand (issue 3584).

        Performance and stability improvements on all platforms.


2014-09-30: Version 3.29.93

        Add a getter for the address and size of the code range to the pulic API
        (issue 3598).

        Convert `obj` ToObject in Object.keys() (issue 3587).

        Performance and stability improvements on all platforms.


2014-09-29: Version 3.29.92

        Performance and stability improvements on all platforms.


2014-09-26: Version 3.29.91

        Performance and stability improvements on all platforms.


2014-09-25: Version 3.29.88

        Performance and stability improvements on all platforms.


2014-09-24: Version 3.29.87

        Preserve message when rethrowing exception (issue 3583).

        Fix escaped index JSON parsing (Chromium issue 416449).

        Performance and stability improvements on all platforms.


2014-09-23: Version 3.29.84

        Performance and stability improvements on all platforms.


2014-09-23: Version 3.29.83

        Performance and stability improvements on all platforms.


2014-09-23: Version 3.29.82

        Fix escaped index JSON parsing (Chromium issue 416449).

        Performance and stability improvements on all platforms.


2014-09-17: Version 3.29.70

        Enable ES6 generators (issue 2355).

        Fixed int vs. uintptr_t confusion (plus some cleanup on the way) (issue
        3556).

        Move configuration of ResourceConstraints to Isolate construction.

        Performance and stability improvements on all platforms.


2014-09-16: Version 3.29.66

        Currently, a new isolate is created in an uninitialized state, and
        several API methods will automatically initialize it. During this
        uninitialized state, code event handlers and function entry handlers can
        be attached to the isolate.

        Performance and stability improvements on all platforms.


2014-09-15: Version 3.29.64

        ES6: String(symbol) should work like symbol.toString (issue 3554).

        Arrow functions: Cleanup handling of the prototype property (issue
        2700).

        Remove V8_HOST_CAN_READ_UNALIGNED and its uses (Chromium issue 412967).

        Fix Smi vs. HeapObject confusion in HConstants (Chromium issue 412215).

        Performance and stability improvements on all platforms.


2014-09-12: Version 3.29.59

        Do not use wide reads in CopyCharsUnsigned (Chromium issue 412967).

        Fix inaccurate type condition in Hydrogen (Chromium issue 412210).

        Fix crash in ScriptDebugServer::wrapCallFrames (Chromium issue 411196).

        Performance and stability improvements on all platforms.


2014-09-11: Version 3.29.57

        ES6: Add support for method shorthand in object literals (issue 3516).

        Unbreak FreeBSD build (hopefully) (issue 3548).

        Performance and stability improvements on all platforms.


2014-09-09: Version 3.29.53

        Performance and stability improvements on all platforms.


2014-09-08: Version 3.29.50

        Allocate a new empty number dictionary when resetting elements (Chromium
        issue 410332).

        Performance and stability improvements on all platforms.


2014-09-05: Version 3.29.43

        Enforce correct number comparisons when inlining Array.indexOf (Chromium
        issue 407946).

        Performance and stability improvements on all platforms.


2014-09-04: Version 3.29.41

        Performance and stability improvements on all platforms.


2014-09-03: Version 3.29.40

        Use correct receiver for DOM accessors on the prototype chain (issue
        3538).

        Performance and stability improvements on all platforms.


2014-09-02: Version 3.29.38

        Do not clear weak monomorphic IC after context disposal (Chromium issue
        404020).

        Turn on job-based sweeping (issue 3104).

        Performance and stability improvements on all platforms.


2014-09-01: Version 3.29.35

        Performance and stability improvements on all platforms.


2014-08-29: Version 3.29.29

        Performance and stability improvements on all platforms.


2014-08-28: Version 3.29.27

        Performance and stability improvements on all platforms.


2014-08-28: Version 3.29.25

        Performance and stability improvements on all platforms.


2014-08-28: Version 3.29.24

        Tweaks to generate XP-compatible .exes (Chromium issue 407517).

        Performance and stability improvements on all platforms.


2014-08-28: Version 3.29.23

        Performance and stability improvements on all platforms.


2014-08-27: Version 3.29.20

        Handle empty allocation list in CodeRange properly (issue 3540, Chromium
        issue 407566).

        Fixed inlining of constant values (issue 3529).

        Performance and stability improvements on all platforms.


2014-08-25: Version 3.29.17

        Performance and stability improvements on all platforms.


2014-08-24: Version 3.29.16

        Fix issue with numeric property names (issue 3507).

        Add back the duplicate property checker (issue 3498).

        Performance and stability improvements on all platforms.


2014-08-22: Version 3.29.14

        Don't inline Array.shift() if receiver map is not extensible (Chromium
        issue 405517).

        Performance and stability improvements on all platforms.


2014-08-21: Version 3.29.11

        Refactor ParseObjectLiteral.

        Support symbol-named properties in API (issue 3394).

        Suppress test262 test that tests duplicate properties.

        ES6: Duplicate properties are no longer an error (issue 3498).

        Expose function CheckDebugBreak in the debugger api.

        Remove RegExp.$input (issue 3486).

        Performance and stability improvements on all platforms.


2014-08-21: Version 3.29.10

        ES6: Make sure we do not store -0 as the key in Map/Set (issue 3515).

        Remove removed flags from tests.

        Expose well-known Symbols to C++ API (Chromium issue 341423).

        Implement ES6 Array.of() (issue 3427).

        Performance and stability improvements on all platforms.


2014-08-20: Version 3.29.9

        Correctly handle holes when concat()ing double arrays (Chromium issue
        403409).

        [turbofan] Refactor the InstructionSelector tests (issue 3489).

        ES6: Make Map/Set constructors support iterable values (issue 3508).

        WeakMap/WeakSet: Add test for non object keys (issue 3399).

        Performance and stability improvements on all platforms.


2014-08-12: Version 3.28.71

        ToNumber(Symbol) should throw TypeError (issue 3499).

        Performance and stability improvements on all platforms.


2014-08-11: Version 3.28.69

        Performance and stability improvements on all platforms.


2014-08-09: Version 3.28.65

        Performance and stability improvements on all platforms.


2014-08-08: Version 3.28.64

        ES6: Implement WeakMap and WeakSet constructor logic (issue 3399).

        Enable ES6 unscopables (issue 3401).

        Turn on harmony_unscopables for es_staging (issue 3401).

        Remove proxies from --harmony switch for M38, because problems.

        Reland "Add initial support for compiler unit tests using GTest/GMock."
        (issue 3489).

        Enable ES6 iteration by default (issue 2214).

        Performance and stability improvements on all platforms.


2014-08-07: Version 3.28.62

        Only escape U+0022 in argument values of `String.prototype` HTML methods
        (issue 2217).

        Update webkit test for expected own properties.

        This implements unscopables (issue 3401).

        Add `CheckObjectCoercible` for the `String.prototype` HTML methods
        (issue 2218).

        Add initial support for compiler unit tests using GTest/GMock (issue
        3489).

        Trigger exception debug events on Promise reject (Chromium issue
        393913).

        Refactor unit tests for the base library to use GTest (issue 3489).

        Performance and stability improvements on all platforms.


2014-08-06: Version 3.28.60

        Enable ES6 Map and Set by default (issue 1622).

        Performance and stability improvements on all platforms.


2014-08-06: Version 3.28.59

        Removed GetConstructor from the API. Instead either get the
        "constructor" property stored in the prototype, or keep a side-table.

        Enable ES6 Symbols by default (issue 2158).

        Performance and stability improvements on all platforms.


2014-08-05: Version 3.28.57

        Add dependencies on gtest and gmock.

        Performance and stability improvements on all platforms.


2014-08-04: Version 3.28.54

        Performance and stability improvements on all platforms.


2014-08-01: Version 3.28.53

        Performance and stability improvements on all platforms.


2014-07-31: Version 3.28.52

        Performance and stability improvements on all platforms.


2014-07-31: Version 3.28.51

        Drop deprecated memory related notification API (Chromium issue 397026).

        Performance and stability improvements on all platforms.


2014-07-31: Version 3.28.50

        Use emergency memory in the case of out of memory during evacuation
        (Chromium issue 395314).

        Performance and stability improvements on all platforms.


2014-07-30: Version 3.28.48

        Fix Object.freeze with field type tracking. Keep the descriptor properly
        intact while update the field type (issue 3458).

        Performance and stability improvements on all platforms.


2014-07-29: Version 3.28.45

        Performance and stability improvements on all platforms.


2014-07-28: Version 3.28.43

        Performance and stability improvements on all platforms.


2014-07-25: Version 3.28.38

        Fix issue with setters and their holders in accessors.cc (Chromium issue
        3462).

        Introduce more debug events for promises (issue 3093).

        Move gc notifications from V8 to Isolate and make idle hint mandatory
        (Chromium issue 397026).

        The accessors should get the value from the holder and not from this
        (issue 3461).

        Performance and stability improvements on all platforms.


2014-07-24: Version 3.28.35

        Rebaseline/update the intl tests with ICU 52 (issue 3454).

        Expose the content of Sets and WeakSets through SetMirror (issue 3093).

        Performance and stability improvements on all platforms.


2014-07-23: Version 3.28.32

        Update ICU to 5.2 (matching chromium) (issue 3452).

        Performance and stability improvements on all platforms.


2014-07-22: Version 3.28.31

        Remove harmony-typeof.

        Implement String.prototype.codePointAt and String.fromCodePoint (issue
        2840).

        Performance and stability improvements on all platforms.


2014-07-21: Version 3.28.30

        Performance and stability improvements on all platforms.


2014-07-21: Version 3.28.29

        Performance and stability improvements on all platforms.


2014-07-18: Version 3.28.28

        Performance and stability improvements on all platforms.


2014-07-17: Version 3.28.26

        Ship ES6 Math functions (issue 2938).

        Make ToPrimitive throw on symbol wrappers (issue 3442).

        Performance and stability improvements on all platforms.


2014-07-16: Version 3.28.25

        Performance and stability improvements on all platforms.


2014-07-16: Version 3.28.24

        Removed some copy-n-paste from StackFrame::Foo API entries (issue 3436).

        Performance and stability improvements on all platforms.


2014-07-15: Version 3.28.23

        Fix error message about read-only symbol properties (issue 3441).

        Include symbol properties in Object.{create,defineProperties} (issue
        3440).

        Performance and stability improvements on all platforms.


2014-07-14: Version 3.28.22

        Performance and stability improvements on all platforms.


2014-07-11: Version 3.28.21

        Make `let` usable as an identifier in ES6 sloppy mode (issue 2198).

        Support ES6 Map and Set in heap profiler (issue 3368).

        Performance and stability improvements on all platforms.


2014-07-10: Version 3.28.20

        Remove deprecate counter/histogram methods.

        Fixed printing of external references (Chromium issue 392068).

        Fix several issues with ES6 redeclaration checks (issue 3426).

        Performance and stability improvements on all platforms.


2014-07-09: Version 3.28.19

        Performance and stability improvements on all platforms.


2014-07-09: Version 3.28.18

        Reland "Postpone termination exceptions in debug scope." (issue 3408).

        Performance and stability improvements on all platforms.


2014-07-08: Version 3.28.17

        MIPS: Fix computed properties on object literals with a double as
        propertyname (Chromium issue 390732).

        Performance and stability improvements on all platforms.


2014-07-08: Version 3.28.16

        Fix computed properties on object literals with a double as propertyname
        (Chromium issue 390732).

        Avoid brittle use of .bind in Promise.all (issue 3420).

        Performance and stability improvements on all platforms.


2014-07-07: Version 3.28.15

        Remove a bunch of Isolate::UncheckedCurrent calls.

        Performance and stability improvements on all platforms.


2014-07-07: Version 3.28.14

        Use the HeapObjectIterator to scan-on-scavenge map pages (Chromium issue
        390732).

        Introduce debug events for Microtask queue (Chromium issue 272416).

        Split out libplatform into a separate libary.

        Add clang-format to presubmit checks.

        Stack traces exposed to Javascript should omit extensions (issue 311).

        Remove deprecated v8::Context::HasOutOfMemoryException.

        Postpone termination exceptions in debug scope (issue 3408).

        Performance and stability improvements on all platforms.


2014-07-04: Version 3.28.13

        Rollback to r22134.


2014-07-04: Version 3.28.12

        Use the HeapObjectIterator to scan-on-scavenge map pages (Chromium issue
        390732).

        Introduce debug events for Microtask queue (Chromium issue 272416).

        Performance and stability improvements on all platforms.


2014-07-03: Version 3.28.11

        Split out libplatform into a separate libary.

        Performance and stability improvements on all platforms.


2014-07-03: Version 3.28.10

        Add clang-format to presubmit checks.

        Stack traces exposed to Javascript should omit extensions (issue 311).

        Remove deprecated v8::Context::HasOutOfMemoryException.

        Postpone termination exceptions in debug scope (issue 3408).

        Performance and stability improvements on all platforms.


2014-07-02: Version 3.28.9

        Make freeze & friends ignore private properties (issue 3419).

        Introduce a builddeps make target (issue 3418).

        Performance and stability improvements on all platforms.


2014-07-01: Version 3.28.8

        Remove static initializer from isolate.

        ES6: Add missing Set.prototype.keys function (issue 3411).

        Introduce debug events for promises (issue 3093).

        Performance and stability improvements on all platforms.


2014-06-30: Version 3.28.7

        Performance and stability improvements on all platforms.


2014-06-30: Version 3.28.6

        Unbreak "os" stuff in shared d8 builds (issue 3407).

        Performance and stability improvements on all platforms.


2014-06-26: Version 3.28.4

        Compile optimized code with active debugger but no break points
        (Chromium issue 386492).

        Optimize Map/Set.prototype.forEach.

        Collect garbage with kReduceMemoryFootprintMask in IdleNotification
        (Chromium issue 350720).

        Performance and stability improvements on all platforms.


2014-06-26: Version 3.28.3

        Grow heap slower if GC freed many global handles (Chromium issue
        263503).

        Performance and stability improvements on all platforms.


2014-06-25: Version 3.28.2

        Remove bogus assertions in HCompareObjectEqAndBranch (Chromium issue
        387636).

        Do not eagerly update allow_osr_at_loop_nesting_level (Chromium issue
        387599).

        Set host_arch to ia32 on machines with a 32bit userland but a 64bit
        kernel (Chromium issue 368384).

        Map/Set: Implement constructor parameter handling (issue 3398).

        Performance and stability improvements on all platforms.


2014-06-24: Version 3.28.1

        Support LiveEdit on Arm64 (Chromium issue 368580).

        Run JS micro tasks in the appropriate context (Chromium issue 385349).

        Add a use counter API.

        Set host_arch to ia32 on machines with a 32bit userland but a 64bit
        kernel.

        Performance and stability improvements on all platforms.


2014-06-23: Version 3.28.0

        MIPS: Support LiveEdit (Chromium issue 368580).

        Array.concat: properly go to dictionary mode when required (Chromium
        issue 387031).

        Support LiveEdit on ARM (Chromium issue 368580).

        Performance and stability improvements on all platforms.


2014-06-18: Version 3.27.34

        Reduce number of writes to DependentCode array when inserting dependent
        IC (Chromium issue 305878).

        Performance and stability improvements on all platforms.


2014-06-17: Version 3.27.33

        Do GC if CodeRange fails to allocate a block (Chromium issue 305878).

        Throw syntax error when a getter/setter has the wrong number of params
        (issue 3371).

        Performance and stability improvements on all platforms.


2014-06-17: Version 3.27.32

        Performance and stability improvements on all platforms.


2014-06-16: Version 3.27.31

        Version fix.


2014-06-16: Version 3.27.30

        Fix representation of Phis for mutable-heapnumber-in-object-literal
        properties (issue 3392).

        Performance and stability improvements on all platforms.


2014-06-16: Version 3.27.29

        Emulate MLS on pre-ARMv6T2. Cleaned up thumbee vs. thumb2 confusion.

        X87: Fixed flooring division by a power of 2, once again.. (issue 3259).

        Fixed undefined behavior in RNG (Chromium issue 377790).

        Performance and stability improvements on all platforms.


2014-06-13: Version 3.27.28

        Add v8::Promise::Then (Chromium issue 371288).

        Performance and stability improvements on all platforms.


2014-06-12: Version 3.27.27

        Fix detection of VFP3D16 on Galaxy Tab 10.1 (issue 3387).

        Performance and stability improvements on all platforms.


2014-06-12: Version 3.27.26

        MIPS: Fixed flooring division by a power of 2, once again.. (issue
        3259).

        Fixed flooring division by a power of 2, once again.. (issue 3259).

        Fix unsigned comparisons (issue 3380).

        Performance and stability improvements on all platforms.


2014-06-11: Version 3.27.25

        Performance and stability improvements on all platforms.


2014-06-11: Version 3.27.24

        Fix invalid attributes when generalizing because of incompatible map
        change (Chromium issue 382143).

        Fix missing smi check in inlined indexOf/lastIndexOf (Chromium issue
        382513).

        Performance and stability improvements on all platforms.


2014-06-06: Version 3.27.23

        Performance and stability improvements on all platforms.


2014-06-06: Version 3.27.22

        Performance and stability improvements on all platforms.


2014-06-06: Version 3.27.21

        Turn on harmony_collections for es_staging (issue 1622).

        Do not make heap iterable eagerly (Chromium issue 379740).

        Performance and stability improvements on all platforms.


2014-06-05: Version 3.27.20

        Fix invalid loop condition for Array.lastIndexOf() (Chromium issue
        380512).

        Add API support for passing a C++ function as a microtask callback.

        Performance and stability improvements on all platforms.


2014-06-04: Version 3.27.19

        Split Put into Put and Remove.

        ES6: Add support for values/keys/entries for Map and Set (issue 1793).

        Performance and stability improvements on all platforms.


2014-06-03: Version 3.27.18

        Remove PROHIBITS_OVERWRITING as it is subsumed by non-configurable
        properties.

        Performance and stability improvements on all platforms.


2014-06-02: Version 3.27.17

        BuildNumberToString: Check for undefined keys in the cache (Chromium
        issue 368114).

        HRor and HSar can deoptimize (issue 3359).

        Simplify, speed-up correct-context ObjectObserve calls.

        Performance and stability improvements on all platforms.


2014-05-29: Version 3.27.16

        Allow microtasks to throw exceptions and handle them gracefully
        (Chromium issue 371566).

        Performance and stability improvements on all platforms.


2014-05-28: Version 3.27.15

        Performance and stability improvements on all platforms.


2014-05-27: Version 3.27.14

        Reland "Customized support for feedback on calls to Array." and follow-
        up fixes (Chromium issues 377198, 377290).

        Performance and stability improvements on all platforms.


2014-05-26: Version 3.27.13

        Performance and stability improvements on all platforms.


2014-05-26: Version 3.27.12

        Check for cached transition to ExternalArray elements kind (issue 3337).

        Support ES6 weak collections in heap profiler (Chromium issue 376196).

        Performance and stability improvements on all platforms.


2014-05-23: Version 3.27.11

        Add support for ES6 Symbol in heap profiler (Chromium issue 376194).

        Performance and stability improvements on all platforms.


2014-05-22: Version 3.27.10

        Implement Mirror object for Symbols (issue 3290).

        Allow debugger to step into Map and Set forEach callbacks (issue 3341).

        Fix ArrayShift hydrogen support (Chromium issue 374838).

        Use SameValueZero for Map and Set (issue 1622).

        Array Iterator next should check for own property.

        Performance and stability improvements on all platforms.


2014-05-21: Version 3.27.9

        Disable ArrayShift hydrogen support (Chromium issue 374838).

        ES6 Map/Set iterators/forEach improvements (issue 1793).

        Performance and stability improvements on all platforms.


2014-05-20: Version 3.27.8

        Move microtask queueing logic from JavaScript to C++.

        Partial revert of "Next bunch of fixes for check elimination" (Chromium
        issue 372173).

        Performance and stability improvements on all platforms.


2014-05-19: Version 3.27.7

        Performance and stability improvements on all platforms.


2014-05-19: Version 3.27.6

        Performance and stability improvements on all platforms.


2014-05-16: Version 3.27.5

        Performance and stability improvements on all platforms.


2014-05-15: Version 3.27.4

        Drop thenable coercion cache (Chromium issue 372788).

        Skip write barriers when updating the weak hash table (Chromium issue
        359401).

        Performance and stability improvements on all platforms.


2014-05-14: Version 3.27.3

        Performance and stability improvements on all platforms.


2014-05-13: Version 3.27.2

        Harden %SetIsObserved with RUNTIME_ASSERTs (Chromium issue 371782).

        Drop unused static microtask API.

        Introduce an api to query the microtask autorun state of an isolate.

        Performance and stability improvements on all platforms.


2014-05-12: Version 3.27.1

        Object.observe: avoid accessing acceptList properties more than once
        (issue 3315).

        Array Iterator prototype should not have a constructor (issue 3293).

        Fix typos in unit test for Array.prototype.fill().

        Shorten autogenerated error message for functions only (issue 3019,
        Chromium issue 331971).

        Reland "Removed default Isolate." (Chromium issue 359977).

        Performance and stability improvements on all platforms.


2014-05-09: Version 3.27.0

        Unbreak samples and tools.

        Performance and stability improvements on all platforms.


2014-05-08: Version 3.26.33

        Removed default Isolate (Chromium issue 359977).

        Performance and stability improvements on all platforms.


2014-05-07: Version 3.26.32

        Performance and stability improvements on all platforms.


2014-05-06: Version 3.26.31

        Add a basic gn file for V8.

        Performance and stability improvements on all platforms.


2014-05-05: Version 3.26.30

        Introduce a microtask suppression scope and move microtask methods to
        isolate (Chromium issue 369503).

        Re-enable Object.observe and add enforcement for security invariants.

        Move cache line size calculation directly into CPU::FlushICache
        (Chromium issue 359977).

        Generation of our home-grown memmove doesn't depend on serializer state
        anymore (Chromium issue 359977).

        Fix |RunMicrotasks()| leaking reference to the last context being run
        on.

        Object.defineProperty shouldn't be a hint that we're constructing a
        dictionary (Chromium issue 362870).

        Performance and stability improvements on all platforms.


2014-05-01: Version 3.26.29

        Added a Isolate* parameter to Serializer::enabled() (Chromium issue
        359977).

        ES6: Add support for Array.prototype.fill() (issue 3273).

        Performance and stability improvements on all platforms.


2014-04-29: Version 3.26.28

        PromiseThen should ignore non-function parameters (Chromium issue
        347455).

        Performance and stability improvements on all platforms.


2014-04-29: Version 3.26.27

        Error stack getter should not overwrite itself with a data property
        (issue 3294).

        Performance and stability improvements on all platforms.


2014-04-28: Version 3.26.26

        Expose promise value through promise mirror (issue 3093).

        Simplified CPU/CpuFeatures a bit (Chromium issue 359977).

        Performance and stability improvements on all platforms.


2014-04-28: Version 3.26.25

        Add timestamps to CPU profile samples (Chromium issue 363976).

        Expose promise status through promise mirror (issue 3093).

        Remove static CallCompletedCallback handlers.

        Added an Isolate* field to NoTrackDoubleFieldsForSerializerScope,
        PlatformFeatureScope and BinaryOpIC::State (Chromium issue 359977).

        Trigger debug event on not yet caught exception in promises (issue
        3093).

        Unbreak vtunejit=on (issue 3288).

        Performance and stability improvements on all platforms.


2014-04-25: Version 3.26.24

        MIPS: CodeStubs contain their corresponding Isolate* now. (part 2)
        (Chromium issue 359977).

        MIPS: CodeStubs contain their corresponding Isolate* now. (part 1)
        (Chromium issue 359977).

        CodeStubs contain their corresponding Isolate* now. (part 2) (Chromium
        issue 359977).

        Make DescriptorArray::IsMoreGeneralThan() and DescriptorArray::Merge()
        compatible again (Chromium issue 365172).

        CodeStubs contain their corresponding Isolate* now. (part 1) (Chromium
        issue 359977).

        Performance and stability improvements on all platforms.


2014-04-24: Version 3.26.23

        Performance and stability improvements on all platforms.


2014-04-23: Version 3.26.22

        Disable field type tracking by default (Chromium issue 365172).

        Performance and stability improvements on all platforms.


2014-04-23: Version 3.26.21

        Context-allocate all parameters in generators (issue 3280).

        Simplify v8/Isolate teardown (Chromium issue 359977).

        Performance and stability improvements on all platforms.


2014-04-21: Version 3.26.20

        ES6: Add support for Map/Set forEach (Chromium issues 1793, 2323).

        Performance and stability improvements on all platforms.


2014-04-18: Version 3.26.19

        ES6: Add support for Map/Set forEach (Chromium issues 1793, 2323).

        Performance and stability improvements on all platforms.


2014-04-17: Version 3.26.18

        Removed Isolate::EnterDefaultIsolate (Chromium issue 359977).

        Performance and stability improvements on all platforms.


2014-04-16: Version 3.26.17

        Clear invalid field maps in PropertyAccessInfo (Chromium issue 363956).

        ES6: Add support for Map/Set forEach (Chromium issues 1793, 2323).

        Performance and stability improvements on all platforms.


2014-04-16: Version 3.26.16

        Removed EnterIsolateIfNeeded and a soon-to-be-useless assertion
        (Chromium issue 359977).

        Removed GetDefaultIsolate{Debugger,ForLocking,StackGuard} (Chromium
        issue 359977).

        Performance and stability improvements on all platforms.


2014-04-15: Version 3.26.15

        Fix result of LCodeGen::DoWrapReceiver for strict functions and builtins
        (Chromium issue 362128).

        Performance and stability improvements on all platforms.


2014-04-15: Version 3.26.14

        Performance and stability improvements on all platforms.


2014-04-14: Version 3.26.13

        Make maps in monomorphic IC stubs weak (issue 2073).

        x64: Make sure that the upper half of a 64bit register contains 0 for
        int32 values (Chromium issue 360611).

        Performance and stability improvements on all platforms.


2014-04-11: Version 3.26.12

        Do not use ranges after range analysis (Chromium issue 361608).

        Performance and stability improvements on all platforms.


2014-04-10: Version 3.26.11

        Performance and stability improvements on all platforms.


2014-04-10: Version 3.26.10

        Allow the embedder to pass the virtual memory limit to v8.

        Performance and stability improvements on all platforms.


2014-04-09: Version 3.26.9

        Fix invalid local property lookup for transitions (Chromium issue
        361025).

        MIPS: Fixed flooring division by -1 (issue 3259).

        Fixed flooring division by -1 on ARM (issue 3259).

        Make `String.prototype.contains` throw when passing a regular expression
        (issue 3261).

        Performance and stability improvements on all platforms.


2014-04-08: Version 3.26.8

        Yet another regression test for range analysis (issue 3204).

        Performance and stability improvements on all platforms.


2014-04-07: Version 3.26.7

        Performance and stability improvements on all platforms.


2014-04-04: Version 3.26.6

        Performance and stability improvements on all platforms.


2014-04-03: Version 3.26.5

        Performance and stability improvements on all platforms.


2014-04-03: Version 3.26.4

        Make stray 'return' an early error.

        Show references from weak containers as weak in heap snapshots (Chromium
        issue 356590).

        Make invalid LHSs that are calls late errors (Chromium issue 358346).

        Performance and stability improvements on all platforms.


2014-04-02: Version 3.26.3

        Support typed arrays in IsMoreGeneralElementsKindTransition (Chromium
        issue 357054).

        Remove debugger_auto_break flag.

        Store i18n meta data in hidden symbols instead of js accessible
        properties (Chromium issue 354967).

        Performance and stability improvements on all platforms.


2014-04-01: Version 3.26.2

        Performance and stability improvements on all platforms.


2014-04-01: Version 3.26.1

        Fix Type::Intersect to skip uninhabited bitsets (Chromium issue 357330).

        Fix PrepareKeyedOperand on arm (Chromium issue 358057).

        Performance and stability improvements on all platforms.


2014-03-31: Version 3.26.0

        Deprecate Start/StopCpuProfiling methods (issue 3213).

        Don't crash if we get a timezone change notification on an uninitialized
        isolate (Chromium issue 357362).

        Performance and stability improvements on all platforms.


2014-03-28: Version 3.25.30

        NativeContext::map_cache reference should be strong in heap snapshots
        (Chromium issue 357060).

        Performance and stability improvements on all platforms.


2014-03-27: Version 3.25.29

        Performance and stability improvements on all platforms.


2014-03-27: Version 3.25.28

        Performance and stability improvements on all platforms.


2014-03-26: Version 3.25.27

        Promise constructor should not be enumerable (Chromium issue 352597).

        Performance and stability improvements on all platforms.


2014-03-26: Version 3.25.26

        Performance and stability improvements on all platforms.


2014-03-25: Version 3.25.25

        Roll ICU 239289:258359 and add support for external ICU data tables
        (issue 3142, Chromium issue 72633).

        Performance and stability improvements on all platforms.


2014-03-25: Version 3.25.24

        Add support for per-isolate private symbols.

        No longer OOM on invalid string length (issue 3060).

        Remove Failure::OutOfMemory propagation and
        V8::IgnoreOutOfMemoryException (issue 3060).

        Tentative Windows dll build fix: Don't V8_EXPORT ScriptCompiler::Source
        (issue 3228).

        Performance and stability improvements on all platforms.


2014-03-24: Version 3.25.23

        Rename A64 port to ARM64 port (Chromium issue 354405).

        Fix missing access check in Runtime_SetPrototype (Chromium issue
        354123).

        Fix polymorphic hydrogen handling of SLOPPY_ARGUMENTS_ELEMENTS (Chromium
        issue 354391).

        Performance and stability improvements on all platforms.


2014-03-20: Version 3.25.22

        Increase the "local variables in a function" limit (issue 3205).

        Implement ES6 symbol registry and predefined symbols.

        Throw exception on invalid string length instead of OOM (Chromium issue
        349329).

        Performance and stability improvements on all platforms.


2014-03-20: Version 3.25.21

        Performance and stability improvements on all platforms.


2014-03-20: Version 3.25.20

        Fix polymorphic keyed loads for SLOPPY_ARGUMENTS_ELEMENTS (Chromium
        issue 350867).

        Performance and stability improvements on all platforms.


2014-03-19: Version 3.25.19

        Performance and stability improvements on all platforms.


2014-03-19: Version 3.25.18

        Performance and stability improvements on all platforms.


2014-03-19: Version 3.25.17

        Performance and stability improvements on all platforms.


2014-03-18: Version 3.25.16

        Apply numeric casts correctly in typed arrays and related code (Chromium
        issue 353004).

        Performance and stability improvements on all platforms.


2014-03-18: Version 3.25.15

        Don't generate keyed store ICs for global proxies (Chromium issue
        352983).

        MIPS: Make invalid LHSs a parse-time (reference) error (Chromium issue
        351658).

        Make invalid LHSs a parse-time (reference) error (Chromium issue
        351658).

        Add Promises/A+ Compliance Test Suite (Chromium issue 347095).

        Split Promise API into Promise/Resolver.

        Performance and stability improvements on all platforms.


2014-03-17: Version 3.25.14

        Performance and stability improvements on all platforms.


2014-03-17: Version 3.25.13

        Move profiler callback interfaces from v8.h to v8-profiler.h.

        Performance and stability improvements on all platforms.


2014-03-14: Version 3.25.12

        PromiseCoerce should deal with an error during accessing "then"
        (Chromium issue 347095).

        Propagate updated offsets in BoundsCheckBbData (Chromium issue 350863).

        Add regression test for range analysis bug (issue 3204).

        Continued fix for 351257. Reusing the feedback vector is too complex
        (Chromium issue 351257).

        StopCpuProfiling should return non-const CpuProfile (issue 3213).

        Allow for compiling with xcode 5.1 (which doesn't have gcc anymore).

        Performance and stability improvements on all platforms.


2014-03-14: Version 3.25.11

        MIPS: Remove uses of CanBeNegative() in HMod (issue 3204).

        MIPS: Remove uses of RangeCanInclude() in flooring division by power of
        2 (issue 3204).

        MIPS: Fix uses of range analysis results in HChange (issue 3204).

        Make translation of modulus operation '--stress-opt'-proof (Chromium
        issue 352059).

        Remove uses of CanBeNegative() in HMod (issue 3204).

        Remove uses of RangeCanInclude() in flooring division by power of 2
        (issue 3204).

        Fix uses of range analysis results in HChange (issue 3204).

        Performance and stability improvements on all platforms.


2014-03-14: Version 3.25.10

        This version was not committed due to script failures.


2014-03-13: Version 3.25.9

        Reland "Enable Object.observe by default" again (issue 2409).

        Use intrinsics for builtin ArrayBuffer property accesses (Chromium issue
        351787).

        Performance and stability improvements on all platforms.


2014-03-12: Version 3.25.8

        Fix HIsSmiAndBranch::KnownSuccessorBlock() by deleting it (Chromium
        issue 351320).

        Fix handling of polymorphic array accesses with constant index (Chromium
        issue 351319).

        Fix lazy deopt after tagged binary ops (Chromium issue 350434).

        MIPS: Cleanup some of the range uses in ModI/DivI (issue 3204).

        Fix issue with getOwnPropertySymbols and hidden properties (Chromium
        issue 350864).

        Cleanup some of the range uses in ModI/DivI (issue 3204).

        PromiseCoerce should ignore primitive values (Chromium issue 347095).

        Use a per-isolate cache for the date object JS bits (Chromium issue
        348856).

        Performance and stability improvements on all platforms.


2014-03-11: Version 3.25.7

        Promise.all and Promise.race should reject non-array parameter (Chromium
        issue 347453).

        Promise.all and Promise race should use "then" rather than "chain"
        (Chromium issue 347427).

        Merge the "Compute Minus Zero Checks" phase into the range analysis
        (issue 3204).

        Performance and stability improvements on all platforms.


2014-03-10: Version 3.25.6

        Replace the recursion in PropagateMinusZeroChecks() with a loop and a
        worklist (issue 3204).

        Reland "Enable Object.observe by default" (issue 2409).

        Enable Object.observe by default (issue 2409).

        AllocationTracker now maintains a map from address range to stack trace
        that allocated the range. When snapshot is generated the map is used to
        find construction stack trace for an object using its address (Chromium
        issue 277984).

        Introduce Runtime_GetAllScopesDetails to get all scopes at once for a
        frame (Chromium issue 340285).

        Reduce heavy runtime calls from debug mirrors (Chromium issue 340285).

        Check and clear date cache in DateCurrentTime, DateLocalTimezone and
        getTimezoneOffset (Chromium issue 142141).

        Performance and stability improvements on all platforms.


2014-03-06: Version 3.25.5

        Fix HConstants with Smi-ranged HeapNumber values (Chromium issue
        349878).

        Fix issues with JSON stringify replacer array (issues 3200, 3201).

        Performance and stability improvements on all platforms.


2014-03-05: Version 3.25.4

        x64: Fix LMathMinMax for constant Smi right-hand operands (Chromium
        issue 349079).

        Performance and stability improvements on all platforms.


2014-03-04: Version 3.25.3

        Clear optimized code cache in shared function info when code gets
        deoptimized (Chromium issue 343609).

        Fixed constant folding for Math.clz32 (Chromium issue 347906).

        Fix JSObject::PrintTransitions (Chromium issue 347912).

        Fix handling of constant global variable assignments (Chromium issue
        347904).

        Removed bogus ASSERT (Chromium issue 347542).

        Mark HCompareMap as having Tagged representation (Chromium issue
        346636).

        Fix crasher in Object.getOwnPropertySymbols (Chromium issue 346141).

        Fix the bit massaging code in CompleteParserRecorder::WriteNumber
        (Chromium issue 346221).

        Don't eliminate loads with incompatible types or representations
        (Chromium issue 346343).

        Check that after a weak callback, the handle is either dead or strong
        (Chromium issue 346061).

        Lazy preparsing vs. lazy parsing fix (Chromium issue 346207).

        Performance and stability improvements on all platforms.


2014-02-25: Version 3.25.2

        Fix the bit massaging code in CompleteParserRecorder::WriteNumber
        (Chromium issue 346221).

        Revert r19455 "Load target types and handlers before IC computation."
        (Chromium issue 346149).

        Don't eliminate loads with incompatible types or representations
        (Chromium issue 346343).

        Fix for a smi stores optimization on x64 with a regression test
        (Chromium issue 345715).

        Check that after a weak callback, the handle is either dead or strong
        (Chromium issue 346061).

        negative bounds checking on realm calls (Chromium issue 344285).

        Lazy preparsing vs. lazy parsing fix (Chromium issue 346207).

        Fix optimistic BCE to back off after deopt (issue 3176).

        Performance and stability improvements on all platforms.


2014-02-21: Version 3.25.1

        Performance and stability improvements on all platforms.


2014-02-19: Version 3.25.0

        ES6: Tighten up Object.prototype.__proto__ (issue 3064).

        Fix Hydrogen bounds check elimination (Chromium issue 344186).

        Performance and stability improvements on all platforms.


2014-02-19: Version 3.24.40

        A64: Let the MacroAssembler resolve branches to distant targets (issue
        3148).

        Fixed and improved code for integral division. Fixed and extended tests
        (issue 3151).

        MIPS: Fix assignment of function name constant (issue 3138).

        Fix assignment of function name constant (issue 3138).

        Performance and stability improvements on all platforms.


2014-02-14: Version 3.24.39

        Introduce --job-based-sweeping flag and use individual jobs for sweeping
        if set (issue 3104).

        Performance and stability improvements on all platforms.


2014-02-13: Version 3.24.38

        Merge experimental/a64 to bleeding_edge (issue 3113).

        Performance and stability improvements on all platforms.


2014-02-12: Version 3.24.37

        Fix spec violations in JSON.stringify wrt replacer array (issue 3135).

        Performance and stability improvements on all platforms.


2014-02-11: Version 3.24.36

        Fix inconsistencies wrt whitespaces (issue 3109).

        Performance and stability improvements on all platforms.


2014-02-10: Version 3.24.35

        Fix inconsistencies wrt whitespaces (issue 3109).

        Performance and stability improvements on all platforms.


2014-02-07: Version 3.24.34

        Performance and stability improvements on all platforms.


2014-02-06: Version 3.24.33

        Allow externalizing strings in old pointer space (Chromium issue
        268686).

        Performance and stability improvements on all platforms.


2014-02-05: Version 3.24.32

        Add Box object to heap profiler.

        Check the offset argument of TypedArray.set for fitting into Smi
        (Chromium issue 340125).

        Performance and stability improvements on all platforms.


2014-02-04: Version 3.24.31

        Fix short-circuiting logical and/or in HOptimizedGraphBuilder (Chromium
        issue 336148).

        Elements field of newly allocated JSArray could be left uninitialized in
        some cases (fast literal case) (Chromium issue 340124).

        Re-enable escape analysis.

        Performance and stability improvements on all platforms.


2014-02-03: Version 3.24.30

        Performance and stability improvements on all platforms.


2014-02-01: Version 3.24.29

        Performance and stability improvements on all platforms.


2014-01-31: Version 3.24.28

        Don't crash in Array.join() if the resulting string exceeds the max
        string length (Chromium issue 336820).

        Implements ES6 String.prototype.normalize method (issue 2943).

        Performance and stability improvements on all platforms.


2014-01-30: Version 3.24.27

        Performance and stability improvements on all platforms.


2014-01-29: Version 3.24.26

        ES6: Map and Set needs to normalize minus zero (issue 3069).

        Make `String.prototype.{starts,ends}With` throw when passing a regular
        expression (issue 3070).

        Performance and stability improvements on all platforms.


2014-01-28: Version 3.24.25

        Performance and stability improvements on all platforms.


2014-01-27: Version 3.24.24

        MIPS: Reduce the stack requirements of GetNoCodeAgeSequence (issue
        3111).

        Delete v8_shell target now that chrome uses d8 (Chromium issue 331585).

        ARM: Reduce the stack requirements of GetNoCodeAgeSequence (issue 3111).

        Performance and stability improvements on all platforms.


2014-01-24: Version 3.24.23

        Performance and stability improvements on all platforms.


2014-01-23: Version 3.24.22

        Fix compilation on x64 architectures (issue 3110).

        Ensure we don't overwrite transitions in SetPropertyIgnoreAttributes
        (Chromium issue 326155).

        ES6: Implement Object.setPrototypeOf (issue 2675).

        Fixed floor-of-div optimization (Chromium issue 334708).

        Performance and stability improvements on all platforms.


2014-01-22: Version 3.24.21

        Performance and stability improvements on all platforms.


2014-01-21: Version 3.24.20

        ES6: Implement Object.setPrototypeOf (issue 2675).

        Performance and stability improvements on all platforms.


2014-01-20: Version 3.24.19

        Introduce a setting to control the toolset for which d8 is compiled
        (issue 1775).

        Performance and stability improvements on all platforms.


2014-01-17: Version 3.24.18

        Performance and stability improvements on all platforms.


2014-01-16: Version 3.24.17

        Make cells pointing to JSObjects weak in optimized code (issue 2073).

        Performance and stability improvements on all platforms.


2014-01-15: Version 3.24.16

        Annotate mapped memory regions for LeakSanitizer (Chromium issue
        328552).

        Turn Runtime_MigrateInstance into Runtime_TryMigrateInstance (Chromium
        issue 315252).

        Performance and stability improvements on all platforms.


2014-01-14: Version 3.24.15

        Introduce an API mirroring the gc extension.

        Performance and stability improvements on all platforms.


2014-01-10: Version 3.24.14

        ES6: Add Object.getOwnPropertySymbols (issue 3049).

        Performance and stability improvements on all platforms.


2014-01-09: Version 3.24.13

        Add Isolate parameter to HandleScope::NumberOfHandles (Chromium issue
        324225).

        Removed v8::AssertNoGCScope.

        Performance and stability improvements on all platforms.


2014-01-08: Version 3.24.12

        Correctly handle instances without elements in polymorphic keyed
        load/store (Chromium issue 331416).

        Fix selection of popular pages in store buffer (Chromium issue 331444).

        Prepare removal of ObjectTemplate::New without Isolate parameter
        (Chromium issue 324225).

        Performance and stability improvements on all platforms.


2014-01-07: Version 3.24.11

        Remove generated makefiles on linux when running gyp_v8
        (Chromium issue 331475)

        Fix building d8 with readline support due to API changes

        Performance and stability improvements on all platforms.


2014-01-03: Version 3.24.10

        Reland r18383: More API cleanup (Chromium issue 324225).

        MIPS: Fix loading of global object in LWrapReceiver (Chromium issue
        318420).

        Performance and stability improvements on all platforms.


2014-01-02: Version 3.24.9

        Performance and stability improvements on all platforms.


2013-12-30: Version 3.24.8

        ARM: fix loading of global object in LWrapReceiver (Chromium issue
        318420).

        Fix a race between concurrent recompilation and OSR (Chromium issue
        330046).

        Turn off concurrent sweeping (issue 3071).

        Performance and stability improvements on all platforms.


2013-12-23: Version 3.24.7

        Fix small spec violation in String.prototype.split (issue 3026).

        Correctly resolve forcibly context allocated parameters in debug-
        evaluate (Chromium issue 325676).

        Introduce Function::GetBoundFunction. 

        Performance and stability improvements on all platforms.


2013-12-20: Version 3.24.6

        Performance and stability improvements on all platforms.


2013-12-19: Version 3.24.5

        Performance and stability improvements on all platforms.


2013-12-18: Version 3.24.4

        Removed all stuff marked as V8_DEPRECATED.

        Performance and stability improvements on all platforms.


2013-12-17: Version 3.24.3

        Performance and stability improvements on all platforms.


2013-12-17: Version 3.24.2

        Flush instruction cache for deserialized code objects.

        Performance and stability improvements on all platforms.


2013-12-13: Version 3.24.1

        Fix polymorphic inlined calls with migrating prototypes.

        Fixed global object leak caused by overwriting the global receiver (the
        global proxy) in the global object with the global object itself
        (Chromium issue 324812).

        Initialize Date parse cache with SMI instead of double to workaround
        sharing mutable heap numbers in snapshot (Chromium issue 280531).

        Switch armv7 setting to arm_version==7 in v8 gyp files (Chromium issue
        234135).

        Performance and stability improvements on all platforms.


2013-12-09: Version 3.24.0

        Performance and stability improvements on all platforms.


2013-12-04: Version 3.23.18

        Performance and stability improvements on all platforms.


2013-12-03: Version 3.23.17

        Performance and stability improvements on all platforms.


2013-12-02: Version 3.23.16

        Array builtins need to be prevented from changing frozen objects, and
        changing structure on sealed objects (Chromium issue 299979).

        Performance and stability improvements on all platforms.


2013-11-29: Version 3.23.15

        Fix context register allocation in LTransitionElementsKind
        (Chromium issue 324306).

        Fix bug in inlining Function.apply (Chromium issue 323942).

        Ensure that length is Smi in TypedArrayFromArrayLike constructor
        (Chromium issue 324028).

        Performance and stability improvements on all platforms.


2013-11-28: Version 3.23.14

        Shorten autogenerated error message (issue 3019).

        Performance and stability improvements on all platforms.


2013-11-27: Version 3.23.13

        Increase precision for base conversion for large integers (issue 3025).

        Flatten cons string for single character substrings (Chromium issue
        323041).

        Performance and stability improvements on all platforms.


2013-11-26: Version 3.23.12

        Performance and stability improvements on all platforms.


2013-11-25: Version 3.23.11

        Deprecate old versions of Isolate::SetData and GetData.

        Performance and stability improvements on all platforms.


2013-11-22: Version 3.23.10

        Remove preemption thread and API.
        (issue 3004)

        Performance and stability improvements on all platforms.


2013-11-21: Version 3.23.9

        API: Change AdjustAmountOfExternalAllocatedMemory calls to use int64_t
        instead of intptr_t.

        Remove deprecated v8::SetResourceConstraints without Isolate parameter.

        Remove deprecated v8-defaults.h and defaults.cc.
        (Chromium issue 312241)

        Make it possible to add more than one piece of embedder data to
        isolates.
        (Chromium issue 317398)

        Performance and stability improvements on all platforms.


2013-11-20: Version 3.23.8

        Fixed crashes exposed though fuzzing.
        (Chromium issue 320948)

        Deprecated v8::External::New without Isolate parameter.

        Made number of available threads isolate-dependent and exposed it to
        ResourceConstraints.
        (issue 2991)

        Performance and stability improvements on all platforms.


2013-11-19: Version 3.23.7

        Bugfix: dependent code field in AllocationSite was keeping code objects
        alive even after context death.
        (Chromium issue 320532)

        Fixed data view accessors to throw execptions on offsets bigger than
        size_t.
        (issue 3013)

        Performance and stability improvements on all platforms.


2013-11-18: Version 3.23.6

        Limit size of dehoistable array indices.
        (Chromium issues 319835, 319860)

        Limit the size for typed arrays to MaxSmi.
        (Chromium issue 319722)

        Performance and stability improvements on all platforms.


2013-11-15: Version 3.23.5

        Fixed missing type feedback check for Generic*String addition.
        (Chromium issue 318671)

        Fixed duplicate check in DependentCode::Insert.
        (Chromium issue 318454)

        Performance and stability improvements on all platforms.


2013-11-14: Version 3.23.4

        Fixed overflow in TypedArray initialization function.
        (Chromium issue 319120)

        Performance and stability improvements on all platforms.


2013-11-13: Version 3.23.3

        Fixed compilation with GCC 4.8.
        (issue 2767, 2149)

        Added explicit Isolate parameter to External::New.
        (Chromium issue 266838)

        Performance and stability improvements on all platforms.


2013-11-12: Version 3.23.2

        Fixed --extra-code flag for snapshot creation.
        (issue 2994)

        Fixed error message wording when instanceof throws.
        (Chromium issue 82797, issue 1593)

        Performance and stability improvements on all platforms.


2013-11-08: Version 3.23.1

        Made HCapturedObjects non-deletable for DCE. (issue 2987)

        Use a fixed random seed per default. (issue 1880, 2885)

        Fixed y-umlaut to uppercase. (issue 2984)

        Performance and stability improvements on all platforms.


2013-11-06: Version 3.23.0

        Fixed loading message from an Error object.  (Chromium issue 306220)

        Made Object.freeze/seal/preventExtensions observable. (issue 2975, 2941)

        Made snapshots reproducible. (issue 2885)

        Added missing negative dictionary lookup to NonexistentHandlerFrontend.
        (issue 2980)

        Performance and stability improvements on all platforms.


2013-10-31: Version 3.22.24

        Fixed uint32-to-smi conversion in Lithium.
        (Chromium issue 309623)

        Performance and stability improvements on all platforms.


2013-10-28: Version 3.22.23

        Renamed deprecated __attribute__((no_address_safety_analysis)) to
        __attribute__((no_sanitize_address)) (Chromium issue 311283)

        Defined DEBUG for v8_optimized_debug=2

        Performance and stability improvements on all platforms.


2013-10-25: Version 3.22.22

        Record allocation stack traces. (Chromium issue 277984,v8:2949)

        Performance and stability improvements on all platforms.


2013-10-24: Version 3.22.21

        Performance and stability improvements on all platforms.


2013-10-24: Version 3.22.20

        Made Array.prototype.pop throw if the last element is not configurable.

        Fixed HObjectAccess for loads from migrating prototypes.
        (Chromium issue 305309)

        Enabled preaging of code objects when --optimize-for-size.
        (Chromium issue 280984)

        Exposed v8::Function::GetDisplayName to public API.
        (Chromium issue 17356)

        Performance and stability improvements on all platforms.


2013-10-23: Version 3.22.19

        Fix materialization of captured objects with field tracking.
        (Chromium issue 298990)

        Performance and stability improvements on all platforms.


2013-10-22: Version 3.22.18

        Add tool to visualize machine code/lithium.

        Handle misaligned loads and stores in load elimination. Do not track
        misaligned loads and be conservative about invalidating misaligned
        stores. (issue 2934)

        Performance and stability improvements on all platforms.


2013-10-21: Version 3.22.17

        Harmony: Implement Math.trunc and Math.sign. (issue 2938)

        Performance and stability improvements on all platforms.


2013-10-21: Version 3.22.16

        Performance and stability improvements on all platforms.


2013-10-18: Version 3.22.15

        Enabled calling the SetReference* & SetObjectGroupId functions with a
        Persistent<SubclassOfValue>.

        Performance and stability improvements on all platforms.


2013-10-17: Version 3.22.14

        Performance and stability improvements on all platforms.


2013-10-16: Version 3.22.13

        Do not look up ArrayBuffer on global object in typed array constructor.
        (issue 2931)

        Performance and stability improvements on all platforms.


2013-10-15: Version 3.22.12

        Added histograms to track fraction of heap spaces and percentage of
        generated crankshaft code.

        Moved v8_optimized_debug default value to standalone.gypi.

        Track JS allocations as they arrive with no affection on performance
        when tracking is switched off (Chromium issue 277984).

        Performance and stability improvements on all platforms.


2013-10-14: Version 3.22.11

        Performance and stability improvements on all platforms.


2013-10-11: Version 3.22.10

        Fixed timezone issues with date-time/parse-* tests.
        (Chromium issue 2919)

        Added column getter to CpuProfileNode (Chromium issue 302537)

        Performance and stability improvements on all platforms.


2013-10-10: Version 3.22.9

        Ensure only whitelisted stubs have sse2 versions in the snapshot.
        (fix for chromium 304565)

        Implement ArrayBuffer.isView.

        Performance and stability improvements on all platforms.


2013-10-04: Version 3.22.8

        Performance and stability improvements on all platforms.


2013-10-03: Version 3.22.7

        Debug: Allow stepping into on a given call frame
        (Chromium issue 296963).

        Always use timeGetTime() for TimeTicks::Now() on Windows
        (Chromium issue 288924).

        Performance and stability improvements on all platforms.


2013-10-02: Version 3.22.6

        Performance and stability improvements on all platforms.


2013-10-01: Version 3.22.5

        Disabled externalization of sliced/cons strings in old pointer space
        (Chromium issue 276357).

        Turned on handle zapping for release builds

        Performance and stability improvements on all platforms.


2013-09-30: Version 3.22.4

        Function::Call and Object::CallAsFunction APIs should allow v8::Value as
        a receiver (issue 2915).

        Removed unnecessary mutex (Chromium issue 291236).

        Removed ArrayBufferView::BaseAddress method.

        Performance and stability improvements on all platforms.


2013-09-27: Version 3.22.3

        Added methods to enable configuration of ResourceConstraints based on
        limits derived at runtime.
        (Chromium issue 292928)

        Added -optimize-for-size flag to optimize for memory size (will be used
        by pre-aging CL), and removed the is_memory_constrained
        ResourceConstraint.
        (Chromium issue 292928)

        Performance and stability improvements on all platforms.


2013-09-26: Version 3.22.2

        Performance and stability improvements on all platforms.


2013-09-25: Version 3.22.1

        Sped up creating typed arrays from array-like objects.
        (Chromium issue 270507)

        Performance and stability improvements on all platforms.


2013-09-23: Version 3.22.0

        LiveEdit to mark more closure functions for re-instantiation when scope
        layout changes.
        (issue 2872)

        Made bounds check elimination iterative instead of recursive.
        (Chromium issue 289706)

        Turned on i18n support by default.

        Set the proper instance-type on HAllocate in BuildFastLiteral.
        (Chromium issue 284577)

        Performance and stability improvements on all platforms.


2013-09-18: Version 3.21.17

        Implemented local load/store elimination on basic blocks.

        Added mutex when accessing concurrent recompilation output queue.
        (Chromium issue 291236)

        Don't lookup the cache for the result of Function::New.
        (Chromium issue 272579)

        Tweaked HConstant::EmitAtUses() to eliminate useless constant
        generation.
        (Chromium issue 2881)

        Performance and stability improvements on all platforms.


2013-09-16: Version 3.21.16

        Every place where AllocationMemento is initialized with an
        AllocationSite is now checked to be sure a valid Site goes in. This is
        temporary code to diagnose chromium bug 284577.

        Performance and stability improvements on all platforms.


2013-09-13: Version 3.21.15

        Non-JSObject heap objects are now handled using slow-path IC stub
        guarded by the map.
        (Chromium issue 280632)

        i18n Javascript code added to the snapshot.
        (V8 issue 2745)

        Performance and stability improvements on all platforms.

2013-09-12: Version 3.21.14

        Added access check for observed objects.
        (V8 issue 2778)

        Cleaned up v8::ArrayBuffer::Allocator interface.
        (V8 issue 2823)

        Performance and stability improvements on all platforms.

2013-09-11: Version 3.21.13

        Added a ResourceConstraint for the embedder to specify that V8 is
        running on a memory constrained device.
        (Chromium issue 280984)

        Removed HandleScope default ctor.
        (Chromium issue 236173)

        Enabled escape analysis for Hydrogen.

        Correctly stringified mixed encoding indirect strings.
        (Chromium issue 287476)

        Performance and stability improvements on all platforms.


2013-09-09: Version 3.21.12

        Fixed bitwise negation on x64.
        (Chromium issue 285355)

        Dropped GetCurrentThreadId() and TerminateExecution(int) from 
	the external API.

        Fixed polymorphic INTERCEPTOR StoreICs on ARM/MIPS.
        (Chromium issue 284998)

        Added check if timeout has expired after processing each sample.
        (issue 2814,v8:2871)

        Removed obsolete global V8::has_been_fooed flags.
        (issue 2744)

        Performance and stability improvements on all platforms.


2013-09-05: Version 3.21.11

        Performance and stability improvements on all platforms.


2013-09-04: Version 3.21.10

        Fixed Eternal::IsEmpty logic (issue 2870).

        Performance and stability improvements on all platforms.


2013-09-03: Version 3.21.9

        Deprecated Persistent functions which were marked to be deprecated.

        Allowed uncacheable identifiers to go generic (issue 2867).

        Performance and stability improvements on all platforms.


2013-09-02: Version 3.21.8

        Added scriptId to StackTrace frames (issue 2865).

        Performance and stability improvements on all platforms.


2013-08-30: Version 3.21.7

        Fixed casts of eternal handles.

        Turned on global handle zapping.

        Always visit branches during HGraph building (Chromium issue 280333).

        Profiler changes: removed deprecated API, support higher sampling
        rate on Windows.

        Performance and stability improvements on all platforms.


2013-08-29: Version 3.21.6

        Fixed inlined 'throw' statements interfering with live range
        computation. (issue 2843)

        Performance and stability improvements on all platforms.


2013-08-28: Version 3.21.5

        Fixed compilation with recent MinGW64 versions. (issue 2300)

        Added RemovePrototype to FunctionTemplate. (Chromium issue 272440)

        Performance and stability improvements on all platforms.


2013-08-26: Version 3.21.4

        Lowered kInitialMaxFastElementArray constant to 95K (issue 2790).

        Use signals for cpu profiling on Mac OS X (issue 2814).

        Deprecated CpuProfileNode::GetSelfSamplesCount (Chromium issue 267595).

        Added support for higher CPU profiler sampling rate on posix systems
        (issue 2814).

        Worked around 'inlining failed' build error with older GCC 4.x releases.

        Added source map support to tick processor.

        Stability improvements on all platforms.


2013-08-23: Version 3.21.3

        Temporarily disabled optimization for StringWrappers to use native
        valueOf. (issue 2855)

        Fixed crash on function declarations in eval inside non-trivial local
        scope. (issue 2594)

        Rewrote SamplingCircularQueue. (issue 2814)

        Fixed hidden properties on object with frozen prototype. (issue 2829)

        Fix deoptimization bug. (Chromium issue 274164)

        Stability improvements on all platforms.


2013-08-22: Version 3.21.2

        Stability improvements on all platforms.


2013-08-21: Version 3.21.1

        Promoted ArrayBuffer, DataView and typed arrays to non-experimental.
        (Chromium issue 270527)

        Replaced OS::MemCopy with memcpy in typed array initialization.
        (Chromium issue 270642)

        Moved i18n break iterator C++ code to runtime (issue 2745)

        Fixed invalid out-of-bounds store in MacroAssembler::Allocate.
        (Chromium issue 263515)

        Fixed register misuse in Allocate() on ARM. (issue 2851)

        Fixed empty handle dereference in Runtime_InternalNumberFormat.
        (Chromium issue 275467)

        Performance and stability improvements on all platforms.


2013-08-19: Version 3.21.0

        Fixed GC-related crasher (Chromium issue 274438)

        Reverted making Intl non-enumerable.

        Performance and stability improvements on all platforms.


2013-08-14: Version 3.20.17

        Fixed Math.round/floor that had bogus Smi representation
        (Chromium issue 272564)

        Performance and stability improvements on all platforms.


2013-08-13: Version 3.20.16

        Fixed bug in HPhi::SimplifyConstantInput (Chromium issue 269679)

        Fixed gcmole bugs in i18n code (issue 2745)

        ia32: Calls to the TranscendentalCacheStub must ensure that esi is
        set (issue 2827)

        Made sure polymorphic element access creates non-replaying
        phis. (issue 2815)

        Allowed HPhis to have an invalid merge index. (issue 2815)

        Fixed smi-based math floor. (Chromium issue 270268)

        Deprecated self and total time getters and total sample count
        getter on CpuProfileNode. (Chromium issue 267595)

        Fixed Object.freeze, Object.observe wrt CountOperation and
        CompoundAssignment. (issue 2774,2779)

        Performance and stability improvements on all platforms.


2013-08-07: Version 3.20.15

        Exposed eternal handle api.

        Bugfix to solve issues with enabling V8 typed arrays in Blink.

        Fixed Array index dehoisting.  (Chromium issue 264203)

        Updated Array Iterator to use numeric indexes (issue 2818)

        Return start/end profiling time in microseconds instead of milliseconds
        (issue 2824)

        Performance and stability improvements on all platforms.


2013-08-06: Version 3.20.14

        Added new Harmony methods to Array.prototype object.
        (issue 2776,v8:2777)

        Performance and stability improvements on all platforms.


2013-08-01: Version 3.20.12

        Removed buggy ToNumber truncation (partial fix for issue 2813)

        Calling Map etc without new should throw TypeError (issue 2819)

        Fixed a crash for large code objects on ARM (Chromium issue 2736)

        Fixed stale unhandlified value in JSObject::SetPropertyForResult.
        (Chromium issue 265894)

        Added new Harmony methods to String.prototype object.
        (issue 2796,v8:2797,v8:2798,v8:2799)

        Performance and stability improvements on all platforms.


2013-07-30: Version 3.20.11

        Performance and stability improvements on all platforms.


2013-07-29: Version 3.20.10

        Performance and stability improvements on all platforms.


2013-07-26: Version 3.20.9

        Check that ExternalString objects get aligned resources.

        Fixed JSArray-specific length lookup in polymorphic array handling
        (Chromium issues 263276, 263905).

        Performance and stability improvements on all platforms.


2013-07-24: Version 3.20.8

        Deprecated v8::V8::Pause/ResumeProfiler.

        Fixed Chromium issues 247688, 258519 and 260203.

        Performance and stability improvements on all platforms.


2013-07-22: Version 3.20.7

        Deprecated some debugger methods.

        Fixed wrong bailout id in polymorphic stores (Chromium issue 259787).

        Fixed data race in SamplingCircularQueue (Chromium issue 251218).

        Fixed type feedback in presence of negative lookups
        (Chromium issue 252797).

        Do not materialize context-allocated values for debug-evaluate
        (Chromium issue 259300).

        Synchronized Compare-Literal behavior in FullCodegen and Hydrogen
        (Chromium issue 260345).

        Performance and stability improvements on all platforms.


2013-07-17: Version 3.20.6

        Try to remove invalidated stubs before falling back to checking the
        constant state (Chromium issue 260585).

        Fixed gyp_v8 to work with use_system_icu=1 (issue 2475).

        Fixed sloppy-mode 'const' under Harmony flag (Chromium issue 173361).

        Use internal array as API function cache  (Chromium issue 260106).

        Fixed possible stack overflow in range analysis
        (Chromium issue 259452).

        Performance and stability improvements on all platforms.


2013-07-15: Version 3.20.5

        Ensured that the length of frozen arrays is immutable
        (issue 2711, Chromium issue 259548).

        Performance and stability improvements on all platforms.


2013-07-10: Version 3.20.4

        Fixed garbage-collection issue that causes a crash on ARM
        (Chromium issue 254570)

        Performance and stability improvements on all platforms.


2013-07-08: Version 3.20.3

        Performance and stability improvements on all platforms.


2013-07-05: Version 3.20.2

        Remove deprecated heap profiler methods from V8 public API

        Mark i18n functions as native and set proper names
        (issue 2745)

        Correctly report stack trace when current function is FunctionApply
        builtin (Chromium issue 252097)

        Enable GDBJIT interface for standalone by default.

        Fix debuggersupport=off build. (issue 2754)

        Introduce -m64 flag for making x64 when the default gcc compiler is for
        X32

        Performance and stability improvements on all platforms.


2013-07-02: Version 3.20.1

        Implemented WeakMap.prototype.clear function. (issue 2753)

        Ensure CheckInitialized is present independent of define.
        (Chromium issue 255779)

        Performance and stability improvements on all platforms.


2013-06-28: Version 3.20.0

        Migrated several tests from blink to V8 repository.

        Allowed users of the V8 API to distinguish between unset and undefined
        HiddenValues (issue 2746).

        Deprecated old style callbacks in the V8 API.

        Turned on parallel recompilation.

        Performance and stability improvements on all platforms.


2013-06-18: Version 3.19.18

	Fixed read-only attribute of Function.length in strict mode.
	(issue 2705)

	Fixed Runtime_SetProperty to properly handle OOM failures
	(Chromium issue 249873)

	Emit deprecated check for constant function transitions.
	(Chromium issue 250609)
	
	Made MathFloorOfDiv optimization trigger more often
	(Issue 2205)

	Make more GCs in idle notification handler.
	(Chromium issue 241815)

	Increased default type info threshold.
	(Issue 2730)

        Performance and stability improvements on all platforms.


2013-06-14: Version 3.19.16

        Performance and stability improvements on all platforms.


2013-06-13: Version 3.19.15

        Performance and stability improvements on all platforms.


2013-06-13: Version 3.19.14

        Fixed crashes when calling new Array(a) with a single argument that
        could result in creating a holey array with a packed elements kind.
        (Chromium issue 245480)

        Fixed issues in parallel compilation.
        (Chromium issue 248076)

        Performance and stability improvements on all platforms.


2013-06-11: Version 3.19.13

        Performance and stability improvements on all platforms.


2013-06-10: Version 3.19.12

        Fixed arguments array access. (Chromium issue 247303)

        Fixed bug in LookupForWrite. (Chromium issue 242332)

        Performance and stability improvements on all platforms.


2013-06-07: Version 3.19.11

        Performance and stability improvements on all platforms.


2013-06-06: Version 3.19.10

        Performance and stability improvements on all platforms.


2013-06-05: Version 3.19.9

        Implemented Load IC support for loading properties from primitive
        values to avoid perpetual soft deopts.  (Chromium issue 242512)

        Implemented Freeing of PerThreadAssertData when possible to avoid
        memory leak. (Chromium issue 246567)

        Removed V8_USE_OLD_STYLE_PERSISTENT_HANDLE_VISITORS.

        Performance and stability improvements on all platforms.


2013-06-03: Version 3.19.8

        Fixed bug with inlining 'Array' function. (Chromium issue 244461)

        Fixed initialization of literal objects. (Chromium issue 245424)

        Fixed function name inferred inside closures. (Chromium issue 224884)

        Performance and stability improvements on all platforms.


2013-05-31: Version 3.19.7

        Added support for //# sourceURL similar to deprecated //@ sourceURL one.
        (issue 2702)

        Made sure IfBuilder::Return clears the current block.
        (Chromium issue 243868)

        Fixed two CPU profiler tests on ARM and MIPS simulators
        (issue 2628)

        Fixed idle incremental GC for large objects.
        (Chromium issue 241815)

        Disabled --optimize-constructed-arrays due to crashes
        (Chromium issue 244461)

        Performance and stability improvements on all platforms.


2013-05-28: Version 3.19.6

        Fixed IfBuilder::Deopt to clear the current block
        (Chromium issue 243868).

        Performance and stability improvements on all platforms.


2013-05-27: Version 3.19.5

        Reset regexp parser flag after scanning ahead for capture groups.
        (issue 2690)

        Removed flakiness in test-cpu-profiler/SampleWhenFrameIsNotSetup.
        (issue 2628)

        Performance and stability improvements on all platforms.


2013-05-24: Version 3.19.4

        Fixed edge case in stack trace formatting. (Chromium issue 237617)

        Fixed embedded new-space pointer in LCmpObjectEqAndBranch. (Chromium
	issue 240032)

        Made Object.freeze fast (issue 1858, Chromium issue 115960)

        Fixed bogus deopt in BuildEmitDeepCopy for holey arrays. (Chromium issue
        242924)

        Performance and stability improvements on all platforms.


2013-05-22: Version 3.19.3

        Performance and stability improvements on all platforms.


2013-05-17: Version 3.19.2

        Fill in one-word-fillers for the unused property fields
        (Chromium issue 240056).

        Removed use_system_v8 logic from the mainline gyp file
        (Chromium issue 226860).

        Skip CPU profiler samples where top function's stack frame is not
        set up properly (issue 2628).

        Performance and stability improvements on all platforms.


2013-05-14: Version 3.19.1

        Fixed missing hole check for loads from Smi arrays when all uses are
        changes (Chromium issue 233737)

        Performance and stability improvements on all platforms.


2013-05-10: Version 3.19.0

        Deprecated Context::New which returns Persistent.

        Added Persistent<T>::Reset which disposes the handle and redirects it to
        point to another object.

        Deprecated WriteAscii and MayContainNonAscii.

        Exposed AssertNoAllocation to API.

        Performance and stability improvements on all platforms.


2013-04-30: Version 3.18.5

        Allowed setting debugger breakpoints on CompareNilICs (issue 2660)

        Fixed beyond-heap load on x64 Crankshafted StringCharFromCode
        (Chromium issue 235311)

        Change 'Parse error' to three more informative messages.
        (Chromium issue 2636)

        Performance and stability improvements on all platforms.


2013-04-26: Version 3.18.4

        Added a preliminary API for ES6 ArrayBuffers

        Replaced qsort with std::sort. (Chromium issue 2639)

        Performance and stability improvements on all platforms.


2013-04-24: Version 3.18.3

        Exposed the GC under a name that is less collision prone than window.gc.
        (issue 2641)

        Do not emit double values at their use sites. (Chromium issue 234101)

        Added methods to allow resuming execution after calling
        TerminateExecution(). (issue 2361)

        Performance and stability improvements on all platforms.


2013-04-22: Version 3.18.2

        OS::MemMove/OS::MemCopy: Don't call through to generated code when size
        == 0 to avoid prefetching invalid memory (Chromium issue 233500)

        Removed heap snapshot size limit. (Chromium issue 232305)

        Performance and stability improvements on all platforms.


2013-04-18: Version 3.18.1

        Removed SCons related files and deprecated test suite configurations.

        Improved handling of unary plus (issue 2527).

        Performance and stability improvements on all platforms.


2013-04-17: Version 3.18.0

        Enabled pretenuring of fast literals in high promotion mode.

        Removed preparser library; link preparser executable against full V8.

        Fixed set-up of intrinsic's 'constructor' properties.
        (Chromium issue 229445)

        ES6 symbols: extended V8 API to support symbols (issue 2158).

        Removed ARM support for VFP2.

        Made __proto__ a real JavaScript accessor property.
        (issue 1949 and issue 2606)

        Performance and stability improvements on all platforms.


2013-04-04: Version 3.17.16

        Stack trace API: poison stack frames below the first strict mode frame.
        (issue 2564)

        Made Isolate::GetHeapStatistics robust against half-initialized
        isolates (Chromium issue 2591).

        Finished implementation of ES6 symbols aka. private names (issue 2158).

        Performance and stability improvements on all platforms.


2013-03-21: Version 3.17.15

        Rolled back API changes to maintain compatibility with older
        3.17.x versions of V8.

        Disable zapping of global handles in release mode.

        Always mark the entire valid prefix of the descriptor array.
        (Chromium issue 196331)

        Use internal memcpy for CopyWords and when copying code.
        (Chromium issue 196330)

        Performance and stability improvements on all platforms.


2013-03-20: Version 3.17.14

        Use internal memcpy when initializing code objects.
        (Chromium issue 196330)

        Disabled weak embedded maps because of crashes.
        (Chromium issues 172489, 217858)

        Performance and stability improvements on all platforms.


2013-03-19: Version 3.17.13

        Turned Flags into a uint32_t typedef (Chromium issue 194749).

        Performance and stability improvements on all platforms.


2013-03-18: Version 3.17.12

        Unified kMaxArguments with number of bits used to encode it.
        (Chromium issue 211741)

        Fixed detection of |handle_smi| case in
        HOptimizedGraphBuilder::HandlePolymorphicCallNamed.
        (Chromium issue 196583)

        Performance and stability improvements on all platforms.


2013-03-15: Version 3.17.11

        Added a version of the v8::HandleScope constructor with an v8::Isolate
        parameter and made AdjustAmountOfExternalAllocatedMemory an instance
        method of v8::Isolate.
        (issue 2487)

        Fixed two register allocator bugs (off-by-one error/failure
        propagation). (issue 2576)

        Fixed huge heap snapshot when a heavily shared context has many
        variables. (Chromium issue 145687)

        Performance and stability improvements on all platforms.


2013-03-13: Version 3.17.10

        Fixed heap snapshot creation for Harmony collections. (issue 2535)

        Fixed register allocation corner case. (Chromium issue 177883)

        Performance and stability improvements on all platforms.


2013-03-08: Version 3.17.9

        Restored Function()'s expected string representation. (issue 2470)

        Enabled deprecatations (again). (issue 2487)

        Avoid bool to Oddball conversions by being lazy. (issue 2491)

        Added %p option to --logfile.

        Hardened Function()'s parsing of function literals. (issue 2470)

        ES6 symbols: Refine test for getOwnPropertyNames. (issue 2158)

        Performance and stability improvements on all platforms.


2013-03-07: Version 3.17.8

        Added missing license headers. (Chromium issue 98597)

        Inserted missing type cast in JSON.stringify. (issue 2570)

        Reverted "Send SIGPROF signals on the profiler event processor thread"
        (issue 2571)

        Fixed Array.length, String.length and Function.prototype LoadICs on x64.
        (issue 2568)

        ES6 symbols: filter symbols form for-in loops and Object.keys.
        (issue 2158)

        Properly handle misses for StoreArrayLengthStub on ia32 and x64
        (issue 2566)

        Fixed x32 handling of Atomic64. (Chromium issue chromium-os:36866)

        Removed "library" variable from standalone.gypi. (Chromium issue 111541)

        Fixed HCheckSmiOrInt <-> HBoundsCheck interaction wrt. representations.
        (issue 2556)

        Enabled zapping of disposed global handles in release mode.
        (Chromium issue 176056)

        Added workaround for redefinition of __proto__ property. (issue 2565)

        ES6 symbols: Allow symbols as property names. (issue 2158)

        Performance and stability improvements on all platforms.


2013-03-04: Version 3.17.7

        Limited recursion in regexp compilation by a budget.
        (Chromium issue 178790)

        ES6 symbols: Implemented Symbol intrinsic and basic functionality
        (issue 2158)

        Performance and stability improvements on all platforms.


2013-02-28: Version 3.17.6

        Fixed materialization of arguments objects with unknown values.
        (Chromium issue 163530)

        Set default number of sweeper threads to at most four.

        Performance and stability improvements on all platforms.


2013-02-27: Version 3.17.5

        Made __proto__ a foreign callback on Object.prototype.
        (issue 621, issue 1949 and issue 2441)

        Performance and stability improvements on all platforms.


2013-02-25: Version 3.17.4

        Performance and stability improvements on all platforms.


2013-02-21: Version 3.17.3

        Performance and stability improvements on all platforms.


2013-02-19: Version 3.17.2

        Removed bogus check for TOP register in deoptimizer.
        (Chromium issue 176943)

        Made the Isolate parameter mandatory for internal HandleScopes.
        (issue 2487)

        Fixed f.apply() optimization when declared arguments are mutated.
        (issue 2539)

        Performance and stability improvements on all platforms.


2013-02-14: Version 3.17.1

        Performance and stability improvements on all platforms.


2013-02-13: Version 3.17.0

        Enabled parallel sweeping.

        Don't try to unlink instructions twice during GVN
        (Chromium issue 175141)

        Fixed code flusher disabling while marking incrementally.
        (Chromium issue 173458, 168582)

        Don't use TLS for space iterators.
        (issue 2531)

        Added new GetHeapStatistics API entry and deprecated old one.

        Fixed DoubleStackSlot-to-DoubleStackSlot moves on ia32. Unified
        platform-independent code.
        (Chromium issue 173907)

        Added --trace-array-abuse to help find OOB accesses.

        Performance and stability improvements on all platforms.


2013-02-06: Version 3.16.14

        Performance and stability improvements on all platforms.


2013-02-04: Version 3.16.13

        Tagged stubs that rely on instance types as MEGAMORPHIC.
        (Chromium issue 173974)

        Fixed clearing of dead dependent codes and verifing of weak
        embedded maps on full GC. (Chromium issue 172488,172489)

        Made the arm port build cleanly with Clang.

        Performance and stability improvements on all platforms.


2013-01-31: Version 3.16.12

        Performance and stability improvements on all platforms.


2013-01-30: Version 3.16.11

        Put making embedded maps in optimized code weak behind a flag.
        (Chromium issue 172488,172489)

        Performance and stability improvements on all platforms.


2013-01-25: Version 3.16.10

        Avoid excessive memory usage during redundant phi elimination.
        (issue 2510)

        Fixed additional spec violations wrt RegExp.lastIndex.
        (issue 2437)

        Added Isolate parameter to Persistent class.
        (issue 2487)

        Performance and stability improvements on all platforms.


2013-01-24: Version 3.16.9

        Made embedded maps in optimized code weak.
        (issue 2073)

        Fixed corner case when JSFunction is evicted from flusher.
        (Chromium issue 168801)

        Correctly set kCanBeDivByZero flag for HMathFloorOfDiv.
        (Chromium issue 171641)

        Performance and stability improvements on all platforms.


2013-01-23: Version 3.16.8

        Correctly reset lastIndex in an RegExp object.
        (Chromium issue 170856)

        Added a workaround for Windows compilation problems related to V8EXPORT.
        (issue 2507)

        tools/run-tests.py: shlex.split() the value of --command-prefix
        (Chromium issue 171553)

        Fixed pattern detection for replacing shifts by rotation.
        (Chromium issue 2499)

        Performance and stability improvements on all platforms.


2013-01-21: Version 3.16.7

        Removed <(library) usage from v8.gyp.
        (Chromium issue 111541)

        Fixed out of bounds memory access in TestJSArrayForAllocationSiteInfo.
        (Chromium issue 169928)

        Performance and stability improvements on all platforms.


2013-01-18: Version 3.16.6

        Made the Isolate parameter mandatory in Locker and Unlocker classes.
        (issue 2487)

        Avoid pointer underflow in CopyCharsUnsigned.
        (issue 2493)

        Generate shim headers when using system v8.
        (Chromium issue 165264)

        Fixed arguments materialization for inlined apply().
        (issue 2489)

        Sync'ed laziness between BuildFunctionInfo and MakeFunctionInfo.
        (Chromium issue 147497)

        Added sanity check to CodeFlusher::AddCandidate.
        (Chromium issue 169209)

        Performance and stability improvements on all platforms.


2013-01-15: Version 3.16.5

        Removed deprecated functions from V8's external API.

        Prepared API for WebKit use of Latin-1.

        Fixed V8 issue 2486.

        Fixed Chromium issue 169723.

        Performance and stability improvements on all platforms.


2013-01-11: Version 3.16.4

        Fixed Chromium issues 168545 and 169209.

        Performance and stability improvements on all platforms.


2013-01-09: Version 3.16.3

        Improved GC performance when moving parts of a FixedArray (issue 2452).

        Enabled readline on d8 while building a shared lib (issue 1781).

        Fixed missing exception check in typed array constructor
        (Chromium issue 168545).

        Check for read-only-ness when preparing for array sort (issue 2419).

        Performance and stability improvements on all platforms.


2013-01-04: Version 3.16.2

        Added Makefile options to build for the Raspberry Pi (armv7=0,
        arm_fpu=vfp2).

        Performance and stability improvements on all platforms.


2012-12-27: Version 3.16.1

        Fixed x64 MathMinMax for negative untagged int32 arguments.
        (Chromium issue 164442)

        Fixed FloatingPointHelper::CheckSSE2OperandIsInt32.
        (issue 2458)

        Performance and stability improvements on all platforms.


2012-12-21: Version 3.16.0

        V8_Fatal now prints C++ stack trace in debug mode.

        Added HTML-based tick processor.

        Continued implementation of Object.observe (V8 issue 2409).

        Fixed V8 issues 2243, 2340, 2393, 2399, 2457.

        Fixed Chromium issues 125308, 165637, 166379, 166553.

        Performance and stability improvements on all platforms.


2012-12-10: Version 3.15.11

        Define CAN_USE_VFP2/3_INSTRUCTIONS based on arm_neon and arm_fpu GYP
        flags.

        Performance and stability improvements on all platforms.


2012-12-07: Version 3.15.10

        Enabled optimisation of functions inside eval. (issue 2315)

        Fixed spec violations in methods of Number.prototype. (issue 2443)

        Added GCTracer metrics for a scavenger GC for DOM wrappers.

        Performance and stability improvements on all platforms.


2012-12-06: Version 3.15.9

        Fixed candidate eviction in code flusher.
        (Chromium issue 159140)

        Iterate through all arguments for side effects in Math.min/max.
        (issue 2444)

        Fixed spec violations related to regexp.lastIndex
        (issue 2437, issue 2438)

        Performance and stability improvements on all platforms.


2012-12-04: Version 3.15.8

        Enforced stack allocation of TryCatch blocks.
        (issue 2166,chromium:152389)

        Fixed external exceptions in external try-catch handlers.
        (issue 2166)

        Activated incremental code flushing by default.

        Performance and stability improvements on all platforms.


2012-11-30: Version 3.15.7

        Activated code aging by default.

        Included more information in --prof log.

        Removed eager sweeping for lazy swept spaces. Try to find in
        SlowAllocateRaw a bounded number of times a big enough memory slot.
        (issue 2194)

        Performance and stability improvements on all platforms.


2012-11-26: Version 3.15.6

        Ensure double arrays are filled with holes when extended from
        variations of empty arrays. (Chromium issue 162085)

        Performance and stability improvements on all platforms.


2012-11-23: Version 3.15.5

        Fixed JSON.stringify for objects with interceptor handlers.
        (Chromium issue 161028)

        Fixed corner case in x64 compare stubs. (issue 2416)

        Performance and stability improvements on all platforms.


2012-11-16: Version 3.15.4

        Fixed Array.prototype.join evaluation order. (issue 2263)

        Perform CPU sampling by CPU sampling thread only iff processing thread
        is not running. (issue 2364)

        When using an Object as a set in Object.getOwnPropertyNames, null out
        the proto. (issue 2410)

        Disabled EXTRA_CHECKS in Release build.

        Heap explorer: Show representation of strings.

        Removed 'type' and 'arguments' properties from Error object.
        (issue 2397)

        Added atomics implementation for ThreadSanitizer v2.
        (Chromium issue 128314)

        Fixed LiveEdit crashes when object/array literal is added. (issue 2368)

        Performance and stability improvements on all platforms.


2012-11-13: Version 3.15.3

        Changed sample shell to send non-JS output (e.g. errors) to stderr
        instead of stdout.

        Correctly check for stack overflow even when interrupt is pending.
        (issue 214)

        Collect stack trace on stack overflow. (issue 2394)

        Performance and stability improvements on all platforms.


2012-11-12: Version 3.15.2

        Function::GetScriptOrigin supplies sourceURL when script name is
        not available.  (Chromium issue 159413)

        Made formatting error message side-effect-free.  (issue 2398)

        Fixed length check in JSON.stringify.  (Chromium issue 160010)

        ES6: Added support for Set and Map clear method (issue 2400)

        Fixed slack tracking when instance prototype changes.
        (Chromium issue 157019)

        Fixed disabling of code flusher while marking.  (Chromium issue 159140)

        Added a test case for object grouping in a scavenger GC (issue 2077)

        Support shared library build of Android for v8.
        (Chromium issue 158821)

        ES6: Added support for size to Set and Map (issue 2395)

        Performance and stability improvements on all platforms.


2012-11-06: Version 3.15.1

        Put incremental code flushing behind a flag. (Chromium issue 159140)

        Performance and stability improvements on all platforms.


2012-10-31: Version 3.15.0

        Loosened aligned code target requirement on ARM (issue 2380)

        Fixed JSON.parse to treat leading zeros correctly.
        (Chromium issue 158185)

        Performance and stability improvements on all platforms.


2012-10-22: Version 3.14.5

        Killed off the SCons based build.

        Added a faster API for creating v8::Integer objects.

        Speeded up function deoptimization by avoiding quadratic pass over
        optimized function list. (Chromium issue 155270)

        Always invoke the default Array.sort functions from builtin functions.
        (issue 2372)

        Reverted recent CPU profiler changes because they broke --prof.
        (issue 2364)

        Switched code flushing to use different JSFunction field.
        (issue 1609)

        Performance and stability improvements on all platforms.


2012-10-15: Version 3.14.4

        Allow evals for debugger even if they are prohibited in the debugee
        context. (Chromium issue 154733)

        Enabled --verify-heap in release mode (issue 2120)

        Performance and stability improvements on all platforms.


2012-10-11: Version 3.14.3

        Use native context to retrieve ErrorMessageForCodeGenerationFromStrings
        (Chromium issue 155076).

        Bumped variable limit further to 2^17 (Chromium issue 151625).

        Performance and stability improvements on all platforms.


2012-10-10: Version 3.14.2

        ARM: allowed VFP3 instructions when hardfloat is enabled.
        (Chromium issue 152506)

        Fixed instance_descriptors() and PushStackTraceAndDie regressions.
        (Chromium issue 151749)

        Made GDBJIT interface compile again. (issue 1804)

        Fixed Accessors::FunctionGetPrototype's proto chain traversal.
        (Chromium issue 143967)

        Made sure that names of temporaries do not clash with real variables.
        (issue 2322)

        Rejected local module declarations. (Chromium issue 150628)

        Rejected uses of lexical for-loop variable on the RHS. (issue 2322)

        Fixed slot recording of code target patches.
        (Chromium issue 152615,chromium:144230)

        Changed the Android makefile to use GCC 4.6 instead of GCC 4.4.3.

        Performance and stability improvements on all platforms.


2012-10-01: Version 3.14.1

        Don't set -m32 flag when compiling with Android ARM compiler.
        (Chromium issue 143889)

        Restore the descriptor array before returning allocation failure.
        (Chromium issue 151750)

        Lowered kMaxVirtualRegisters (v8 issue 2139, Chromium issues 123822 and
        128252).

        Pull more recent gyp in 'make dependencies'.

        Made sure that the generic KeyedStoreIC changes length and element_kind
        atomically (issue 2346).

        Bumped number of allowed variables per scope to 65535, to address GWT.
        (Chromium issue 151625)

        Support sourceURL for dynamically inserted scripts (issue 2342).

        Performance and stability improvements on all platforms.


2012-09-20: Version 3.14.0

        Fixed missing slot recording during clearing of CallICs.
        (Chromium issue 144230)

        Fixed LBoundsCheck on x64 to handle (stack slot + constant) correctly.
        (Chromium issue 150729)

        Fixed minus zero test. (Issue 2133)

        Fixed setting array length to zero for slow elements.
        (Chromium issue 146910)

        Fixed lost arguments dropping in HLeaveInlined.
        (Chromium issue 150545)

        Fixed casting error for receiver of interceptors.
        (Chromium issue 149912)

        Throw a more descriptive exception when blocking 'eval' via CSP.
        (Chromium issue 140191)

        Fixed debugger's eval when close to stack overflow. (issue 2318)

        Added checks to live edit. (issue 2297)

        Switched on code compaction on incremental GCs.

        Fixed caching of optimized code for OSR. (issue 2326)

        Not mask exception thrown by toString in String::UtfValue etc.
        (issue 2317)

        Fixed API check for length of external arrays. (Chromium issue 148896)

        Ensure correct enumeration indices in the dict (Chromium issue 148376)

        Correctly initialize regexp global cache. (Chromium issue 148378)

        Fixed arguments object materialization during deopt. (issue 2261)

        Introduced new API to expose external string resource regardless of
        encoding.

        Fixed CHECK failure in LCodeGen::DoWrapReceiver when
        --deopt-every-n-times flag is present
        (Chromium issue 148389)

        Fixed edge case of extension with NULL as source string.
        (Chromium issue 144649)

        Fixed array index dehoisting. (Chromium issue 141395)

        Performance and stability improvements on all platforms.


2012-09-11: Version 3.13.7

        Enable/disable LiveEdit using the (C++) debug API.

        Performance and stability improvements on all platforms.


2012-09-06: Version 3.13.6

        Added validity checking to API functions and calls.

        Disabled accessor inlining (Chromium issue 134609).

        Fixed bug in Math.min/max in optimized code (Chromium issue 145961).

        Directly use %ObjectKeys in json stringify (Chromium issue 2312).

        Fixed VS2005 build (issue 2313).

        Activated fixed ES5 readonly semantics by default.

        Added hardfp flag to the Makefile.

        Performance and stability improvements on all platforms.


2012-08-29: Version 3.13.5

        Release stack trace data after firing Error.stack accessor.
        (issue 2308)

        Added a new API V8::SetJitCodeEventHandler to push code name and
        location to users such as profilers.

        Allocate block-scoped global bindings to global context.

        Performance and stability improvements on all platforms.


2012-08-28: Version 3.13.4

        Print reason for disabling optimization. Kill --trace-bailout flag.

        Provided option to disable full DEBUG build on Android.

        Introduced global contexts to represent lexical global scope(s).

        Fixed rounding in Uint8ClampedArray setter. (issue 2294)

        Performance and stability improvements on all platforms.


2012-08-21: Version 3.13.3

        Performance and stability improvements on all platforms.


2012-08-20: Version 3.13.2

        Performance and stability improvements on all platforms.


2012-08-16: Version 3.13.1

        Performance and stability improvements on all platforms.


2012-08-10: Version 3.13.0

        Added histograms for total allocated/live heap size, as well as
        allocated size and percentage of total for map and cell space.

        Fixed parseInt's octal parsing behavior (ECMA-262 Annex E 15.1.2.2).
        (issue 1645)

        Added checks for interceptors to negative lookup code in Crankshaft.
        (Chromium issue 140473)

        Made incremental marking clear ICs and type feedback cells.

        Performance and stability improvements on all platforms.


2012-08-01: Version 3.12.19

        Performance and stability improvements on all platforms.


2012-07-30: Version 3.12.18

        Forced using bit-pattern for signed zero double. (issue 2239)

        Made sure double to int conversion is correct. (issue 2260)

        Performance and stability improvements on all platforms.


2012-07-27: Version 3.12.17

        Always set the callee's context when calling a function from optimized
        code.
        (Chromium issue 138887)

        Fixed building with GCC 3.x
        (issue 2016, 2017)

        Improved API calls that return empty handles.
        (issue 2245)

        Performance and stability improvements on all platforms.


2012-07-25: Version 3.12.16

        Performance and stability improvements on all platforms.


2012-07-24: Version 3.12.15

        Added PRESERVE_ASCII_NULL option to String::WriteAscii.
        (issue 2252)

        Added dependency to HLoadKeyed* instructions to prevent invalid
        hoisting. (Chromium issue 137768)

        Enabled building d8 for Android on Mac.

        Interpret negative hexadecimal literals as NaN.
        (issue 2240)

        Expose counters in javascript when using --track-gc-object-stats.

        Enabled building and testing V8 on Android IA.

        Added --trace-parse flag to parser.

        Performance and stability improvements on all platforms.


2012-07-18: Version 3.12.14

        Deactivated optimization of packed arrays.
        (Chromium issue 137768)

        Fixed broken accessor transition.
        (Chromium issue 137689)

        Performance and stability improvements on all platforms.


2012-07-17: Version 3.12.13

        Fixed missing tagging of stack value in finally block.
        (Chromium issue 137496)

        Added more support for heap analysis.

        Performance and stability improvements on all platforms.


2012-07-16: Version 3.12.12

        Added an option to the tickprocessor to specify the directory for lib
        lookup.

        Fixed ICs for slow objects with native accessor (Chromium issue 137002).

        Fixed transcendental cache on ARM in optimized code (issue 2234).

        New heap inspection tools: counters for object sizes and counts,
        histograms for external fragmentation.

        Incorporated constness into inferred interfaces (in preparation for
        handling imports) (issue 1569).

        Performance and stability improvements on all platforms.


2012-07-12: Version 3.12.11

        Renamed "mips" arch to "mipsel" in the GYP build.

        Fixed computation of call targets on prototypes in Crankshaft.
        (Chromium issue 125148)

        Removed use of __lookupGetter__ when generating stack trace.
        (issue 1591)

        Turned on ES 5.2 globals semantics by default.
        (issue 1991, Chromium issue 80591)

        Synced preparser and parser wrt syntax error in switch..case.
        (issue 2210)

        Fixed reporting of octal literals in strict mode when preparsing.
        (issue 2220)

        Fixed inline constructors for Harmony Proxy prototypes.
        (issue 2225)

        Performance and stability improvements on all platforms.


2012-07-10: Version 3.12.10

        Re-enabled and fixed issue with array bounds check elimination
        (Chromium issue 132114).

        Fixed Debug::Break crash. (Chromium issue 131642)

        Added optimizing compiler support for JavaScript getters.

        Performance and stability improvements on all platforms.


2012-07-06: Version 3.12.9

        Correctly advance the scanner when scanning unicode regexp flag.
        (Chromium issue 136084)

        Fixed unhandlified code calling Harmony Proxy traps.
        (issue 2219)

        Performance and stability improvements on all platforms.


2012-07-05: Version 3.12.8

        Implemented TypedArray.set and ArrayBuffer.slice in d8.

        Performance and stability improvements on all platforms.


2012-07-03: Version 3.12.7

        Fixed lazy compilation for strict eval scopes.
        (Chromium issue 135066)

        Made MACOSX_DEPLOYMENT_TARGET configurable in GYP.
        (issue 2151)

        Report "hidden properties" in heap profiler for properties case.
        (issue 2212)

        Activated optimization of packed arrays by default.

        Performance and stability improvements on all platforms.


2012-06-29: Version 3.12.6

        Cleaned up hardfp ABI detection for ARM (V8 issue 2140).

        Extended TypedArray support in d8.


2012-06-28: Version 3.12.5

        Fixed lazy parsing heuristics to respect outer scope.
        (Chromium issue 135008)

        Allow using test-wrapper-gypbuild.py on Windows when no python
        interpreter is registered.

        Performance and stability improvements on all platforms.


2012-06-27: Version 3.12.4

        Removed -fomit-frame-pointer flag from Release builds to make
        the stack walkable by TCMalloc (Chromium issue 133723).

        Ported r7868 (constant masking) to x64 (issue 1374).

        Expose more detailed memory statistics (issue 2201).

        Fixed Harmony Maps and WeakMaps for undefined values
        (Chromium issue 132744).

        Correctly throw reference error in strict mode with ICs disabled
        (issue 2119).

        Performance and stability improvements on all platforms.


2012-06-25: Version 3.12.3

        Reverted r11835 'Unify promotion and allocation limit computation' due
        to V8 Splay performance regression on Mac.  (Chromium issue 134183)

        Fixed sharing of literal boilerplates for optimized code.  (issue 2193)

        Performance and stability improvements on all platforms.


2012-06-22: Version 3.12.2

        Made near-jump check more strict in LoadNamedFieldPolymorphic on
        ia32/x64. (Chromium issue 134055)

        Fixed lazy sweeping heuristics to prevent old-space expansion.
        (issue 2194)

        Performance and stability improvements on all platforms.


2012-06-21: Version 3.12.1

        Performance and stability improvements on all platforms.


2012-06-20: Version 3.12.0

        Fixed Chromium issues:
        115100, 129628, 131994, 132727, 132741, 132742, 133211

        Fixed V8 issues:
        915, 1914, 2034, 2087, 2094, 2134, 2156, 2166, 2172, 2177, 2179, 2185

        Added --extra-code flag to mksnapshot to load JS code into the VM
        before creating the snapshot.

        Support 'restart call frame' command in the debugger.

        Performance and stability improvements on all platforms.


2012-06-13: Version 3.11.10

        Implemented heap profiler memory usage reporting.

        Preserved error message during finally block in try..finally.
        (Chromium issue 129171)

        Fixed EnsureCanContainElements to properly handle double values.
        (issue 2170)

        Improved heuristics to keep objects in fast mode with inherited
        constructors.

        Performance and stability improvements on all platforms.


2012-06-06: Version 3.11.9

        Implemented ES5-conformant semantics for inherited setters and read-only
        properties. Currently behind --es5_readonly flag, because it breaks
        WebKit bindings.

        Exposed last seen heap object id via v8 public api.

        Performance and stability improvements on all platforms.


2012-05-31: Version 3.11.8

        Avoid overdeep recursion in regexp where a guarded expression with a
        minimum repetition count is inside another quantifier.
        (Chromium issue 129926)

        Fixed missing write barrier in store field stub.
        (issues 2143, 1465, Chromium issue 129355)

        Proxies: Fixed receiver for setters inherited from proxies.
        Proxies: Fixed ToStringArray function so that it does not reject some
        keys.
        (issue 1543)

        Performance and stability improvements on all platforms.


2012-05-29: Version 3.11.7

        Get better function names in stack traces.

        Performance and stability improvements on all platforms.


2012-05-24: Version 3.11.6

        Fixed RegExp.prototype.toString for incompatible receivers
        (issue 1981).

        Performance and stability improvements on all platforms.


2012-05-23: Version 3.11.5

        Performance and stability improvements on all platforms.


2012-05-22: Version 3.11.4

        Some cleanup to common.gypi. This fixes some host/target combinations
        that weren't working in the Make build on Mac.

        Handle EINTR in socket functions and continue incomplete sends.
        (issue 2098)

        Fixed python deprecations.  (issue 1391)

        Made socket send and receive more robust and return 0 on failure.
        (Chromium issue 15719)

        Fixed GCC 4.7 (C++11) compilation.  (issue 2136)

        Set '-m32' option for host and target platforms

        Performance and stability improvements on all platforms.


2012-05-18: Version 3.11.3

        Disable optimization for functions that have scopes that cannot be
        reconstructed from the context chain. (issue 2071)

        Define V8_EXPORT to nothing for clients of v8. (Chromium issue 90078)

        Correctly check for native error objects.  (Chromium issue 2138)

        Performance and stability improvements on all platforms.


2012-05-16: Version 3.11.2

        Revert r11496. (Chromium issue 128146)

        Implement map collection for incremental marking. (issue 1465)

        Add toString method to CallSite (which describes a frame of the
        stack trace).


2012-05-15: Version 3.11.1

        Added a readbuffer function to d8 that reads a file into an ArrayBuffer.

        Fix freebsd build. (V8 issue 2126)

        Performance and stability improvements on all platforms.


2012-05-11: Version 3.11.0

        Fixed compose-discard crasher from r11524 (issue 2123).

        Activated new global semantics by default. Global variables can
        now shadow properties of the global object (ES5.1 erratum).

        Properly set ElementsKind of empty FAST_DOUBLE_ELEMENTS arrays when
        transitioning (Chromium issue 117409).

        Made Error.prototype.name writable again, as required by the spec and
        the web (Chromium issue 69187).

        Implemented map collection with incremental marking (issue 1465).

        Regexp: Fixed overflow in min-match-length calculation
        (Chromium issue 126412).

        MIPS: Fixed illegal instruction use on Loongson in code for
        Math.random() (issue 2115).

        Fixed crash bug in VisitChoice (Chromium issue 126272).

        Fixed unsigned-Smi check in MappedArgumentsLookup
        (Chromium issue 126414).

        Fixed LiveEdit for function with no locals (issue 825).

        Fixed register clobbering in LoadIC for interceptors
        (Chromium issue 125988).

        Implemented clearing of CompareICs (issue 2102).

        Performance and stability improvements on all platforms.


2012-05-03: Version 3.10.8

        Enabled MIPS cross-compilation.

        Ensured reload of elements pointer in StoreFastDoubleElement stub.
        (Chromium issue 125515)

        Fixed corner cases in truncation behavior when storing to
        TypedArrays. (issue 2110)

        Fixed failure to properly recognize and report out-of-memory
        conditions when allocating code space pages. (Chromium issue
        118625)

        Fixed idle notifications to perform a round of incremental GCs
        after context disposal. (issue 2107)

        Fixed preparser for try statement. (issue 2109)

        Performance and stability improvements on all platforms.


2012-04-30: Version 3.10.7

        Performance and stability improvements on all platforms.


2012-04-26: Version 3.10.6

        Fixed some bugs in accessing details of the last regexp match.

        Fixed source property of empty RegExp objects. (issue 1982)

        Enabled inlining some V8 API functions.

        Performance and stability improvements on all platforms.


2012-04-23: Version 3.10.5

        Put new global var semantics behind a flag until WebKit tests are
        cleaned up.

        Enabled stepping into callback passed to builtins.
        (Chromium issue 109564)

        Performance and stability improvements on all platforms.


2012-04-19: Version 3.10.4

        Fixed issues when stressing compaction with WeakMaps.

        Fixed missing GVN flag for new-space promotion. (Chromium issue 123919)

        Simplify invocation sequence at monomorphic function invocation sites.
        (issue 2079)

        Performance and stability improvements on all platforms.


2012-04-17: Version 3.10.3

        Fixed several bugs in heap profiles (including issue 2078).

        Throw syntax errors on illegal escape sequences.

        Implemented rudimentary module linking (behind --harmony flag)

        Implemented ES5 erratum: Global declarations should shadow
        inherited properties.

        Made handling of const more consistent when combined with 'eval'
        and 'with'.

        Fixed V8 on MinGW-x64 (issue 2026).

        Performance and stability improvements on all platforms.


2012-04-13: Version 3.10.2

        Fixed native ARM build (issues 1744, 539)

        Return LOOKUP variable instead of CONTEXT for non-context allocated
        outer scope parameters (Chromium issue 119609).

        Fixed regular and ElementsKind transitions interfering with each other
        (Chromium issue 122271).

        Improved performance of keyed loads/stores which have a HeapNumber
        index (issues 1388, 1295).

        Fixed WeakMap processing for evacuation candidates (issue 2060).

        Bailout on possible direct eval calls (Chromium issue 122681).

        Do not assume that names of function expressions are context-allocated
        (issue 2051).

        Performance and stability improvements on all platforms.


2012-04-10: Version 3.10.1

        Fixed bug with arguments object in inlined functions (issue 2045).

        Fixed performance bug with lazy initialization (Chromium issue
        118686).

        Added suppport for Mac OS X 64bit builds with GYP.
        (Patch contributed by Filipe David Manana <fdmanana@gmail.com>)

        Fixed bug with hidden properties (issue 2034).

        Fixed a performance bug when reloading pages (Chromium issue 117767,
        V8 issue 1902).

        Fixed bug when optimizing throw in top-level code (issue 2054).

        Fixed two bugs with array literals (issue 2055, Chromium issue 121407).

        Fixed bug with Math.min/Math.max with NaN inputs (issue 2056).

        Fixed a bug with the new runtime profiler (Chromium issue 121147).

        Fixed compilation of V8 using uClibc.

        Optimized boot-up memory use.

        Optimized regular expressions.


2012-03-30: Version 3.10.0

        Fixed store IC writability check in strict mode
        (Chromium issue 120099).

        Resynchronize timers if the Windows system time was changed.
        (Chromium issue 119815)

        Removed "-mfloat-abi=hard" from host compiler cflags when building for
        hardfp ARM
        (https://code.google.com/p/chrome-os-partner/issues/detail?id=8539)

        Fixed edge case for case independent regexp character classes
        (issue 2032).

        Reset function info counters after context disposal.
        (Chromium issue 117767, V8 issue 1902)

        Fixed missing write barrier in CopyObjectToObjectElements.
        (Chromium issue 119926)

        Fixed missing bounds check in HasElementImpl.
        (Chromium issue 119925)

        Performance and stability improvements on all platforms.


2012-03-23: Version 3.9.24

        Activated count-based profiler for ARM.

        Fixed use of proxies as f.prototype properties. (issue 2021)

        Enabled snapshots on MIPS.

        Performance and stability improvements on all platforms.


2012-03-21: Version 3.9.23

        Use correct arguments adaptation environment when inlining function
        containing arguments. (Issue 2014)

        Performance and stability improvements on all platforms.


2012-03-20: Version 3.9.22

        Enabled count-based profiler by default.

        Implemented a hash based look-up to speed up address checks
        in large object space (issue 853).

        Performance and stability improvements on all platforms.


2012-03-19: Version 3.9.21

        Fixed push-to-trunk script (and re-push).

        Added API call that identifies strings that are guaranteed only to
        contain ASCII characters.


2012-03-19: Version 3.9.20

        Fixed declarations escaping global strict eval. (Issue 1624)

        Fixed wrapping of receiver for non-strict callbacks. (Issue 1973)

        Fixed function declarations overwriting read-only global properties.
        (Chromium issue 115452)

        Fixed --use-strict flag in combination with --harmony[-scoping].

        Debugger: naive implementation of "step into Function.prototype.bind".

        Debugger: added ability to set script source from within OnBeforeCompile

        Added flag to always call DebugBreak on abort.

        Re-enabled constructor inlining and inline === comparison with boolean
        constants. (Issue 2009)

        Don't use an explicit s0 in ClampDoubleToUint8. (Issue 2004)

        Performance and stability improvements on all platforms.


2012-03-14: Version 3.9.19

        Ensure there is a smi check of the receiver for global load and call
        ICs (Chromium issue 117794).

        Performance and stability improvements on all platforms.


2012-03-13: Version 3.9.18

        Ensure consistency of Math.sqrt on Intel platforms.

        Remove static initializers in v8. (issue 1859)

        Add explicit dependency on v8_base in the GYP-based build.

        Performance and stability improvements on all platforms.


2012-03-12: Version 3.9.17

        Fixed VFP detection through compiler defines. (issue 1996)

        Add Code-related fields to postmortem metadata.

        Performance and stability improvements on all platforms.


2012-03-09: Version 3.9.16

        Added basic interface inference for modules (behind the --harmony flag).

        Added Object.is, Number.isFinite, Number.isNaN.

        Updated the Unicode tables to Unicode version 6.1.0.

        Performance and stability improvements on all platforms.


2012-03-06: Version 3.9.15

        Fix the heap profiler crash caused by memory layout changes between
        passes.

        Fix Error.prototype.toString to throw TypeError. (issue 1980)

        Fix double-rounding in strtod for MinGW. (issue 1062)

        Fix corrupted snapshot serializaton on ia32. (Chromium issue v8/1985)

        Performance and stability improvements on all platforms.


2012-03-01: Version 3.9.14

        Performance and stability improvements on all platforms.


2012-02-29: Version 3.9.13

        Added code kind check before preparing for OSR. (issue 1900, 115073)

        Fixed issue 1802: Pass zone explicitly to zone-allocation on x64 and
        ARM.

        Ported string construct stub to x64. (issue 849)

        Performance and stability improvements on all platforms.


2012-02-28: Version 3.9.12

        Fixed the negative lookup stub to handle deleted entries in a
        dictionary. (issue 1964)

        Added a new API where the host can supply a callback function. The
        callback function can resolve the location of a return address on stack
        to the location where a return-address rewriting profiler stashed the
        original return address.

        Fixed Chromium issue http://crbug.com/115646: When compiling for-in
        pass correct context value to the increment instruction.

        Fixed issue 1853: Update breakpoints set with partial file name after
        compile.


2012-02-27: Version 3.9.11

        Made 'module' a context-sensitive keyword (V8 issue 1957).


2012-02-24: Version 3.9.10

        Fixed V8 issues 1322, 1772 and 1969.

        Conformance improvements.

        Performance and stability improvements on all platforms.


2012-02-23: Version 3.9.9

        Supported fast case for-in in Crankshaft.

        Sped up heap snapshot serialization and dominators construction.

        Randomized allocation addresses on windows. (Chromium issue 115151)

        Fixed compilation with MinGW-w64. (issue 1943)

        Fixed incorrect value of assignments to non-extensible properties.

        Fixed a crash bug in generated code on ia32.

        Performance and stability improvements on all platforms.


2012-02-21: Version 3.9.8

        Fixed memory leak and missing #include in StartupDataDecompressor
        (issue 1960).

        Renamed static methods to avoid shadowing virtual methods and fix Clang
        C++11 compile error.

        Fixed sequence of element access in array builtins (issue 1790).

        Performance and stability improvements on all platforms.


2012-02-16: Version 3.9.7

        Fixed V8 issues 1322, 1878, 1942, 1945 and Chromium issue 113924.

        Fixed GCC-4.7 warnings.

        Added Navier-Stokes benchmark.

        Performance and stability improvements on all platforms.


2012-02-14: Version 3.9.6

        Fixed template-related linker error. (issue 1936)

        Allowed inlining of functions containing object literals.  (issue 1322)

        Added --call-graph-size option to tickprocessor.  (issue 1937)

        Heap Snapshot maximum size limit is too low for really big apps. At the
        moment the limit is 256MB.  (Chromium issue 113015)

        Performance and stability improvements on all platforms.


2012-02-09: Version 3.9.5

        Removed unused command line flags.

        Performance and stability improvements on all platforms.


2012-02-08: Version 3.9.4

        Properly initialize element-transitioning array literals on ARM.
        (issue 1930)

        Bug fixes on all platforms.


2012-02-07: Version 3.9.3

        When rethrowing an exception, print the stack trace of its original
        site instead of rethrow site (Chromium issue 60240).

        Increased size of small stacks from 32k to 64k to avoid hitting limits
        in Chromium (Chromium issue 112843).


2012-02-06: Version 3.9.2

        Added timestamp to --trace-gc output. (issue 1932)

        Heap profiler reports implicit references.

        Optionally export metadata with libv8 to enable debuggers to inspect V8
        state.


2012-02-02: Version 3.9.1

        Fixed memory leak in NativeObjectsExplorer::FindOrAddGroupInfo
        (Chromium issue 112315).

        Fixed a crash in dev tools (Chromium issue 107996).

        Added 'dependencies_traverse': 1 to v8 GYP target.

        Performance and stability improvements on all platforms.


2012-02-01: Version 3.9.0

        Reduced memory use immediately after starting V8.

        Stability fixes and performance improvements on all platforms.


2012-01-26: Version 3.8.9

        Flush number string cache on GC (issue 1605).

        Provide access to function inferred name with
	v8::Function::GetInferredName in V8 public API.

        Fix building with Clang (issue 1912).

        Reduce the space used by the stack for the profiling thread.

        Fix misleading documentation of v8::Locker (issue 542).

        Introduce readbinary function in d8 to read binary files.

        Performance and stability improvements on all platforms.


2012-01-23: Version 3.8.8

        Limited number of loop iterations in Heap::ReserveSpace
        (Chromium issue 99027).

        Fixed solaris build (VirtualMemory) (issue 1761).

        Fixed strict vs. non-strict handling of function proxies in
        higher-order array and string methods.

        Enabled asynchronous remote debugging with d8 (issue 1691).

        Stability and performance improvements on all platforms.


2012-01-19: Version 3.8.7

        Ensure that LRandom restores rsi after call to the C function on x64.
        (Chromium issue http://crbug.com/110509)

        Fixing include issues on *bsd when building with scons.
        (issue 1897)

        Provide a switch to specify -fno-strict-aliasing
        (issue 1887)

        Move WIN32 define from standalone.gypi to common.gypi
        (issue 1760)

        Fix corner-case in heap size estimation.
        (issue 1893)

        Fix and enable NEW_NON_STRICT_FAST ArgumentsAccess stub on x64.
        (issue 1903)

        Performance improvements and bug fixes.


2012-01-16: Version 3.8.6

        Add primitive WebGL array support to d8.

        Improve heap size estimation (issue 1893).

        Hash collision DOS workaround extended from string keys
        to numeric keys.

        Provide an API for iterating through all external strings referenced
        from the JS heap.

        Adjust position recorded for call expressions. http://crbug.com/109195

        Fix GC crash related to instanceof. http://crbug.com/109448

        Performance improvements and bug fixes.


2012-01-05: Version 3.8.5

        Fix broken test that assumes that no GC can clear the regexp cache (GC
        can happen at any time due to Crankshaft).

        Fix handling of bogus receivers for Harmony collections. (issue 1884)

        Add netbsd support to gyp build.

        Determine page size at runtime on posix platforms.

        Ensure that store buffer filtering hash sets are cleared after
        StoreBuffer::Filter.

        Randomize the seed used for string hashing.  This helps guard against
        CPU-eating DOS attacks against node.js servers.  Based on code from
        Bert Belder.  This version only solves the issue for those that compile
        V8 themselves or those that do not use snapshots.  A snapshot-based
        precompiled V8 will still have predictable string hash codes.

        Implement callback when script finishes running in V8 API.

        Improve performance of Math.min and Math.max for the case of two
        arguments. (issue 1325)


2012-01-02: Version 3.8.4

        Performance improvements for large Smi-only arrays.

        Fixed InternalArrays construction. (issue 1878)


2011-12-27: Version 3.8.3

        Avoid embedding new space objects into code objects in the lithium gap
        resolver. (chromium:108296)

        Bug fixes and performance optimizations on all platforms.


2011-12-21: Version 3.8.2

        Add max optimization flag to v8 gyp build to ensure V8 is always built 
        fully optimized in Chrome.

        MIPS: Bring MIPS to parity with other platforms.

        Optimizations and stability improvements on all platforms.


2011-12-19: Version 3.8.1

        Fixed GCC 4.7 warnings. Patch from Tobias Burnus.

        Stability improvements on all platforms.


2011-12-13: Version 3.8.0

        Fixed handling of arrays in DefineOwnProperty. (issue 1756)

        Sync parser and preparser on do-while and return statements. 
        (issue 1856)

        Fixed another corner case for DefineOwnProperty on arrays (issue 1756).

        Stability and performance improvements on all platforms.


2011-12-01: Version 3.7.12

        Increase tick interval for the android platform.

        Fix a bug in the register allocator. (chromium:105112)

        Fix handling of recompiling code. (chromium:105375, v8:1782)

        Start incremental marking on idle notification. (v8:1458)

        Build fixes for various platforms.

        Various performance improvements.


2011-11-29: Version 3.7.11

        Fixed bug when generating padding to ensure space for lazy
        deoptimization.
        (issue 1846)

        Further reduced pause times due to GC.

        Stability and performance improvements on all platforms.


2011-11-23: Version 3.7.10

        Set maximum length of FixedArray in terms of elements instead an
        absolute number of bytes.
        (Chromium issue 103103)

        Stability and performance improvements on all platforms.


2011-11-21: Version 3.7.9

        Removed exit-time destructors.

        Stability and performance improvements on all platforms.


2011-11-17: Version 3.7.8

        Removed hidden prototype from builtins, i.e., deleting an overridden
        function on builtins will not make the original function reappear.

        Added NetBSD support for scons build.

        Performance improvements on all platforms.


2011-11-14: Version 3.7.7

        Fix missing fast property accessors in heap snapshots.
        (issue 1818)


2011-11-11: Version 3.7.6

        Fixed filtering of store buffer for large object pages.
        (issue 1817)

        Fixed generated hash function on all platforms.
        (issue 1808)

        Fixed Heap::Shrink to ensure that it does not free pages that are
        still in use.
        (Chromium issue 100414)

        Stability and performance improvements on all platforms.


2011-11-10: Version 3.7.5

        Added initial gyp infrastructure for MIPS.

        Implemented performance improvements to the incremental garbage
        collector.

        Added optimizations and stability improvements on all platforms.


2011-11-07: Version 3.7.4

        Proper "libv8.so.3.7.4" SONAME for Linux shared library (issue 1786).

        Fix Harmony sets and maps to allow null and undefined as keys
        (still hidden behind --harmony flag) (issue 1622).

        Implement VirtualMemory on FreeBSD to fix build (issue 1807).

        Enable VFP instructions for Android.

        Fix error handling in Date.prototype.toISOString (issue 1792).

        Bug fixes and performance improvements for all platforms.

        Not officially supported but noteworthy: Crankshaft for MIPS :-)


2011-10-28: Version 3.7.3

        Slight deoptimization as a workaround for issue with jslint: Issue
        1789.


2011-10-27: Version 3.7.2

        Fix bug in deoptimization.  Known issue with jslint: Issue 1789.


2011-10-26: Version 3.7.1

        Achieved 33% speedup in debug-mode tests.

        Removed special casing of calls to RegExp test and exec methods with no
        argument.  Now matches new JSC behaviour.  crbug.com/75740.

        Return the empty string on cyclic references in toString (ES5
        conformance).

        Fixed bug triggered by JSBeautifier.  crbug.com/100409.

        Made Math.random state per-context instead of per-process (issue 864).

        Fixed stack traces to skip native functions.

        Make snapshots (new contexts) smaller and faster.

        Fixed handling of Function.apply for non-array arguments.

        Fixed evaluation order in defineProperties to match FireFox.

        Fixed handling of non-object receivers for array builtins,
        crbug.com/100702.

        Multiple fixes to improve compliance with test262.

        Fixed compatibility with older Android releases.

        Fixed compilation with gcc-4.5.3.

        Improved performance of WriteUtf8, issue 1665.

        Made native syntax an early error in the preparser.

        Fixed issues 793 and 893 relating to Function.prototype.bind.

        Improved let, const, Set and Map support and other Harmony features
        (behind the --harmony flag).

        Changed evaluation order for > and <= to match ES5 instead of ES3.

        Bug fixes and performance improvements on all platforms.


2011-10-13: Version 3.7.0

        Fixed array handling for Object.defineOwnProperty (ES5 conformance).

        Fixed issue 1757 (string slices of external strings).

        Fixed issue 1759 (ARM).

        Added flag --noclever-optimizations to disable some things that
        caused trouble in the past.

        Added flag --stress-compaction for testing.

        Added flag --harmony to activate all experimental Harmony features.


2011-10-10: Version 3.6.6

        Added a GC pause visualization tool.

        Added presubmit=no and werror=no flags to Makefile.

        ES5/Test262 conformance improvements.

        Fixed compilation issues with GCC 4.5.x (issue 1743).

        Bug fixes and performance improvements on all platforms.


2011-10-05: Version 3.6.5

        New incremental garbage collector.

        Removed the hard heap size limit (soft heap size limit is still
        700/1400Mbytes by default).

        Implemented ES5 generic Array.prototype.toString (Issue 1361).

        V8 now allows surrogate pair codes in decodeURIComponent (Issue 1415).

        Fixed x64 RegExp start-of-string bug (Issues 1746, 1748).

        Fixed propertyIsEnumerable for numeric properties (Issue 1692).

        Fixed the MinGW and Windows 2000 builds.

        Fixed "Prototype chain is not searched if named property handler does
        not set a property" (Issue 1636).

        Made the RegExp.prototype object be a RegExp object (Issue 1217).

        Disallowed future reserved words as labels in strict mode.

        Fixed string split to correctly coerce the separator to a string
        (Issue 1711).

        API: Added an optional source length field to the Extension
        constructor.

        API: Added Debug::DisableAgent to match existing Debug::EnableAgent
        (Issue 1573).

        Added "native" target to Makefile for the benefit of Linux distros.

        Fixed: debugger stops stepping outside evaluate (Issue 1639).

        More work on ES-Harmony proxies.  Still hidden behind a flag.

        Bug fixes and performance improvements on all platforms.


2011-09-15: Version 3.6.4

        Fixed d8's broken readline history.

        Removed the need for code delete events in CPU profiler (Issue 1466).

        Fixed debugger stepping next with trycatch recursion (Issue 1639).

        Fixing parallel execution in d8 (with -p) and some memory leaks.

        Support for precise stepping in functions compiled before debugging was
        started (step 1).


2011-09-13: Version 3.6.3

        Implemented better support of typed arrays in the d8 shell.

        Bug fixes and performance improvements on all platforms.


2011-09-08: Version 3.6.2

        Added "dependencies" target to top-level Makefile.

        Added ability to turn profiler on/off in d8.

        Added "soname_version" parameter to common.gypi, v8.gyp, and Makefile.

        Fixed several crash bugs.


2011-09-07: Version 3.6.1

        Fixed a bug in abrupt exit from with or catch inside finally.

        Fixed possible crash in FixedDoubleArray::Initialize() (Chromium
        issue 95113).

        Fixed a bug in Page::GetRegionMaskForSpan (Chromium issue 94425).

        Fixed a few clang warnings (which -Werror treated as errors).

        Performance improvements on all platforms.


2011-09-05: Version 3.6.0

        Fixed a bug when optimizing named function expression (issue 1647).

        Fixed a bug when optimizing f.call.apply (issue 1650).

        Made arguments and caller always be null on native functions
        (issues 1548 and 1643).

        Fixed issue 1648 (cross-compiling x64 targeting ia32).

        Fixed issue 371 (d8 printing of strings containing \0).

        Fixed order of evaluation in arguments to parseInt (issue 1649).

        Fixed a problem with large heap snapshots in Chrome DevTools
        (issue 1658, chromium issue 89268).

        Upped default maximum heap size from 512M to 700M.


2011-08-31: Version 3.5.10

        Added dependency of v8_base on WinSocket2 Windows library in
        the GYP-build.

        Various bugfixes.


2011-08-29: Version 3.5.9

        Made FromPropertyDescriptor not trigger inherited setters.

        Fixed .gyp files to work on the ARM simulator.

        Fixed shared library build warnings for MSVS.


2011-08-24: Version 3.5.8

        Added V8EXPORT attributes for v8::Array::CheckCast and
        v8::Number::CheckCast.

        Made a slight API change enabling opting out from null termination
        in String::Write*().

        Fixed arm build for gcc-4.6.


2011-08-22: Version 3.5.7

        Make scanner handle invalid unicode escapes in identifiers correctly.

        Make regexp flag parsing stricter.

        Fix several memory leaks.


2011-08-17: Version 3.5.6

        Fixed issue that could cause crashes when running with --heap-stats.

        Fixed compilation on Linux 2.6.9 and older.

        Fixed live-object-list to work with isolates.

        Fixed memory leaks in zones and isolates.

        Fixed a performance regression for TypedArrays on x64.

        Stability improvements on all platforms.


2011-08-15: Version 3.5.5

        Fixed bugs involving negative zero and the optimizing compiler.

        Fixed optimized version of Function.apply(x, arguments). (issue 1592)

        Eliminated uses of deprecated ARM instructions.

        Sped up Math.floor by using SSE 4.1 roundsd instruction on ia32.

        Removed restriction on the size of disassembled code that is printed.


2011-08-10: Version 3.5.4

        Added a preliminary implementation of ES Harmony weak maps.  Weak
        maps can be enabled by the flag --harmony-weakmaps.

        Introduced a toplevel Makefile to support GYP-based building.  GYP
        can be obtained from http://gyp.googlecode.com.

        Fixed a bug in the length property of functions created by
        Function.prototype.bind.

        Reduced malloc heap allocation on process startup.

        Several important code generation bug fixes.

        Performance improvements on all platforms.


2011-08-03: Version 3.5.3

        MIPS: Port of fix to ClassOf check from ARM.
        Patch from Paul Lind <plind44@gmail.com>.

        Stopped using mprotect on Cygwin.
        Avoided uninitialized member warning on gcc 4.3.4
        Both patches by Bert Belder.

        Bug fixes and performance improvements on all platforms.


2011-08-01: Version 3.5.2

        Performance improvements on all platforms.


2011-07-28: Version 3.5.1

        Fixed setting the readonly flag on the prototype property using the
        API call FunctionTemplate::SetPrototypeAttributes (issue 1539).

        Changed the tools/test.py script to use d8 instead of shell for
        testing.

        Fixed crash in ToBooleanStub when GC happens during invocation.

        Enabled automatic unboxing of double arrays.

        Performance improvements on all platforms.


2011-07-25: Version 3.5.0

        Implemented Object.prototype.{hasOwnProperty, propertyIsEnumerable} for
        proxies.

        Removed logging to memory support.

        Bugfixes and performance work.


2011-07-20: Version 3.4.14

        Fix the debugger for strict-mode functions. (Chromium issue 89236)

        Add GetPropertyAttribute method for Object in the API. (Patch by
        Peter Varga)

        Fix -Wunused-but-set-variable for gcc-4.6 on x64. (Issue 1291)


2011-07-18: Version 3.4.13

        Improved debugger support to allow inspection of optimized frames (issue
        1140).

        Fixed a bug in prototype transitions cache clearing introduced by r8165.

        Fixed shortcutting bug in HInferRepresentation. Patch by Andy Wingo.

        Fixed a memory leak in sample/shell.cc (dispose semaphores).

        Simplified HClampToUint8. Patch by Andy Wingo.

        Exposed APIs for detecting boxed primitives, native errors. Patch by
        Luke Zarko.

        Added map check for COW elements to crankshaft array handling code
        (issue 1560).

        Sample shell and (a light version of) D8 links against a shared library
        now.

        Fixed bug in array filter and reduce functions (issue 1559).

        Avoid TLS load in AstNode constructor.

        Introduced a random entropy source which can optionally be provided at
        initialization. (Chromium issue 89462).


2011-07-13: Version 3.4.12

        Added --prof profiling option to d8 shell.

        Fixed a bug where reading a directory in d8 shell hangs (issue 1533).

        Fixed a potential assertion failure in const declarations.

        Fixed an assertion failure in descriptor arrays (issue 1526).

        Enabled fast thread-local storage by default on supported platforms.

        Improved reporting of source position for global variable loads
        (issue 1527).


2011-07-11: Version 3.4.11

        Fixed MinGW32 build.

        Fixed a GC bug with RegExp code flushing.

        Implemented Object.defineProperty for proxies.

        Fixed a bug in for/in iteration of arguments objects (issue 1531).

        Added debugger support for inspecting optimized frames (issue 1140).

        Allowed JSObject::PreventExtensions to work for arguments objects.

        Bugfixes and performance work.


2011-07-06: Version 3.4.10

        Fixed debugger not breaking on certain "if" statements (issue 1523).

        Fixed assertion failure in runtime profiler when running on IA32
        without snapshot (issue 1522).

        Fixed ABI for API calls on IA32 (for clang compatibility).

        Introduced code flushing of RegExp code to free memory used by
        RegExps sooner.

        Fixed linux-tick-processor built wrong version of v8 (issue 1532).

        Fixed assertion failure in v8::TryCache::StackTrace (issue 1529).

        Performance improvements on all platforms.


2011-07-04: Version 3.4.9

        Added support for debugger inspection of locals in optimized frames
        (issue 1140).

        Fixed SConstruct to pass correct defines to samples/preparser when
        building with library=shared.

        Made date parser handle ES5 Date Time Strings correctly (issue 1498).

        Fixed a bug in Object.defineProperty on the arguments object.

        Performance improvements on all platforms.


2011-06-29: Version 3.4.8

        Ensure 16-byte stack alignment on Solaris (issue 1505).

        Fix "illegal access" when calling parseInt with a radix
        that is not a smi. (issue 1246).


2011-06-27: Version 3.4.7

        Fixed 64-bit build on FreeBSD.

        Added API to set the property attributes for the prototype
        property on functions created from FunctionTemplates.

        Bugfixes and performance work.


2011-06-22: Version 3.4.6

        Lowered limit on code space for systems with low memory supply.

        Allowed compiling v8_shell with the 'host' toolset (issue 82437).

        Extended setBreakpoint API to accept partial script name (issue 1418).

        Made multi-line comments not count when deciding whether the '-->'
        comment starter is first on a line. This matches Safari.

        Made handling of non-array recievers in Array length setter correct
        (issue 1491).

        Added ability to heap profiler to iterate over snapshot's node
        (issue 1481).


2011-06-20: Version 3.4.5

        Fixed issues 794, 1097, 1215(partial), 1417, 1435, 1472, 1473,
        1476, and 1477.

        Improved code generation for !0 and !1.

        Reduced memory usage for regular expressions with nested qualifiers.
        (issue 1472)

        Fixed V8 to count line terminators in multi-line comments.
        (Chromium issue 86431)

        Fixed disassembler=on option for release-mode builds. (issue 1473)

        Performance improvements on all platforms.


2011-06-15: Version 3.4.4

        Added snapshot compression support and --stress-opt flag to d8.

        Improved performance of try/catch.

        Several GYP-related changes: Added support for building Xcode project
        files. Make the ARM simulator build with GYP again. Generate Makefiles
        for all architectures on Linux.

        Fixed Array.prototype.{reduce,reduceRight} to pass undefined as the
        receiver for strict mode callbacks. (issue 1436)

        Fixed a bug where an array load was incorrectly hoisted by GVN.

        Handle 'undefined' correctly when === has been specialized for doubles.
        (issue 1434)

        Corrected the limit of local variables in an optimized function from 64
        to 63.

        Correctly set ReadOnly flag on indexed properties when using the API Set
        method. (issue 1470)

        Give the correct error message when Object.isExtensible is called on a
        non-object. (issue 1452)

        Added GetOwnPropertyNames method for Object in the API. Patch by Peter
        Varga.

        Do not redefine properties unneccesarily in seal and freeze. (issue
        1447)

        IsExecutionTerminating has an Isolate parameter now.

        Distinguish keyed loads with a symbol key from fast elements loads,
        avoiding some useless deoptimizations. (issue 1471)


2011-06-08: Version 3.4.3

        Clear the global thread table when an isolate is disposed
        (issue 1433).

        Converted time zone name to UTF8 on Windows (issue 1290).

        Limited the number of arguments in a function call to 32766
        (issue 1413).

        Compress sources of JS libraries in addition to the snapshot.

        Fixed a bug in Lithium environment iteration.

        Performance improvements on all platforms.


2011-06-06: Version 3.4.2

        More work on ES-Harmony proxies.  Still hidden behind a flag.

        Fixed some crash bugs and improved performance.

        Fixed building with gdb debugging support.

        Do not install SIGPROF handler until it is needed.

        Added DateTimeFormat to i18n API.

        Fixed compilation on OpenBSD.

        Take the ulimit into account when sizing the heap.  OpenBSD users
        may still have to increase the default ulimit to run heavy pages in
        the browser.


2011-06-01: Version 3.4.1

        Fixed JSON stringify issue with arrays.

        Changed calls to JS builtins to be passed undefined when called with
        implicit receiver.

        Implemented the set trap for Harmony proxies. Proxies still need to
        be enabled with the --harmony-proxies flag.


2011-05-30: Version 3.4.0

        Changed calls to undefined property setters to not throw (issue 1355).

        Made RegExp objects not callable.

        Fixed issues on special case large JSON strings in new json parser
        (issues http://crbug.com/83877 and http://crbug.com/84186).

        Performance improvements on all platforms.


2011-05-25: Version 3.3.10

        Fixed calls of strict mode function with an implicit receiver.

        Fixed fast handling of arrays to properly deal with changes to the
        Object prototype (issue 1403).

        Changed strict mode poison pill to be the same type error function
        (issue 1387).

        Fixed a debug crash in arguments object handling (issue 1227).

        Fixed a bug in deoptimization on x64 (issue 1404).

        Performance improvements and bug fixes on all platforms.


2011-05-23: Version 3.3.9

        Added DateTimeFormat class to experimental i18n API.

        Extended preparser to give early errors for some strict mode
        restrictions.

        Removed legacy execScript function from V8.

        Extended isolate API with the ability to add embedder-specific
        data to an isolate.

        Added basic support for polymorphic loads from JS and external
        arrays.

        Fixed bug in handling of switch statements in the optimizing
        compiler.


2011-05-18: Version 3.3.8

        Added MarkIndependent to the persistent handle API.  Independent
        handles are independent of all other persistent handles and can be
        garbage collected more frequently.

        Implemented the get trap for Harmony proxies.  Proxies are enabled
        with the --harmony-proxies flag.

        Performance improvements and bug fixes on all platforms.


2011-05-16: Version 3.3.7

        Updated MIPS infrastructure files.

        Performance improvements and bug fixes on all platforms.


2011-05-11: Version 3.3.6

        Updated MIPS infrastructure files.

        Added method IsCallable for Object to the API.
        Patch by Peter Varga.


2011-05-09: Version 3.3.5

        Fixed build on FreeBSD. Patch by Akinori MUSHA.

        Added check that receiver is JSObject on API calls.

        Implemented CallAsConstructor method for Object in the API (Issue 1348).
        Patch by Peter Varga.

        Added CallAsFunction method to the Object class in the API (Issue 1336).
        Patch by Peter Varga.

        Added per-isolate locking and unlocking.

        Fixed bug in x64 >>> operator (Issue 1359).


2011-05-04: Version 3.3.4

        Implemented API to disallow code generation from strings for a context
        (issue 1258).

        Fixed bug with whitespaces in parseInt (issue 955).

        Fixed bug with == comparison of Date objects (issue 1356).

        Added GYP variables for ARM code generation:
        v8_can_use_vfp_instructions, v8_can_use_unaligned_accesses
        and v8_use_arm_eabi_hardfloat.


2011-05-02: Version 3.3.3

        Added support for generating Visual Studio solution and project files
        using GYP.

        Implemented support for ARM EABI calling convention variation where
        floating-point arguments are passed in registers (hardfloat).

        Added Object::HasOwnProperty() to the API.

        Added support for compressing startup data to reduce binary size. This
        includes build time support and an API for the embedder to decompress
        the startup data before initializing V8.

        Reduced the profiling hooks overhead from >400% to 25% when using
        ll_prof.

        Performance improvements and bug fixes on all platforms.


2011-04-27: Version 3.3.2

        Fixed crash bug on ARM with no VFP3 hardware.

        Fixed compilation of V8 without debugger support.

        Improved performance on JSLint.

        Added support Float64 WebGL arrays.

        Fixed crash bug in regexp replace.


2011-04-20: Version 3.3.1

        Reduced V8 binary size by removing virtual functions from hydrogen.

        Fixed crash bug on x64.

        Performance improvements on ARM and IA32.


2011-04-18: Version 3.3.0

        Fixed bug in floating point rounding in Crankshaft on ARM
        (issue 958)

        Fixed a number of issues with running without VFPv3 support on ARM
        (issue 1315)

        Introduced v8Locale.Collator, a partial implementation of Collator
        per last ECMAScript meeting + mailing list.

        Minor performance improvements and bug fixes.


2011-04-13: Version 3.2.10

        Fixed bug in external float arrays on ARM (issue 1323).

        Minor performance improvements and bug fixes.


2011-04-11: Version 3.2.9

        Removed support for ABI prior to EABI on ARM.

        Fixed multiple crash bugs.

        Added GCMole to the repository, a simple static analysis tool that
        searches for GC-unsafe evaluation order dependent callsites.

        Made preparser API be exported in shared libraries.

        Fixed multiple issues in EcmaScript 5 strict mode implementation.

        Fixed mutable __proto__ property if object is not extensible
        (Issue 1309).

        Fixed auto suspension of the sampler thread.


2011-04-06: Version 3.2.8

        Exposed WebGL typed array constructors in the shell sample.

        Performance improvements on all platforms.


2011-04-04: Version 3.2.7

        Disabled the original 'classic' V8 code generator.  Crankshaft is
        now the default on all platforms.

        Changed the heap profiler to use more descriptive names.

        Performance and stability improvements to isolates on all platforms.


2011-03-30: Version 3.2.6

        Fixed xcode build warning in shell.cc (out of order initialization).

        Fixed null-pointer dereference in the compiler when running without
        SSE3 support (Chromium issue 77654).

        Fixed x64 compilation error due to some dead code. (Issue 1286)

        Introduced scons target to build the preparser stand-alone example.

        Made FreeBSD build and pass all tests.


2011-03-28: Version 3.2.5

        Fixed build with Irregexp interpreter (issue 1266).

        Added Crankshaft support for external arrays.

        Fixed two potential crash bugs.


2011-03-23: Version 3.2.4

        Added isolates which allows several V8 instances in the same process.
        This is controlled through the new Isolate class in the API.

        Implemented more of EcmaScript 5 strict mode.

        Reduced the time it takes to make detailed heap snapshot.

        Added a number of commands to the ARM simulator and enhanced the ARM
        disassembler.


2011-03-17: Version 3.2.3

        Fixed a number of crash bugs.

        Fixed Array::New(length) to return an array with a length (issue 1256).

        Fixed FreeBSD build.

        Changed __defineGetter__ to not throw (matching the behavior of Safari).

        Implemented more of EcmaScript 5 strict mode.

        Improved Crankshaft performance on all platforms.


2011-03-14: Version 3.2.2

        Fixed a number of crash and correctness bugs.

        Improved Crankshaft performance on all platforms.

        Fixed Crankshaft on Solaris/Illumos.


2011-03-10: Version 3.2.1

        Fixed a number of crash bugs.

        Improved Crankshaft for x64 and ARM.

        Implemented more of EcmaScript 5 strict mode.


2011-03-07: Version 3.2.0

        Fixed a number of crash bugs.

        Turned on Crankshaft by default on x64 and ARM.

        Improved Crankshaft for x64 and ARM.

        Implemented more of EcmaScript 5 strict mode.


2011-03-02: Version 3.1.8

        Fixed a number of crash bugs.

        Improved Crankshaft for x64 and ARM.

        Implemented more of EcmaScript 5 strict mode.

        Fixed issue with unaligned reads and writes on ARM.

        Improved heap profiler support.


2011-02-28: Version 3.1.7

        Fixed a number of crash bugs.

        Improved Crankshaft for x64 and ARM.

        Fixed implementation of indexOf/lastIndexOf for sparse
        arrays (http://crbug.com/73940).

        Fixed bug in map space compaction (http://crbug.com/59688).

        Added support for direct getter accessors calls on ARM.


2011-02-24: Version 3.1.6

        Fixed a number of crash bugs.

        Added support for Cygwin (issue 64).

        Improved Crankshaft for x64 and ARM.

        Added Crankshaft support for stores to pixel arrays.

        Fixed issue in CPU profiler with Crankshaft.


2011-02-16: Version 3.1.5

        Change RegExp parsing to disallow /(*)/.

        Added GDB JIT support for ARM.

        Fixed several crash bugs.

        Performance improvements on the IA32 platform.


2011-02-14: Version 3.1.4

        Fixed incorrect compare of prototypes of the global object (issue
        1082).

        Fixed a bug in optimizing calls to global functions (issue 1106).

        Made optimized Function.prototype.apply safe for non-JSObject first
        arguments (issue 1128).

        Fixed an error related to element accessors on Object.prototype and
        parser errors (issue 1130).

        Fixed a bug in sorting an array with large array indices (issue 1131).

        Properly treat exceptions thrown while compiling (issue 1132).

        Fixed bug in register requirements for function.apply (issue 1133).

        Fixed a representation change bug in the Hydrogen graph construction
        (issue 1134).

        Fixed the semantics of delete on parameters (issue 1136).

        Fixed a optimizer bug related to moving instructions with side effects
        (issue 1138).

        Added support for the global object in Object.keys (issue 1150).

        Fixed incorrect value for Math.LOG10E
        (issue http://code.google.com/p/chromium/issues/detail?id=72555)

        Performance improvements on the IA32 platform.

        Implement assignment to undefined reference in ES5 Strict Mode.


2011-02-09: Version 3.1.3

        Fixed a bug triggered by functions with huge numbers of declared
        arguments.

        Fixed zap value aliasing a real object - debug mode only (issue 866).

        Fixed issue where Array.prototype.__proto__ had been set to null
        (issue 1121).

        Fixed stability bugs in Crankshaft for x86.


2011-02-07: Version 3.1.2

        Added better security checks when accessing properties via
        Object.getOwnPropertyDescriptor.

        Fixed bug in Object.defineProperty and related access bugs (issues
        992, 1083 and 1092).

        Added LICENSE.v8, LICENSE.strongtalk and LICENSE.valgrind to ease
        copyright notice generation for embedders.


2011-02-02: Version 3.1.1

        Perform security checks before fetching the value in
        Object.getOwnPropertyDescriptor.

        Fixed a bug in Array.prototype.splice triggered by passing no
        arguments.

        Fixed bugs in -0 in arithmetic and in Math.pow.

        Fixed bugs in the register allocator and in switching from optimized
        to unoptimized code.


2011-01-31: Version 3.1.0

        Performance improvements on all platforms.


2011-01-28: Version 3.0.12

        Added support for strict mode parameter and object property
        validation.

        Fixed a couple of crash bugs.


2011-01-25: Version 3.0.11

        Fixed a bug in deletion of lookup slots that could cause global
        variables to be accidentally deleted (http://crbug.com/70066).

        Added support for strict mode octal literal verification.

        Fixed a couple of crash bugs (issues 1070 and 1071).


2011-01-24: Version 3.0.10

        Fixed External::Wrap for 64-bit addresses (issue 1037).

        Fixed incorrect .arguments variable proxy handling in the full
        code generator (issue 1060).

        Introduced partial strict mode support.

        Changed formatting of recursive error messages to match Firefox and
        Safari (issue http://crbug.com/70334).

        Fixed incorrect rounding for float-to-integer conversions for external
        array types, which implement the Typed Array spec
        (issue http://crbug.com/50972).

        Performance improvements on the IA32 platform.


2011-01-19: Version 3.0.9

        Added basic GDB JIT Interface integration.

        Make invalid break/continue statements a syntax error instead of a
        runtime error.


2011-01-17: Version 3.0.8

        Exposed heap size limit to the heap statistics gathered by
        the GetHeapStatistics API.

        Wrapped external pointers more carefully (issue 1037).

        Hardened the implementation of error objects to avoid setters
        intercepting the properties set then throwing an error.

        Avoided trashing the FPSCR when calculating Math.floor on ARM.

        Performance improvements on the IA32 platform.


2011-01-10: Version 3.0.7

        Stopped calling inherited setters when creating object literals
        (issue 1015).

        Changed interpretation of malformed \c? escapes in RegExp to match
        JSC.

        Enhanced the command-line debugger interface and fixed some minor
        bugs in the debugger.

        Performance improvements on the IA32 platform.


2011-01-05: Version 3.0.6

        Allowed getters and setters on JSArray elements (issue 900).

        Stopped JSON objects from hitting inherited setters (part of
        issue 1015).

        Allowed numbers and strings as names of getters/setters in object
        initializer (issue 820).

        Added use_system_v8 option to gyp (off by default), to make it easier
        for Linux distributions to ship with system-provided V8 library.

        Exported external array data accessors (issue 1016).

        Added labelled thread names to help with debugging (on Linux).


2011-01-03: Version 3.0.5

        Fixed a couple of cast errors for gcc-3.4.3.

        Performance improvements in GC and IA32 code generator.


2010-12-21: Version 3.0.4

        Added Date::ResetCache() to the API so that the cached values in the
        Date object can be reset to allow live DST / timezone changes.

        Extended existing support for printing (while debugging) the contents
        of objects.  Added support for printing objects from release builds.

        Fixed V8 issues 989, 1006, and 1007.


2010-12-17: Version 3.0.3

        Reapplied all changes for version 3.0.1.

        Improved debugger protocol for remote debugging.

        Added experimental support for using gyp to generate build files
        for V8.

        Fixed implementation of String::Write in the API (issue 975).


2010-12-15: Version 3.0.2

        Revert version 3.0.1 and patch 3.0.1.1.


2010-12-13: Version 3.0.1

        Added support for an experimental internationalization API as an
        extension.  This extension is disabled by default but can be enabled
        when building V8.  The ECMAScript internationalization strawman is
        at http://wiki.ecmascript.org/doku.php?id=strawman:i18n_api.

        Made RegExp character class parsing stricter.  This mirrors a change
        to RegExp parsing in WebKit.

        Fixed a bug in Object.defineProperty when used to change attributes
        of an existing property.  It incorrectly set the property value to
        undefined (issue 965).

        Fixed several different compilation failures on various platforms
        caused by the 3.0.0 release.

        Optimized Math.pow so it can work on unboxed doubles.

        Sped up quoting of JSON strings by removing one traversal of the
        string.


2010-12-07: Version 3.0.0

        Improved performance by (partially) addressing issue 957 on
        IA-32. Still needs more work for the other architectures.


2010-11-29: Version 2.5.9

        Fixed crashes during GC caused by partially initialize heap
        objects.

        Fixed bug in process sample that caused memory leaks.

        Improved performance on ARM by implementing missing stubs and
        inlining.

        Improved heap profiler support.

        Added separate seeding on Windows of the random number generator
        used internally by the compiler (issue 936).

        Exposed API for getting the name of the function used to construct
        an object.

        Fixed date parser to handle one and two digit millisecond
        values (issue 944).

        Fixed number parsing to disallow space between sign and
        digits (issue 946).


2010-11-23: Version 2.5.8

        Removed dependency on Gay's dtoa.

        Improved heap profiler precision and speed.

        Reduced overhead of callback invocations on ARM.


2010-11-18: Version 2.5.7

        Fixed obscure evaluation order bug (issue 931).

        Split the random number state between JavaScript and the private API.

        Fixed performance bug causing GCs when generating stack traces on
        code from very large scripts.

        Fixed bug in parser that allowed (foo):42 as a labelled statement
        (issue 918).

        Provide more accurate results about used heap size via
        GetHeapStatistics.

        Allow build-time customization of the max semispace size.

        Made String.prototype.split honor limit when separator is empty
        (issue 929).

        Added missing failure check after expecting an identifier in
        preparser (Chromium issue 62639).


2010-11-10: Version 2.5.6

        Added support for VFP rounding modes to the ARM simulator.

        Fixed multiplication overflow bug (issue 927).

        Added a limit for the amount of executable memory (issue 925).


2010-11-08: Version 2.5.5

        Added more aggressive GC of external objects in near out-of-memory
        situations.

        Fixed a bug that gave the incorrect result for String.split called
        on the empty string (issue 924).


2010-11-03: Version 2.5.4

        Improved V8 VFPv3 runtime detection to address issue 914.


2010-11-01: Version 2.5.3

        Fixed a bug that prevents constants from overwriting function values
        in object literals (issue 907).

        Fixed a bug with reporting of impossible nested calls of DOM functions
        (issue http://crbug.com/60753).


2010-10-27: Version 2.5.2

        Improved sampler resolution on Linux.

        Allowed forcing the use of a simulator from the build script
        independently of the host architecture.

        Fixed FreeBSD port (issue 912).

        Made windows-tick-processor respect D8_PATH.

        Implemented --noinline-new flag fully on IA32, X64 and ARM platforms.


2010-10-20: Version 2.5.1

        Fixed bug causing spurious out of memory exceptions
        (issue http://crbug.com/54580).

        Fixed compilation error on Solaris platform (issue 901).

        Fixed error in strtod (string to floating point number conversion)
        due to glibc's use of 80-bit floats in the FPU on 32-bit linux.

        Adjusted randomized allocations of executable memory to have 64k
        granularity (issue http://crbug.com/56036).

        Supported profiling using kernel perf_events on linux.  Added ll_prof
        script to tools and --ll-prof flag to V8.


2010-10-18: Version 2.5.0

        Fixed bug in cache handling of lastIndex on global regexps
        (issue http://crbug.com/58740).

        Added USE_SIMULATOR macro that explicitly indicates that we wish to use
        the simulator as the execution engine (by Mark Lam <mark.lam@palm.com>
        from Hewlett-Packard Development Company, LP).

        Fixed compilation error on ARM with gcc 4.4 (issue 894).


2010-10-13: Version 2.4.9

        Fixed a bug in the handling of conditional expressions in test
        contexts in compiler for top-level code.

        Added "//@ sourceURL" information to the StackTrace API.

        Exposed RegExp construction through the API.


2010-10-04: Version 2.4.8

        Fixed a bug in ResumeProfilerEx causing it to not always write out the
        whole snapshot (issue 868).

        Performance improvements on all platforms.


2010-09-30: Version 2.4.7

        Changed the command-line flag --max-new-space-size to be in kB and the
        flag --max-old-space-size to be in MB (previously they were in bytes).

        Added Debug::CancelDebugBreak to the debugger API.

        Fixed a bug in getters for negative numeric property names
        (https://bugs.webkit.org/show_bug.cgi?id=46689).

        Performance improvements on all platforms.


2010-09-27: Version 2.4.6

        Fixed assertion failure related to copy-on-write arrays (issue 876).

        Fixed build failure of 64-bit V8 on Windows.

        Fixed a bug in RegExp (issue http://crbug.com/52801).

        Improved the profiler's coverage to cover more functions (issue 858).

        Fixed error in shift operators on 64-bit V8
        (issue http://crbug.com/54521).


2010-09-22: Version 2.4.5

        Changed the RegExp benchmark to exercise the regexp engine on different
        inputs by scrambling the input strings.

        Fixed a bug in keyed loads on strings.

        Fixed a bug with loading global function prototypes.

        Fixed a bug with profiling RegExp calls (issue http://crbug.com/55999).

        Performance improvements on all platforms.


2010-09-15: Version 2.4.4

        Fixed bug with hangs on very large sparse arrays.

        Now tries harder to free up memory when running out of space.

        Added heap snapshots to JSON format to API.

        Recalibrated benchmarks.


2010-09-13: Version 2.4.3

        Made Date.parse properly handle TZ offsets (issue 857).

        Performance improvements on all platforms.


2010-09-08: Version 2.4.2

        Fixed GC crash bug.

        Fixed stack corruption bug.

        Fixed compilation for newer C++ compilers that found Operand(0)
        ambiguous.


2010-09-06: Version 2.4.1

        Added the ability for an embedding application to receive a callback
        when V8 allocates (V8::AddMemoryAllocationCallback) or deallocates
        (V8::RemoveMemoryAllocationCallback) from the OS.

        Fixed several JSON bugs (including issue 855).

        Fixed memory overrun crash bug triggered during V8's tick-based
        profiling.

        Performance improvements on all platforms.


2010-09-01: Version 2.4.0

        Fixed bug in Object.freeze and Object.seal when Array.prototype or
        Object.prototype are changed (issue 842).

        Updated Array.splice to follow Safari and Firefox when called
        with zero arguments.

        Fixed a missing live register when breaking at keyed loads on ARM.

        Performance improvements on all platforms.


2010-08-25: Version 2.3.11

        Fixed bug in RegExp related to copy-on-write arrays.

        Refactored tools/test.py script, including the introduction of
        VARIANT_FLAGS that allows specification of sets of flags with which
        all tests should be run.

        Fixed a bug in the handling of debug breaks in CallIC.

        Performance improvements on all platforms.


2010-08-23: Version 2.3.10

        Fixed bug in bitops on ARM.

        Build fixes for unusual compilers.

        Track high water mark for RWX memory.

        Performance improvements on all platforms.


2010-08-18: Version 2.3.9

        Fixed compilation for ARMv4 on OpenBSD/FreeBSD.

        Removed specialized handling of GCC 4.4 (issue 830).

        Fixed DST cache to take into account the suspension of DST in
        Egypt during the 2010 Ramadan (issue http://crbug.com/51855).

        Performance improvements on all platforms.


2010-08-16: Version 2.3.8

        Fixed build with strict aliasing on GCC 4.4 (issue 463).

        Fixed issue with incorrect handling of custom valueOf methods on
        string wrappers (issue 760).

        Fixed compilation for ARMv4 (issue 590).

        Improved performance.


2010-08-11: Version 2.3.7

        Reduced size of heap snapshots produced by heap profiler (issue 783).

        Introduced v8::Value::IsRegExp method.

        Fixed CPU profiler crash in start / stop sequence when non-existent
        name is passed (issue http://crbug.com/51594).

        Introduced new indexed property query callbacks API (issue 816). This
        API is guarded by USE_NEW_QUERY_CALLBACK define and is disabled
        by default.

        Removed support for object literal get/set with number/string
        property name.

        Fixed handling of JSObject::elements in CalculateNetworkSize
        (issue 822).

        Allowed compiling with strict aliasing enabled on GCC 4.4 (issue 463).


2010-08-09: Version 2.3.6

        RegExp literals create a new object every time they are evaluated
        (issue 704).

        Object.seal and Object.freeze return the modified object (issue 809).

        Fixed building using GCC 4.4.4.


2010-08-04: Version 2.3.5

        Added support for ES5 property names. Object initialisers and
        dot-notation property access now allows keywords. Also allowed
        non-identifiers after "get" or "set" in an object initialiser.

        Randomized the addresses of allocated executable memory on Windows.


2010-08-02: Version 2.3.4

        Fixed problems in implementation of ES5 function.prototype.bind.

        Fixed error when using apply with arguments object on ARM (issue 784).

        Added setting of global flags to debugger protocol.

        Fixed an error affecting cached results of sin and cos (issue 792).

        Removed memory leak from a boundary case where V8 is not initialized.

        Fixed issue where debugger could set breakpoints outside the body
        of a function.

        Fixed issue in debugger when using both live edit and step in features.

        Added Number-letter (Nl) category to Unicode tables.  These characters
        can now be used in identifiers.

        Fixed an assert failure on X64 (issue 806).

        Performance improvements on all platforms.


2010-07-26: Version 2.3.3

        Fixed error when building the d8 shell in a fresh checkout.

        Implemented Function.prototype.bind (ES5 15.3.4.5).

        Fixed an error in inlined stores on ia32.

        Fixed an error when setting a breakpoint at the end of a function
        that does not end with a newline character.

        Performance improvements on all platforms.


2010-07-21: Version 2.3.2

        Fixed compiler warnings when building with LLVM.

        Fixed a bug with for-in applied to strings (issue 785).

        Performance improvements on all platforms.


2010-07-19: Version 2.3.1

        Fixed compilation and linking with V8_INTERPRETED_REGEXP flag.

        Fixed bug related to code flushing while compiling a lazy
        compilable function (issue http://crbug.com/49099).

        Performance improvements on all platforms.


2010-07-15: Version 2.3.0

        Added ES5 Object.seal and Object.isSealed.

        Added debugger API for scheduling debugger commands from a
        separate thread.


2010-07-14: Version 2.2.24

        Added API for capturing stack traces for uncaught exceptions.

        Fixed crash bug when preparsing from a non-external V8 string
        (issue 775).

        Fixed JSON.parse bug causing input not to be converted to string
        (issue 764).

        Added ES5 Object.freeze and Object.isFrozen.

        Performance improvements on all platforms.


2010-07-07: Version 2.2.23

        API change: Convert Unicode code points outside the basic multilingual
        plane to the replacement character.  Previous behavior was to silently
        truncate the value to 16 bits.

        Fixed crash: handle all flat string types in regexp replace.

        Prevent invalid pre-parsing data passed in through the API from
        crashing V8.

        Performance improvements on all platforms.


2010-07-05: Version 2.2.22

        Added ES5 Object.isExtensible and Object.preventExtensions.

        Enabled building V8 as a DLL.

        Fixed a bug in date code where -0 was not interpreted as 0
        (issue 736).

        Performance improvements on all platforms.


2010-06-30: Version 2.2.21

        Fixed bug in externalizing some ASCII strings (Chromium issue 47824).

        Updated JSON.stringify to floor the space parameter (issue 753).

        Updated the Mozilla test expectations to the newest version.

        Updated the ES5 Conformance Test expectations to the latest version.

        Updated the V8 benchmark suite.

        Provide actual breakpoints locations in response to setBreakpoint
        and listBreakpoints requests.


2010-06-28: Version 2.2.20

        Fixed bug with for-in on x64 platform (issue 748).

        Fixed crash bug on x64 platform (issue 756).

        Fixed bug in Object.getOwnPropertyNames. (chromium issue 41243).

        Fixed a bug on ARM that caused the result of 1 << x to be
        miscalculated for some inputs.

        Performance improvements on all platforms.


2010-06-23: Version 2.2.19

        Fixed bug that causes the build to break when profillingsupport=off
        (issue 738).

        Added expose-externalize-string flag for testing extensions.

        Resolve linker issues with using V8 as a DLL causing a number of
        problems with unresolved symbols.

        Fixed build failure for cctests when ENABLE_DEBUGGER_SUPPORT is not
        defined.

        Performance improvements on all platforms.


2010-06-16: Version 2.2.18

        Added API functions to retrieve information on indexed properties
        managed by the embedding layer.  Fixes bug 737.

        Made ES5 Object.defineProperty support array elements.  Fixes bug 619.

        Added heap profiling to the API.

        Removed old named property query from the API.

        Incremental performance improvements.


2010-06-14: Version 2.2.17

        Improved debugger support for stepping out of functions.

        Incremental performance improvements.


2010-06-09: Version 2.2.16

        Removed the SetExternalStringDiposeCallback API. Changed the
        disposal of external string resources to call a virtual Dispose
        method on the resource.

        Added support for more precise break points when debugging and
        stepping.

        Memory usage improvements on all platforms.


2010-06-07: Version 2.2.15

        Added an API to control the disposal of external string resources.

        Added missing initialization of a couple of variables which makes
        some compilers complaint when compiling with -Werror.

        Improved performance on all platforms.


2010-06-02: Version 2.2.14

        Fixed a crash in code generated for String.charCodeAt.

        Fixed a compilation issue with some GCC versions (issue 727).

        Performance optimizations on x64 and ARM platforms.


2010-05-31: Version 2.2.13

        Implemented Object.getOwnPropertyDescriptor for element indices and
        strings (issue 599).

        Fixed bug for windows 64 bit C calls from generated code.

        Added new scons flag unalignedaccesses for arm builds.

        Performance improvements on all platforms.


2010-05-26: Version 2.2.12

        Allowed accessors to be defined on objects rather than just object
        templates.

        Changed the ScriptData API.


2010-05-21: Version 2.2.11

        Fixed crash bug in liveedit on 64 bit.

        Use 'full compiler' when debugging is active.  This should increase
        the density of possible break points, making single step more fine
        grained.  This will only take effect for functions compiled after
        debugging has been started, so recompilation of all functions is
        required to get the full effect.  IA32 and x64 only for now.

        Misc. fixes to the Solaris build.

        Added new flags --print-cumulative-gc-stat and --trace-gc-nvp.

        Added filtering of CPU profiles by security context.

        Fixed crash bug on ARM when running without VFP2 or VFP3.

        Incremental performance improvements in all backends.


2010-05-17: Version 2.2.10

        Performance improvements in the x64 and ARM backends.


2010-05-10: Version 2.2.9

        Allowed Object.create to be called with a function (issue 697).

        Fixed bug with Date.parse returning a non-NaN value when called on a
        non date string (issue 696).

        Allowed unaligned memory accesses on ARM targets that support it (by
        Subrato K De of CodeAurora <subratokde@codeaurora.org>).

        C++ API for retrieving JavaScript stack trace information.


2010-05-05: Version 2.2.8

        Performance improvements in the x64 and ARM backends.


2010-05-03: Version 2.2.7

        Added support for ES5 date time string format to Date.parse.

        Performance improvements in the x64 backend.


2010-04-28: Version 2.2.6

        Added "amd64" as recognized architecture in scons build script
        (by Ryan Dahl <coldredlemur@gmail.com>).

        Fixed bug in String search and replace with very simple RegExps.

        Fixed bug in RegExp containing "\b^".

        Performance improvements on all platforms.


2010-04-26: Version 2.2.5

        Various performance improvements (especially for ARM and x64)

        Fixed bug in CPU profiling (http://crbug.com/42137)

        Fixed a bug with the natives cache.

        Fixed two bugs in the ARM code generator that can cause
        wrong calculations.

        Fixed a bug that may cause a wrong result for shift operations.


2010-04-21: Version 2.2.4

        Fixed warnings on arm on newer GCC versions.

        Fixed a number of minor bugs.

        Performance improvements on all platforms.


2010-04-14: Version 2.2.3

        Added stack command and mem command to ARM simulator debugger.

        Fixed scons snapshot and ARM build, and Windows X64 build issues.

        Performance improvements on all platforms.


2010-04-12: Version 2.2.2

        Introduced new profiler API.

        Fixed random number generator to produce full 32 random bits.


2010-04-06: Version 2.2.1

        Debugger improvements.

        Fixed minor bugs.


2010-03-29: Version 2.2.0

        Fixed a few minor bugs.

        Performance improvements for string operations.


2010-03-26: Version 2.1.10

        Fixed scons build issues.

        Fixed a couple of minor bugs.


2010-03-25: Version 2.1.9

        Added API support for reattaching a global object to a context.

        Extended debugger API with access to the internal debugger context.

        Fixed Chromium crashes (issues http://crbug.com/39128 and
        http://crbug.com/39160)


2010-03-24: Version 2.1.8

        Added fine-grained garbage collection callbacks to the API.

        Performance improvements on all platforms.


2010-03-22: Version 2.1.7

        Fixed issue 650.

        Fixed a bug where __proto__ was sometimes enumerated (issue 646).

        Performance improvements for arithmetic operations.

        Performance improvements for string operations.

        Print script name and line number information in stack trace.


2010-03-17: Version 2.1.6

        Performance improvements for arithmetic operations.

        Performance improvements for string operations.


2010-03-10: Version 2.1.4

        Fixed code cache lookup for keyed IC's (issue http://crbug.com/37853).

        Performance improvements on all platforms.


2010-03-10: Version 2.1.3

        Added API method for context-disposal notifications.

        Added API method for accessing elements by integer index.

        Added missing implementation of Uint32::Value and Value::IsUint32
        API methods.

        Added IsExecutionTerminating API method.

        Disabled strict aliasing for GCC 4.4.

        Fixed string-concatenation bug (issue 636).

        Performance improvements on all platforms.


2010-02-23: Version 2.1.2

        Fixed a crash bug caused by wrong assert.

        Fixed a bug with register names on 64-bit V8 (issue 615).

        Performance improvements on all platforms.


2010-02-19: Version 2.1.1

        [ES5] Implemented Object.defineProperty.

        Improved profiler support.

        Added SetPrototype method in the public V8 API.

        Added GetScriptOrigin and GetScriptLineNumber methods to Function
        objects in the API.

        Performance improvements on all platforms.


2010-02-03: Version 2.1.0

        Values are now always wrapped in objects when used as a receiver.
        (issue 223).

        [ES5] Implemented Object.getOwnPropertyNames.

        [ES5] Restrict JSON.parse to only accept strings that conforms to the
        JSON grammar.

        Improvement of debugger agent (issue 549 and 554).

        Fixed problem with skipped stack frame in profiles (issue 553).

        Solaris support by Erich Ocean <erich.ocean@me.com> and Ryan Dahl
        <ry@tinyclouds.org>.

        Fixed a bug that Math.round() returns incorrect results for huge
        integers.

        Fixed enumeration order for objects created from some constructor
        functions (isue http://crbug.com/3867).

        Fixed arithmetic on some integer constants (issue 580).

        Numerous performance improvements including porting of previous IA-32
        optimizations to x64 and ARM architectures.


2010-01-14: Version 2.0.6

        Added ES5 Object.getPrototypeOf, GetOwnPropertyDescriptor,
        GetOwnProperty, FromPropertyDescriptor.

        Fixed Mac x64 build errors.

        Improved performance of some math and string operations.

        Improved performance of some regexp operations.

        Improved performance of context creation.

        Improved performance of hash tables.


2009-12-18: Version 2.0.5

        Extended to upper limit of map space to allow for 7 times as many map
        to be allocated (issue 524).

        Improved performance of code using closures.

        Improved performance of some binary operations involving doubles.


2009-12-16: Version 2.0.4

        Added ECMAScript 5 Object.create.

        Improved performance of Math.max and Math.min.

        Optimized adding of strings on 64-bit platforms.

        Improved handling of external strings by using a separate table
        instead of weak handles.  This improves garbage collection
        performance and uses less memory.

        Changed code generation for object and array literals in toplevel
        code to be more compact by doing more work in the runtime.

        Fixed a crash bug triggered when garbage collection happened during
        generation of a callback load inline cache stub.

        Fixed crash bug sometimes triggered when local variables shadowed
        parameters in functions that used the arguments object.


2009-12-03: Version 2.0.3

        Optimized handling and adding of strings, for-in and Array.join.

        Heap serialization is now non-destructive.

        Improved profiler support with information on time spend in C++
        callbacks registered through the API.

        Added commands to the debugger protocol for starting/stopping
        profiling.

        Enabled the non-optimizing compiler for top-level code.

        Changed the API to only allow strings to be set as data objects on
        Contexts and scripts to avoid potentially keeping global objects
        around for too long (issue 528).

        OpenBSD support patch by Peter Valchev <pvalchev@gmail.com>.

        Fixed bugs.


2009-11-24: Version 2.0.2

        Improved profiler support.

        Fixed bug that broke compilation of d8 with readline support.


2009-11-20: Version 2.0.1

        Fixed crash bug in String.prototype.replace.

        Reverted a change which caused Chromium interactive ui test
        failures.


2009-11-18: Version 2.0.0

        Added support for VFP on ARM.

        Added TryCatch::ReThrow method to the API.

        Reduced the size of snapshots and improved the snapshot load time.

        Improved heap profiler support.

        64-bit version now supported on Windows.

        Fixed a number of debugger issues.

        Fixed bugs.


2009-10-29: Version 1.3.18

        Reverted a change which caused crashes in RegExp replace.

        Reverted a change which caused Chromium ui_tests failure.


2009-10-28: Version 1.3.17

        Added API method to get simple heap statistics.

        Improved heap profiler support.

        Fixed the implementation of the resource constraint API so it
        works when using snapshots.

        Fixed a number of issues in the Windows 64-bit version.

        Optimized calls to API getters.

        Added valgrind notification on code modification to the 64-bit version.

        Fixed issue where we logged shared library addresses on Windows at
        startup and never used them.


2009-10-16: Version 1.3.16

        X64: Convert smis to holding 32 bits of payload.

        Introduced v8::Integer::NewFromUnsigned method.

        Added missing null check in Context::GetCurrent.

        Added trim, trimLeft and trimRight methods to String
        Patch by Jan de Mooij <jandemooij@gmail.com>

        Implement ES5 Array.isArray
        Patch by Jan de Mooij <jandemooij@gmail.com>

        Skip access checks for hidden properties.

        Added String::Concat(Handle<String> left, Handle<String> right) to the
        V8 API.

        Fixed GYP-based builds of V8.


2009-10-07: Version 1.3.15

        Expanded the maximum size of the code space to 512MB for 64-bit mode.

        Fixed a crash bug happening when starting profiling (issue
        http://crbug.com/23768).


2009-10-07: Version 1.3.14

        Added GetRealNamedProperty to the API to lookup real properties
        located on the object or in the prototype chain skipping any
        interceptors.

        Fixed the stack limits setting API to work correctly with threads. The
        stack limit now needs to be set to each thread thich is used with V8.

        Removed the high-priority flag from IdleNotification()

        Ensure V8 is initialized before locking and unlocking threads.

        Implemented a new JavaScript minifier for compressing the source of
        the built-in JavaScript. This removes non-Open Source code from Douglas
        Crockford from the project.

        Added a missing optimization in StringCharAt.

        Fixed some flaky socket tests.

        Change by Alexander Botero-Lowry to fix profiler sampling on FreeBSD
        in 64-bit mode.

        Fixed memory leaks in the thread management code.

        Fixed the result of assignment to a pixel array. The assigned value
        is now the result.

        Error reporting for invalid left-hand sides in for-in statements, pre-
        and postfix count expressions, and assignments now matches the JSC
        behavior in Safari 4.

        Follow the spec in disallowing function declarations without a name.

        Always allocate code objects within a 2 GB range. On x64 architecture
        this is used to use near calls (32-bit displacement) in Code objects.

        Optimized array construction ported to x64 and ARM architectures.

        [ES5] Changed Object.keys to return strings for element indices.


2009-09-23: Version 1.3.13

        Fixed uninitialized memory problem.

        Improved heap profiler support.


2009-09-22: Version 1.3.12

        Changed behavior of |function|.toString() on built-in functions to
        be compatible with other implementations.  Patch by Jan de Mooij.

        Added Object::IsDirty in the API.

        Optimized array construction; it is now handled purely in native
        code.

        [ES5] Made properties of the arguments array enumerable.

        [ES5] Added test suite adapter for the es5conform test suite.

        [ES5] Added Object.keys function.


2009-09-15: Version 1.3.11

        Fixed crash in error reporting during bootstrapping.

        Optimized generated IA32 math code by using SSE2 instructions when
        available.

        Implemented missing pieces of debugger infrastructure on ARM.  The
        debugger is now fully functional on ARM.

        Made 'hidden' the default visibility for gcc.


2009-09-09: Version 1.3.10

        Fixed profiler on Mac in 64-bit mode.

        Optimized creation of objects from simple constructor functions on
        ARM.

        Fixed a number of debugger issues.

        Reduced the amount of memory consumed by V8.


2009-09-02: Version 1.3.9

        Optimized stack guard checks on ARM.

        Optimized API operations by inlining more in the API.

        Optimized creation of objects from simple constructor functions.

        Enabled a number of missing optimizations in the 64-bit port.

        Implemented native-code support for regular expressions on ARM.

        Stopped using the 'sahf' instruction on 64-bit machines that do
        not support it.

        Fixed a bug in the support for forceful termination of JavaScript
        execution.


2009-08-26: Version 1.3.8

        Changed the handling of idle notifications to allow idle
        notifications when V8 has not yet been initialized.

        Fixed ARM simulator compilation problem on Windows.


2009-08-25: Version 1.3.7

        Reduced the size of generated code on ARM platforms by reducing
        the size of constant pools.

        Changed build files to not include the 'ENV' user environment
        variable in the build environment.

        Changed the handling of idle notifications.


2009-08-21: Version 1.3.6

        Added support for forceful termination of JavaScript execution.

        Added low memory notification to the API. The embedding host can signal
        a low memory situation to V8.

        Changed the handling of global handles (persistent handles in the API
        sense) to avoid issues regarding allocation of new global handles
        during weak handle callbacks.

        Changed the growth policy of the young space.

        Fixed a GC issue introduced in version 1.3.5.


2009-08-19: Version 1.3.5

        Optimized initialization of some arrays in the builtins.

        Fixed mac-nm script to support filenames with spaces.

        Support for using the V8 profiler when V8 is embedded in a Windows DLL.

        Changed typeof RegExp from 'object' to 'function' for compatibility.
        Fixed bug where regexps were not callable across contexts.

        Added context independent script compilation to the API.

        Added API call to get the stack trace for an exception.

        Added API for getting object mirrors.

        Made sure that SSE3 instructions are used whenever possible even when
        running off a snapshot generated without using SSE3 instructions.

        Tweaked the handling of the initial size and growth policy of the heap.

        Added native code generation for RegExp to 64-bit version.

        Added JavaScript debugger support to 64-bit version.


2009-08-13: Version 1.3.4

        Added a readline() command to the d8 shell.

        Fixed bug in json parsing.

        Added idle notification to the API and reduced memory on idle
        notifications.


2009-08-12: Version 1.3.3

        Fixed issue 417: incorrect %t placeholder expansion.

        Added .gitignore file similar to Chromium's one.

        Fixed SConstruct file to build with new logging code for Android.

        API: added function to find instance of template in prototype
        chain.  Inlined Object::IsInstanceOf.

        Land change to notify valgrind when we modify code on x86.

        Added api call to determine whether a string can be externalized.

        Added a write() command to d8.


2009-08-05: Version 1.3.2

        Started new compiler infrastructure for two-pass compilation using a
        control flow graph constructed from the AST.

        Profiler stack sampling for X64.

        Safe handling of NaN to Posix platform-dependent time functions.

        Added a new profiler control API to unify controlling various aspects
        of profiling.

        Fixed issue 392.


2009-07-30: Version 1.3.1

        Speed improvements to accessors and interceptors.

        Added support for capturing stack information on custom errors.

        Added support for morphing an object into a pixel array where its
        indexed properties are stored in an external byte array. Values written
        are always clamped to the 0..255 interval.

        Profiler on x64 now handles C/C++ functions from shared libraries.

        Changed the debugger to avoid stepping into function.call/apply if the
        function is a built-in.

        Initial implementation of constructor heap profile for JS objects.

        More fine grained control of profiling aspects through the API.

        Optimized the called as constructor check for API calls.


2009-07-27: Version 1.3.0

        Allowed RegExp objects to be called as functions (issue 132).

        Fixed issue where global property cells would escape after
        detaching the global object; see http://crbug.com/16276.

        Added support for stepping into setters and getters in the
        debugger.

        Changed the debugger to avoid stopping in its own JavaScript code
        and in the code of built-in functions.

        Fixed issue 345 by avoiding duplicate escaping labels.

        Fixed ARM code generator crash in short-circuited boolean
        expressions and added regression tests.

        Added an external allocation limit to avoid issues where small V8
        objects would hold on to large amounts of external memory without
        causing garbage collections.

        Finished more of the inline caching stubs for x64 targets.


2009-07-13: Version 1.2.14

        Added separate paged heap space for global property cells and
        avoid updating the write barrier when storing into them.

        Improved peep-hole optimization on ARM platforms by not emitting
        unnecessary debug information.

        Re-enabled ICs for loads and calls that skip a global object
        during lookup through the prototype chain.

        Allowed access through global proxies to use ICs.

        Fixed issue 401.


2009-07-09: Version 1.2.13

        Fixed issue 397, issue 398, and issue 399.

        Added support for breakpoint groups.

        Fixed bugs introduced with the new global object representation.

        Fixed a few bugs in the ARM code generator.


2009-07-06: Version 1.2.12

        Added stack traces collection to Error objects accessible through
        the e.stack property.

        Changed RegExp parser to use a recursive data structure instead of
        stack-based recursion.

        Optimized Date object construction and string concatenation.

        Improved performance of div, mod, and mul on ARM platforms.


2009-07-02: Version 1.2.11

        Improved performance on IA-32 and ARM.

        Fixed profiler sampler implementation on Mac OS X.

        Changed the representation of global objects to improve
        performance of adding a lot of new properties.


2009-06-29: Version 1.2.10

        Improved debugger support.

        Fixed bug in exception message reporting (issue 390).

        Improved overall performance.


2009-06-23: Version 1.2.9

        Improved math performance on ARM.

        Fixed profiler name-inference bug.

        Fixed handling of shared libraries in the profiler tick processor
        scripts.

        Fixed handling of tests that time out in the test scripts.

        Fixed compilation on MacOS X version 10.4.

        Fixed two bugs in the regular expression engine.

        Fixed a bug in the string type inference.

        Fixed a bug in the handling of 'constant function' properties.

        Improved overall performance.


2009-06-16: Version 1.2.8

        Optimized math on ARM platforms.

        Fixed two crash bugs in the handling of getters and setters.

        Improved the debugger support by adding scope chain information.

        Improved the profiler support by compressing log data transmitted
        to clients.

        Improved overall performance.


2009-06-08: Version 1.2.7

        Improved debugger and profiler support.

        Reduced compilation time by improving the handling of deferred
        code.

        Optimized interceptor accesses where the property is on the object
        on which the interceptors is attached.

        Fixed compilation problem on GCC 4.4 by changing the stack
        alignment to 16 bytes.

        Fixed handle creation to follow stric aliasing rules.

        Fixed compilation on FreeBSD.

        Introduced API for forcing the deletion of a property ignoring
        interceptors and attributes.


2009-05-29: Version 1.2.6

        Added a histogram recording hit rates at different levels of the
        compilation cache.

        Added stack overflow check for the RegExp analysis phase. Previously a
        very long regexp graph could overflow the stack with recursive calls.

        Use a dynamic buffer when collecting log events in memory.

        Added start/stop events to the profiler log.

        Fixed infinite loop which could happen when setting a debug break while
        executing a RegExp compiled to native code.

        Fixed handling of lastIndexOf called with negative index (issue 351).

        Fixed irregular crash in profiler test (issue 358).

        Fixed compilation issues with some versions of gcc.


2009-05-26: Version 1.2.5

        Fixed bug in initial boundary check for Boyer-Moore text
        search (issue 349).

        Fixed compilation issues with MinGW and gcc 4.3+ and added support
        for armv7 and cortex-a8 architectures.  Patches by Lei Zhang and
        Craig Schlenter.

        Added a script cache to the debugger.

        Optimized compilation performance by improving internal data
        structures and avoiding expensive property load optimizations for
        code that's infrequently executed.

        Exposed the calling JavaScript context through the static API
        function Context::GetCalling().


2009-05-18: Version 1.2.4

        Improved performance of floating point number allocation for ARM
        platforms.

        Fixed crash when using the instanceof operator on functions with
        number values in their prototype chain (issue 341).

        Optimized virtual frame operations in the code generator to speed
        up compilation time and allocated the frames in the zone.

        Made the representation of virtual frames and jump targets in the
        code generator much more compact.

        Avoided linear search for non-locals in scope code when resolving
        variables inside with and eval scopes.

        Optimized lexical scanner by dealing with whitespace as part of
        the token scanning instead of as a separate step before it.

        Changed the scavenging collector so that promoted objects do not
        reside in the old generation while their remembered set is being
        swept for pointers into the young generation.

        Fixed numeric overflow handling when compiling count operations.


2009-05-11: Version 1.2.3

        Fixed bug in reporting of out-of-memory situations.

        Introduced hidden prototypes on certain builtin prototype objects
        such as String.prototype to emulate JSC's behavior of restoring
        the original function when deleting functions from those prototype
        objects.

        Fixed crash bug in the register allocator.


2009-05-04: Version 1.2.2

        Fixed bug in array sorting for sparse arrays (issue 326).

        Added support for adding a soname when building a shared library
        on Linux (issue 151).

        Fixed bug caused by morphing internal ASCII strings to external
        two-byte strings.  Slices over ASCII strings have to forward ASCII
        checks to the underlying buffer string.

        Allowed API call-as-function handlers to be called as
        constructors.

        Fixed a crash bug where an external string was disposed but a
        slice of the external string survived as a symbol.


2009-04-27: Version 1.2.1

        Added EcmaScript 5 JSON object.

        Fixed bug in preemption support on ARM.


2009-04-23: Version 1.2.0

        Optimized floating-point operations on ARM.

        Added a number of extensions to the debugger API.

        Changed the enumeration order for unsigned integer keys to always
        be numerical order.

        Added a "read" extension to the shell sample.

        Added support for Array.prototype.reduce and
        Array.prototype.reduceRight.

        Added an option to the SCons build to control Microsoft Visual C++
        link-time code generation.

        Fixed a number of bugs (in particular issue 315, issue 316,
        issue 317 and issue 318).


2009-04-15: Version 1.1.10

        Fixed crash bug that occurred when loading a const variable in the
        presence of eval.

        Allowed using with and eval in registered extensions in debug mode
        by fixing bogus assert.

        Fixed the source position for function returns to enable the
        debugger to break there.


2009-04-14: Version 1.1.9

        Made the stack traversal code in the profiler robust by avoiding
        to look into the heap.

        Added name inferencing for anonymous functions to facilitate
        debugging and profiling.

        Re-enabled stats timers in the developer shell (d8).

        Fixed issue 303 by avoiding to shortcut cons-symbols.


2009-04-11: Version 1.1.8

        Changed test-debug/ThreadedDebugging to be non-flaky (issue 96).

        Fixed step-in handling for Function.prototype.apply and call in
        the debugger (issue 269).

        Fixed v8::Object::DeleteHiddenValue to not bail out when there
        are no hidden properties.

        Added workaround for crash bug, where external symbol table
        entries with deleted resources would lead to NPEs when looking
        up in the symbol table.


2009-04-07: Version 1.1.7

        Added support for easily importing additional environment
        variables into the SCons build.

        Optimized strict equality checks.

        Fixed crash in indexed setters on objects without a corresponding
        getter (issue 298).

        Re-enabled script compilation cache.


2009-04-01: Version 1.1.6

        Reverted an unsafe code generator change.


2009-04-01: Version 1.1.5

        Fixed bug that caused function literals to not be optimized as
        much as other functions.

        Improved profiler support.

        Fixed a crash bug in connection with debugger unloading.

        Fixed a crash bug in the code generator caused by losing the
        information that a frame element was copied.

        Fixed an exception propagation bug that could cause non-null
        return values when exceptions were thrown.


2009-03-30: Version 1.1.4

        Optimized String.prototype.match.

        Improved the stack information in profiles.

        Fixed bug in ARM port making it possible to compile the runtime
        system for thumb mode again.

        Implemented a number of optimizations in the code generator.

        Fixed a number of memory leaks in tests.

        Fixed crash bug in connection with script source code and external
        strings.


2009-03-24: Version 1.1.3

        Fixed assertion failures in compilation of loop conditions.

        Removed STL dependency from developer shell (d8).

        Added infrastructure for protecting the V8 heap from corruption
        caused by memory modifications from the outside.


2009-03-24: Version 1.1.2

        Improved frame merge code generated by the code generator.

        Optimized String.prototype.replace.

        Implemented __defineGetter__ and __defineSetter__ for properties
        with integer keys on non-array objects.

        Improved debugger and profiler support.

        Fixed a number of portability issues to allow compilation for
        smaller ARM devices.

        Exposed object cloning through the API.

        Implemented hidden properties.  This is used to expose an identity
        hash for objects through the API.

        Implemented restarting of regular expressions if their input
        string changes representation during preemption.

        Fixed a code generator bug that could cause assignments in loops
        to be ignored if using continue to break out of the loop (issue
        284).


2009-03-12: Version 1.1.1

        Fixed an assertion in the new compiler to take stack overflow
        exceptions into account.

        Removed exception propagation code that could cause crashes.

        Fixed minor bug in debugger line number computations.

        8-byte align the C stack on Linux and Windows to speed up floating
        point computations.


2009-03-12: Version 1.1.0

        Improved code generation infrastructure by doing simple register
        allocation and constant folding and propagation.

        Optimized regular expression matching by avoiding to create
        intermediate string arrays and by flattening nested array
        representations of RegExp data.

        Traverse a few stack frames when recording profiler samples to
        include partial call graphs in the profiling output.

        Added support for using OProfile to profile generated code.

        Added remote debugging support to the D8 developer shell.

        Optimized creation of nested literals like JSON objects.

        Fixed a bug in garbage collecting unused maps and turned it on by
        default (--collect-maps).

        Added support for running tests under Valgrind.


2009-02-27: Version 1.0.3

        Optimized double-to-integer conversions in bit operations by using
        SSE3 instructions if available.

        Optimized initialization sequences that store to multiple
        properties of the same object.

        Changed the D8 debugger frontend to use JSON messages.

        Force garbage collections when disposing contexts.

        Align code objects at 32-byte boundaries.


2009-02-25: Version 1.0.2

        Improved profiling support by performing simple call stack
        sampling for ticks and by fixing a bug in the logging of code
        addresses.

        Fixed a number of debugger issues.

        Optimized code that uses eval.

        Fixed a couple of bugs in the regular expression engine.

        Reduced the size of generated code for certain regular expressions.

        Removed JSCRE completely.

        Fixed issue where test could not be run if there was a dot in the
        checkout path.


2009-02-13: Version 1.0.1

        Fixed two crash-bugs in irregexp (issue 231 and 233).

        Fixed a number of minor bugs (issue 87, 227 and 228).

        Added support for morphing strings to external strings on demand
        to avoid having to create copies in the embedding code.

        Removed experimental support for external symbol callbacks.


2009-02-09: Version 1.0.0

        Fixed crash-bug in the code generation for case independent 16 bit
        backreferences.

        Made shells more robust in the presence of string conversion
        failures (issue 224).

        Fixed a potential infinite loop when attempting to resolve
        eval (issue 221).

        Miscellaneous fixes to the new regular expression engine.

        Reduced binary by stripping unneeded text from JavaScript library and
        minifying some JavaScript files.


2009-01-27: Version 0.4.9

        Enabled new regular expression engine.

        Made a number of changes to the debugger protocol.

        Fixed a number of bugs in the preemption support.

        Added -p option to the developer shell to run files in parallel
        using preemption.

        Fixed a number of minor bugs (including issues 176, 187, 189, 192,
        193, 198 and 201).

        Fixed a number of bugs in the serialization/deserialization
        support for the ARM platform.


2009-01-19: Version 0.4.8.1

        Minor patch to debugger support.


2009-01-16: Version 0.4.8

        Fixed string length bug on ARM (issue 171).

        Made most methods in the API const.

        Optimized object literals by improving data locality.

        Fixed bug that caused incomplete functions to be cached in case of
        stack overflow exceptions.

        Fixed bugs that caused catch variables and variables introduced by
        eval to behave incorrectly when using accessors (issues 186, 190
        and 191).


2009-01-06: Version 0.4.7

        Minor bugfixes and optimizations.

        Added command line debugger to D8 shell.

        Fixed subtle bug that caused the wrong 'this' to be used when
        calling a caught function in a catch clause.

        Inline array loads within loops directly in the code instead of
        always calling a stub.


2008-12-11: Version 0.4.6

        Fixed exception reporting bug where certain exceptions were
        incorrectly reported as uncaught.

        Improved the memory allocation strategy used during compilation to
        make running out of memory when compiling huge scripts less
        likely.

        Optimized String.replace by avoiding the construction of certain
        sub strings.

        Fixed bug in code generation for large switch statements on ARM.

        Fixed bug that caused V8 to change the global object template
        passed in by the user.

        Changed the API for creating object groups used during garbage
        collection.  Entire object groups are now passed to V8 instead of
        individual members of the groups.


2008-12-03: Version 0.4.5

        Added experimental API support for allocating V8 symbols as
        external strings.

        Fixed bugs in debugging support on ARM.

        Changed eval implementation to correctly detect whether or not a
        call to eval is aliased.

        Fixed bug caused by a combination of the compilation cache and
        dictionary probing in native code.  The bug caused us to sometimes
        call functions that had not yet been compiled.

        Added platform support for FreeBSD.

        Added support for building V8 on Windows with either the shared or
        static version of MSVCRT

        Added the v8::jscre namespace around the jscre functions to avoid
        link errors (duplicate symbols) when building Google Chrome.

        Added support for calling a JavaScript function with the current
        debugger execution context as its argument to the debugger
        interface.

        Changed the type of names of counters from wchar_t to char.

        Changed the Windows system call used to compute daylight savings
        time.  The system call that we used to use became four times
        slower on WinXP SP3.

        Added support in the d8 developer shell for memory-mapped counters
        and added a stats-viewer tool.

        Fixed bug in upper/lower case mappings (issue 149).


2008-11-17: Version 0.4.4

        Reduced code size by using shorter instruction encoding when
        possible.

        Added a --help option to the shell sample and to the d8 shell.

        Added visual studio project files for building the ARM simulator.

        Fixed a number of ARM simulator issues.

        Fixed bug in out-of-memory handling on ARM.

        Implemented shell support for passing arguments to a script from
        the command line.

        Fixed bug in date code that made certain date functions return -0
        instead of 0 for dates before the epoch.

        Restricted applications of eval so it can only be used in the
        context of the associated global object.

        Treat byte-order marks as whitespace characters.


2008-11-04: Version 0.4.3

        Added support for API accessors that prohibit overwriting by
        accessors defined in JavaScript code by using __defineGetter__ and
        __defineSetter__.

        Improved handling of conditionals in test status files.

        Introduced access control in propertyIsEnumerable.

        Improved performance of some string operations by caching
        information about the type of the string between operations.

        Fixed bug in fast-case code for switch statements that only have
        integer labels.


2008-10-30: Version 0.4.2

        Improved performance of Array.prototype.concat by moving the
        implementation to C++ (issue 123).

        Fixed heap growth policy to avoid growing old space to its maximum
        capacity before doing a garbage collection and fixed issue that
        would lead to artificial out of memory situations (issue 129).

        Fixed Date.prototype.toLocaleDateString to return the date in the
        same format as WebKit.

        Added missing initialization checks to debugger API.

        Added removing of unused maps during GC.


2008-10-28: Version 0.4.1

        Added caching of RegExp data in compilation cache.

        Added Visual Studio project file for d8 shell.

        Fixed function call performance regression introduced in version
        0.4.0 when splitting the global object in two parts (issue 120).

        Fixed issue 131 by checking for empty handles before throwing and
        reporting exceptions.


2008-10-23: Version 0.4.0

        Split the global object into two parts: The state holding global
        object and the global object proxy.

        Fixed bug that affected the value of an assignment to an element
        in certain cases (issue 116).

        Added GetPropertyNames functionality (issue 33) and extra Date
        functions (issue 77) to the API.

        Changed WeakReferenceCallback to take a Persistent<Value> instead
        of a Persistent<Object> (issue 101).

        Fixed issues with message reporting for exceptions in try-finally
        blocks (issues 73 and 75).

        Optimized flattening of strings and string equality checking.

        Improved Boyer-Moore implementation for faster indexOf operations.

        Added development shell (d8) which includes counters and
        completion support.

        Fixed problem with the receiver passed to functions called from
        eval (issue 124).


2008-10-16: Version 0.3.5

        Improved string hash-code distribution by excluding bit-field bits
        from the hash-code.

        Changed string search algorithm used in indexOf from KMP to
        Boyer-Moore.

        Improved the generated code for the instanceof operator.

        Improved performance of slow-case string equality checks by
        specializing the code based on the string representation.

        Improve the handling of out-of-memory situations (issue 70).

        Improved performance of strict equality checks.

        Improved profiler output to make it easier to see anonymous
        functions.

        Improved performance of slow-case keyed loads.

        Improved property access performance by allocating a number of
        properties in the front object.

        Changed the toString behavior on the built-in object constructors
        to print [native code] instead of the actual source.  Some web
        applications do not like constructors with complex toString
        results.


2008-10-06: Version 0.3.4

        Changed Array.prototype.sort to use quick sort.

        Fixed code generation issue where leaving a finally block with
        break or continue would accumulate elements on the expression
        stack (issue 86).

        Made sure that the name accessor on functions returns the expected
        names for builtin JavaScript functions and C++ callback functions.

        Added fast case code for extending the property storage array of
        JavaScript objects.

        Ported switch statement optimizations introduced in version 0.3.3
        to the ARM code generator.

        Allowed GCC to use strict-aliasing rules when compiling.

        Improved performance of arguments object allocation by taking care
        of arguments adaptor frames in the generated code.

        Updated the V8 benchmark suite to version 2.


2008-09-25: Version 0.3.3

        Improved handling of relocation information to enable more
        peep-hole optimizations.

        Optimized switch statements where all labels are constant small
        integers.

        Optimized String.prototype.indexOf for common cases.

        Fixed more build issues (issue 80).

        Fixed a couple of profiler issues.

        Fixed bug where the body of a function created using the Function
        constructor was not allowed to end with a single-line comment
        (issue 85).

        Improved handling of object literals by canonicalizing object
        literal maps.  This will allow JSON objects with the same set of
        properties to share the same map making inline caching work better
        for JSON objects.


2008-09-17: Version 0.3.2

        Generalized the EvalCache into a CompilationCache and enabled it
        for scripts too.  The current strategy is to retire all entries
        whenever a mark-sweep collection is started.

        Fixed bug where switch statements containing only a default case
        would lead to an unbalanced stack (issue 69).

        Fixed bug that made access to the function in a named function
        expression impossible in certain situations (issue 24).

        Fixed even more build issues.

        Optimized calling conventions on ARM.  The conventions on ARM and
        IA-32 now match.

        Removed static initializers for flags and counters.

        Improved inline caching behavior for uncommon cases where lazily
        loading Date and RegExp code could force certain code paths go
        megamorphic.

        Removed arguments adaption for builtins written in C++.  This
        makes Array.prototype.push and Array.prototype.pop slightly
        faster.


2008-09-11: Version 0.3.1

        Fixed a number of build issues.

        Fixed problem with missing I-cache flusing on ARM.

        Changed space layout in memory management by splitting up
        code space into old data space and code space.

        Added utf-8 conversion support to the API (issue 57).

        Optimized repeated calls to eval with the same strings.  These
        repeated calls are common in web applications.

        Added Xcode project file.

        Optimized a couple of Array operation.

        Fixed parser bug by checking for end-of-string when parsing break
        and continue (issue 35).

        Fixed problem where asian characters were not categorized as
        letters.

        Fixed bug that disallowed calling functions fetched from an array
        using a string as an array index (issue 32).

        Fixed bug where the internal field count on object templates were
        sometimes ignored (issue 54).

        Added -f option to the shell sample for compatibility with other
        engines (issue 18).

        Added source info to TryCatches in the API.

        Fixed problem where the seed for the random number generator was
        clipped in a double to unsigned int conversion.

        Fixed bug where cons string symbols were sometimes converted to
        non-symbol flat strings during GC.

        Fixed bug in error reporting when attempting to convert null to an
        object.


2008-09-04: Version 0.3.0

        Added support for running tests on the ARM simulator.

        Fixed bug in the 'in' operator where negative indices were not
        treated correctly.

        Fixed build issues on gcc-4.3.1.

        Changed Date.prototype.toLocaleTimeString to not print the
        timezone part of the time.

        Renamed debug.h to v8-debug.h to reduce the risk of name conflicts
        with user code.


2008-09-02: Version 0.2.5

        Renamed the top level directory 'public' to 'include'.

        Added 'env' option to the SCons build scripts to support
        overriding the ENV part of the build environment.  This is mostly
        to support Windows builds in cases where SCons cannot find the
        correct paths to the Windows SDK, as these paths cannot be passed
        through shell environment variables.

        Enabled "Buffer Security Check" on for the Windows SCons build and
        added the linker option /OPT:ICF as an optimization.

        Added the V8 benchmark suite to the repository.


2008-09-01: Version 0.2.4

        Included mjsunit JavaScript test suite and C++ unit tests.

        Changed the shell sample to not print the result of executing a
        script provided on the command line.

        Fixed issue when building samples on Windows using a shared V8
        library.  Added visibility option on Linux build which makes the
        generated library 18% smaller.

        Changed build system to accept multiple build modes in one build
        and generate separate objects, libraries and executables for each
        mode.

        Removed deferred negation optimization (a * -b => -(a * b)) since
        this visibly changes operand conversion order.

        Improved parsing performance by introducing stack guard in
        preparsing.  Without a stack guard preparsing always bails out
        with stack overflow.

        Changed shell sample to take flags directly from the command-line.
        Added API call that implements this.

        Added load, quit and version functions to the shell sample so it's
        easier to run benchmarks and tests.

        Fixed issue with building samples and cctests on 64-bit machines.

        Fixed bug in the runtime system where the prototype chain was not
        always searched for a setter when setting a property that does not
        exist locally.


2008-08-14: Version 0.2.3

        Improved performance of garbage collection by moving the
        function that updates pointers during compacting collection
        into the updating visitor.  This gives the compiler a better
        chance to inline and avoid a function call per (potential)
        pointer.

        Extended the shell sample with a --runtime-flags option.

        Added Visual Studio project files for the shell.cc and
        process.cc samples.


2008-08-13: Version 0.2.2

        Improved performance of garbage collection by changing the way
        we use the marking stack in the event of stack overflow during
        full garbage collection and by changing the way we mark roots.

        Cleaned up ARM version by removing top of stack caching and by
        introducing push/pop elimination.

        Cleaned up the way runtime functions are called to allow
        runtime calls with no arguments.

        Changed Windows build options to make sure that exceptions are
        disabled and that optimization flags are enabled.

        Added first version of Visual Studio project files.


2008-08-06: Version 0.2.1

        Improved performance of unary addition by avoiding runtime calls.

        Fixed the handling of '>' and '<=' to use right-to-left conversion
        and left-to-right evaluation as specified by ECMA-262.

        Fixed a branch elimination bug on the ARM platform where incorrect
        code was generated because of overly aggressive branch
        elimination.

        Improved performance of code that repeatedly assigns the same
        function to the same property of different objects with the same
        map.

        Untangled DEBUG and ENABLE_DISASSEMBLER defines.  The disassembler
        no longer expects DEBUG to be defined.

        Added platform-nullos.cc to serve as the basis for new platform
        implementations.


2008-07-30: Version 0.2.0

        Changed all text files to have native svn:eol-style.

        Added a few samples and support for building them. The samples
        include a simple shell that can be used to benchmark and test V8.

        Changed V8::GetVersion to return the version as a string.

        Added source for lazily loaded scripts to snapshots and made
        serialization non-destructive.

        Improved ARM support by fixing the write barrier code to use
        aligned loads and stores and by removing premature locals
        optimization that relied on broken support for callee-saved
        registers (removed).

        Refactored the code for marking live objects during garbage
        collection and the code for allocating objects in paged
        spaces. Introduced an abstraction for the map word of a heap-
        allocated object and changed the memory allocator to allocate
        executable memory only for spaces that may contain code objects.

        Moved StringBuilder to utils.h and ScopedLock to platform.h, where
        they can be used by debugging and logging modules. Added
        thread-safe message queues for dealing with debugger events.

        Fixed the source code reported by toString for certain builtin
        empty functions and made sure that the prototype property of a
        function is enumerable.

        Improved performance of converting values to condition flags in
        generated code.

        Merged disassembler-{arch} files.


2008-07-28: Version 0.1.4

        Added support for storing JavaScript stack traces in a stack
        allocated buffer to make it visible in shallow core dumps.
        Controlled by the --preallocate-message-memory flag which is
        disabled by default.


2008-07-25: Version 0.1.3

        Fixed bug in JSObject::GetPropertyAttributePostInterceptor where
        map transitions would count as properties.

        Allowed aliased eval invocations by treating them as evals in the
        global context. This may change in the future.

        Added support for accessing the last entered context through the
        API and renamed Context::Current to Context::GetCurrent and
        Context::GetSecurityContext to Context::GetCurrentSecurityContext.

        Fixed bug in the debugger that would cause the debugger scripts to
        be recursively loaded and changed all disabling of interrupts to
        be block-structured.

        Made snapshot data read-only to allow it to be more easily shared
        across multiple users of V8 when linked as a shared library.


2008-07-16: Version 0.1.2

        Fixed building on Mac OS X by recognizing i386 and friends as
        IA-32 platforms.

        Added propagation of stack overflow exceptions that occur while
        compiling nested functions.

        Improved debugger with support for recursive break points and
        handling of exceptions that occur in the debugger JavaScript code.

        Renamed GetInternal to GetInternalField and SetInternal to
        SetInternalField in the API and moved InternalFieldCount and
        SetInternalFieldCount from FunctionTemplate to ObjectTemplate.


2008-07-09: Version 0.1.1

        Fixed bug in stack overflow check code for IA-32 targets where a
        non-tagged value in register eax was pushed to the stack.

        Fixed potential quadratic behavior when converting strings to
        numbers.

        Fixed bug where the return value from Object::SetProperty could
        end up being the property holder instead of the written value.

        Improved debugger support by allowing nested break points and by
        dealing with stack-overflows when compiling functions before
        setting break points in them.


2008-07-03: Version 0.1.0

        Initial export.

# Local Variables:
# mode:text
# End:
