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
@@ -384,6 +384,9 @@ void MacroAssembler::AssertFastElements(Register elements) {
384
384
  CompareRoot(FieldOperand(elements, HeapObject::kMapOffset),
385
385
  Heap::kFixedArrayMapRootIndex);
386
386
  j(equal, &ok, Label::kNear);
387
+ CompareRoot(FieldOperand(elements, HeapObject::kMapOffset),
388
+ Heap::kFixedDoubleArrayMapRootIndex);
389
+ j(equal, &ok, Label::kNear);
387
390
  CompareRoot(FieldOperand(elements, HeapObject::kMapOffset),
388
391
  Heap::kFixedCOWArrayMapRootIndex);
389
392
  j(equal, &ok, Label::kNear);
@@ -800,7 +803,7 @@ void MacroAssembler::InvokeBuiltin(Builtins::JavaScript id,
800
803
  // parameter count to avoid emitting code to do the check.
801
804
  ParameterCount expected(0);
802
805
  GetBuiltinEntry(rdx, id);
803
- InvokeCode(rdx, expected, expected, flag, call_wrapper);
806
+ InvokeCode(rdx, expected, expected, flag, call_wrapper, CALL_AS_METHOD);
804
807
  }
805
808
 
806
809
 
@@ -920,7 +923,7 @@ void MacroAssembler::LoadSmiConstant(Register dst, Smi* source) {
920
923
 
921
924
 
922
925
  void MacroAssembler::Integer32ToSmi(Register dst, Register src) {
923
- ASSERT_EQ(0, kSmiTag);
926
+ STATIC_ASSERT(kSmiTag == 0);
924
927
  if (!dst.is(src)) {
925
928
  movl(dst, src);
926
929
  }
@@ -958,7 +961,7 @@ void MacroAssembler::Integer64PlusConstantToSmi(Register dst,
958
961
 
959
962
 
960
963
  void MacroAssembler::SmiToInteger32(Register dst, Register src) {
961
- ASSERT_EQ(0, kSmiTag);
964
+ STATIC_ASSERT(kSmiTag == 0);
962
965
  if (!dst.is(src)) {
963
966
  movq(dst, src);
964
967
  }
@@ -972,7 +975,7 @@ void MacroAssembler::SmiToInteger32(Register dst, const Operand& src) {
972
975
 
973
976
 
974
977
  void MacroAssembler::SmiToInteger64(Register dst, Register src) {
975
- ASSERT_EQ(0, kSmiTag);
978
+ STATIC_ASSERT(kSmiTag == 0);
976
979
  if (!dst.is(src)) {
977
980
  movq(dst, src);
978
981
  }
@@ -1108,21 +1111,21 @@ void MacroAssembler::SmiOrIfSmis(Register dst, Register src1, Register src2,
1108
1111
 
1109
1112
 
1110
1113
  Condition MacroAssembler::CheckSmi(Register src) {
1111
- ASSERT_EQ(0, kSmiTag);
1114
+ STATIC_ASSERT(kSmiTag == 0);
1112
1115
  testb(src, Immediate(kSmiTagMask));
1113
1116
  return zero;
1114
1117
  }
1115
1118
 
1116
1119
 
1117
1120
  Condition MacroAssembler::CheckSmi(const Operand& src) {
1118
- ASSERT_EQ(0, kSmiTag);
1121
+ STATIC_ASSERT(kSmiTag == 0);
1119
1122
  testb(src, Immediate(kSmiTagMask));
1120
1123
  return zero;
1121
1124
  }
1122
1125
 
1123
1126
 
1124
1127
  Condition MacroAssembler::CheckNonNegativeSmi(Register src) {
1125
- ASSERT_EQ(0, kSmiTag);
1128
+ STATIC_ASSERT(kSmiTag == 0);
1126
1129
  // Test that both bits of the mask 0x8000000000000001 are zero.
1127
1130
  movq(kScratchRegister, src);
1128
1131
  rol(kScratchRegister, Immediate(1));
@@ -1135,7 +1138,7 @@ Condition MacroAssembler::CheckBothSmi(Register first, Register second) {
1135
1138
  if (first.is(second)) {
1136
1139
  return CheckSmi(first);
1137
1140
  }
1138
- ASSERT(kSmiTag == 0 && kHeapObjectTag == 1 && kHeapObjectTagMask == 3);
1141
+ STATIC_ASSERT(kSmiTag == 0 && kHeapObjectTag == 1 && kHeapObjectTagMask == 3);
1139
1142
  leal(kScratchRegister, Operand(first, second, times_1, 0));
1140
1143
  testb(kScratchRegister, Immediate(0x03));
1141
1144
  return zero;
@@ -1291,7 +1294,7 @@ void MacroAssembler::SmiTryAddConstant(Register dst,
1291
1294
  Label::Distance near_jump) {
1292
1295
  // Does not assume that src is a smi.
1293
1296
  ASSERT_EQ(static_cast<int>(1), static_cast<int>(kSmiTagMask));
1294
- ASSERT_EQ(0, kSmiTag);
1297
+ STATIC_ASSERT(kSmiTag == 0);
1295
1298
  ASSERT(!dst.is(kScratchRegister));
1296
1299
  ASSERT(!src.is(kScratchRegister));
1297
1300
 
@@ -1995,7 +1998,7 @@ void MacroAssembler::SelectNonSmi(Register dst,
1995
1998
  Check(not_both_smis, "Both registers were smis in SelectNonSmi.");
1996
1999
  }
1997
2000
  #endif
1998
- ASSERT_EQ(0, kSmiTag);
2001
+ STATIC_ASSERT(kSmiTag == 0);
1999
2002
  ASSERT_EQ(0, Smi::FromInt(0));
2000
2003
  movl(kScratchRegister, Immediate(kSmiTagMask));
2001
2004
  and_(kScratchRegister, src1);
@@ -2384,18 +2387,15 @@ Operand MacroAssembler::SafepointRegisterSlot(Register reg) {
2384
2387
  void MacroAssembler::PushTryHandler(CodeLocation try_location,
2385
2388
  HandlerType type) {
2386
2389
  // Adjust this code if not the case.
2387
- ASSERT(StackHandlerConstants::kSize == 4 * kPointerSize);
2390
+ STATIC_ASSERT(StackHandlerConstants::kSize == 5 * kPointerSize);
2391
+ STATIC_ASSERT(StackHandlerConstants::kNextOffset == 0 * kPointerSize);
2392
+ STATIC_ASSERT(StackHandlerConstants::kContextOffset == 1 * kPointerSize);
2393
+ STATIC_ASSERT(StackHandlerConstants::kFPOffset == 2 * kPointerSize);
2394
+ STATIC_ASSERT(StackHandlerConstants::kStateOffset == 3 * kPointerSize);
2395
+ STATIC_ASSERT(StackHandlerConstants::kPCOffset == 4 * kPointerSize);
2388
2396
 
2389
2397
  // The pc (return address) is already on TOS. This code pushes state,
2390
- // frame pointer and current handler. Check that they are expected
2391
- // next on the stack, in that order.
2392
- ASSERT_EQ(StackHandlerConstants::kStateOffset,
2393
- StackHandlerConstants::kPCOffset - kPointerSize);
2394
- ASSERT_EQ(StackHandlerConstants::kFPOffset,
2395
- StackHandlerConstants::kStateOffset - kPointerSize);
2396
- ASSERT_EQ(StackHandlerConstants::kNextOffset,
2397
- StackHandlerConstants::kFPOffset - kPointerSize);
2398
-
2398
+ // frame pointer, context, and current handler.
2399
2399
  if (try_location == IN_JAVASCRIPT) {
2400
2400
  if (type == TRY_CATCH_HANDLER) {
2401
2401
  push(Immediate(StackHandler::TRY_CATCH));
@@ -2403,6 +2403,7 @@ void MacroAssembler::PushTryHandler(CodeLocation try_location,
2403
2403
  push(Immediate(StackHandler::TRY_FINALLY));
2404
2404
  }
2405
2405
  push(rbp);
2406
+ push(rsi);
2406
2407
  } else {
2407
2408
  ASSERT(try_location == IN_JS_ENTRY);
2408
2409
  // The frame pointer does not point to a JS frame so we save NULL
@@ -2410,6 +2411,7 @@ void MacroAssembler::PushTryHandler(CodeLocation try_location,
2410
2411
  // before dereferencing it to restore the context.
2411
2412
  push(Immediate(StackHandler::ENTRY));
2412
2413
  push(Immediate(0)); // NULL frame pointer.
2414
+ Push(Smi::FromInt(0)); // No context.
2413
2415
  }
2414
2416
  // Save the current handler.
2415
2417
  Operand handler_operand =
@@ -2432,12 +2434,13 @@ void MacroAssembler::PopTryHandler() {
2432
2434
 
2433
2435
 
2434
2436
  void MacroAssembler::Throw(Register value) {
2435
- // Check that stack should contain next handler, frame pointer, state and
2436
- // return address in that order.
2437
- STATIC_ASSERT(StackHandlerConstants::kFPOffset + kPointerSize ==
2438
- StackHandlerConstants::kStateOffset);
2439
- STATIC_ASSERT(StackHandlerConstants::kStateOffset + kPointerSize ==
2440
- StackHandlerConstants::kPCOffset);
2437
+ // Adjust this code if not the case.
2438
+ STATIC_ASSERT(StackHandlerConstants::kSize == 5 * kPointerSize);
2439
+ STATIC_ASSERT(StackHandlerConstants::kNextOffset == 0 * kPointerSize);
2440
+ STATIC_ASSERT(StackHandlerConstants::kContextOffset == 1 * kPointerSize);
2441
+ STATIC_ASSERT(StackHandlerConstants::kFPOffset == 2 * kPointerSize);
2442
+ STATIC_ASSERT(StackHandlerConstants::kStateOffset == 3 * kPointerSize);
2443
+ STATIC_ASSERT(StackHandlerConstants::kPCOffset == 4 * kPointerSize);
2441
2444
  // Keep thrown value in rax.
2442
2445
  if (!value.is(rax)) {
2443
2446
  movq(rax, value);
@@ -2448,23 +2451,32 @@ void MacroAssembler::Throw(Register value) {
2448
2451
  movq(rsp, handler_operand);
2449
2452
  // get next in chain
2450
2453
  pop(handler_operand);
2451
- pop(rbp); // pop frame pointer
2452
- pop(rdx); // remove state
2454
+ pop(rsi); // Context.
2455
+ pop(rbp); // Frame pointer.
2456
+ pop(rdx); // State.
2453
2457
 
2454
- // Before returning we restore the context from the frame pointer if not NULL.
2455
- // The frame pointer is NULL in the exception handler of a JS entry frame.
2456
- Set(rsi, 0); // Tentatively set context pointer to NULL
2458
+ // If the handler is a JS frame, restore the context to the frame.
2459
+ // (rdx == ENTRY) == (rbp == 0) == (rsi == 0), so we could test any
2460
+ // of them.
2457
2461
  Label skip;
2458
- cmpq(rbp, Immediate(0));
2462
+ cmpq(rdx, Immediate(StackHandler::ENTRY));
2459
2463
  j(equal, &skip, Label::kNear);
2460
- movq(rsi, Operand(rbp, StandardFrameConstants::kContextOffset));
2464
+ movq(Operand(rbp, StandardFrameConstants::kContextOffset), rsi);
2461
2465
  bind(&skip);
2466
+
2462
2467
  ret(0);
2463
2468
  }
2464
2469
 
2465
2470
 
2466
2471
  void MacroAssembler::ThrowUncatchable(UncatchableExceptionType type,
2467
2472
  Register value) {
2473
+ // Adjust this code if not the case.
2474
+ STATIC_ASSERT(StackHandlerConstants::kSize == 5 * kPointerSize);
2475
+ STATIC_ASSERT(StackHandlerConstants::kNextOffset == 0 * kPointerSize);
2476
+ STATIC_ASSERT(StackHandlerConstants::kContextOffset == 1 * kPointerSize);
2477
+ STATIC_ASSERT(StackHandlerConstants::kFPOffset == 2 * kPointerSize);
2478
+ STATIC_ASSERT(StackHandlerConstants::kStateOffset == 3 * kPointerSize);
2479
+ STATIC_ASSERT(StackHandlerConstants::kPCOffset == 4 * kPointerSize);
2468
2480
  // Keep thrown value in rax.
2469
2481
  if (!value.is(rax)) {
2470
2482
  movq(rax, value);
@@ -2504,19 +2516,13 @@ void MacroAssembler::ThrowUncatchable(UncatchableExceptionType type,
2504
2516
  Store(pending_exception, rax);
2505
2517
  }
2506
2518
 
2507
- // Clear the context pointer.
2519
+ // Discard the context saved in the handler and clear the context pointer.
2520
+ pop(rdx);
2508
2521
  Set(rsi, 0);
2509
2522
 
2510
- // Restore registers from handler.
2511
- STATIC_ASSERT(StackHandlerConstants::kNextOffset + kPointerSize ==
2512
- StackHandlerConstants::kFPOffset);
2513
- pop(rbp); // FP
2514
- STATIC_ASSERT(StackHandlerConstants::kFPOffset + kPointerSize ==
2515
- StackHandlerConstants::kStateOffset);
2516
- pop(rdx); // State
2523
+ pop(rbp); // Restore frame pointer.
2524
+ pop(rdx); // Discard state.
2517
2525
 
2518
- STATIC_ASSERT(StackHandlerConstants::kStateOffset + kPointerSize ==
2519
- StackHandlerConstants::kPCOffset);
2520
2526
  ret(0);
2521
2527
  }
2522
2528
 
@@ -2558,6 +2564,16 @@ void MacroAssembler::CmpInstanceType(Register map, InstanceType type) {
2558
2564
  }
2559
2565
 
2560
2566
 
2567
+ void MacroAssembler::CheckFastElements(Register map,
2568
+ Label* fail,
2569
+ Label::Distance distance) {
2570
+ STATIC_ASSERT(JSObject::FAST_ELEMENTS == 0);
2571
+ cmpb(FieldOperand(map, Map::kBitField2Offset),
2572
+ Immediate(Map::kMaximumBitField2FastElementValue));
2573
+ j(above, fail, distance);
2574
+ }
2575
+
2576
+
2561
2577
  void MacroAssembler::CheckMap(Register obj,
2562
2578
  Handle<Map> map,
2563
2579
  Label* fail,
@@ -2683,7 +2699,7 @@ Condition MacroAssembler::IsObjectStringType(Register heap_object,
2683
2699
  Register instance_type) {
2684
2700
  movq(map, FieldOperand(heap_object, HeapObject::kMapOffset));
2685
2701
  movzxbl(instance_type, FieldOperand(map, Map::kInstanceTypeOffset));
2686
- ASSERT(kNotStringTag != 0);
2702
+ STATIC_ASSERT(kNotStringTag != 0);
2687
2703
  testb(instance_type, Immediate(kIsNotStringMask));
2688
2704
  return zero;
2689
2705
  }
@@ -2878,7 +2894,8 @@ void MacroAssembler::InvokeFunction(Register function,
2878
2894
  void MacroAssembler::InvokeFunction(JSFunction* function,
2879
2895
  const ParameterCount& actual,
2880
2896
  InvokeFlag flag,
2881
- const CallWrapper& call_wrapper) {
2897
+ const CallWrapper& call_wrapper,
2898
+ CallKind call_kind) {
2882
2899
  ASSERT(function->is_compiled());
2883
2900
  // Get the function and setup the context.
2884
2901
  Move(rdi, Handle<JSFunction>(function));
@@ -2889,7 +2906,7 @@ void MacroAssembler::InvokeFunction(JSFunction* function,
2889
2906
  // the Code object every time we call the function.
2890
2907
  movq(rdx, FieldOperand(rdi, JSFunction::kCodeEntryOffset));
2891
2908
  ParameterCount expected(function->shared()->formal_parameter_count());
2892
- InvokeCode(rdx, expected, actual, flag, call_wrapper);
2909
+ InvokeCode(rdx, expected, actual, flag, call_wrapper, call_kind);
2893
2910
  } else {
2894
2911
  // Invoke the cached code.
2895
2912
  Handle<Code> code(function->code());
@@ -2899,7 +2916,8 @@ void MacroAssembler::InvokeFunction(JSFunction* function,
2899
2916
  actual,
2900
2917
  RelocInfo::CODE_TARGET,
2901
2918
  flag,
2902
- call_wrapper);
2919
+ call_wrapper,
2920
+ call_kind);
2903
2921
  }
2904
2922
  }
2905
2923
 
@@ -3192,6 +3210,109 @@ void MacroAssembler::CheckAccessGlobalProxy(Register holder_reg,
3192
3210
  }
3193
3211
 
3194
3212
 
3213
+ void MacroAssembler::LoadFromNumberDictionary(Label* miss,
3214
+ Register elements,
3215
+ Register key,
3216
+ Register r0,
3217
+ Register r1,
3218
+ Register r2,
3219
+ Register result) {
3220
+ // Register use:
3221
+ //
3222
+ // elements - holds the slow-case elements of the receiver on entry.
3223
+ // Unchanged unless 'result' is the same register.
3224
+ //
3225
+ // key - holds the smi key on entry.
3226
+ // Unchanged unless 'result' is the same register.
3227
+ //
3228
+ // Scratch registers:
3229
+ //
3230
+ // r0 - holds the untagged key on entry and holds the hash once computed.
3231
+ //
3232
+ // r1 - used to hold the capacity mask of the dictionary
3233
+ //
3234
+ // r2 - used for the index into the dictionary.
3235
+ //
3236
+ // result - holds the result on exit if the load succeeded.
3237
+ // Allowed to be the same as 'key' or 'result'.
3238
+ // Unchanged on bailout so 'key' or 'result' can be used
3239
+ // in further computation.
3240
+
3241
+ Label done;
3242
+
3243
+ // Compute the hash code from the untagged key. This must be kept in sync
3244
+ // with ComputeIntegerHash in utils.h.
3245
+ //
3246
+ // hash = ~hash + (hash << 15);
3247
+ movl(r1, r0);
3248
+ notl(r0);
3249
+ shll(r1, Immediate(15));
3250
+ addl(r0, r1);
3251
+ // hash = hash ^ (hash >> 12);
3252
+ movl(r1, r0);
3253
+ shrl(r1, Immediate(12));
3254
+ xorl(r0, r1);
3255
+ // hash = hash + (hash << 2);
3256
+ leal(r0, Operand(r0, r0, times_4, 0));
3257
+ // hash = hash ^ (hash >> 4);
3258
+ movl(r1, r0);
3259
+ shrl(r1, Immediate(4));
3260
+ xorl(r0, r1);
3261
+ // hash = hash * 2057;
3262
+ imull(r0, r0, Immediate(2057));
3263
+ // hash = hash ^ (hash >> 16);
3264
+ movl(r1, r0);
3265
+ shrl(r1, Immediate(16));
3266
+ xorl(r0, r1);
3267
+
3268
+ // Compute capacity mask.
3269
+ SmiToInteger32(r1,
3270
+ FieldOperand(elements, NumberDictionary::kCapacityOffset));
3271
+ decl(r1);
3272
+
3273
+ // Generate an unrolled loop that performs a few probes before giving up.
3274
+ const int kProbes = 4;
3275
+ for (int i = 0; i < kProbes; i++) {
3276
+ // Use r2 for index calculations and keep the hash intact in r0.
3277
+ movq(r2, r0);
3278
+ // Compute the masked index: (hash + i + i * i) & mask.
3279
+ if (i > 0) {
3280
+ addl(r2, Immediate(NumberDictionary::GetProbeOffset(i)));
3281
+ }
3282
+ and_(r2, r1);
3283
+
3284
+ // Scale the index by multiplying by the entry size.
3285
+ ASSERT(NumberDictionary::kEntrySize == 3);
3286
+ lea(r2, Operand(r2, r2, times_2, 0)); // r2 = r2 * 3
3287
+
3288
+ // Check if the key matches.
3289
+ cmpq(key, FieldOperand(elements,
3290
+ r2,
3291
+ times_pointer_size,
3292
+ NumberDictionary::kElementsStartOffset));
3293
+ if (i != (kProbes - 1)) {
3294
+ j(equal, &done);
3295
+ } else {
3296
+ j(not_equal, miss);
3297
+ }
3298
+ }
3299
+
3300
+ bind(&done);
3301
+ // Check that the value is a normal propety.
3302
+ const int kDetailsOffset =
3303
+ NumberDictionary::kElementsStartOffset + 2 * kPointerSize;
3304
+ ASSERT_EQ(NORMAL, 0);
3305
+ Test(FieldOperand(elements, r2, times_pointer_size, kDetailsOffset),
3306
+ Smi::FromInt(PropertyDetails::TypeField::mask()));
3307
+ j(not_zero, miss);
3308
+
3309
+ // Get the value at the masked, scaled index.
3310
+ const int kValueOffset =
3311
+ NumberDictionary::kElementsStartOffset + kPointerSize;
3312
+ movq(result, FieldOperand(elements, r2, times_pointer_size, kValueOffset));
3313
+ }
3314
+
3315
+
3195
3316
  void MacroAssembler::LoadAllocationTopHelper(Register result,
3196
3317
  Register scratch,
3197
3318
  AllocationFlags flags) {
@@ -3605,15 +3726,10 @@ void MacroAssembler::CopyBytes(Register destination,
3605
3726
  void MacroAssembler::LoadContext(Register dst, int context_chain_length) {
3606
3727
  if (context_chain_length > 0) {
3607
3728
  // Move up the chain of contexts to the context containing the slot.
3608
- movq(dst, Operand(rsi, Context::SlotOffset(Context::CLOSURE_INDEX)));
3609
- // Load the function context (which is the incoming, outer context).
3610
- movq(dst, FieldOperand(dst, JSFunction::kContextOffset));
3729
+ movq(dst, Operand(rsi, Context::SlotOffset(Context::PREVIOUS_INDEX)));
3611
3730
  for (int i = 1; i < context_chain_length; i++) {
3612
- movq(dst, Operand(dst, Context::SlotOffset(Context::CLOSURE_INDEX)));
3613
- movq(dst, FieldOperand(dst, JSFunction::kContextOffset));
3731
+ movq(dst, Operand(dst, Context::SlotOffset(Context::PREVIOUS_INDEX)));
3614
3732
  }
3615
- // The context may be an intermediate context, not a function context.
3616
- movq(dst, Operand(dst, Context::SlotOffset(Context::FCONTEXT_INDEX)));
3617
3733
  } else {
3618
3734
  // Slot is in the current function context. Move it into the
3619
3735
  // destination register in case we store into it (the write barrier
@@ -3621,14 +3737,14 @@ void MacroAssembler::LoadContext(Register dst, int context_chain_length) {
3621
3737
  movq(dst, rsi);
3622
3738
  }
3623
3739
 
3624
- // We should not have found a 'with' context by walking the context chain
3625
- // (i.e., the static scope chain and runtime context chain do not agree).
3626
- // A variable occurring in such a scope should have slot type LOOKUP and
3627
- // not CONTEXT.
3740
+ // We should not have found a with context by walking the context
3741
+ // chain (i.e., the static scope chain and runtime context chain do
3742
+ // not agree). A variable occurring in such a scope should have
3743
+ // slot type LOOKUP and not CONTEXT.
3628
3744
  if (emit_debug_code()) {
3629
- cmpq(dst, Operand(dst, Context::SlotOffset(Context::FCONTEXT_INDEX)));
3630
- Check(equal, "Yo dawg, I heard you liked function contexts "
3631
- "so I put function contexts in all your contexts");
3745
+ CompareRoot(FieldOperand(dst, HeapObject::kMapOffset),
3746
+ Heap::kWithContextMapRootIndex);
3747
+ Check(not_equal, "Variable resolved to with context.");
3632
3748
  }
3633
3749
  }
3634
3750
 
@@ -251,29 +251,30 @@ class MacroAssembler: public Assembler {
251
251
  const ParameterCount& expected,
252
252
  const ParameterCount& actual,
253
253
  InvokeFlag flag,
254
- const CallWrapper& call_wrapper = NullCallWrapper(),
255
- CallKind call_kind = CALL_AS_METHOD);
254
+ const CallWrapper& call_wrapper,
255
+ CallKind call_kind);
256
256
 
257
257
  void InvokeCode(Handle<Code> code,
258
258
  const ParameterCount& expected,
259
259
  const ParameterCount& actual,
260
260
  RelocInfo::Mode rmode,
261
261
  InvokeFlag flag,
262
- const CallWrapper& call_wrapper = NullCallWrapper(),
263
- CallKind call_kind = CALL_AS_METHOD);
262
+ const CallWrapper& call_wrapper,
263
+ CallKind call_kind);
264
264
 
265
265
  // Invoke the JavaScript function in the given register. Changes the
266
266
  // current context to the context in the function before invoking.
267
267
  void InvokeFunction(Register function,
268
268
  const ParameterCount& actual,
269
269
  InvokeFlag flag,
270
- const CallWrapper& call_wrapper = NullCallWrapper(),
271
- CallKind call_kind = CALL_AS_METHOD);
270
+ const CallWrapper& call_wrapper,
271
+ CallKind call_kind);
272
272
 
273
273
  void InvokeFunction(JSFunction* function,
274
274
  const ParameterCount& actual,
275
275
  InvokeFlag flag,
276
- const CallWrapper& call_wrapper = NullCallWrapper());
276
+ const CallWrapper& call_wrapper,
277
+ CallKind call_kind);
277
278
 
278
279
  // Invoke specified builtin JavaScript function. Adds an entry to
279
280
  // the unresolved list if the name does not resolve.
@@ -753,6 +754,12 @@ class MacroAssembler: public Assembler {
753
754
  // Always use unsigned comparisons: above and below, not less and greater.
754
755
  void CmpInstanceType(Register map, InstanceType type);
755
756
 
757
+ // Check if a map for a JSObject indicates that the object has fast elements.
758
+ // Jump to the specified label if it does not.
759
+ void CheckFastElements(Register map,
760
+ Label* fail,
761
+ Label::Distance distance = Label::kFar);
762
+
756
763
  // Check if the map of an object is equal to a specified map and
757
764
  // branch to label if not. Skip the smi check if not required
758
765
  // (object is known to be a heap object)
@@ -839,6 +846,15 @@ class MacroAssembler: public Assembler {
839
846
  Label* miss);
840
847
 
841
848
 
849
+ void LoadFromNumberDictionary(Label* miss,
850
+ Register elements,
851
+ Register key,
852
+ Register r0,
853
+ Register r1,
854
+ Register r2,
855
+ Register result);
856
+
857
+
842
858
  // ---------------------------------------------------------------------------
843
859
  // Allocation support
844
860