libv8 3.3.10.4 → 3.5.10.beta1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (538) hide show
  1. data/lib/libv8/scons/CHANGES.txt +24 -231
  2. data/lib/libv8/scons/LICENSE.txt +1 -1
  3. data/lib/libv8/scons/MANIFEST +0 -1
  4. data/lib/libv8/scons/PKG-INFO +1 -1
  5. data/lib/libv8/scons/README.txt +9 -9
  6. data/lib/libv8/scons/RELEASE.txt +75 -77
  7. data/lib/libv8/scons/engine/SCons/Action.py +6 -22
  8. data/lib/libv8/scons/engine/SCons/Builder.py +2 -2
  9. data/lib/libv8/scons/engine/SCons/CacheDir.py +2 -2
  10. data/lib/libv8/scons/engine/SCons/Debug.py +2 -2
  11. data/lib/libv8/scons/engine/SCons/Defaults.py +10 -24
  12. data/lib/libv8/scons/engine/SCons/Environment.py +19 -118
  13. data/lib/libv8/scons/engine/SCons/Errors.py +2 -2
  14. data/lib/libv8/scons/engine/SCons/Executor.py +2 -2
  15. data/lib/libv8/scons/engine/SCons/Job.py +2 -2
  16. data/lib/libv8/scons/engine/SCons/Memoize.py +2 -2
  17. data/lib/libv8/scons/engine/SCons/Node/Alias.py +2 -2
  18. data/lib/libv8/scons/engine/SCons/Node/FS.py +121 -281
  19. data/lib/libv8/scons/engine/SCons/Node/Python.py +2 -2
  20. data/lib/libv8/scons/engine/SCons/Node/__init__.py +5 -6
  21. data/lib/libv8/scons/engine/SCons/Options/BoolOption.py +2 -2
  22. data/lib/libv8/scons/engine/SCons/Options/EnumOption.py +2 -2
  23. data/lib/libv8/scons/engine/SCons/Options/ListOption.py +2 -2
  24. data/lib/libv8/scons/engine/SCons/Options/PackageOption.py +2 -2
  25. data/lib/libv8/scons/engine/SCons/Options/PathOption.py +2 -2
  26. data/lib/libv8/scons/engine/SCons/Options/__init__.py +2 -2
  27. data/lib/libv8/scons/engine/SCons/PathList.py +2 -2
  28. data/lib/libv8/scons/engine/SCons/Platform/__init__.py +2 -2
  29. data/lib/libv8/scons/engine/SCons/Platform/aix.py +2 -2
  30. data/lib/libv8/scons/engine/SCons/Platform/cygwin.py +2 -2
  31. data/lib/libv8/scons/engine/SCons/Platform/darwin.py +3 -27
  32. data/lib/libv8/scons/engine/SCons/Platform/hpux.py +2 -2
  33. data/lib/libv8/scons/engine/SCons/Platform/irix.py +2 -2
  34. data/lib/libv8/scons/engine/SCons/Platform/os2.py +2 -2
  35. data/lib/libv8/scons/engine/SCons/Platform/posix.py +2 -2
  36. data/lib/libv8/scons/engine/SCons/Platform/sunos.py +2 -2
  37. data/lib/libv8/scons/engine/SCons/Platform/win32.py +2 -2
  38. data/lib/libv8/scons/engine/SCons/SConf.py +2 -2
  39. data/lib/libv8/scons/engine/SCons/SConsign.py +3 -9
  40. data/lib/libv8/scons/engine/SCons/Scanner/C.py +2 -2
  41. data/lib/libv8/scons/engine/SCons/Scanner/D.py +2 -2
  42. data/lib/libv8/scons/engine/SCons/Scanner/Dir.py +2 -2
  43. data/lib/libv8/scons/engine/SCons/Scanner/Fortran.py +2 -2
  44. data/lib/libv8/scons/engine/SCons/Scanner/IDL.py +2 -2
  45. data/lib/libv8/scons/engine/SCons/Scanner/LaTeX.py +2 -5
  46. data/lib/libv8/scons/engine/SCons/Scanner/Prog.py +2 -2
  47. data/lib/libv8/scons/engine/SCons/Scanner/RC.py +3 -3
  48. data/lib/libv8/scons/engine/SCons/Scanner/__init__.py +2 -2
  49. data/lib/libv8/scons/engine/SCons/Script/Interactive.py +2 -2
  50. data/lib/libv8/scons/engine/SCons/Script/Main.py +11 -82
  51. data/lib/libv8/scons/engine/SCons/Script/SConsOptions.py +5 -5
  52. data/lib/libv8/scons/engine/SCons/Script/SConscript.py +2 -2
  53. data/lib/libv8/scons/engine/SCons/Script/__init__.py +2 -2
  54. data/lib/libv8/scons/engine/SCons/Sig.py +2 -2
  55. data/lib/libv8/scons/engine/SCons/Subst.py +2 -2
  56. data/lib/libv8/scons/engine/SCons/Taskmaster.py +2 -10
  57. data/lib/libv8/scons/engine/SCons/Tool/386asm.py +2 -2
  58. data/lib/libv8/scons/engine/SCons/Tool/BitKeeper.py +2 -2
  59. data/lib/libv8/scons/engine/SCons/Tool/CVS.py +2 -2
  60. data/lib/libv8/scons/engine/SCons/Tool/FortranCommon.py +2 -19
  61. data/lib/libv8/scons/engine/SCons/Tool/JavaCommon.py +2 -2
  62. data/lib/libv8/scons/engine/SCons/Tool/MSCommon/__init__.py +2 -2
  63. data/lib/libv8/scons/engine/SCons/Tool/MSCommon/arch.py +2 -2
  64. data/lib/libv8/scons/engine/SCons/Tool/MSCommon/common.py +2 -2
  65. data/lib/libv8/scons/engine/SCons/Tool/MSCommon/netframework.py +2 -2
  66. data/lib/libv8/scons/engine/SCons/Tool/MSCommon/sdk.py +2 -2
  67. data/lib/libv8/scons/engine/SCons/Tool/MSCommon/vc.py +6 -9
  68. data/lib/libv8/scons/engine/SCons/Tool/MSCommon/vs.py +2 -29
  69. data/lib/libv8/scons/engine/SCons/Tool/Perforce.py +2 -2
  70. data/lib/libv8/scons/engine/SCons/Tool/PharLapCommon.py +2 -2
  71. data/lib/libv8/scons/engine/SCons/Tool/RCS.py +2 -2
  72. data/lib/libv8/scons/engine/SCons/Tool/SCCS.py +2 -2
  73. data/lib/libv8/scons/engine/SCons/Tool/Subversion.py +2 -2
  74. data/lib/libv8/scons/engine/SCons/Tool/__init__.py +3 -3
  75. data/lib/libv8/scons/engine/SCons/Tool/aixc++.py +2 -2
  76. data/lib/libv8/scons/engine/SCons/Tool/aixcc.py +2 -2
  77. data/lib/libv8/scons/engine/SCons/Tool/aixf77.py +2 -2
  78. data/lib/libv8/scons/engine/SCons/Tool/aixlink.py +2 -2
  79. data/lib/libv8/scons/engine/SCons/Tool/applelink.py +2 -2
  80. data/lib/libv8/scons/engine/SCons/Tool/ar.py +2 -2
  81. data/lib/libv8/scons/engine/SCons/Tool/as.py +2 -2
  82. data/lib/libv8/scons/engine/SCons/Tool/bcc32.py +2 -2
  83. data/lib/libv8/scons/engine/SCons/Tool/c++.py +2 -2
  84. data/lib/libv8/scons/engine/SCons/Tool/cc.py +2 -2
  85. data/lib/libv8/scons/engine/SCons/Tool/cvf.py +2 -2
  86. data/lib/libv8/scons/engine/SCons/Tool/default.py +2 -2
  87. data/lib/libv8/scons/engine/SCons/Tool/dmd.py +7 -24
  88. data/lib/libv8/scons/engine/SCons/Tool/dvi.py +2 -2
  89. data/lib/libv8/scons/engine/SCons/Tool/dvipdf.py +2 -3
  90. data/lib/libv8/scons/engine/SCons/Tool/dvips.py +2 -3
  91. data/lib/libv8/scons/engine/SCons/Tool/f77.py +2 -2
  92. data/lib/libv8/scons/engine/SCons/Tool/f90.py +2 -2
  93. data/lib/libv8/scons/engine/SCons/Tool/f95.py +2 -2
  94. data/lib/libv8/scons/engine/SCons/Tool/filesystem.py +2 -2
  95. data/lib/libv8/scons/engine/SCons/Tool/fortran.py +2 -2
  96. data/lib/libv8/scons/engine/SCons/Tool/g++.py +2 -2
  97. data/lib/libv8/scons/engine/SCons/Tool/g77.py +2 -2
  98. data/lib/libv8/scons/engine/SCons/Tool/gas.py +2 -2
  99. data/lib/libv8/scons/engine/SCons/Tool/gcc.py +2 -2
  100. data/lib/libv8/scons/engine/SCons/Tool/gfortran.py +3 -3
  101. data/lib/libv8/scons/engine/SCons/Tool/gnulink.py +3 -2
  102. data/lib/libv8/scons/engine/SCons/Tool/gs.py +2 -2
  103. data/lib/libv8/scons/engine/SCons/Tool/hpc++.py +2 -2
  104. data/lib/libv8/scons/engine/SCons/Tool/hpcc.py +2 -2
  105. data/lib/libv8/scons/engine/SCons/Tool/hplink.py +2 -2
  106. data/lib/libv8/scons/engine/SCons/Tool/icc.py +2 -2
  107. data/lib/libv8/scons/engine/SCons/Tool/icl.py +2 -2
  108. data/lib/libv8/scons/engine/SCons/Tool/ifl.py +2 -2
  109. data/lib/libv8/scons/engine/SCons/Tool/ifort.py +2 -2
  110. data/lib/libv8/scons/engine/SCons/Tool/ilink.py +2 -2
  111. data/lib/libv8/scons/engine/SCons/Tool/ilink32.py +2 -2
  112. data/lib/libv8/scons/engine/SCons/Tool/install.py +3 -57
  113. data/lib/libv8/scons/engine/SCons/Tool/intelc.py +25 -65
  114. data/lib/libv8/scons/engine/SCons/Tool/ipkg.py +2 -2
  115. data/lib/libv8/scons/engine/SCons/Tool/jar.py +3 -9
  116. data/lib/libv8/scons/engine/SCons/Tool/javac.py +2 -2
  117. data/lib/libv8/scons/engine/SCons/Tool/javah.py +2 -2
  118. data/lib/libv8/scons/engine/SCons/Tool/latex.py +2 -3
  119. data/lib/libv8/scons/engine/SCons/Tool/lex.py +2 -2
  120. data/lib/libv8/scons/engine/SCons/Tool/link.py +5 -6
  121. data/lib/libv8/scons/engine/SCons/Tool/linkloc.py +2 -2
  122. data/lib/libv8/scons/engine/SCons/Tool/m4.py +2 -2
  123. data/lib/libv8/scons/engine/SCons/Tool/masm.py +2 -2
  124. data/lib/libv8/scons/engine/SCons/Tool/midl.py +2 -2
  125. data/lib/libv8/scons/engine/SCons/Tool/mingw.py +10 -31
  126. data/lib/libv8/scons/engine/SCons/Tool/mslib.py +2 -2
  127. data/lib/libv8/scons/engine/SCons/Tool/mslink.py +9 -61
  128. data/lib/libv8/scons/engine/SCons/Tool/mssdk.py +2 -2
  129. data/lib/libv8/scons/engine/SCons/Tool/msvc.py +11 -21
  130. data/lib/libv8/scons/engine/SCons/Tool/msvs.py +59 -477
  131. data/lib/libv8/scons/engine/SCons/Tool/mwcc.py +2 -2
  132. data/lib/libv8/scons/engine/SCons/Tool/mwld.py +2 -2
  133. data/lib/libv8/scons/engine/SCons/Tool/nasm.py +2 -2
  134. data/lib/libv8/scons/engine/SCons/Tool/packaging/__init__.py +2 -2
  135. data/lib/libv8/scons/engine/SCons/Tool/packaging/ipk.py +2 -2
  136. data/lib/libv8/scons/engine/SCons/Tool/packaging/msi.py +2 -2
  137. data/lib/libv8/scons/engine/SCons/Tool/packaging/rpm.py +2 -2
  138. data/lib/libv8/scons/engine/SCons/Tool/packaging/src_tarbz2.py +2 -2
  139. data/lib/libv8/scons/engine/SCons/Tool/packaging/src_targz.py +2 -2
  140. data/lib/libv8/scons/engine/SCons/Tool/packaging/src_zip.py +2 -2
  141. data/lib/libv8/scons/engine/SCons/Tool/packaging/tarbz2.py +2 -2
  142. data/lib/libv8/scons/engine/SCons/Tool/packaging/targz.py +2 -2
  143. data/lib/libv8/scons/engine/SCons/Tool/packaging/zip.py +2 -2
  144. data/lib/libv8/scons/engine/SCons/Tool/pdf.py +2 -2
  145. data/lib/libv8/scons/engine/SCons/Tool/pdflatex.py +2 -3
  146. data/lib/libv8/scons/engine/SCons/Tool/pdftex.py +2 -3
  147. data/lib/libv8/scons/engine/SCons/Tool/qt.py +2 -2
  148. data/lib/libv8/scons/engine/SCons/Tool/rmic.py +3 -9
  149. data/lib/libv8/scons/engine/SCons/Tool/rpcgen.py +2 -2
  150. data/lib/libv8/scons/engine/SCons/Tool/rpm.py +2 -2
  151. data/lib/libv8/scons/engine/SCons/Tool/sgiar.py +2 -2
  152. data/lib/libv8/scons/engine/SCons/Tool/sgic++.py +2 -2
  153. data/lib/libv8/scons/engine/SCons/Tool/sgicc.py +2 -2
  154. data/lib/libv8/scons/engine/SCons/Tool/sgilink.py +3 -2
  155. data/lib/libv8/scons/engine/SCons/Tool/sunar.py +2 -2
  156. data/lib/libv8/scons/engine/SCons/Tool/sunc++.py +2 -2
  157. data/lib/libv8/scons/engine/SCons/Tool/suncc.py +2 -2
  158. data/lib/libv8/scons/engine/SCons/Tool/sunf77.py +2 -2
  159. data/lib/libv8/scons/engine/SCons/Tool/sunf90.py +2 -2
  160. data/lib/libv8/scons/engine/SCons/Tool/sunf95.py +2 -2
  161. data/lib/libv8/scons/engine/SCons/Tool/sunlink.py +3 -2
  162. data/lib/libv8/scons/engine/SCons/Tool/swig.py +5 -6
  163. data/lib/libv8/scons/engine/SCons/Tool/tar.py +2 -2
  164. data/lib/libv8/scons/engine/SCons/Tool/tex.py +43 -96
  165. data/lib/libv8/scons/engine/SCons/Tool/textfile.py +2 -2
  166. data/lib/libv8/scons/engine/SCons/Tool/tlib.py +2 -2
  167. data/lib/libv8/scons/engine/SCons/Tool/wix.py +2 -2
  168. data/lib/libv8/scons/engine/SCons/Tool/yacc.py +2 -12
  169. data/lib/libv8/scons/engine/SCons/Tool/zip.py +2 -2
  170. data/lib/libv8/scons/engine/SCons/Util.py +3 -3
  171. data/lib/libv8/scons/engine/SCons/Variables/BoolVariable.py +2 -2
  172. data/lib/libv8/scons/engine/SCons/Variables/EnumVariable.py +3 -3
  173. data/lib/libv8/scons/engine/SCons/Variables/ListVariable.py +2 -2
  174. data/lib/libv8/scons/engine/SCons/Variables/PackageVariable.py +2 -2
  175. data/lib/libv8/scons/engine/SCons/Variables/PathVariable.py +2 -2
  176. data/lib/libv8/scons/engine/SCons/Variables/__init__.py +2 -2
  177. data/lib/libv8/scons/engine/SCons/Warnings.py +2 -2
  178. data/lib/libv8/scons/engine/SCons/__init__.py +6 -6
  179. data/lib/libv8/scons/engine/SCons/compat/__init__.py +2 -2
  180. data/lib/libv8/scons/engine/SCons/compat/_scons_builtins.py +2 -2
  181. data/lib/libv8/scons/engine/SCons/compat/_scons_collections.py +2 -2
  182. data/lib/libv8/scons/engine/SCons/compat/_scons_dbm.py +2 -2
  183. data/lib/libv8/scons/engine/SCons/compat/_scons_hashlib.py +2 -2
  184. data/lib/libv8/scons/engine/SCons/compat/_scons_io.py +2 -2
  185. data/lib/libv8/scons/engine/SCons/cpp.py +2 -2
  186. data/lib/libv8/scons/engine/SCons/dblite.py +1 -4
  187. data/lib/libv8/scons/engine/SCons/exitfuncs.py +2 -2
  188. data/lib/libv8/scons/scons-time.1 +3 -3
  189. data/lib/libv8/scons/scons.1 +1164 -1170
  190. data/lib/libv8/scons/sconsign.1 +3 -3
  191. data/lib/libv8/scons/script/scons +22 -22
  192. data/lib/libv8/scons/script/scons-time +2 -2
  193. data/lib/libv8/scons/script/scons.bat +4 -7
  194. data/lib/libv8/scons/script/sconsign +20 -21
  195. data/lib/libv8/scons/setup.cfg +1 -0
  196. data/lib/libv8/scons/setup.py +40 -38
  197. data/lib/libv8/v8/.gitignore +1 -1
  198. data/lib/libv8/v8/AUTHORS +2 -0
  199. data/lib/libv8/v8/ChangeLog +387 -0
  200. data/lib/libv8/v8/Makefile +171 -0
  201. data/lib/libv8/v8/SConstruct +124 -51
  202. data/lib/libv8/v8/build/README.txt +31 -14
  203. data/lib/libv8/v8/build/all.gyp +11 -4
  204. data/lib/libv8/v8/build/armu.gypi +6 -2
  205. data/lib/libv8/v8/build/common.gypi +240 -94
  206. data/lib/libv8/v8/build/gyp_v8 +32 -4
  207. data/lib/libv8/v8/build/standalone.gypi +200 -0
  208. data/lib/libv8/v8/include/v8-debug.h +0 -0
  209. data/lib/libv8/v8/include/v8-profiler.h +8 -11
  210. data/lib/libv8/v8/include/v8.h +191 -108
  211. data/lib/libv8/v8/preparser/SConscript +2 -2
  212. data/lib/libv8/v8/preparser/preparser-process.cc +3 -3
  213. data/lib/libv8/v8/preparser/preparser.gyp +42 -0
  214. data/lib/libv8/v8/src/SConscript +33 -8
  215. data/lib/libv8/v8/src/accessors.cc +77 -43
  216. data/lib/libv8/v8/src/api.cc +393 -191
  217. data/lib/libv8/v8/src/api.h +4 -8
  218. data/lib/libv8/v8/src/apinatives.js +15 -3
  219. data/lib/libv8/v8/src/arguments.h +8 -0
  220. data/lib/libv8/v8/src/arm/assembler-arm.cc +120 -120
  221. data/lib/libv8/v8/src/arm/assembler-arm.h +92 -43
  222. data/lib/libv8/v8/src/arm/builtins-arm.cc +32 -39
  223. data/lib/libv8/v8/src/arm/code-stubs-arm.cc +572 -351
  224. data/lib/libv8/v8/src/arm/code-stubs-arm.h +8 -77
  225. data/lib/libv8/v8/src/arm/codegen-arm.h +0 -2
  226. data/lib/libv8/v8/src/arm/deoptimizer-arm.cc +50 -30
  227. data/lib/libv8/v8/src/arm/disasm-arm.cc +1 -1
  228. data/lib/libv8/v8/src/arm/frames-arm.h +9 -5
  229. data/lib/libv8/v8/src/arm/full-codegen-arm.cc +331 -432
  230. data/lib/libv8/v8/src/arm/ic-arm.cc +192 -124
  231. data/lib/libv8/v8/src/arm/lithium-arm.cc +216 -232
  232. data/lib/libv8/v8/src/arm/lithium-arm.h +106 -259
  233. data/lib/libv8/v8/src/arm/lithium-codegen-arm.cc +633 -642
  234. data/lib/libv8/v8/src/arm/lithium-codegen-arm.h +4 -4
  235. data/lib/libv8/v8/src/arm/lithium-gap-resolver-arm.cc +1 -3
  236. data/lib/libv8/v8/src/arm/macro-assembler-arm.cc +260 -185
  237. data/lib/libv8/v8/src/arm/macro-assembler-arm.h +45 -25
  238. data/lib/libv8/v8/src/arm/regexp-macro-assembler-arm.cc +25 -13
  239. data/lib/libv8/v8/src/arm/regexp-macro-assembler-arm.h +3 -0
  240. data/lib/libv8/v8/src/arm/stub-cache-arm.cc +413 -226
  241. data/lib/libv8/v8/src/array.js +38 -18
  242. data/lib/libv8/v8/src/assembler.cc +12 -5
  243. data/lib/libv8/v8/src/assembler.h +15 -9
  244. data/lib/libv8/v8/src/ast-inl.h +34 -25
  245. data/lib/libv8/v8/src/ast.cc +141 -72
  246. data/lib/libv8/v8/src/ast.h +255 -181
  247. data/lib/libv8/v8/src/bignum.cc +3 -4
  248. data/lib/libv8/v8/src/bootstrapper.cc +55 -11
  249. data/lib/libv8/v8/src/bootstrapper.h +3 -2
  250. data/lib/libv8/v8/src/builtins.cc +8 -2
  251. data/lib/libv8/v8/src/builtins.h +4 -0
  252. data/lib/libv8/v8/src/cached-powers.cc +8 -4
  253. data/lib/libv8/v8/src/checks.h +3 -3
  254. data/lib/libv8/v8/src/code-stubs.cc +173 -28
  255. data/lib/libv8/v8/src/code-stubs.h +104 -148
  256. data/lib/libv8/v8/src/codegen.cc +8 -8
  257. data/lib/libv8/v8/src/compilation-cache.cc +2 -47
  258. data/lib/libv8/v8/src/compilation-cache.h +0 -10
  259. data/lib/libv8/v8/src/compiler.cc +27 -16
  260. data/lib/libv8/v8/src/compiler.h +13 -18
  261. data/lib/libv8/v8/src/contexts.cc +107 -72
  262. data/lib/libv8/v8/src/contexts.h +70 -34
  263. data/lib/libv8/v8/src/conversions-inl.h +572 -14
  264. data/lib/libv8/v8/src/conversions.cc +9 -707
  265. data/lib/libv8/v8/src/conversions.h +23 -12
  266. data/lib/libv8/v8/src/cpu-profiler-inl.h +2 -19
  267. data/lib/libv8/v8/src/cpu-profiler.cc +4 -21
  268. data/lib/libv8/v8/src/cpu-profiler.h +8 -17
  269. data/lib/libv8/v8/src/d8-debug.cc +5 -3
  270. data/lib/libv8/v8/src/d8-debug.h +6 -7
  271. data/lib/libv8/v8/src/d8-posix.cc +1 -10
  272. data/lib/libv8/v8/src/d8.cc +721 -219
  273. data/lib/libv8/v8/src/d8.gyp +37 -12
  274. data/lib/libv8/v8/src/d8.h +141 -19
  275. data/lib/libv8/v8/src/d8.js +17 -8
  276. data/lib/libv8/v8/src/date.js +16 -5
  277. data/lib/libv8/v8/src/dateparser-inl.h +242 -39
  278. data/lib/libv8/v8/src/dateparser.cc +38 -4
  279. data/lib/libv8/v8/src/dateparser.h +170 -28
  280. data/lib/libv8/v8/src/debug-agent.cc +5 -3
  281. data/lib/libv8/v8/src/debug-agent.h +11 -7
  282. data/lib/libv8/v8/src/debug-debugger.js +65 -34
  283. data/lib/libv8/v8/src/debug.cc +30 -60
  284. data/lib/libv8/v8/src/debug.h +5 -3
  285. data/lib/libv8/v8/src/deoptimizer.cc +227 -10
  286. data/lib/libv8/v8/src/deoptimizer.h +133 -9
  287. data/lib/libv8/v8/src/disassembler.cc +22 -14
  288. data/lib/libv8/v8/src/diy-fp.cc +4 -3
  289. data/lib/libv8/v8/src/diy-fp.h +3 -3
  290. data/lib/libv8/v8/src/elements.cc +634 -0
  291. data/lib/libv8/v8/src/elements.h +95 -0
  292. data/lib/libv8/v8/src/execution.cc +5 -21
  293. data/lib/libv8/v8/src/extensions/experimental/break-iterator.cc +3 -1
  294. data/lib/libv8/v8/src/extensions/experimental/break-iterator.h +1 -1
  295. data/lib/libv8/v8/src/extensions/experimental/collator.cc +6 -2
  296. data/lib/libv8/v8/src/extensions/experimental/collator.h +1 -2
  297. data/lib/libv8/v8/src/extensions/experimental/datetime-format.cc +384 -0
  298. data/lib/libv8/v8/src/extensions/experimental/datetime-format.h +83 -0
  299. data/lib/libv8/v8/src/extensions/experimental/experimental.gyp +18 -7
  300. data/lib/libv8/v8/src/extensions/experimental/i18n-extension.cc +12 -16
  301. data/lib/libv8/v8/src/extensions/experimental/i18n-extension.h +1 -1
  302. data/lib/libv8/v8/src/extensions/experimental/i18n-js2c.py +126 -0
  303. data/lib/libv8/v8/src/extensions/experimental/i18n-locale.cc +3 -4
  304. data/lib/libv8/v8/src/extensions/experimental/i18n-locale.h +1 -1
  305. data/lib/libv8/v8/src/{shell.h → extensions/experimental/i18n-natives.h} +8 -20
  306. data/lib/libv8/v8/src/extensions/experimental/i18n-utils.cc +45 -1
  307. data/lib/libv8/v8/src/extensions/experimental/i18n-utils.h +21 -1
  308. data/lib/libv8/v8/src/extensions/experimental/i18n.js +211 -11
  309. data/lib/libv8/v8/src/extensions/experimental/language-matcher.cc +4 -3
  310. data/lib/libv8/v8/src/extensions/experimental/language-matcher.h +1 -1
  311. data/lib/libv8/v8/src/extensions/experimental/number-format.cc +374 -0
  312. data/lib/libv8/v8/src/extensions/experimental/number-format.h +71 -0
  313. data/lib/libv8/v8/src/factory.cc +89 -18
  314. data/lib/libv8/v8/src/factory.h +36 -8
  315. data/lib/libv8/v8/src/flag-definitions.h +11 -44
  316. data/lib/libv8/v8/src/frames-inl.h +8 -1
  317. data/lib/libv8/v8/src/frames.cc +39 -3
  318. data/lib/libv8/v8/src/frames.h +10 -3
  319. data/lib/libv8/v8/src/full-codegen.cc +311 -293
  320. data/lib/libv8/v8/src/full-codegen.h +183 -143
  321. data/lib/libv8/v8/src/func-name-inferrer.cc +29 -15
  322. data/lib/libv8/v8/src/func-name-inferrer.h +19 -9
  323. data/lib/libv8/v8/src/gdb-jit.cc +658 -55
  324. data/lib/libv8/v8/src/gdb-jit.h +6 -2
  325. data/lib/libv8/v8/src/global-handles.cc +368 -312
  326. data/lib/libv8/v8/src/global-handles.h +29 -36
  327. data/lib/libv8/v8/src/globals.h +3 -1
  328. data/lib/libv8/v8/src/handles.cc +43 -69
  329. data/lib/libv8/v8/src/handles.h +21 -16
  330. data/lib/libv8/v8/src/heap-inl.h +11 -13
  331. data/lib/libv8/v8/src/heap-profiler.cc +0 -999
  332. data/lib/libv8/v8/src/heap-profiler.h +0 -303
  333. data/lib/libv8/v8/src/heap.cc +366 -141
  334. data/lib/libv8/v8/src/heap.h +87 -26
  335. data/lib/libv8/v8/src/hydrogen-instructions.cc +192 -81
  336. data/lib/libv8/v8/src/hydrogen-instructions.h +711 -482
  337. data/lib/libv8/v8/src/hydrogen.cc +1146 -629
  338. data/lib/libv8/v8/src/hydrogen.h +100 -64
  339. data/lib/libv8/v8/src/ia32/assembler-ia32.cc +19 -0
  340. data/lib/libv8/v8/src/ia32/assembler-ia32.h +15 -2
  341. data/lib/libv8/v8/src/ia32/builtins-ia32.cc +34 -39
  342. data/lib/libv8/v8/src/ia32/code-stubs-ia32.cc +675 -377
  343. data/lib/libv8/v8/src/ia32/code-stubs-ia32.h +8 -69
  344. data/lib/libv8/v8/src/ia32/codegen-ia32.cc +1 -0
  345. data/lib/libv8/v8/src/ia32/codegen-ia32.h +0 -2
  346. data/lib/libv8/v8/src/ia32/cpu-ia32.cc +3 -2
  347. data/lib/libv8/v8/src/ia32/deoptimizer-ia32.cc +28 -3
  348. data/lib/libv8/v8/src/ia32/disasm-ia32.cc +21 -10
  349. data/lib/libv8/v8/src/ia32/frames-ia32.h +6 -5
  350. data/lib/libv8/v8/src/ia32/full-codegen-ia32.cc +459 -465
  351. data/lib/libv8/v8/src/ia32/ic-ia32.cc +196 -147
  352. data/lib/libv8/v8/src/ia32/lithium-codegen-ia32.cc +575 -650
  353. data/lib/libv8/v8/src/ia32/lithium-codegen-ia32.h +19 -21
  354. data/lib/libv8/v8/src/ia32/lithium-gap-resolver-ia32.cc +7 -2
  355. data/lib/libv8/v8/src/ia32/lithium-ia32.cc +261 -256
  356. data/lib/libv8/v8/src/ia32/lithium-ia32.h +234 -335
  357. data/lib/libv8/v8/src/ia32/macro-assembler-ia32.cc +224 -67
  358. data/lib/libv8/v8/src/ia32/macro-assembler-ia32.h +63 -19
  359. data/lib/libv8/v8/src/ia32/regexp-macro-assembler-ia32.cc +22 -8
  360. data/lib/libv8/v8/src/ia32/regexp-macro-assembler-ia32.h +3 -0
  361. data/lib/libv8/v8/src/ia32/stub-cache-ia32.cc +380 -239
  362. data/lib/libv8/v8/src/ic.cc +198 -234
  363. data/lib/libv8/v8/src/ic.h +32 -30
  364. data/lib/libv8/v8/src/interpreter-irregexp.cc +6 -4
  365. data/lib/libv8/v8/src/isolate.cc +112 -95
  366. data/lib/libv8/v8/src/isolate.h +55 -71
  367. data/lib/libv8/v8/src/json-parser.h +486 -48
  368. data/lib/libv8/v8/src/json.js +28 -23
  369. data/lib/libv8/v8/src/jsregexp.cc +163 -208
  370. data/lib/libv8/v8/src/jsregexp.h +0 -1
  371. data/lib/libv8/v8/src/lithium-allocator-inl.h +29 -27
  372. data/lib/libv8/v8/src/lithium-allocator.cc +22 -17
  373. data/lib/libv8/v8/src/lithium-allocator.h +8 -8
  374. data/lib/libv8/v8/src/lithium.cc +16 -11
  375. data/lib/libv8/v8/src/lithium.h +31 -34
  376. data/lib/libv8/v8/src/liveedit.cc +111 -15
  377. data/lib/libv8/v8/src/liveedit.h +3 -4
  378. data/lib/libv8/v8/src/liveobjectlist.cc +116 -80
  379. data/lib/libv8/v8/src/liveobjectlist.h +2 -2
  380. data/lib/libv8/v8/src/log-inl.h +0 -4
  381. data/lib/libv8/v8/src/log-utils.cc +25 -143
  382. data/lib/libv8/v8/src/log-utils.h +13 -92
  383. data/lib/libv8/v8/src/log.cc +26 -249
  384. data/lib/libv8/v8/src/log.h +6 -17
  385. data/lib/libv8/v8/src/macros.py +9 -6
  386. data/lib/libv8/v8/src/mark-compact.cc +276 -56
  387. data/lib/libv8/v8/src/mark-compact.h +20 -0
  388. data/lib/libv8/v8/src/messages.js +93 -39
  389. data/lib/libv8/v8/src/mips/assembler-mips-inl.h +9 -3
  390. data/lib/libv8/v8/src/mips/assembler-mips.cc +297 -189
  391. data/lib/libv8/v8/src/mips/assembler-mips.h +121 -54
  392. data/lib/libv8/v8/src/mips/builtins-mips.cc +23 -24
  393. data/lib/libv8/v8/src/mips/code-stubs-mips.cc +484 -263
  394. data/lib/libv8/v8/src/mips/code-stubs-mips.h +8 -83
  395. data/lib/libv8/v8/src/mips/codegen-mips.h +0 -2
  396. data/lib/libv8/v8/src/mips/constants-mips.h +37 -11
  397. data/lib/libv8/v8/src/mips/deoptimizer-mips.cc +6 -1
  398. data/lib/libv8/v8/src/mips/frames-mips.h +8 -7
  399. data/lib/libv8/v8/src/mips/full-codegen-mips.cc +258 -419
  400. data/lib/libv8/v8/src/mips/ic-mips.cc +181 -121
  401. data/lib/libv8/v8/src/mips/macro-assembler-mips.cc +640 -382
  402. data/lib/libv8/v8/src/mips/macro-assembler-mips.h +94 -89
  403. data/lib/libv8/v8/src/mips/regexp-macro-assembler-mips.cc +23 -10
  404. data/lib/libv8/v8/src/mips/regexp-macro-assembler-mips.h +6 -1
  405. data/lib/libv8/v8/src/mips/simulator-mips.cc +249 -49
  406. data/lib/libv8/v8/src/mips/simulator-mips.h +25 -1
  407. data/lib/libv8/v8/src/mips/stub-cache-mips.cc +373 -161
  408. data/lib/libv8/v8/src/mirror-debugger.js +55 -8
  409. data/lib/libv8/v8/src/misc-intrinsics.h +89 -0
  410. data/lib/libv8/v8/src/mksnapshot.cc +36 -4
  411. data/lib/libv8/v8/src/natives.h +5 -2
  412. data/lib/libv8/v8/src/objects-debug.cc +73 -6
  413. data/lib/libv8/v8/src/objects-inl.h +529 -164
  414. data/lib/libv8/v8/src/objects-printer.cc +67 -12
  415. data/lib/libv8/v8/src/objects-visiting.cc +13 -2
  416. data/lib/libv8/v8/src/objects-visiting.h +41 -1
  417. data/lib/libv8/v8/src/objects.cc +2200 -1177
  418. data/lib/libv8/v8/src/objects.h +912 -283
  419. data/lib/libv8/v8/src/parser.cc +566 -371
  420. data/lib/libv8/v8/src/parser.h +35 -33
  421. data/lib/libv8/v8/src/platform-cygwin.cc +10 -25
  422. data/lib/libv8/v8/src/platform-freebsd.cc +4 -29
  423. data/lib/libv8/v8/src/platform-linux.cc +60 -57
  424. data/lib/libv8/v8/src/platform-macos.cc +4 -27
  425. data/lib/libv8/v8/src/platform-nullos.cc +3 -16
  426. data/lib/libv8/v8/src/platform-openbsd.cc +247 -85
  427. data/lib/libv8/v8/src/platform-posix.cc +43 -1
  428. data/lib/libv8/v8/src/platform-solaris.cc +151 -112
  429. data/lib/libv8/v8/src/platform-tls.h +1 -1
  430. data/lib/libv8/v8/src/platform-win32.cc +65 -39
  431. data/lib/libv8/v8/src/platform.h +17 -14
  432. data/lib/libv8/v8/src/preparse-data-format.h +2 -2
  433. data/lib/libv8/v8/src/preparse-data.h +8 -2
  434. data/lib/libv8/v8/src/preparser-api.cc +2 -18
  435. data/lib/libv8/v8/src/preparser.cc +106 -65
  436. data/lib/libv8/v8/src/preparser.h +26 -5
  437. data/lib/libv8/v8/src/prettyprinter.cc +25 -43
  438. data/lib/libv8/v8/src/profile-generator-inl.h +0 -4
  439. data/lib/libv8/v8/src/profile-generator.cc +213 -34
  440. data/lib/libv8/v8/src/profile-generator.h +9 -9
  441. data/lib/libv8/v8/src/property.h +1 -0
  442. data/lib/libv8/v8/src/proxy.js +74 -4
  443. data/lib/libv8/v8/src/regexp-macro-assembler.cc +10 -6
  444. data/lib/libv8/v8/src/regexp.js +16 -11
  445. data/lib/libv8/v8/src/rewriter.cc +24 -133
  446. data/lib/libv8/v8/src/runtime-profiler.cc +27 -151
  447. data/lib/libv8/v8/src/runtime-profiler.h +5 -31
  448. data/lib/libv8/v8/src/runtime.cc +1450 -681
  449. data/lib/libv8/v8/src/runtime.h +47 -31
  450. data/lib/libv8/v8/src/runtime.js +2 -1
  451. data/lib/libv8/v8/src/scanner-base.cc +358 -220
  452. data/lib/libv8/v8/src/scanner-base.h +30 -138
  453. data/lib/libv8/v8/src/scanner.cc +0 -18
  454. data/lib/libv8/v8/src/scanner.h +0 -15
  455. data/lib/libv8/v8/src/scopeinfo.cc +3 -1
  456. data/lib/libv8/v8/src/scopeinfo.h +1 -6
  457. data/lib/libv8/v8/src/scopes.cc +243 -253
  458. data/lib/libv8/v8/src/scopes.h +58 -109
  459. data/lib/libv8/v8/src/serialize.cc +12 -54
  460. data/lib/libv8/v8/src/serialize.h +47 -0
  461. data/lib/libv8/v8/src/small-pointer-list.h +25 -0
  462. data/lib/libv8/v8/src/spaces-inl.h +4 -50
  463. data/lib/libv8/v8/src/spaces.cc +64 -131
  464. data/lib/libv8/v8/src/spaces.h +19 -70
  465. data/lib/libv8/v8/src/string-stream.cc +3 -1
  466. data/lib/libv8/v8/src/string.js +10 -6
  467. data/lib/libv8/v8/src/strtod.cc +7 -3
  468. data/lib/libv8/v8/src/stub-cache.cc +59 -129
  469. data/lib/libv8/v8/src/stub-cache.h +42 -54
  470. data/lib/libv8/v8/src/third_party/valgrind/valgrind.h +1447 -1339
  471. data/lib/libv8/v8/src/token.cc +4 -4
  472. data/lib/libv8/v8/src/token.h +6 -5
  473. data/lib/libv8/v8/src/type-info.cc +173 -129
  474. data/lib/libv8/v8/src/type-info.h +40 -22
  475. data/lib/libv8/v8/src/utils.cc +25 -304
  476. data/lib/libv8/v8/src/utils.h +118 -3
  477. data/lib/libv8/v8/src/v8-counters.h +3 -6
  478. data/lib/libv8/v8/src/v8.cc +34 -27
  479. data/lib/libv8/v8/src/v8.h +7 -7
  480. data/lib/libv8/v8/src/v8conversions.cc +129 -0
  481. data/lib/libv8/v8/src/v8conversions.h +60 -0
  482. data/lib/libv8/v8/src/v8globals.h +15 -6
  483. data/lib/libv8/v8/src/v8natives.js +300 -78
  484. data/lib/libv8/v8/src/v8threads.cc +14 -6
  485. data/lib/libv8/v8/src/v8threads.h +4 -1
  486. data/lib/libv8/v8/src/v8utils.cc +360 -0
  487. data/lib/libv8/v8/src/v8utils.h +17 -66
  488. data/lib/libv8/v8/src/variables.cc +7 -12
  489. data/lib/libv8/v8/src/variables.h +12 -10
  490. data/lib/libv8/v8/src/version.cc +2 -2
  491. data/lib/libv8/v8/src/vm-state-inl.h +0 -41
  492. data/lib/libv8/v8/src/vm-state.h +0 -11
  493. data/lib/libv8/v8/src/weakmap.js +103 -0
  494. data/lib/libv8/v8/src/x64/assembler-x64.h +6 -3
  495. data/lib/libv8/v8/src/x64/builtins-x64.cc +25 -22
  496. data/lib/libv8/v8/src/x64/code-stubs-x64.cc +523 -250
  497. data/lib/libv8/v8/src/x64/code-stubs-x64.h +8 -71
  498. data/lib/libv8/v8/src/x64/codegen-x64.cc +1 -0
  499. data/lib/libv8/v8/src/x64/codegen-x64.h +0 -2
  500. data/lib/libv8/v8/src/x64/cpu-x64.cc +2 -1
  501. data/lib/libv8/v8/src/x64/deoptimizer-x64.cc +40 -8
  502. data/lib/libv8/v8/src/x64/disasm-x64.cc +12 -10
  503. data/lib/libv8/v8/src/x64/frames-x64.h +7 -6
  504. data/lib/libv8/v8/src/x64/full-codegen-x64.cc +310 -415
  505. data/lib/libv8/v8/src/x64/ic-x64.cc +180 -117
  506. data/lib/libv8/v8/src/x64/lithium-codegen-x64.cc +411 -523
  507. data/lib/libv8/v8/src/x64/lithium-codegen-x64.h +11 -6
  508. data/lib/libv8/v8/src/x64/lithium-x64.cc +191 -216
  509. data/lib/libv8/v8/src/x64/lithium-x64.h +112 -263
  510. data/lib/libv8/v8/src/x64/macro-assembler-x64.cc +177 -61
  511. data/lib/libv8/v8/src/x64/macro-assembler-x64.h +23 -7
  512. data/lib/libv8/v8/src/x64/regexp-macro-assembler-x64.cc +21 -9
  513. data/lib/libv8/v8/src/x64/regexp-macro-assembler-x64.h +6 -0
  514. data/lib/libv8/v8/src/x64/stub-cache-x64.cc +273 -107
  515. data/lib/libv8/v8/src/zone.cc +31 -22
  516. data/lib/libv8/v8/src/zone.h +12 -6
  517. data/lib/libv8/v8/tools/codemap.js +8 -0
  518. data/lib/libv8/v8/tools/gcmole/Makefile +43 -0
  519. data/lib/libv8/v8/tools/gcmole/gcmole.lua +0 -2
  520. data/lib/libv8/v8/tools/gdb-v8-support.py +154 -0
  521. data/lib/libv8/v8/tools/grokdump.py +44 -35
  522. data/lib/libv8/v8/tools/gyp/v8.gyp +94 -248
  523. data/lib/libv8/v8/tools/js2c.py +83 -52
  524. data/lib/libv8/v8/tools/linux-tick-processor +4 -6
  525. data/lib/libv8/v8/tools/ll_prof.py +3 -3
  526. data/lib/libv8/v8/tools/oom_dump/README +3 -1
  527. data/lib/libv8/v8/tools/presubmit.py +11 -4
  528. data/lib/libv8/v8/tools/profile.js +46 -2
  529. data/lib/libv8/v8/tools/splaytree.js +11 -0
  530. data/lib/libv8/v8/tools/stats-viewer.py +15 -11
  531. data/lib/libv8/v8/tools/test-wrapper-gypbuild.py +227 -0
  532. data/lib/libv8/v8/tools/test.py +28 -8
  533. data/lib/libv8/v8/tools/tickprocessor.js +0 -16
  534. data/lib/libv8/version.rb +1 -1
  535. data/libv8.gemspec +2 -2
  536. metadata +31 -19
  537. data/lib/libv8/scons/engine/SCons/Tool/f03.py +0 -63
  538. data/lib/libv8/v8/src/json-parser.cc +0 -504
@@ -59,14 +59,14 @@ namespace internal {
59
59
  ICU(StoreInterceptorProperty) \
60
60
  ICU(UnaryOp_Patch) \
61
61
  ICU(BinaryOp_Patch) \
62
- ICU(CompareIC_Miss)
62
+ ICU(CompareIC_Miss) \
63
+ ICU(ToBoolean_Patch)
63
64
  //
64
65
  // IC is the base class for LoadIC, StoreIC, CallIC, KeyedLoadIC,
65
66
  // and KeyedStoreIC.
66
67
  //
67
68
  class IC {
68
69
  public:
69
-
70
70
  // The ids for utility called from the generated code.
71
71
  enum UtilityId {
72
72
  #define CONST_NAME(name) k##name,
@@ -284,6 +284,7 @@ class KeyedCallIC: public CallICBase {
284
284
  static void GenerateMiss(MacroAssembler* masm, int argc);
285
285
  static void GenerateMegamorphic(MacroAssembler* masm, int argc);
286
286
  static void GenerateNormal(MacroAssembler* masm, int argc);
287
+ static void GenerateNonStrictArguments(MacroAssembler* masm, int argc);
287
288
  };
288
289
 
289
290
 
@@ -345,13 +346,9 @@ class KeyedIC: public IC {
345
346
  explicit KeyedIC(Isolate* isolate) : IC(NO_EXTRA_FRAME, isolate) {}
346
347
  virtual ~KeyedIC() {}
347
348
 
348
- static const int kMaxKeyedPolymorphism = 4;
349
-
350
- virtual MaybeObject* GetFastElementStubWithoutMapCheck(
351
- bool is_js_array) = 0;
352
-
353
- virtual MaybeObject* GetExternalArrayStubWithoutMapCheck(
354
- ExternalArrayType array_type) = 0;
349
+ virtual MaybeObject* GetElementStubWithoutMapCheck(
350
+ bool is_js_array,
351
+ JSObject::ElementsKind elements_kind) = 0;
355
352
 
356
353
  protected:
357
354
  virtual Code* string_stub() {
@@ -360,8 +357,6 @@ class KeyedIC: public IC {
360
357
 
361
358
  virtual Code::Kind kind() const = 0;
362
359
 
363
- virtual String* GetStubNameForCache(IC::State ic_state) = 0;
364
-
365
360
  MaybeObject* ComputeStub(JSObject* receiver,
366
361
  bool is_store,
367
362
  StrictModeFlag strict_mode,
@@ -377,8 +372,7 @@ class KeyedIC: public IC {
377
372
 
378
373
  MaybeObject* ComputeMonomorphicStubWithoutMapCheck(
379
374
  Map* receiver_map,
380
- StrictModeFlag strict_mode,
381
- Code* generic_stub);
375
+ StrictModeFlag strict_mode);
382
376
 
383
377
  MaybeObject* ComputeMonomorphicStub(JSObject* receiver,
384
378
  bool is_store,
@@ -409,8 +403,8 @@ class KeyedLoadIC: public KeyedIC {
409
403
  }
410
404
  static void GenerateGeneric(MacroAssembler* masm);
411
405
  static void GenerateString(MacroAssembler* masm);
412
-
413
406
  static void GenerateIndexedInterceptor(MacroAssembler* masm);
407
+ static void GenerateNonStrictArguments(MacroAssembler* masm);
414
408
 
415
409
  // Bit mask to be tested against bit field for the cases when
416
410
  // generic stub should go into slow case.
@@ -419,17 +413,13 @@ class KeyedLoadIC: public KeyedIC {
419
413
  static const int kSlowCaseBitFieldMask =
420
414
  (1 << Map::kIsAccessCheckNeeded) | (1 << Map::kHasIndexedInterceptor);
421
415
 
422
- virtual MaybeObject* GetFastElementStubWithoutMapCheck(
423
- bool is_js_array);
424
-
425
- virtual MaybeObject* GetExternalArrayStubWithoutMapCheck(
426
- ExternalArrayType array_type);
416
+ virtual MaybeObject* GetElementStubWithoutMapCheck(
417
+ bool is_js_array,
418
+ JSObject::ElementsKind elements_kind);
427
419
 
428
420
  protected:
429
421
  virtual Code::Kind kind() const { return Code::KEYED_LOAD_IC; }
430
422
 
431
- virtual String* GetStubNameForCache(IC::State ic_state);
432
-
433
423
  virtual MaybeObject* ConstructMegamorphicStub(
434
424
  MapList* receiver_maps,
435
425
  CodeList* targets,
@@ -468,6 +458,10 @@ class KeyedLoadIC: public KeyedIC {
468
458
  return isolate()->builtins()->builtin(
469
459
  Builtins::kKeyedLoadIC_IndexedInterceptor);
470
460
  }
461
+ Code* non_strict_arguments_stub() {
462
+ return isolate()->builtins()->builtin(
463
+ Builtins::kKeyedLoadIC_NonStrictArguments);
464
+ }
471
465
 
472
466
  static void Clear(Address address, Code* target);
473
467
 
@@ -568,18 +562,15 @@ class KeyedStoreIC: public KeyedIC {
568
562
  static void GenerateRuntimeSetProperty(MacroAssembler* masm,
569
563
  StrictModeFlag strict_mode);
570
564
  static void GenerateGeneric(MacroAssembler* masm, StrictModeFlag strict_mode);
565
+ static void GenerateNonStrictArguments(MacroAssembler* masm);
571
566
 
572
- virtual MaybeObject* GetFastElementStubWithoutMapCheck(
573
- bool is_js_array);
574
-
575
- virtual MaybeObject* GetExternalArrayStubWithoutMapCheck(
576
- ExternalArrayType array_type);
567
+ virtual MaybeObject* GetElementStubWithoutMapCheck(
568
+ bool is_js_array,
569
+ JSObject::ElementsKind elements_kind);
577
570
 
578
571
  protected:
579
572
  virtual Code::Kind kind() const { return Code::KEYED_STORE_IC; }
580
573
 
581
- virtual String* GetStubNameForCache(IC::State ic_state);
582
-
583
574
  virtual MaybeObject* ConstructMegamorphicStub(
584
575
  MapList* receiver_maps,
585
576
  CodeList* targets,
@@ -626,6 +617,10 @@ class KeyedStoreIC: public KeyedIC {
626
617
  return isolate()->builtins()->builtin(
627
618
  Builtins::kKeyedStoreIC_Generic_Strict);
628
619
  }
620
+ Code* non_strict_arguments_stub() {
621
+ return isolate()->builtins()->builtin(
622
+ Builtins::kKeyedStoreIC_NonStrictArguments);
623
+ }
629
624
 
630
625
  static void Clear(Address address, Code* target);
631
626
 
@@ -635,7 +630,6 @@ class KeyedStoreIC: public KeyedIC {
635
630
 
636
631
  class UnaryOpIC: public IC {
637
632
  public:
638
-
639
633
  // sorted: increasingly more unspecific (ignoring UNINITIALIZED)
640
634
  // TODO(svenpanne) Using enums+switch is an antipattern, use a class instead.
641
635
  enum TypeInfo {
@@ -662,7 +656,6 @@ class UnaryOpIC: public IC {
662
656
  // Type Recording BinaryOpIC, that records the types of the inputs and outputs.
663
657
  class BinaryOpIC: public IC {
664
658
  public:
665
-
666
659
  enum TypeInfo {
667
660
  UNINITIALIZED,
668
661
  SMI,
@@ -728,6 +721,15 @@ class CompareIC: public IC {
728
721
  Token::Value op_;
729
722
  };
730
723
 
724
+
725
+ class ToBooleanIC: public IC {
726
+ public:
727
+ explicit ToBooleanIC(Isolate* isolate) : IC(NO_EXTRA_FRAME, isolate) { }
728
+
729
+ void patch(Code* code);
730
+ };
731
+
732
+
731
733
  // Helper for BinaryOpIC and CompareIC.
732
734
  void PatchInlinedSmiCode(Address address);
733
735
 
@@ -1,4 +1,4 @@
1
- // Copyright 2008 the V8 project authors. All rights reserved.
1
+ // Copyright 2011 the V8 project authors. All rights reserved.
2
2
  // Redistribution and use in source and binary forms, with or without
3
3
  // modification, are permitted provided that the following conditions are
4
4
  // met:
@@ -635,8 +635,9 @@ bool IrregexpInterpreter::Match(Isolate* isolate,
635
635
  AssertNoAllocation a;
636
636
  const byte* code_base = code_array->GetDataStartAddress();
637
637
  uc16 previous_char = '\n';
638
- if (subject->IsAsciiRepresentation()) {
639
- Vector<const char> subject_vector = subject->ToAsciiVector();
638
+ String::FlatContent subject_content = subject->GetFlatContent();
639
+ if (subject_content.IsAscii()) {
640
+ Vector<const char> subject_vector = subject_content.ToAsciiVector();
640
641
  if (start_position != 0) previous_char = subject_vector[start_position - 1];
641
642
  return RawMatch(isolate,
642
643
  code_base,
@@ -645,7 +646,8 @@ bool IrregexpInterpreter::Match(Isolate* isolate,
645
646
  start_position,
646
647
  previous_char);
647
648
  } else {
648
- Vector<const uc16> subject_vector = subject->ToUC16Vector();
649
+ ASSERT(subject_content.IsTwoByte());
650
+ Vector<const uc16> subject_vector = subject_content.ToUC16Vector();
649
651
  if (start_position != 0) previous_char = subject_vector[start_position - 1];
650
652
  return RawMatch(isolate,
651
653
  code_base,
@@ -76,6 +76,10 @@ int ThreadId::GetCurrentThreadId() {
76
76
 
77
77
  ThreadLocalTop::ThreadLocalTop() {
78
78
  InitializeInternal();
79
+ // This flag may be set using v8::V8::IgnoreOutOfMemoryException()
80
+ // before an isolate is initialized. The initialize methods below do
81
+ // not touch it to preserve its value.
82
+ ignore_out_of_memory_ = false;
79
83
  }
80
84
 
81
85
 
@@ -85,13 +89,9 @@ void ThreadLocalTop::InitializeInternal() {
85
89
  #ifdef USE_SIMULATOR
86
90
  simulator_ = NULL;
87
91
  #endif
88
- #ifdef ENABLE_LOGGING_AND_PROFILING
89
92
  js_entry_sp_ = NULL;
90
93
  external_callback_ = NULL;
91
- #endif
92
- #ifdef ENABLE_VMSTATE_TRACKING
93
94
  current_vm_state_ = EXTERNAL;
94
- #endif
95
95
  try_catch_handler_address_ = NULL;
96
96
  context_ = NULL;
97
97
  thread_id_ = ThreadId::Invalid();
@@ -190,8 +190,8 @@ class PreallocatedMemoryThread: public Thread {
190
190
 
191
191
 
192
192
  private:
193
- explicit PreallocatedMemoryThread(Isolate* isolate)
194
- : Thread(isolate, "v8:PreallocMem"),
193
+ PreallocatedMemoryThread()
194
+ : Thread("v8:PreallocMem"),
195
195
  keep_running_(true),
196
196
  wait_for_ever_semaphore_(OS::CreateSemaphore(0)),
197
197
  data_ready_semaphore_(OS::CreateSemaphore(0)),
@@ -219,7 +219,7 @@ class PreallocatedMemoryThread: public Thread {
219
219
 
220
220
  void Isolate::PreallocatedMemoryThreadStart() {
221
221
  if (preallocated_memory_thread_ != NULL) return;
222
- preallocated_memory_thread_ = new PreallocatedMemoryThread(this);
222
+ preallocated_memory_thread_ = new PreallocatedMemoryThread();
223
223
  preallocated_memory_thread_->Start();
224
224
  }
225
225
 
@@ -386,7 +386,6 @@ void Isolate::EnsureDefaultIsolate() {
386
386
  if (Thread::GetThreadLocal(isolate_key_) == NULL) {
387
387
  Thread::SetThreadLocal(isolate_key_, default_isolate_);
388
388
  }
389
- CHECK(default_isolate_->PreInit());
390
389
  }
391
390
 
392
391
 
@@ -658,6 +657,7 @@ void Isolate::PrintStack() {
658
657
  incomplete_message_ = &accumulator;
659
658
  PrintStack(&accumulator);
660
659
  accumulator.OutputToStdOut();
660
+ InitializeLoggingAndCounters();
661
661
  accumulator.Log();
662
662
  incomplete_message_ = NULL;
663
663
  stack_trace_nesting_level_ = 0;
@@ -1304,6 +1304,7 @@ char* Isolate::RestoreThread(char* from) {
1304
1304
  if (RuntimeProfiler::IsEnabled() && current_vm_state() == JS) {
1305
1305
  RuntimeProfiler::IsolateEnteredJS(this);
1306
1306
  }
1307
+ ASSERT(context() == NULL || context()->IsContext());
1307
1308
  return from + sizeof(ThreadLocalTop);
1308
1309
  }
1309
1310
 
@@ -1334,6 +1335,7 @@ void Isolate::ThreadDataTable::Remove(PerIsolateThreadData* data) {
1334
1335
  if (list_ == data) list_ = data->next_;
1335
1336
  if (data->next_ != NULL) data->next_->prev_ = data->prev_;
1336
1337
  if (data->prev_ != NULL) data->prev_->next_ = data->next_;
1338
+ delete data;
1337
1339
  }
1338
1340
 
1339
1341
 
@@ -1346,6 +1348,16 @@ void Isolate::ThreadDataTable::Remove(Isolate* isolate,
1346
1348
  }
1347
1349
 
1348
1350
 
1351
+ void Isolate::ThreadDataTable::RemoveAllThreads(Isolate* isolate) {
1352
+ PerIsolateThreadData* data = list_;
1353
+ while (data != NULL) {
1354
+ PerIsolateThreadData* next = data->next_;
1355
+ if (data->isolate() == isolate) Remove(data);
1356
+ data = next;
1357
+ }
1358
+ }
1359
+
1360
+
1349
1361
  #ifdef DEBUG
1350
1362
  #define TRACE_ISOLATE(tag) \
1351
1363
  do { \
@@ -1368,11 +1380,15 @@ Isolate::Isolate()
1368
1380
  bootstrapper_(NULL),
1369
1381
  runtime_profiler_(NULL),
1370
1382
  compilation_cache_(NULL),
1371
- counters_(new Counters()),
1383
+ counters_(NULL),
1372
1384
  code_range_(NULL),
1385
+ // Must be initialized early to allow v8::SetResourceConstraints calls.
1373
1386
  break_access_(OS::CreateMutex()),
1374
- logger_(new Logger()),
1375
- stats_table_(new StatsTable()),
1387
+ debugger_initialized_(false),
1388
+ // Must be initialized early to allow v8::Debug calls.
1389
+ debugger_access_(OS::CreateMutex()),
1390
+ logger_(NULL),
1391
+ stats_table_(NULL),
1376
1392
  stub_cache_(NULL),
1377
1393
  deoptimizer_data_(NULL),
1378
1394
  capture_stack_trace_for_uncaught_exceptions_(false),
@@ -1396,8 +1412,6 @@ Isolate::Isolate()
1396
1412
  ast_sentinels_(NULL),
1397
1413
  string_tracker_(NULL),
1398
1414
  regexp_stack_(NULL),
1399
- frame_element_constant_list_(0),
1400
- result_constant_list_(0),
1401
1415
  embedder_data_(NULL) {
1402
1416
  TRACE_ISOLATE(constructor);
1403
1417
 
@@ -1432,10 +1446,6 @@ Isolate::Isolate()
1432
1446
  debugger_ = NULL;
1433
1447
  #endif
1434
1448
 
1435
- #ifdef ENABLE_LOGGING_AND_PROFILING
1436
- producer_heap_profile_ = NULL;
1437
- #endif
1438
-
1439
1449
  handle_scope_data_.Initialize();
1440
1450
 
1441
1451
  #define ISOLATE_INIT_EXECUTE(type, name, initial_value) \
@@ -1462,6 +1472,10 @@ void Isolate::TearDown() {
1462
1472
 
1463
1473
  Deinit();
1464
1474
 
1475
+ { ScopedLock lock(process_wide_mutex_);
1476
+ thread_data_table_->RemoveAllThreads(this);
1477
+ }
1478
+
1465
1479
  if (!IsDefaultIsolate()) {
1466
1480
  delete this;
1467
1481
  }
@@ -1505,7 +1519,7 @@ void Isolate::Deinit() {
1505
1519
  logger_->TearDown();
1506
1520
 
1507
1521
  // The default isolate is re-initializable due to legacy API.
1508
- state_ = PREINITIALIZED;
1522
+ state_ = UNINITIALIZED;
1509
1523
  }
1510
1524
  }
1511
1525
 
@@ -1520,10 +1534,11 @@ void Isolate::SetIsolateThreadLocals(Isolate* isolate,
1520
1534
  Isolate::~Isolate() {
1521
1535
  TRACE_ISOLATE(destructor);
1522
1536
 
1523
- #ifdef ENABLE_LOGGING_AND_PROFILING
1524
- delete producer_heap_profile_;
1525
- producer_heap_profile_ = NULL;
1526
- #endif
1537
+ // Has to be called while counters_ are still alive.
1538
+ zone_.DeleteKeptSegment();
1539
+
1540
+ delete[] assembler_spare_buffer_;
1541
+ assembler_spare_buffer_ = NULL;
1527
1542
 
1528
1543
  delete unicode_cache_;
1529
1544
  unicode_cache_ = NULL;
@@ -1558,6 +1573,8 @@ Isolate::~Isolate() {
1558
1573
  handle_scope_implementer_ = NULL;
1559
1574
  delete break_access_;
1560
1575
  break_access_ = NULL;
1576
+ delete debugger_access_;
1577
+ debugger_access_ = NULL;
1561
1578
 
1562
1579
  delete compilation_cache_;
1563
1580
  compilation_cache_ = NULL;
@@ -1583,6 +1600,9 @@ Isolate::~Isolate() {
1583
1600
  delete global_handles_;
1584
1601
  global_handles_ = NULL;
1585
1602
 
1603
+ delete external_reference_table_;
1604
+ external_reference_table_ = NULL;
1605
+
1586
1606
  #ifdef ENABLE_DEBUGGER_SUPPORT
1587
1607
  delete debugger_;
1588
1608
  debugger_ = NULL;
@@ -1592,65 +1612,6 @@ Isolate::~Isolate() {
1592
1612
  }
1593
1613
 
1594
1614
 
1595
- bool Isolate::PreInit() {
1596
- if (state_ != UNINITIALIZED) return true;
1597
-
1598
- TRACE_ISOLATE(preinit);
1599
-
1600
- ASSERT(Isolate::Current() == this);
1601
- #ifdef ENABLE_DEBUGGER_SUPPORT
1602
- debug_ = new Debug(this);
1603
- debugger_ = new Debugger();
1604
- debugger_->isolate_ = this;
1605
- #endif
1606
-
1607
- memory_allocator_ = new MemoryAllocator();
1608
- memory_allocator_->isolate_ = this;
1609
- code_range_ = new CodeRange();
1610
- code_range_->isolate_ = this;
1611
-
1612
- // Safe after setting Heap::isolate_, initializing StackGuard and
1613
- // ensuring that Isolate::Current() == this.
1614
- heap_.SetStackLimits();
1615
-
1616
- #ifdef DEBUG
1617
- DisallowAllocationFailure disallow_allocation_failure;
1618
- #endif
1619
-
1620
- #define C(name) isolate_addresses_[Isolate::k_##name] = \
1621
- reinterpret_cast<Address>(name());
1622
- ISOLATE_ADDRESS_LIST(C)
1623
- ISOLATE_ADDRESS_LIST_PROF(C)
1624
- #undef C
1625
-
1626
- string_tracker_ = new StringTracker();
1627
- string_tracker_->isolate_ = this;
1628
- compilation_cache_ = new CompilationCache(this);
1629
- transcendental_cache_ = new TranscendentalCache();
1630
- keyed_lookup_cache_ = new KeyedLookupCache();
1631
- context_slot_cache_ = new ContextSlotCache();
1632
- descriptor_lookup_cache_ = new DescriptorLookupCache();
1633
- unicode_cache_ = new UnicodeCache();
1634
- pc_to_code_cache_ = new PcToCodeCache(this);
1635
- write_input_buffer_ = new StringInputBuffer();
1636
- global_handles_ = new GlobalHandles(this);
1637
- bootstrapper_ = new Bootstrapper();
1638
- handle_scope_implementer_ = new HandleScopeImplementer(this);
1639
- stub_cache_ = new StubCache(this);
1640
- ast_sentinels_ = new AstSentinels();
1641
- regexp_stack_ = new RegExpStack();
1642
- regexp_stack_->isolate_ = this;
1643
-
1644
- #ifdef ENABLE_LOGGING_AND_PROFILING
1645
- producer_heap_profile_ = new ProducerHeapProfile();
1646
- producer_heap_profile_->isolate_ = this;
1647
- #endif
1648
-
1649
- state_ = PREINITIALIZED;
1650
- return true;
1651
- }
1652
-
1653
-
1654
1615
  void Isolate::InitializeThreadLocal() {
1655
1616
  thread_local_top_.isolate_ = this;
1656
1617
  thread_local_top_.Initialize();
@@ -1687,19 +1648,71 @@ void Isolate::PropagatePendingExceptionToExternalTryCatch() {
1687
1648
  }
1688
1649
 
1689
1650
 
1651
+ void Isolate::InitializeLoggingAndCounters() {
1652
+ if (logger_ == NULL) {
1653
+ logger_ = new Logger;
1654
+ }
1655
+ if (counters_ == NULL) {
1656
+ counters_ = new Counters;
1657
+ }
1658
+ }
1659
+
1660
+
1661
+ void Isolate::InitializeDebugger() {
1662
+ #ifdef ENABLE_DEBUGGER_SUPPORT
1663
+ ScopedLock lock(debugger_access_);
1664
+ if (NoBarrier_Load(&debugger_initialized_)) return;
1665
+ InitializeLoggingAndCounters();
1666
+ debug_ = new Debug(this);
1667
+ debugger_ = new Debugger(this);
1668
+ Release_Store(&debugger_initialized_, true);
1669
+ #endif
1670
+ }
1671
+
1672
+
1690
1673
  bool Isolate::Init(Deserializer* des) {
1691
1674
  ASSERT(state_ != INITIALIZED);
1692
-
1675
+ ASSERT(Isolate::Current() == this);
1693
1676
  TRACE_ISOLATE(init);
1694
1677
 
1695
- bool create_heap_objects = des == NULL;
1696
-
1697
1678
  #ifdef DEBUG
1698
1679
  // The initialization process does not handle memory exhaustion.
1699
1680
  DisallowAllocationFailure disallow_allocation_failure;
1700
1681
  #endif
1701
1682
 
1702
- if (state_ == UNINITIALIZED && !PreInit()) return false;
1683
+ InitializeLoggingAndCounters();
1684
+
1685
+ InitializeDebugger();
1686
+
1687
+ memory_allocator_ = new MemoryAllocator(this);
1688
+ code_range_ = new CodeRange(this);
1689
+
1690
+ // Safe after setting Heap::isolate_, initializing StackGuard and
1691
+ // ensuring that Isolate::Current() == this.
1692
+ heap_.SetStackLimits();
1693
+
1694
+ #define C(name) isolate_addresses_[Isolate::k_##name] = \
1695
+ reinterpret_cast<Address>(name());
1696
+ ISOLATE_ADDRESS_LIST(C)
1697
+ #undef C
1698
+
1699
+ string_tracker_ = new StringTracker();
1700
+ string_tracker_->isolate_ = this;
1701
+ compilation_cache_ = new CompilationCache(this);
1702
+ transcendental_cache_ = new TranscendentalCache();
1703
+ keyed_lookup_cache_ = new KeyedLookupCache();
1704
+ context_slot_cache_ = new ContextSlotCache();
1705
+ descriptor_lookup_cache_ = new DescriptorLookupCache();
1706
+ unicode_cache_ = new UnicodeCache();
1707
+ pc_to_code_cache_ = new PcToCodeCache(this);
1708
+ write_input_buffer_ = new StringInputBuffer();
1709
+ global_handles_ = new GlobalHandles(this);
1710
+ bootstrapper_ = new Bootstrapper();
1711
+ handle_scope_implementer_ = new HandleScopeImplementer(this);
1712
+ stub_cache_ = new StubCache(this);
1713
+ ast_sentinels_ = new AstSentinels();
1714
+ regexp_stack_ = new RegExpStack();
1715
+ regexp_stack_->isolate_ = this;
1703
1716
 
1704
1717
  // Enable logging before setting up the heap
1705
1718
  logger_->Setup();
@@ -1722,18 +1735,19 @@ bool Isolate::Init(Deserializer* des) {
1722
1735
  stack_guard_.InitThread(lock);
1723
1736
  }
1724
1737
 
1725
- // Setup the object heap
1738
+ // Setup the object heap.
1739
+ const bool create_heap_objects = (des == NULL);
1726
1740
  ASSERT(!heap_.HasBeenSetup());
1727
1741
  if (!heap_.Setup(create_heap_objects)) {
1728
1742
  V8::SetFatalError();
1729
1743
  return false;
1730
1744
  }
1731
1745
 
1746
+ InitializeThreadLocal();
1747
+
1732
1748
  bootstrapper_->Initialize(create_heap_objects);
1733
1749
  builtins_.Setup(create_heap_objects);
1734
1750
 
1735
- InitializeThreadLocal();
1736
-
1737
1751
  // Only preallocate on the first initialization.
1738
1752
  if (FLAG_preallocate_message_memory && preallocated_message_space_ == NULL) {
1739
1753
  // Start the thread which will set aside some memory.
@@ -1782,6 +1796,16 @@ bool Isolate::Init(Deserializer* des) {
1782
1796
  }
1783
1797
 
1784
1798
 
1799
+ // Initialized lazily to allow early
1800
+ // v8::V8::SetAddHistogramSampleFunction calls.
1801
+ StatsTable* Isolate::stats_table() {
1802
+ if (stats_table_ == NULL) {
1803
+ stats_table_ = new StatsTable;
1804
+ }
1805
+ return stats_table_;
1806
+ }
1807
+
1808
+
1785
1809
  void Isolate::Enter() {
1786
1810
  Isolate* current_isolate = NULL;
1787
1811
  PerIsolateThreadData* current_data = CurrentPerIsolateThreadData();
@@ -1821,8 +1845,6 @@ void Isolate::Enter() {
1821
1845
 
1822
1846
  SetIsolateThreadLocals(this, data);
1823
1847
 
1824
- CHECK(PreInit());
1825
-
1826
1848
  // In case it's the first time some thread enters the isolate.
1827
1849
  set_thread_id(data->thread_id());
1828
1850
  }
@@ -1853,11 +1875,6 @@ void Isolate::Exit() {
1853
1875
  }
1854
1876
 
1855
1877
 
1856
- void Isolate::ResetEagerOptimizingData() {
1857
- compilation_cache_->ResetEagerOptimizingData();
1858
- }
1859
-
1860
-
1861
1878
  #ifdef DEBUG
1862
1879
  #define ISOLATE_FIELD_OFFSET(type, name, ignored) \
1863
1880
  const intptr_t Isolate::name##_debug_offset_ = OFFSET_OF(Isolate, name##_);