| Index: src/globals.h
 | 
| diff --git a/src/globals.h b/src/globals.h
 | 
| index 26fd53114c62d582501e5d37c2c7791cb60cd99b..851fa47e16fe2c6cf8b7fc417494cf5f0d7d99d0 100644
 | 
| --- a/src/globals.h
 | 
| +++ b/src/globals.h
 | 
| @@ -28,46 +28,120 @@
 | 
|  #ifndef V8_GLOBALS_H_
 | 
|  #define V8_GLOBALS_H_
 | 
|  
 | 
| -// Define V8_INFINITY
 | 
| -#define V8_INFINITY INFINITY
 | 
| +// ----------------------------------------------------------------------------
 | 
| +// Operating system detection (V8_OS_x)
 | 
| +//
 | 
| +//  ANDROID - Android
 | 
| +//  BSD4    - Any BSD 4.4 system
 | 
| +//  CYGWIN  - Cygwin
 | 
| +//  DARWIN  - Darwin / Mac OS X
 | 
| +//  FREEBSD - FreeBSD
 | 
| +//  LINUX   - Linux
 | 
| +//  NACL    - Native Client
 | 
| +//  NETBSD  - NetBSD
 | 
| +//  OPENBSD - OpenBSD
 | 
| +//  SOLARIS - Solaris
 | 
| +//  UNIX    - Any UNIX BSD/SYSV system
 | 
| +//  WIN32   - Win32 (Windows 2000/XP/Vista/7 and Windows Server 2003/2008)
 | 
| +
 | 
| +#if defined(ANDROID) || defined(__ANDROID__)
 | 
| +# define V8_OS_ANDROID 1
 | 
| +# define V8_OS_LINUX 1
 | 
| +# define V8_OS_UNIX 1
 | 
| +#elif defined(__APPLE__) && defined(__MACH__)
 | 
| +# define V8_OS_DARWIN 1
 | 
| +# define V8_OS_BSD4 1
 | 
| +# define V8_OS_UNIX 1
 | 
| +#elif defined(__CYGWIN__)
 | 
| +# define V8_OS_CYGWIN 1
 | 
| +# define V8_OS_UNIX 1
 | 
| +#elif defined(WIN64) || defined(_WIN64) || defined(__WIN64__)
 | 
| +# define V8_OS_WIN32 1
 | 
| +# define V8_OS_WIN64 1
 | 
| +#elif defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || \
 | 
| +    (defined(__MWERKS__) && defined(__INTEL__))
 | 
| +# define V8_OS_WIN32 1
 | 
| +#elif defined(__sun) || defined(sun)
 | 
| +# define V8_OS_SOLARIS 1
 | 
| +# define V8_OS_UNIX 1
 | 
| +#elif defined(__native_client__)
 | 
| +# define V8_OS_NACL 1
 | 
| +#elif defined(__linux__) || defined(__linux)
 | 
| +# define V8_OS_LINUX 1
 | 
| +# define V8_OS_UNIX 1
 | 
| +#elif defined(__FreeBSD__) || defined(__DragonFly__)
 | 
| +# define V8_OS_FREEBSD 1
 | 
| +# define V8_OS_BSD4 1
 | 
| +# define V8_OS_UNIX 1
 | 
| +#elif defined(__NetBSD__)
 | 
| +# define V8_OS_NETBSD 1
 | 
| +# define V8_OS_BSD4 1
 | 
| +# define V8_OS_UNIX 1
 | 
| +#elif defined(__OpenBSD__)
 | 
| +# define V8_OS_OPENBSD 1
 | 
| +# define V8_OS_BSD4 1
 | 
| +# define V8_OS_UNIX 1
 | 
| +#else
 | 
| +# error Operating system was not detected as supported by v8
 | 
| +#endif
 | 
|  
 | 
| -// GCC specific stuff
 | 
| -#ifdef __GNUC__
 | 
|  
 | 
| -#define __GNUC_VERSION_FOR_INFTY__ (__GNUC__ * 10000 + __GNUC_MINOR__ * 100)
 | 
| +// ----------------------------------------------------------------------------
 | 
| +// Compiler detection (V8_CC_x)
 | 
| +//
 | 
| +//  CLANG - C++ front-end for the LLVM compiler
 | 
| +//  GNU   - GNU C++ or compatible
 | 
| +//  INTEL - Intel C++ for Linux or Windows
 | 
| +//  MINGW - Minimalistic GNU for Windows Compiler
 | 
| +//  MIPS  - MIPSpro C++
 | 
| +//  MSVC  - Microsoft Visual C/C++ or compatible
 | 
| +//  RVCT  - ARM Realview Compiler Suite
 | 
|  
 | 
| -// Unfortunately, the INFINITY macro cannot be used with the '-pedantic'
 | 
| -// warning flag and certain versions of GCC due to a bug:
 | 
| -// http://gcc.gnu.org/bugzilla/show_bug.cgi?id=11931
 | 
| -// For now, we use the more involved template-based version from <limits>, but
 | 
| -// only when compiling with GCC versions affected by the bug (2.96.x - 4.0.x)
 | 
| -// __GNUC_PREREQ is not defined in GCC for Mac OS X, so we define our own macro
 | 
| -#if __GNUC_VERSION_FOR_INFTY__ >= 29600 && __GNUC_VERSION_FOR_INFTY__ < 40100
 | 
| -#include <limits>
 | 
| -#undef V8_INFINITY
 | 
| -#define V8_INFINITY std::numeric_limits<double>::infinity()
 | 
| +#if defined(_MSC_VER)
 | 
| +# define V8_CC_MSVC 1
 | 
| +# if defined(__INTEL_COMPILER)
 | 
| +#  define V8_CC_INTEL 1
 | 
| +# endif
 | 
| +#elif defined(__GNUC__)
 | 
| +# define V8_CC_GNU 1
 | 
| +# define V8_GNUC_PREREQ(major, minor) \
 | 
| +    ((major) > __GNUC__ || ((major) == __GNUC__ && (minor) >= __GNUC_MINOR__))
 | 
| +# if defined(__MINGW64__)
 | 
| +#  define V8_CC_MINGW 1
 | 
| +#  define V8_CC_MINGW64 1
 | 
| +# elif defined(__MINGW32__)
 | 
| +#  define V8_CC_MINGW 1
 | 
| +#  define V8_CC_MINGW32 1
 | 
| +# elif defined(__ARMCC__) || defined(__CC_ARM)
 | 
| +#  define V8_CC_RVCT 1  // ARM Realview Compiler Suite also masquerades as GCC
 | 
| +# elif defined(__INTEL_COMPILER)
 | 
| +#  define V8_CC_INTEL 1  // Intel C++ also masquerades as GCC 3.2.0
 | 
| +# elif defined(__clang__)
 | 
| +#  define V8_CC_CLANG 1  // Clang also masquerades as GCC 4.2.1
 | 
| +# endif
 | 
| +#elif defined(__ARMCC__) || defined(__CC_ARM)
 | 
| +# define V8_CC_RVCT 1
 | 
| +#elif defined(__INTEL_COMPILER)
 | 
| +# define V8_CC_INTEL 1
 | 
| +#elif defined(__SUNPRO_CC) || defined(__SUNPRO_C)
 | 
| +# define V8_CC_SUN 1
 | 
| +#else
 | 
| +# error Compiler was not detected as supported by v8
 | 
|  #endif
 | 
| -#undef __GNUC_VERSION_FOR_INFTY__
 | 
|  
 | 
| -#endif  // __GNUC__
 | 
| -
 | 
| -#ifdef _MSC_VER
 | 
| -#undef V8_INFINITY
 | 
| -#define V8_INFINITY HUGE_VAL
 | 
| +#ifndef V8_GNUC_PREREQ
 | 
| +#define V8_GNUC_PREREQ(major, minor) 0
 | 
|  #endif
 | 
|  
 | 
|  
 | 
| -#include "../include/v8stdint.h"
 | 
| -
 | 
| -namespace v8 {
 | 
| -namespace internal {
 | 
| -
 | 
| +// ----------------------------------------------------------------------------
 | 
|  // Processor architecture detection.  For more info on what's defined, see:
 | 
|  //   http://msdn.microsoft.com/en-us/library/b0084kay.aspx
 | 
|  //   http://www.agner.org/optimize/calling_conventions.pdf
 | 
|  //   or with gcc, run: "echo | gcc -E -dM -"
 | 
| +
 | 
|  #if defined(_M_X64) || defined(__x86_64__)
 | 
| -#if defined(__native_client__)
 | 
| +#if V8_OS_NACL
 | 
|  // For Native Client builds of V8, use V8_TARGET_ARCH_ARM, so that V8
 | 
|  // generates ARM machine code, together with a portable ARM simulator
 | 
|  // compiled for the host architecture in question.
 | 
| @@ -81,7 +155,7 @@ namespace internal {
 | 
|  #define V8_HOST_ARCH_X64 1
 | 
|  #define V8_HOST_ARCH_64_BIT 1
 | 
|  #define V8_HOST_CAN_READ_UNALIGNED 1
 | 
| -#endif  // __native_client__
 | 
| +#endif  // V8_OS_NACL
 | 
|  #elif defined(_M_IX86) || defined(__i386__)
 | 
|  #define V8_HOST_ARCH_IA32 1
 | 
|  #define V8_HOST_ARCH_32_BIT 1
 | 
| @@ -101,7 +175,7 @@ namespace internal {
 | 
|      defined(__ARM_ARCH_7__)
 | 
|  # define CAN_USE_ARMV7_INSTRUCTIONS 1
 | 
|  # ifndef CAN_USE_VFP3_INSTRUCTIONS
 | 
| -#  define CAN_USE_VFP3_INSTRUCTIONS
 | 
| +#  define CAN_USE_VFP3_INSTRUCTIONS 1
 | 
|  # endif
 | 
|  #endif
 | 
|  
 | 
| @@ -111,13 +185,13 @@ namespace internal {
 | 
|  // environment as presented by the compiler.
 | 
|  #if !V8_TARGET_ARCH_X64 && !V8_TARGET_ARCH_IA32 && \
 | 
|      !V8_TARGET_ARCH_ARM && !V8_TARGET_ARCH_MIPS
 | 
| -#if defined(_M_X64) || defined(__x86_64__)
 | 
| +#if V8_HOST_ARCH_X64
 | 
|  #define V8_TARGET_ARCH_X64 1
 | 
| -#elif defined(_M_IX86) || defined(__i386__)
 | 
| +#elif V8_HOST_ARCH_IA32
 | 
|  #define V8_TARGET_ARCH_IA32 1
 | 
| -#elif defined(__ARMEL__)
 | 
| +#elif V8_HOST_ARCH_ARM
 | 
|  #define V8_TARGET_ARCH_ARM 1
 | 
| -#elif defined(__MIPSEL__)
 | 
| +#elif V8_HOST_ARCH_MIPS
 | 
|  #define V8_TARGET_ARCH_MIPS 1
 | 
|  #else
 | 
|  #error Target architecture was not detected as supported by v8
 | 
| @@ -163,6 +237,27 @@ namespace internal {
 | 
|  #error Unknown target architecture endiannes
 | 
|  #endif
 | 
|  
 | 
| +// Define V8_INFINITY
 | 
| +#if V8_CC_GNU && V8_GNUC_PREREQ(2, 96) && !V8_GNUC_PREREQ(4, 1)
 | 
| +// Unfortunately, the INFINITY macro cannot be used with the '-pedantic'
 | 
| +// warning flag and certain versions of GCC due to a bug:
 | 
| +// http://gcc.gnu.org/bugzilla/show_bug.cgi?id=11931
 | 
| +// For now, we use the more involved template-based version from <limits>, but
 | 
| +// only when compiling with GCC versions affected by the bug (2.96.x - 4.0.x)
 | 
| +#include <limits>
 | 
| +#define V8_INFINITY std::numeric_limits<double>::infinity()
 | 
| +#elif V8_CC_MSVC
 | 
| +#define V8_INFINITY HUGE_VAL
 | 
| +#else
 | 
| +#define V8_INFINITY INFINITY
 | 
| +#endif
 | 
| +
 | 
| +
 | 
| +#include "../include/v8stdint.h"
 | 
| +
 | 
| +namespace v8 {
 | 
| +namespace internal {
 | 
| +
 | 
|  // Support for alternative bool type. This is only enabled if the code is
 | 
|  // compiled with USE_MYBOOL defined. This catches some nasty type bugs.
 | 
|  // For instance, 'bool b = "false";' results in b == true! This is a hidden
 | 
| @@ -187,12 +282,12 @@ typedef byte* Address;
 | 
|  // than defining __STDC_CONSTANT_MACROS before including <stdint.h>, and it
 | 
|  // works on compilers that don't have it (like MSVC).
 | 
|  #if V8_HOST_ARCH_64_BIT
 | 
| -#if defined(_MSC_VER)
 | 
| +#if V8_CC_MSVC
 | 
|  #define V8_UINT64_C(x)  (x ## UI64)
 | 
|  #define V8_INT64_C(x)   (x ## I64)
 | 
|  #define V8_INTPTR_C(x)  (x ## I64)
 | 
|  #define V8_PTR_PREFIX "ll"
 | 
| -#elif defined(__MINGW64__)
 | 
| +#elif V8_CC_MINGW64
 | 
|  #define V8_UINT64_C(x)  (x ## ULL)
 | 
|  #define V8_INT64_C(x)   (x ## LL)
 | 
|  #define V8_INTPTR_C(x)  (x ## LL)
 | 
| @@ -218,16 +313,11 @@ typedef byte* Address;
 | 
|  #define V8PRIuPTR V8_PTR_PREFIX "u"
 | 
|  
 | 
|  // Fix for Mac OS X defining uintptr_t as "unsigned long":
 | 
| -#if defined(__APPLE__) && defined(__MACH__)
 | 
| +#if V8_OS_DARWIN
 | 
|  #undef V8PRIxPTR
 | 
|  #define V8PRIxPTR "lx"
 | 
|  #endif
 | 
|  
 | 
| -#if (defined(__APPLE__) && defined(__MACH__)) || \
 | 
| -    defined(__FreeBSD__) || defined(__OpenBSD__)
 | 
| -#define USING_BSD_ABI
 | 
| -#endif
 | 
| -
 | 
|  // -----------------------------------------------------------------------------
 | 
|  // Constants
 | 
|  
 | 
| @@ -358,15 +448,15 @@ F FUNCTION_CAST(Address addr) {
 | 
|  // Define used for helping GCC to make better inlining. Don't bother for debug
 | 
|  // builds. On GCC 3.4.5 using __attribute__((always_inline)) causes compilation
 | 
|  // errors in debug build.
 | 
| -#if defined(__GNUC__) && !defined(DEBUG)
 | 
| -#if (__GNUC__ >= 4)
 | 
| +#if V8_CC_GNU && !defined(DEBUG)
 | 
| +#if V8_GNUC_PREREQ(4, 0)
 | 
|  #define INLINE(header) inline header  __attribute__((always_inline))
 | 
|  #define NO_INLINE(header) header __attribute__((noinline))
 | 
|  #else
 | 
|  #define INLINE(header) inline __attribute__((always_inline)) header
 | 
|  #define NO_INLINE(header) __attribute__((noinline)) header
 | 
|  #endif
 | 
| -#elif defined(_MSC_VER) && !defined(DEBUG)
 | 
| +#elif V8_CC_MSVC && !defined(DEBUG)
 | 
|  #define INLINE(header) __forceinline header
 | 
|  #define NO_INLINE(header) header
 | 
|  #else
 | 
| @@ -375,7 +465,7 @@ F FUNCTION_CAST(Address addr) {
 | 
|  #endif
 | 
|  
 | 
|  
 | 
| -#if defined(__GNUC__) && __GNUC__ >= 4
 | 
| +#if V8_GNUC_PREREQ(4, 0)
 | 
|  #define MUST_USE_RESULT __attribute__ ((warn_unused_result))
 | 
|  #else
 | 
|  #define MUST_USE_RESULT
 | 
| 
 |