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

        Fix issue 417: incorrect %t placeholder expansion.

        Add .gitignore file similar to Chromium's one.

        Fix 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.

        Add api call to determine whether a string can be externalized.

        Add 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.

        Fix 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.

