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:
