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


git-svn-id: http://v8.googlecode.com/svn/trunk@911 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
diff --git a/SConstruct b/SConstruct
index 9dd9268..0f73dac 100644
--- a/SConstruct
+++ b/SConstruct
@@ -54,6 +54,9 @@
     'mode:release': {
       'CCFLAGS':      ['-O3', '-fomit-frame-pointer']
     },
+    'os:freebsd': {
+      'LIBS':         ['execinfo']
+    },
     'wordsize:64': {
       'CCFLAGS':      ['-m32'],
       'LINKFLAGS':    ['-m32']
@@ -71,15 +74,27 @@
       'CCPDBFLAGS':   ['/Zi']
     },
     'mode:debug': {
-      'CCFLAGS':      ['/Od', '/Gm', '/MTd'],
+      'CCFLAGS':      ['/Od', '/Gm'],
       'CPPDEFINES':   ['_DEBUG', 'ENABLE_DISASSEMBLER', 'DEBUG'],
-      'LINKFLAGS':    ['/DEBUG']
+      'LINKFLAGS':    ['/DEBUG'],
+      'msvcrt:static': {
+        'CCFLAGS': ['/MTd']
+      },
+      'msvcrt:shared': {
+        'CCFLAGS': ['/MDd']
+      }
     },
     'mode:release': {
-      'CCFLAGS':      ['/O2', '/MT', '/GL'],
+      'CCFLAGS':      ['/O2', '/GL'],
       'LINKFLAGS':    ['/OPT:REF', '/OPT:ICF', '/LTCG'],
-      'ARFLAGS':      ['/LTCG']
-    }
+      'ARFLAGS':      ['/LTCG'],
+      'msvcrt:static': {
+        'CCFLAGS': ['/MT']
+      },
+      'msvcrt:shared': {
+        'CCFLAGS': ['/MD']
+      }
+    },
   }
 }
 
@@ -186,6 +201,9 @@
       'LIBS': ['pthread'],
       'LIBPATH': ['.']
     },
+    'os:freebsd': {
+      'LIBS':         ['execinfo']
+    },
     'wordsize:64': {
       'CCFLAGS':      ['-m32'],
       'LINKFLAGS':    ['-m32']
@@ -209,12 +227,24 @@
       'LINKFLAGS': ['/MAP']
     },
     'mode:release': {
-      'CCFLAGS':   ['/O2', '/MT'],
-      'LINKFLAGS': ['/OPT:REF', '/OPT:ICF', '/LTCG']
+      'CCFLAGS':   ['/O2'],
+      'LINKFLAGS': ['/OPT:REF', '/OPT:ICF', '/LTCG'],
+      'msvcrt:static': {
+        'CCFLAGS': ['/MT']
+      },
+      'msvcrt:shared': {
+        'CCFLAGS': ['/MD']
+      }
     },
     'mode:debug': {
-      'CCFLAGS':   ['/Od', '/MTd'],
-      'LINKFLAGS': ['/DEBUG']
+      'CCFLAGS':   ['/Od'],
+      'LINKFLAGS': ['/DEBUG'],
+      'msvcrt:static': {
+        'CCFLAGS': ['/MTd']
+      },
+      'msvcrt:shared': {
+        'CCFLAGS': ['/MDd']
+      }
     }
   }
 }
@@ -226,7 +256,6 @@
       'LIBS': ['readline']
     }
   },
-  'msvc': { }
 }
 
 
@@ -264,7 +293,7 @@
     'help': 'the toolchain to use'
   },
   'os': {
-    'values': ['linux', 'macos', 'win32'],
+    'values': ['freebsd', 'linux', 'macos', 'win32'],
     'default': OS_GUESS,
     'help': 'the os to build for'
   },
@@ -288,6 +317,11 @@
     'default': 'static',
     'help': 'the type of library to produce'
   },
+  'msvcrt': {
+    'values': ['static', 'shared'],
+    'default': 'static',
+    'help': 'the type of MSVCRT library to use'
+  },
   'wordsize': {
     'values': ['64', '32'],
     'default': WORDSIZE_GUESS,
@@ -375,11 +409,18 @@
     result = initial.copy()
     self.AppendFlags(result, flags.get('all'))
     toolchain = self.options['toolchain']
-    self.AppendFlags(result, flags[toolchain].get('all'))
+    if toolchain in flags:
+      self.AppendFlags(result, flags[toolchain].get('all'))
+      for option in sorted(self.options.keys()):
+        value = self.options[option]
+        self.AppendFlags(result, flags[toolchain].get(option + ':' + value))
+    return result
+
+  def AddRelevantSubFlags(self, options, flags):
+    self.AppendFlags(options, flags.get('all'))
     for option in sorted(self.options.keys()):
       value = self.options[option]
-      self.AppendFlags(result, flags[toolchain].get(option + ':' + value))
-    return result
+      self.AppendFlags(options, flags.get(option + ':' + value))
 
   def GetRelevantSources(self, source):
     result = []
@@ -392,12 +433,15 @@
     if not added:
       return
     for (key, value) in added.iteritems():
-      if not key in options:
-        options[key] = value
+      if key.find(':') != -1:
+        self.AddRelevantSubFlags(options, { key: value })
       else:
-        prefix = options[key]
-        if isinstance(prefix, StringTypes): prefix = prefix.split()
-        options[key] = prefix + value
+        if not key in options:
+          options[key] = value
+        else:
+          prefix = options[key]
+          if isinstance(prefix, StringTypes): prefix = prefix.split()
+          options[key] = prefix + value
 
   def ConfigureObject(self, env, input, **kw):
     if self.options['library'] == 'static':
@@ -541,7 +585,7 @@
   env.Alias('cctests', cctests)
   env.Alias('sample', samples)
   env.Alias('d8', d8s)
-  
+
   if env['sample']:
     env.Default('sample')
   else: