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:
