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
@@ -69,8 +69,8 @@ void MacroAssembler::RecordWriteHelper(Register object,
69
69
 
70
70
  // Compute number of region covering addr. See Page::GetRegionNumberForAddress
71
71
  // method for more details.
72
- and_(addr, Page::kPageAlignmentMask);
73
72
  shr(addr, Page::kRegionSizeLog2);
73
+ and_(addr, Page::kPageAlignmentMask >> Page::kRegionSizeLog2);
74
74
 
75
75
  // Set dirty mark for region.
76
76
  // Bit tests with a memory operand should be avoided on Intel processors,
@@ -148,9 +148,8 @@ void MacroAssembler::RecordWrite(Register object,
148
148
  Label done;
149
149
 
150
150
  // Skip barrier if writing a smi.
151
- ASSERT_EQ(0, kSmiTag);
152
- test(value, Immediate(kSmiTagMask));
153
- j(zero, &done, Label::kNear);
151
+ STATIC_ASSERT(kSmiTag == 0);
152
+ JumpIfSmi(value, &done, Label::kNear);
154
153
 
155
154
  InNewSpace(object, value, equal, &done, Label::kNear);
156
155
 
@@ -167,8 +166,8 @@ void MacroAssembler::RecordWrite(Register object,
167
166
  // Array access: calculate the destination address in the same manner as
168
167
  // KeyedStoreIC::GenerateGeneric. Multiply a smi by 2 to get an offset
169
168
  // into an array of words.
170
- ASSERT_EQ(1, kSmiTagSize);
171
- ASSERT_EQ(0, kSmiTag);
169
+ STATIC_ASSERT(kSmiTagSize == 1);
170
+ STATIC_ASSERT(kSmiTag == 0);
172
171
  lea(dst, Operand(object, dst, times_half_pointer_size,
173
172
  FixedArray::kHeaderSize - kHeapObjectTag));
174
173
  }
@@ -194,9 +193,8 @@ void MacroAssembler::RecordWrite(Register object,
194
193
  Label done;
195
194
 
196
195
  // Skip barrier if writing a smi.
197
- ASSERT_EQ(0, kSmiTag);
198
- test(value, Immediate(kSmiTagMask));
199
- j(zero, &done);
196
+ STATIC_ASSERT(kSmiTag == 0);
197
+ JumpIfSmi(value, &done, Label::kNear);
200
198
 
201
199
  InNewSpace(object, value, equal, &done);
202
200
 
@@ -265,6 +263,13 @@ void MacroAssembler::SafePush(const Immediate& x) {
265
263
  }
266
264
 
267
265
 
266
+ void MacroAssembler::CompareRoot(Register with, Heap::RootListIndex index) {
267
+ // see ROOT_ACCESSOR macro in factory.h
268
+ Handle<Object> value(&isolate()->heap()->roots_address()[index]);
269
+ cmp(with, value);
270
+ }
271
+
272
+
268
273
  void MacroAssembler::CmpObjectType(Register heap_object,
269
274
  InstanceType type,
270
275
  Register map) {
@@ -279,6 +284,16 @@ void MacroAssembler::CmpInstanceType(Register map, InstanceType type) {
279
284
  }
280
285
 
281
286
 
287
+ void MacroAssembler::CheckFastElements(Register map,
288
+ Label* fail,
289
+ Label::Distance distance) {
290
+ STATIC_ASSERT(JSObject::FAST_ELEMENTS == 0);
291
+ cmpb(FieldOperand(map, Map::kBitField2Offset),
292
+ Map::kMaximumBitField2FastElementValue);
293
+ j(above, fail, distance);
294
+ }
295
+
296
+
282
297
  void MacroAssembler::CheckMap(Register obj,
283
298
  Handle<Map> map,
284
299
  Label* fail,
@@ -311,7 +326,7 @@ Condition MacroAssembler::IsObjectStringType(Register heap_object,
311
326
  Register instance_type) {
312
327
  mov(map, FieldOperand(heap_object, HeapObject::kMapOffset));
313
328
  movzx_b(instance_type, FieldOperand(map, Map::kInstanceTypeOffset));
314
- ASSERT(kNotStringTag != 0);
329
+ STATIC_ASSERT(kNotStringTag != 0);
315
330
  test(instance_type, Immediate(kIsNotStringMask));
316
331
  return zero;
317
332
  }
@@ -330,8 +345,9 @@ void MacroAssembler::IsInstanceJSObjectType(Register map,
330
345
  Register scratch,
331
346
  Label* fail) {
332
347
  movzx_b(scratch, FieldOperand(map, Map::kInstanceTypeOffset));
333
- sub(Operand(scratch), Immediate(FIRST_JS_OBJECT_TYPE));
334
- cmp(scratch, LAST_JS_OBJECT_TYPE - FIRST_JS_OBJECT_TYPE);
348
+ sub(Operand(scratch), Immediate(FIRST_NONCALLABLE_SPEC_OBJECT_TYPE));
349
+ cmp(scratch,
350
+ LAST_NONCALLABLE_SPEC_OBJECT_TYPE - FIRST_NONCALLABLE_SPEC_OBJECT_TYPE);
335
351
  j(above, fail);
336
352
  }
337
353
 
@@ -353,8 +369,7 @@ void MacroAssembler::FCmp() {
353
369
 
354
370
  void MacroAssembler::AbortIfNotNumber(Register object) {
355
371
  Label ok;
356
- test(object, Immediate(kSmiTagMask));
357
- j(zero, &ok);
372
+ JumpIfSmi(object, &ok);
358
373
  cmp(FieldOperand(object, HeapObject::kMapOffset),
359
374
  isolate()->factory()->heap_number_map());
360
375
  Assert(equal, "Operand not a number");
@@ -527,7 +542,12 @@ void MacroAssembler::LeaveApiExitFrame() {
527
542
  void MacroAssembler::PushTryHandler(CodeLocation try_location,
528
543
  HandlerType type) {
529
544
  // Adjust this code if not the case.
530
- ASSERT(StackHandlerConstants::kSize == 4 * kPointerSize);
545
+ STATIC_ASSERT(StackHandlerConstants::kSize == 5 * kPointerSize);
546
+ STATIC_ASSERT(StackHandlerConstants::kNextOffset == 0);
547
+ STATIC_ASSERT(StackHandlerConstants::kContextOffset == 1 * kPointerSize);
548
+ STATIC_ASSERT(StackHandlerConstants::kFPOffset == 2 * kPointerSize);
549
+ STATIC_ASSERT(StackHandlerConstants::kStateOffset == 3 * kPointerSize);
550
+ STATIC_ASSERT(StackHandlerConstants::kPCOffset == 4 * kPointerSize);
531
551
  // The pc (return address) is already on TOS.
532
552
  if (try_location == IN_JAVASCRIPT) {
533
553
  if (type == TRY_CATCH_HANDLER) {
@@ -536,6 +556,7 @@ void MacroAssembler::PushTryHandler(CodeLocation try_location,
536
556
  push(Immediate(StackHandler::TRY_FINALLY));
537
557
  }
538
558
  push(ebp);
559
+ push(esi);
539
560
  } else {
540
561
  ASSERT(try_location == IN_JS_ENTRY);
541
562
  // The frame pointer does not point to a JS frame so we save NULL
@@ -543,6 +564,7 @@ void MacroAssembler::PushTryHandler(CodeLocation try_location,
543
564
  // before dereferencing it to restore the context.
544
565
  push(Immediate(StackHandler::ENTRY));
545
566
  push(Immediate(0)); // NULL frame pointer.
567
+ push(Immediate(Smi::FromInt(0))); // No context.
546
568
  }
547
569
  // Save the current handler as the next handler.
548
570
  push(Operand::StaticVariable(ExternalReference(Isolate::k_handler_address,
@@ -555,7 +577,7 @@ void MacroAssembler::PushTryHandler(CodeLocation try_location,
555
577
 
556
578
 
557
579
  void MacroAssembler::PopTryHandler() {
558
- ASSERT_EQ(0, StackHandlerConstants::kNextOffset);
580
+ STATIC_ASSERT(StackHandlerConstants::kNextOffset == 0);
559
581
  pop(Operand::StaticVariable(ExternalReference(Isolate::k_handler_address,
560
582
  isolate())));
561
583
  add(Operand(esp), Immediate(StackHandlerConstants::kSize - kPointerSize));
@@ -564,8 +586,12 @@ void MacroAssembler::PopTryHandler() {
564
586
 
565
587
  void MacroAssembler::Throw(Register value) {
566
588
  // Adjust this code if not the case.
567
- STATIC_ASSERT(StackHandlerConstants::kSize == 4 * kPointerSize);
568
-
589
+ STATIC_ASSERT(StackHandlerConstants::kSize == 5 * kPointerSize);
590
+ STATIC_ASSERT(StackHandlerConstants::kNextOffset == 0);
591
+ STATIC_ASSERT(StackHandlerConstants::kContextOffset == 1 * kPointerSize);
592
+ STATIC_ASSERT(StackHandlerConstants::kFPOffset == 2 * kPointerSize);
593
+ STATIC_ASSERT(StackHandlerConstants::kStateOffset == 3 * kPointerSize);
594
+ STATIC_ASSERT(StackHandlerConstants::kPCOffset == 4 * kPointerSize);
569
595
  // eax must hold the exception.
570
596
  if (!value.is(eax)) {
571
597
  mov(eax, value);
@@ -576,24 +602,21 @@ void MacroAssembler::Throw(Register value) {
576
602
  isolate());
577
603
  mov(esp, Operand::StaticVariable(handler_address));
578
604
 
579
- // Restore next handler and frame pointer, discard handler state.
580
- STATIC_ASSERT(StackHandlerConstants::kNextOffset == 0);
605
+ // Restore next handler, context, and frame pointer; discard handler state.
581
606
  pop(Operand::StaticVariable(handler_address));
582
- STATIC_ASSERT(StackHandlerConstants::kFPOffset == 1 * kPointerSize);
583
- pop(ebp);
584
- pop(edx); // Remove state.
607
+ pop(esi); // Context.
608
+ pop(ebp); // Frame pointer.
609
+ pop(edx); // State.
585
610
 
586
- // Before returning we restore the context from the frame pointer if
587
- // not NULL. The frame pointer is NULL in the exception handler of
588
- // a JS entry frame.
589
- Set(esi, Immediate(0)); // Tentatively set context pointer to NULL.
611
+ // If the handler is a JS frame, restore the context to the frame.
612
+ // (edx == ENTRY) == (ebp == 0) == (esi == 0), so we could test any
613
+ // of them.
590
614
  Label skip;
591
- cmp(ebp, 0);
615
+ cmp(Operand(edx), Immediate(StackHandler::ENTRY));
592
616
  j(equal, &skip, Label::kNear);
593
- mov(esi, Operand(ebp, StandardFrameConstants::kContextOffset));
617
+ mov(Operand(ebp, StandardFrameConstants::kContextOffset), esi);
594
618
  bind(&skip);
595
619
 
596
- STATIC_ASSERT(StackHandlerConstants::kPCOffset == 3 * kPointerSize);
597
620
  ret(0);
598
621
  }
599
622
 
@@ -601,7 +624,12 @@ void MacroAssembler::Throw(Register value) {
601
624
  void MacroAssembler::ThrowUncatchable(UncatchableExceptionType type,
602
625
  Register value) {
603
626
  // Adjust this code if not the case.
604
- STATIC_ASSERT(StackHandlerConstants::kSize == 4 * kPointerSize);
627
+ STATIC_ASSERT(StackHandlerConstants::kSize == 5 * kPointerSize);
628
+ STATIC_ASSERT(StackHandlerConstants::kNextOffset == 0);
629
+ STATIC_ASSERT(StackHandlerConstants::kContextOffset == 1 * kPointerSize);
630
+ STATIC_ASSERT(StackHandlerConstants::kFPOffset == 2 * kPointerSize);
631
+ STATIC_ASSERT(StackHandlerConstants::kStateOffset == 3 * kPointerSize);
632
+ STATIC_ASSERT(StackHandlerConstants::kPCOffset == 4 * kPointerSize);
605
633
 
606
634
  // eax must hold the exception.
607
635
  if (!value.is(eax)) {
@@ -627,7 +655,6 @@ void MacroAssembler::ThrowUncatchable(UncatchableExceptionType type,
627
655
  bind(&done);
628
656
 
629
657
  // Set the top handler address to next handler past the current ENTRY handler.
630
- STATIC_ASSERT(StackHandlerConstants::kNextOffset == 0);
631
658
  pop(Operand::StaticVariable(handler_address));
632
659
 
633
660
  if (type == OUT_OF_MEMORY) {
@@ -645,15 +672,14 @@ void MacroAssembler::ThrowUncatchable(UncatchableExceptionType type,
645
672
  mov(Operand::StaticVariable(pending_exception), eax);
646
673
  }
647
674
 
648
- // Clear the context pointer.
675
+ // Discard the context saved in the handler and clear the context pointer.
676
+ pop(edx);
649
677
  Set(esi, Immediate(0));
650
678
 
651
679
  // Restore fp from handler and discard handler state.
652
- STATIC_ASSERT(StackHandlerConstants::kFPOffset == 1 * kPointerSize);
653
680
  pop(ebp);
654
681
  pop(edx); // State.
655
682
 
656
- STATIC_ASSERT(StackHandlerConstants::kPCOffset == 3 * kPointerSize);
657
683
  ret(0);
658
684
  }
659
685
 
@@ -726,6 +752,104 @@ void MacroAssembler::CheckAccessGlobalProxy(Register holder_reg,
726
752
  }
727
753
 
728
754
 
755
+ void MacroAssembler::LoadFromNumberDictionary(Label* miss,
756
+ Register elements,
757
+ Register key,
758
+ Register r0,
759
+ Register r1,
760
+ Register r2,
761
+ Register result) {
762
+ // Register use:
763
+ //
764
+ // elements - holds the slow-case elements of the receiver and is unchanged.
765
+ //
766
+ // key - holds the smi key on entry and is unchanged.
767
+ //
768
+ // Scratch registers:
769
+ //
770
+ // r0 - holds the untagged key on entry and holds the hash once computed.
771
+ //
772
+ // r1 - used to hold the capacity mask of the dictionary
773
+ //
774
+ // r2 - used for the index into the dictionary.
775
+ //
776
+ // result - holds the result on exit if the load succeeds and we fall through.
777
+
778
+ Label done;
779
+
780
+ // Compute the hash code from the untagged key. This must be kept in sync
781
+ // with ComputeIntegerHash in utils.h.
782
+ //
783
+ // hash = ~hash + (hash << 15);
784
+ mov(r1, r0);
785
+ not_(r0);
786
+ shl(r1, 15);
787
+ add(r0, Operand(r1));
788
+ // hash = hash ^ (hash >> 12);
789
+ mov(r1, r0);
790
+ shr(r1, 12);
791
+ xor_(r0, Operand(r1));
792
+ // hash = hash + (hash << 2);
793
+ lea(r0, Operand(r0, r0, times_4, 0));
794
+ // hash = hash ^ (hash >> 4);
795
+ mov(r1, r0);
796
+ shr(r1, 4);
797
+ xor_(r0, Operand(r1));
798
+ // hash = hash * 2057;
799
+ imul(r0, r0, 2057);
800
+ // hash = hash ^ (hash >> 16);
801
+ mov(r1, r0);
802
+ shr(r1, 16);
803
+ xor_(r0, Operand(r1));
804
+
805
+ // Compute capacity mask.
806
+ mov(r1, FieldOperand(elements, NumberDictionary::kCapacityOffset));
807
+ shr(r1, kSmiTagSize); // convert smi to int
808
+ dec(r1);
809
+
810
+ // Generate an unrolled loop that performs a few probes before giving up.
811
+ const int kProbes = 4;
812
+ for (int i = 0; i < kProbes; i++) {
813
+ // Use r2 for index calculations and keep the hash intact in r0.
814
+ mov(r2, r0);
815
+ // Compute the masked index: (hash + i + i * i) & mask.
816
+ if (i > 0) {
817
+ add(Operand(r2), Immediate(NumberDictionary::GetProbeOffset(i)));
818
+ }
819
+ and_(r2, Operand(r1));
820
+
821
+ // Scale the index by multiplying by the entry size.
822
+ ASSERT(NumberDictionary::kEntrySize == 3);
823
+ lea(r2, Operand(r2, r2, times_2, 0)); // r2 = r2 * 3
824
+
825
+ // Check if the key matches.
826
+ cmp(key, FieldOperand(elements,
827
+ r2,
828
+ times_pointer_size,
829
+ NumberDictionary::kElementsStartOffset));
830
+ if (i != (kProbes - 1)) {
831
+ j(equal, &done);
832
+ } else {
833
+ j(not_equal, miss);
834
+ }
835
+ }
836
+
837
+ bind(&done);
838
+ // Check that the value is a normal propety.
839
+ const int kDetailsOffset =
840
+ NumberDictionary::kElementsStartOffset + 2 * kPointerSize;
841
+ ASSERT_EQ(NORMAL, 0);
842
+ test(FieldOperand(elements, r2, times_pointer_size, kDetailsOffset),
843
+ Immediate(PropertyDetails::TypeField::mask() << kSmiTagSize));
844
+ j(not_zero, miss);
845
+
846
+ // Get the value at the masked, scaled index.
847
+ const int kValueOffset =
848
+ NumberDictionary::kElementsStartOffset + kPointerSize;
849
+ mov(result, FieldOperand(elements, r2, times_pointer_size, kValueOffset));
850
+ }
851
+
852
+
729
853
  void MacroAssembler::LoadAllocationTopHelper(Register result,
730
854
  Register scratch,
731
855
  AllocationFlags flags) {
@@ -1084,6 +1208,42 @@ void MacroAssembler::AllocateAsciiConsString(Register result,
1084
1208
  }
1085
1209
 
1086
1210
 
1211
+ void MacroAssembler::AllocateSlicedString(Register result,
1212
+ Register scratch1,
1213
+ Register scratch2,
1214
+ Label* gc_required) {
1215
+ // Allocate heap number in new space.
1216
+ AllocateInNewSpace(SlicedString::kSize,
1217
+ result,
1218
+ scratch1,
1219
+ scratch2,
1220
+ gc_required,
1221
+ TAG_OBJECT);
1222
+
1223
+ // Set the map. The other fields are left uninitialized.
1224
+ mov(FieldOperand(result, HeapObject::kMapOffset),
1225
+ Immediate(isolate()->factory()->sliced_string_map()));
1226
+ }
1227
+
1228
+
1229
+ void MacroAssembler::AllocateAsciiSlicedString(Register result,
1230
+ Register scratch1,
1231
+ Register scratch2,
1232
+ Label* gc_required) {
1233
+ // Allocate heap number in new space.
1234
+ AllocateInNewSpace(SlicedString::kSize,
1235
+ result,
1236
+ scratch1,
1237
+ scratch2,
1238
+ gc_required,
1239
+ TAG_OBJECT);
1240
+
1241
+ // Set the map. The other fields are left uninitialized.
1242
+ mov(FieldOperand(result, HeapObject::kMapOffset),
1243
+ Immediate(isolate()->factory()->sliced_ascii_string_map()));
1244
+ }
1245
+
1246
+
1087
1247
  // Copy memory, byte-by-byte, from source to destination. Not optimized for
1088
1248
  // long or aligned copies. The contents of scratch and length are destroyed.
1089
1249
  // Source and destination are incremented by length.
@@ -1165,8 +1325,7 @@ void MacroAssembler::TryGetFunctionPrototype(Register function,
1165
1325
  Register scratch,
1166
1326
  Label* miss) {
1167
1327
  // Check that the receiver isn't a smi.
1168
- test(function, Immediate(kSmiTagMask));
1169
- j(zero, miss);
1328
+ JumpIfSmi(function, miss);
1170
1329
 
1171
1330
  // Check that the function really is a function.
1172
1331
  CmpObjectType(function, JS_FUNCTION_TYPE, result);
@@ -1405,32 +1564,30 @@ Operand ApiParameterOperand(int index) {
1405
1564
  }
1406
1565
 
1407
1566
 
1408
- void MacroAssembler::PrepareCallApiFunction(int argc, Register scratch) {
1567
+ void MacroAssembler::PrepareCallApiFunction(int argc) {
1409
1568
  if (kReturnHandlesDirectly) {
1410
1569
  EnterApiExitFrame(argc);
1411
1570
  // When handles are returned directly we don't have to allocate extra
1412
1571
  // space for and pass an out parameter.
1572
+ if (emit_debug_code()) {
1573
+ mov(esi, Immediate(BitCast<int32_t>(kZapValue)));
1574
+ }
1413
1575
  } else {
1414
1576
  // We allocate two additional slots: return value and pointer to it.
1415
1577
  EnterApiExitFrame(argc + 2);
1416
1578
 
1417
1579
  // The argument slots are filled as follows:
1418
1580
  //
1419
- // n + 1: output cell
1581
+ // n + 1: output slot
1420
1582
  // n: arg n
1421
1583
  // ...
1422
1584
  // 1: arg1
1423
- // 0: pointer to the output cell
1424
- //
1425
- // Note that this is one more "argument" than the function expects
1426
- // so the out cell will have to be popped explicitly after returning
1427
- // from the function. The out cell contains Handle.
1585
+ // 0: pointer to the output slot
1428
1586
 
1429
- // pointer to out cell.
1430
- lea(scratch, Operand(esp, (argc + 1) * kPointerSize));
1431
- mov(Operand(esp, 0 * kPointerSize), scratch); // output.
1587
+ lea(esi, Operand(esp, (argc + 1) * kPointerSize));
1588
+ mov(Operand(esp, 0 * kPointerSize), esi);
1432
1589
  if (emit_debug_code()) {
1433
- mov(Operand(esp, (argc + 1) * kPointerSize), Immediate(0)); // out cell.
1590
+ mov(Operand(esi, 0), Immediate(0));
1434
1591
  }
1435
1592
  }
1436
1593
  }
@@ -1454,9 +1611,9 @@ MaybeObject* MacroAssembler::TryCallApiFunctionAndReturn(ApiFunction* function,
1454
1611
  call(function->address(), RelocInfo::RUNTIME_ENTRY);
1455
1612
 
1456
1613
  if (!kReturnHandlesDirectly) {
1457
- // The returned value is a pointer to the handle holding the result.
1458
- // Dereference this to get to the location.
1459
- mov(eax, Operand(eax, 0));
1614
+ // PrepareCallApiFunction saved pointer to the output slot into
1615
+ // callee-save register esi.
1616
+ mov(eax, Operand(esi, 0));
1460
1617
  }
1461
1618
 
1462
1619
  Label empty_handle;
@@ -1690,7 +1847,8 @@ void MacroAssembler::InvokeFunction(Register fun,
1690
1847
  void MacroAssembler::InvokeFunction(JSFunction* function,
1691
1848
  const ParameterCount& actual,
1692
1849
  InvokeFlag flag,
1693
- const CallWrapper& call_wrapper) {
1850
+ const CallWrapper& call_wrapper,
1851
+ CallKind call_kind) {
1694
1852
  ASSERT(function->is_compiled());
1695
1853
  // Get the function and setup the context.
1696
1854
  mov(edi, Immediate(Handle<JSFunction>(function)));
@@ -1702,11 +1860,11 @@ void MacroAssembler::InvokeFunction(JSFunction* function,
1702
1860
  // code field in the function to allow recompilation to take effect
1703
1861
  // without changing any of the call sites.
1704
1862
  InvokeCode(FieldOperand(edi, JSFunction::kCodeEntryOffset),
1705
- expected, actual, flag, call_wrapper);
1863
+ expected, actual, flag, call_wrapper, call_kind);
1706
1864
  } else {
1707
1865
  Handle<Code> code(function->code());
1708
1866
  InvokeCode(code, expected, actual, RelocInfo::CODE_TARGET,
1709
- flag, call_wrapper);
1867
+ flag, call_wrapper, call_kind);
1710
1868
  }
1711
1869
  }
1712
1870
 
@@ -1723,7 +1881,7 @@ void MacroAssembler::InvokeBuiltin(Builtins::JavaScript id,
1723
1881
  ParameterCount expected(0);
1724
1882
  GetBuiltinFunction(edi, id);
1725
1883
  InvokeCode(FieldOperand(edi, JSFunction::kCodeEntryOffset),
1726
- expected, expected, flag, call_wrapper);
1884
+ expected, expected, flag, call_wrapper, CALL_AS_METHOD);
1727
1885
  }
1728
1886
 
1729
1887
  void MacroAssembler::GetBuiltinFunction(Register target,
@@ -1747,12 +1905,9 @@ void MacroAssembler::GetBuiltinEntry(Register target, Builtins::JavaScript id) {
1747
1905
  void MacroAssembler::LoadContext(Register dst, int context_chain_length) {
1748
1906
  if (context_chain_length > 0) {
1749
1907
  // Move up the chain of contexts to the context containing the slot.
1750
- mov(dst, Operand(esi, Context::SlotOffset(Context::CLOSURE_INDEX)));
1751
- // Load the function context (which is the incoming, outer context).
1752
- mov(dst, FieldOperand(dst, JSFunction::kContextOffset));
1908
+ mov(dst, Operand(esi, Context::SlotOffset(Context::PREVIOUS_INDEX)));
1753
1909
  for (int i = 1; i < context_chain_length; i++) {
1754
- mov(dst, Operand(dst, Context::SlotOffset(Context::CLOSURE_INDEX)));
1755
- mov(dst, FieldOperand(dst, JSFunction::kContextOffset));
1910
+ mov(dst, Operand(dst, Context::SlotOffset(Context::PREVIOUS_INDEX)));
1756
1911
  }
1757
1912
  } else {
1758
1913
  // Slot is in the current function context. Move it into the
@@ -1761,14 +1916,14 @@ void MacroAssembler::LoadContext(Register dst, int context_chain_length) {
1761
1916
  mov(dst, esi);
1762
1917
  }
1763
1918
 
1764
- // We should not have found a 'with' context by walking the context chain
1919
+ // We should not have found a with context by walking the context chain
1765
1920
  // (i.e., the static scope chain and runtime context chain do not agree).
1766
1921
  // A variable occurring in such a scope should have slot type LOOKUP and
1767
1922
  // not CONTEXT.
1768
1923
  if (emit_debug_code()) {
1769
- cmp(dst, Operand(dst, Context::SlotOffset(Context::FCONTEXT_INDEX)));
1770
- Check(equal, "Yo dawg, I heard you liked function contexts "
1771
- "so I put function contexts in all your contexts");
1924
+ cmp(FieldOperand(dst, HeapObject::kMapOffset),
1925
+ isolate()->factory()->with_context_map());
1926
+ Check(not_equal, "Variable resolved to with context.");
1772
1927
  }
1773
1928
  }
1774
1929
 
@@ -1942,6 +2097,9 @@ void MacroAssembler::AssertFastElements(Register elements) {
1942
2097
  cmp(FieldOperand(elements, HeapObject::kMapOffset),
1943
2098
  Immediate(factory->fixed_array_map()));
1944
2099
  j(equal, &ok);
2100
+ cmp(FieldOperand(elements, HeapObject::kMapOffset),
2101
+ Immediate(factory->fixed_double_array_map()));
2102
+ j(equal, &ok);
1945
2103
  cmp(FieldOperand(elements, HeapObject::kMapOffset),
1946
2104
  Immediate(factory->fixed_cow_array_map()));
1947
2105
  j(equal, &ok);
@@ -2044,11 +2202,10 @@ void MacroAssembler::JumpIfNotBothSequentialAsciiStrings(Register object1,
2044
2202
  Register scratch2,
2045
2203
  Label* failure) {
2046
2204
  // Check that both objects are not smis.
2047
- ASSERT_EQ(0, kSmiTag);
2205
+ STATIC_ASSERT(kSmiTag == 0);
2048
2206
  mov(scratch1, Operand(object1));
2049
2207
  and_(scratch1, Operand(object2));
2050
- test(scratch1, Immediate(kSmiTagMask));
2051
- j(zero, failure);
2208
+ JumpIfSmi(scratch1, failure);
2052
2209
 
2053
2210
  // Load instance type for both strings.
2054
2211
  mov(scratch1, FieldOperand(object1, HeapObject::kMapOffset));