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
@@ -72,17 +72,16 @@ static void GenerateStringDictionaryReceiverCheck(MacroAssembler* masm,
72
72
  // r1: used to hold receivers map.
73
73
 
74
74
  // Check that the receiver isn't a smi.
75
- __ test(receiver, Immediate(kSmiTagMask));
76
- __ j(zero, miss);
75
+ __ JumpIfSmi(receiver, miss);
77
76
 
78
77
  // Check that the receiver is a valid JS object.
79
78
  __ mov(r1, FieldOperand(receiver, HeapObject::kMapOffset));
80
79
  __ movzx_b(r0, FieldOperand(r1, Map::kInstanceTypeOffset));
81
- __ cmp(r0, FIRST_JS_OBJECT_TYPE);
80
+ __ cmp(r0, FIRST_SPEC_OBJECT_TYPE);
82
81
  __ j(below, miss);
83
82
 
84
83
  // If this assert fails, we have to check upper bound too.
85
- ASSERT(LAST_TYPE == JS_FUNCTION_TYPE);
84
+ STATIC_ASSERT(LAST_TYPE == LAST_SPEC_OBJECT_TYPE);
86
85
 
87
86
  GenerateGlobalInstanceTypeCheck(masm, r0, miss);
88
87
 
@@ -217,105 +216,6 @@ static void GenerateDictionaryStore(MacroAssembler* masm,
217
216
  }
218
217
 
219
218
 
220
- static void GenerateNumberDictionaryLoad(MacroAssembler* masm,
221
- Label* miss,
222
- Register elements,
223
- Register key,
224
- Register r0,
225
- Register r1,
226
- Register r2,
227
- Register result) {
228
- // Register use:
229
- //
230
- // elements - holds the slow-case elements of the receiver and is unchanged.
231
- //
232
- // key - holds the smi key on entry and is unchanged.
233
- //
234
- // Scratch registers:
235
- //
236
- // r0 - holds the untagged key on entry and holds the hash once computed.
237
- //
238
- // r1 - used to hold the capacity mask of the dictionary
239
- //
240
- // r2 - used for the index into the dictionary.
241
- //
242
- // result - holds the result on exit if the load succeeds and we fall through.
243
-
244
- Label done;
245
-
246
- // Compute the hash code from the untagged key. This must be kept in sync
247
- // with ComputeIntegerHash in utils.h.
248
- //
249
- // hash = ~hash + (hash << 15);
250
- __ mov(r1, r0);
251
- __ not_(r0);
252
- __ shl(r1, 15);
253
- __ add(r0, Operand(r1));
254
- // hash = hash ^ (hash >> 12);
255
- __ mov(r1, r0);
256
- __ shr(r1, 12);
257
- __ xor_(r0, Operand(r1));
258
- // hash = hash + (hash << 2);
259
- __ lea(r0, Operand(r0, r0, times_4, 0));
260
- // hash = hash ^ (hash >> 4);
261
- __ mov(r1, r0);
262
- __ shr(r1, 4);
263
- __ xor_(r0, Operand(r1));
264
- // hash = hash * 2057;
265
- __ imul(r0, r0, 2057);
266
- // hash = hash ^ (hash >> 16);
267
- __ mov(r1, r0);
268
- __ shr(r1, 16);
269
- __ xor_(r0, Operand(r1));
270
-
271
- // Compute capacity mask.
272
- __ mov(r1, FieldOperand(elements, NumberDictionary::kCapacityOffset));
273
- __ shr(r1, kSmiTagSize); // convert smi to int
274
- __ dec(r1);
275
-
276
- // Generate an unrolled loop that performs a few probes before giving up.
277
- const int kProbes = 4;
278
- for (int i = 0; i < kProbes; i++) {
279
- // Use r2 for index calculations and keep the hash intact in r0.
280
- __ mov(r2, r0);
281
- // Compute the masked index: (hash + i + i * i) & mask.
282
- if (i > 0) {
283
- __ add(Operand(r2), Immediate(NumberDictionary::GetProbeOffset(i)));
284
- }
285
- __ and_(r2, Operand(r1));
286
-
287
- // Scale the index by multiplying by the entry size.
288
- ASSERT(NumberDictionary::kEntrySize == 3);
289
- __ lea(r2, Operand(r2, r2, times_2, 0)); // r2 = r2 * 3
290
-
291
- // Check if the key matches.
292
- __ cmp(key, FieldOperand(elements,
293
- r2,
294
- times_pointer_size,
295
- NumberDictionary::kElementsStartOffset));
296
- if (i != (kProbes - 1)) {
297
- __ j(equal, &done);
298
- } else {
299
- __ j(not_equal, miss);
300
- }
301
- }
302
-
303
- __ bind(&done);
304
- // Check that the value is a normal propety.
305
- const int kDetailsOffset =
306
- NumberDictionary::kElementsStartOffset + 2 * kPointerSize;
307
- ASSERT_EQ(NORMAL, 0);
308
- __ test(FieldOperand(elements, r2, times_pointer_size, kDetailsOffset),
309
- Immediate(PropertyDetails::TypeField::mask() << kSmiTagSize));
310
- __ j(not_zero, miss);
311
-
312
- // Get the value at the masked, scaled index.
313
- const int kValueOffset =
314
- NumberDictionary::kElementsStartOffset + kPointerSize;
315
- __ mov(result, FieldOperand(elements, r2, times_pointer_size, kValueOffset));
316
- }
317
-
318
-
319
219
  void LoadIC::GenerateArrayLength(MacroAssembler* masm) {
320
220
  // ----------- S t a t e -------------
321
221
  // -- eax : receiver
@@ -373,8 +273,7 @@ static void GenerateKeyedLoadReceiverCheck(MacroAssembler* masm,
373
273
  // map - used to hold the map of the receiver.
374
274
 
375
275
  // Check that the object isn't a smi.
376
- __ test(receiver, Immediate(kSmiTagMask));
377
- __ j(zero, slow);
276
+ __ JumpIfSmi(receiver, slow);
378
277
 
379
278
  // Get the map of the receiver.
380
279
  __ mov(map, FieldOperand(receiver, HeapObject::kMapOffset));
@@ -425,7 +324,7 @@ static void GenerateFastArrayLoad(MacroAssembler* masm,
425
324
  __ cmp(key, FieldOperand(scratch, FixedArray::kLengthOffset));
426
325
  __ j(above_equal, out_of_range);
427
326
  // Fast case: Do the load.
428
- ASSERT((kPointerSize == 4) && (kSmiTagSize == 1) && (kSmiTag == 0));
327
+ STATIC_ASSERT((kPointerSize == 4) && (kSmiTagSize == 1) && (kSmiTag == 0));
429
328
  __ mov(scratch, FieldOperand(scratch, key, times_2, FixedArray::kHeaderSize));
430
329
  __ cmp(Operand(scratch), Immediate(FACTORY->the_hole_value()));
431
330
  // In case the loaded value is the_hole we have to consult GetProperty
@@ -459,12 +358,89 @@ static void GenerateKeyStringCheck(MacroAssembler* masm,
459
358
  __ j(zero, index_string);
460
359
 
461
360
  // Is the string a symbol?
462
- ASSERT(kSymbolTag != 0);
361
+ STATIC_ASSERT(kSymbolTag != 0);
463
362
  __ test_b(FieldOperand(map, Map::kInstanceTypeOffset), kIsSymbolMask);
464
363
  __ j(zero, not_symbol);
465
364
  }
466
365
 
467
366
 
367
+ static Operand GenerateMappedArgumentsLookup(MacroAssembler* masm,
368
+ Register object,
369
+ Register key,
370
+ Register scratch1,
371
+ Register scratch2,
372
+ Label* unmapped_case,
373
+ Label* slow_case) {
374
+ Heap* heap = masm->isolate()->heap();
375
+ Factory* factory = masm->isolate()->factory();
376
+
377
+ // Check that the receiver is a JSObject. Because of the elements
378
+ // map check later, we do not need to check for interceptors or
379
+ // whether it requires access checks.
380
+ __ JumpIfSmi(object, slow_case);
381
+ // Check that the object is some kind of JSObject.
382
+ __ CmpObjectType(object, FIRST_JS_RECEIVER_TYPE, scratch1);
383
+ __ j(below, slow_case);
384
+
385
+ // Check that the key is a positive smi.
386
+ __ test(key, Immediate(0x8000001));
387
+ __ j(not_zero, slow_case);
388
+
389
+ // Load the elements into scratch1 and check its map.
390
+ Handle<Map> arguments_map(heap->non_strict_arguments_elements_map());
391
+ __ mov(scratch1, FieldOperand(object, JSObject::kElementsOffset));
392
+ __ CheckMap(scratch1, arguments_map, slow_case, DONT_DO_SMI_CHECK);
393
+
394
+ // Check if element is in the range of mapped arguments. If not, jump
395
+ // to the unmapped lookup with the parameter map in scratch1.
396
+ __ mov(scratch2, FieldOperand(scratch1, FixedArray::kLengthOffset));
397
+ __ sub(Operand(scratch2), Immediate(Smi::FromInt(2)));
398
+ __ cmp(key, Operand(scratch2));
399
+ __ j(greater_equal, unmapped_case);
400
+
401
+ // Load element index and check whether it is the hole.
402
+ const int kHeaderSize = FixedArray::kHeaderSize + 2 * kPointerSize;
403
+ __ mov(scratch2, FieldOperand(scratch1,
404
+ key,
405
+ times_half_pointer_size,
406
+ kHeaderSize));
407
+ __ cmp(scratch2, factory->the_hole_value());
408
+ __ j(equal, unmapped_case);
409
+
410
+ // Load value from context and return it. We can reuse scratch1 because
411
+ // we do not jump to the unmapped lookup (which requires the parameter
412
+ // map in scratch1).
413
+ const int kContextOffset = FixedArray::kHeaderSize;
414
+ __ mov(scratch1, FieldOperand(scratch1, kContextOffset));
415
+ return FieldOperand(scratch1,
416
+ scratch2,
417
+ times_half_pointer_size,
418
+ Context::kHeaderSize);
419
+ }
420
+
421
+
422
+ static Operand GenerateUnmappedArgumentsLookup(MacroAssembler* masm,
423
+ Register key,
424
+ Register parameter_map,
425
+ Register scratch,
426
+ Label* slow_case) {
427
+ // Element is in arguments backing store, which is referenced by the
428
+ // second element of the parameter_map.
429
+ const int kBackingStoreOffset = FixedArray::kHeaderSize + kPointerSize;
430
+ Register backing_store = parameter_map;
431
+ __ mov(backing_store, FieldOperand(parameter_map, kBackingStoreOffset));
432
+ Handle<Map> fixed_array_map(masm->isolate()->heap()->fixed_array_map());
433
+ __ CheckMap(backing_store, fixed_array_map, slow_case, DONT_DO_SMI_CHECK);
434
+ __ mov(scratch, FieldOperand(backing_store, FixedArray::kLengthOffset));
435
+ __ cmp(key, Operand(scratch));
436
+ __ j(greater_equal, slow_case);
437
+ return FieldOperand(backing_store,
438
+ key,
439
+ times_half_pointer_size,
440
+ FixedArray::kHeaderSize);
441
+ }
442
+
443
+
468
444
  void KeyedLoadIC::GenerateGeneric(MacroAssembler* masm) {
469
445
  // ----------- S t a t e -------------
470
446
  // -- eax : key
@@ -475,8 +451,7 @@ void KeyedLoadIC::GenerateGeneric(MacroAssembler* masm) {
475
451
  Label probe_dictionary, check_number_dictionary;
476
452
 
477
453
  // Check that the key is a smi.
478
- __ test(eax, Immediate(kSmiTagMask));
479
- __ j(not_zero, &check_string);
454
+ __ JumpIfNotSmi(eax, &check_string);
480
455
  __ bind(&index_smi);
481
456
  // Now the key is known to be a smi. This place is also jumped to from
482
457
  // where a numeric string is converted to a smi.
@@ -484,11 +459,8 @@ void KeyedLoadIC::GenerateGeneric(MacroAssembler* masm) {
484
459
  GenerateKeyedLoadReceiverCheck(
485
460
  masm, edx, ecx, Map::kHasIndexedInterceptor, &slow);
486
461
 
487
- // Check the "has fast elements" bit in the receiver's map which is
488
- // now in ecx.
489
- __ test_b(FieldOperand(ecx, Map::kBitField2Offset),
490
- 1 << Map::kHasFastElements);
491
- __ j(zero, &check_number_dictionary);
462
+ // Check the receiver's map to see if it has fast elements.
463
+ __ CheckFastElements(ecx, &check_number_dictionary);
492
464
 
493
465
  GenerateFastArrayLoad(masm,
494
466
  edx,
@@ -520,14 +492,13 @@ void KeyedLoadIC::GenerateGeneric(MacroAssembler* masm) {
520
492
  // Push receiver on the stack to free up a register for the dictionary
521
493
  // probing.
522
494
  __ push(edx);
523
- GenerateNumberDictionaryLoad(masm,
524
- &slow_pop_receiver,
525
- ecx,
526
- eax,
527
- ebx,
528
- edx,
529
- edi,
530
- eax);
495
+ __ LoadFromNumberDictionary(&slow_pop_receiver,
496
+ ecx,
497
+ eax,
498
+ ebx,
499
+ edx,
500
+ edi,
501
+ eax);
531
502
  // Pop receiver before returning.
532
503
  __ pop(edx);
533
504
  __ ret(0);
@@ -668,8 +639,7 @@ void KeyedLoadIC::GenerateIndexedInterceptor(MacroAssembler* masm) {
668
639
  Label slow;
669
640
 
670
641
  // Check that the receiver isn't a smi.
671
- __ test(edx, Immediate(kSmiTagMask));
672
- __ j(zero, &slow);
642
+ __ JumpIfSmi(edx, &slow);
673
643
 
674
644
  // Check that the key is an array index, that is Uint32.
675
645
  __ test(eax, Immediate(kSmiTagMask | kSmiSignMask));
@@ -702,6 +672,60 @@ void KeyedLoadIC::GenerateIndexedInterceptor(MacroAssembler* masm) {
702
672
  }
703
673
 
704
674
 
675
+ void KeyedLoadIC::GenerateNonStrictArguments(MacroAssembler* masm) {
676
+ // ----------- S t a t e -------------
677
+ // -- eax : key
678
+ // -- edx : receiver
679
+ // -- esp[0] : return address
680
+ // -----------------------------------
681
+ Label slow, notin;
682
+ Factory* factory = masm->isolate()->factory();
683
+ Operand mapped_location =
684
+ GenerateMappedArgumentsLookup(masm, edx, eax, ebx, ecx, &notin, &slow);
685
+ __ mov(eax, mapped_location);
686
+ __ Ret();
687
+ __ bind(&notin);
688
+ // The unmapped lookup expects that the parameter map is in ebx.
689
+ Operand unmapped_location =
690
+ GenerateUnmappedArgumentsLookup(masm, eax, ebx, ecx, &slow);
691
+ __ cmp(unmapped_location, factory->the_hole_value());
692
+ __ j(equal, &slow);
693
+ __ mov(eax, unmapped_location);
694
+ __ Ret();
695
+ __ bind(&slow);
696
+ GenerateMiss(masm, false);
697
+ }
698
+
699
+
700
+ void KeyedStoreIC::GenerateNonStrictArguments(MacroAssembler* masm) {
701
+ // ----------- S t a t e -------------
702
+ // -- eax : value
703
+ // -- ecx : key
704
+ // -- edx : receiver
705
+ // -- esp[0] : return address
706
+ // -----------------------------------
707
+ Label slow, notin;
708
+ Operand mapped_location =
709
+ GenerateMappedArgumentsLookup(masm, edx, ecx, ebx, edi, &notin, &slow);
710
+ __ mov(mapped_location, eax);
711
+ __ lea(ecx, mapped_location);
712
+ __ mov(edx, eax);
713
+ __ RecordWrite(ebx, ecx, edx);
714
+ __ Ret();
715
+ __ bind(&notin);
716
+ // The unmapped lookup expects that the parameter map is in ebx.
717
+ Operand unmapped_location =
718
+ GenerateUnmappedArgumentsLookup(masm, ecx, ebx, edi, &slow);
719
+ __ mov(unmapped_location, eax);
720
+ __ lea(edi, unmapped_location);
721
+ __ mov(edx, eax);
722
+ __ RecordWrite(ebx, edi, edx);
723
+ __ Ret();
724
+ __ bind(&slow);
725
+ GenerateMiss(masm, false);
726
+ }
727
+
728
+
705
729
  void KeyedStoreIC::GenerateGeneric(MacroAssembler* masm,
706
730
  StrictModeFlag strict_mode) {
707
731
  // ----------- S t a t e -------------
@@ -713,8 +737,7 @@ void KeyedStoreIC::GenerateGeneric(MacroAssembler* masm,
713
737
  Label slow, fast, array, extra;
714
738
 
715
739
  // Check that the object isn't a smi.
716
- __ test(edx, Immediate(kSmiTagMask));
717
- __ j(zero, &slow);
740
+ __ JumpIfSmi(edx, &slow);
718
741
  // Get the map from the receiver.
719
742
  __ mov(edi, FieldOperand(edx, HeapObject::kMapOffset));
720
743
  // Check that the receiver does not require access checks. We need
@@ -723,13 +746,16 @@ void KeyedStoreIC::GenerateGeneric(MacroAssembler* masm,
723
746
  1 << Map::kIsAccessCheckNeeded);
724
747
  __ j(not_zero, &slow);
725
748
  // Check that the key is a smi.
726
- __ test(ecx, Immediate(kSmiTagMask));
727
- __ j(not_zero, &slow);
749
+ __ JumpIfNotSmi(ecx, &slow);
728
750
  __ CmpInstanceType(edi, JS_ARRAY_TYPE);
729
751
  __ j(equal, &array);
730
- // Check that the object is some kind of JS object.
731
- __ CmpInstanceType(edi, FIRST_JS_OBJECT_TYPE);
752
+ // Check that the object is some kind of JSObject.
753
+ __ CmpInstanceType(edi, FIRST_JS_RECEIVER_TYPE);
732
754
  __ j(below, &slow);
755
+ __ CmpInstanceType(edi, JS_PROXY_TYPE);
756
+ __ j(equal, &slow);
757
+ __ CmpInstanceType(edi, JS_FUNCTION_PROXY_TYPE);
758
+ __ j(equal, &slow);
733
759
 
734
760
  // Object case: Check key against length in the elements array.
735
761
  // eax: value
@@ -820,8 +846,7 @@ static void GenerateMonomorphicCacheProbe(MacroAssembler* masm,
820
846
  // to probe.
821
847
  //
822
848
  // Check for number.
823
- __ test(edx, Immediate(kSmiTagMask));
824
- __ j(zero, &number);
849
+ __ JumpIfSmi(edx, &number);
825
850
  __ CmpObjectType(edx, HEAP_NUMBER_TYPE, ebx);
826
851
  __ j(not_equal, &non_number);
827
852
  __ bind(&number);
@@ -868,8 +893,7 @@ static void GenerateFunctionTailCall(MacroAssembler* masm,
868
893
  // -----------------------------------
869
894
 
870
895
  // Check that the result is not a smi.
871
- __ test(edi, Immediate(kSmiTagMask));
872
- __ j(zero, miss);
896
+ __ JumpIfSmi(edi, miss);
873
897
 
874
898
  // Check that the value is a JavaScript function, fetching its map into eax.
875
899
  __ CmpObjectType(edi, JS_FUNCTION_TYPE, eax);
@@ -877,7 +901,8 @@ static void GenerateFunctionTailCall(MacroAssembler* masm,
877
901
 
878
902
  // Invoke the function.
879
903
  ParameterCount actual(argc);
880
- __ InvokeFunction(edi, actual, JUMP_FUNCTION);
904
+ __ InvokeFunction(edi, actual, JUMP_FUNCTION,
905
+ NullCallWrapper(), CALL_AS_METHOD);
881
906
  }
882
907
 
883
908
  // The generated code falls through if the call should be handled by runtime.
@@ -949,8 +974,7 @@ static void GenerateCallMiss(MacroAssembler* masm,
949
974
  if (id == IC::kCallIC_Miss) {
950
975
  Label invoke, global;
951
976
  __ mov(edx, Operand(esp, (argc + 1) * kPointerSize)); // receiver
952
- __ test(edx, Immediate(kSmiTagMask));
953
- __ j(zero, &invoke, Label::kNear);
977
+ __ JumpIfSmi(edx, &invoke, Label::kNear);
954
978
  __ mov(ebx, FieldOperand(edx, HeapObject::kMapOffset));
955
979
  __ movzx_b(ebx, FieldOperand(ebx, Map::kInstanceTypeOffset));
956
980
  __ cmp(ebx, JS_GLOBAL_OBJECT_TYPE);
@@ -1043,8 +1067,7 @@ void KeyedCallIC::GenerateMegamorphic(MacroAssembler* masm, int argc) {
1043
1067
  Label index_smi, index_string;
1044
1068
 
1045
1069
  // Check that the key is a smi.
1046
- __ test(ecx, Immediate(kSmiTagMask));
1047
- __ j(not_zero, &check_string);
1070
+ __ JumpIfNotSmi(ecx, &check_string);
1048
1071
 
1049
1072
  __ bind(&index_smi);
1050
1073
  // Now the key is known to be a smi. This place is also jumped to from
@@ -1077,8 +1100,8 @@ void KeyedCallIC::GenerateMegamorphic(MacroAssembler* masm, int argc) {
1077
1100
  __ SmiUntag(ebx);
1078
1101
  // ebx: untagged index
1079
1102
  // Receiver in edx will be clobbered, need to reload it on miss.
1080
- GenerateNumberDictionaryLoad(
1081
- masm, &slow_reload_receiver, eax, ecx, ebx, edx, edi, edi);
1103
+ __ LoadFromNumberDictionary(
1104
+ &slow_reload_receiver, eax, ecx, ebx, edx, edi, edi);
1082
1105
  __ IncrementCounter(counters->keyed_call_generic_smi_dict(), 1);
1083
1106
  __ jmp(&do_call);
1084
1107
 
@@ -1144,6 +1167,35 @@ void KeyedCallIC::GenerateMegamorphic(MacroAssembler* masm, int argc) {
1144
1167
  }
1145
1168
 
1146
1169
 
1170
+ void KeyedCallIC::GenerateNonStrictArguments(MacroAssembler* masm,
1171
+ int argc) {
1172
+ // ----------- S t a t e -------------
1173
+ // -- ecx : name
1174
+ // -- esp[0] : return address
1175
+ // -- esp[(argc - n) * 4] : arg[n] (zero-based)
1176
+ // -- ...
1177
+ // -- esp[(argc + 1) * 4] : receiver
1178
+ // -----------------------------------
1179
+ Label slow, notin;
1180
+ Factory* factory = masm->isolate()->factory();
1181
+ __ mov(edx, Operand(esp, (argc + 1) * kPointerSize));
1182
+ Operand mapped_location =
1183
+ GenerateMappedArgumentsLookup(masm, edx, ecx, ebx, eax, &notin, &slow);
1184
+ __ mov(edi, mapped_location);
1185
+ GenerateFunctionTailCall(masm, argc, &slow);
1186
+ __ bind(&notin);
1187
+ // The unmapped lookup expects that the parameter map is in ebx.
1188
+ Operand unmapped_location =
1189
+ GenerateUnmappedArgumentsLookup(masm, ecx, ebx, eax, &slow);
1190
+ __ cmp(unmapped_location, factory->the_hole_value());
1191
+ __ j(equal, &slow);
1192
+ __ mov(edi, unmapped_location);
1193
+ GenerateFunctionTailCall(masm, argc, &slow);
1194
+ __ bind(&slow);
1195
+ GenerateMiss(masm, argc);
1196
+ }
1197
+
1198
+
1147
1199
  void KeyedCallIC::GenerateNormal(MacroAssembler* masm, int argc) {
1148
1200
  // ----------- S t a t e -------------
1149
1201
  // -- ecx : name
@@ -1155,8 +1207,7 @@ void KeyedCallIC::GenerateNormal(MacroAssembler* masm, int argc) {
1155
1207
 
1156
1208
  // Check if the name is a string.
1157
1209
  Label miss;
1158
- __ test(ecx, Immediate(kSmiTagMask));
1159
- __ j(zero, &miss);
1210
+ __ JumpIfSmi(ecx, &miss);
1160
1211
  Condition cond = masm->IsObjectStringType(ecx, eax, eax);
1161
1212
  __ j(NegateCondition(cond), &miss);
1162
1213
  GenerateCallNormal(masm, argc);
@@ -1341,8 +1392,7 @@ void StoreIC::GenerateArrayLength(MacroAssembler* masm) {
1341
1392
  Register scratch = ebx;
1342
1393
 
1343
1394
  // Check that the receiver isn't a smi.
1344
- __ test(receiver, Immediate(kSmiTagMask));
1345
- __ j(zero, &miss);
1395
+ __ JumpIfSmi(receiver, &miss);
1346
1396
 
1347
1397
  // Check that the object is a JS array.
1348
1398
  __ CmpObjectType(receiver, JS_ARRAY_TYPE, scratch);
@@ -1356,8 +1406,7 @@ void StoreIC::GenerateArrayLength(MacroAssembler* masm) {
1356
1406
  __ j(not_equal, &miss);
1357
1407
 
1358
1408
  // Check that value is a smi.
1359
- __ test(value, Immediate(kSmiTagMask));
1360
- __ j(not_zero, &miss);
1409
+ __ JumpIfNotSmi(value, &miss);
1361
1410
 
1362
1411
  // Prepare tail call to StoreIC_ArrayLength.
1363
1412
  __ pop(scratch);