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
@@ -631,7 +631,9 @@ function ArraySlice(start, end) {
631
631
 
632
632
  if (end_i < start_i) return result;
633
633
 
634
- if (IS_ARRAY(this)) {
634
+ if (IS_ARRAY(this) &&
635
+ (end_i > 1000) &&
636
+ (%EstimateNumberOfElements(this) < end_i)) {
635
637
  SmartSlice(this, start_i, end_i - start_i, len, result);
636
638
  } else {
637
639
  SimpleSlice(this, start_i, end_i - start_i, len, result);
@@ -740,14 +742,14 @@ function ArraySort(comparefn) {
740
742
  else return x < y ? -1 : 1;
741
743
  };
742
744
  }
743
- var global_receiver = %GetGlobalReceiver();
745
+ var receiver = %GetDefaultReceiver(comparefn);
744
746
 
745
747
  function InsertionSort(a, from, to) {
746
748
  for (var i = from + 1; i < to; i++) {
747
749
  var element = a[i];
748
750
  for (var j = i - 1; j >= from; j--) {
749
751
  var tmp = a[j];
750
- var order = %_CallFunction(global_receiver, tmp, element, comparefn);
752
+ var order = %_CallFunction(receiver, tmp, element, comparefn);
751
753
  if (order > 0) {
752
754
  a[j + 1] = tmp;
753
755
  } else {
@@ -769,14 +771,14 @@ function ArraySort(comparefn) {
769
771
  var v1 = a[to - 1];
770
772
  var middle_index = from + ((to - from) >> 1);
771
773
  var v2 = a[middle_index];
772
- var c01 = %_CallFunction(global_receiver, v0, v1, comparefn);
774
+ var c01 = %_CallFunction(receiver, v0, v1, comparefn);
773
775
  if (c01 > 0) {
774
776
  // v1 < v0, so swap them.
775
777
  var tmp = v0;
776
778
  v0 = v1;
777
779
  v1 = tmp;
778
780
  } // v0 <= v1.
779
- var c02 = %_CallFunction(global_receiver, v0, v2, comparefn);
781
+ var c02 = %_CallFunction(receiver, v0, v2, comparefn);
780
782
  if (c02 >= 0) {
781
783
  // v2 <= v0 <= v1.
782
784
  var tmp = v0;
@@ -785,7 +787,7 @@ function ArraySort(comparefn) {
785
787
  v1 = tmp;
786
788
  } else {
787
789
  // v0 <= v1 && v0 < v2
788
- var c12 = %_CallFunction(global_receiver, v1, v2, comparefn);
790
+ var c12 = %_CallFunction(receiver, v1, v2, comparefn);
789
791
  if (c12 > 0) {
790
792
  // v0 <= v2 < v1
791
793
  var tmp = v1;
@@ -806,7 +808,7 @@ function ArraySort(comparefn) {
806
808
  // From i to high_start are elements that haven't been compared yet.
807
809
  partition: for (var i = low_end + 1; i < high_start; i++) {
808
810
  var element = a[i];
809
- var order = %_CallFunction(global_receiver, element, pivot, comparefn);
811
+ var order = %_CallFunction(receiver, element, pivot, comparefn);
810
812
  if (order < 0) {
811
813
  %_SwapElements(a, i, low_end);
812
814
  low_end++;
@@ -815,7 +817,7 @@ function ArraySort(comparefn) {
815
817
  high_start--;
816
818
  if (high_start == i) break partition;
817
819
  var top_elem = a[high_start];
818
- order = %_CallFunction(global_receiver, top_elem, pivot, comparefn);
820
+ order = %_CallFunction(receiver, top_elem, pivot, comparefn);
819
821
  } while (order > 0);
820
822
  %_SwapElements(a, i, high_start);
821
823
  if (order < 0) {
@@ -994,15 +996,18 @@ function ArrayFilter(f, receiver) {
994
996
  if (!IS_FUNCTION(f)) {
995
997
  throw MakeTypeError('called_non_callable', [ f ]);
996
998
  }
999
+ if (IS_NULL_OR_UNDEFINED(receiver)) {
1000
+ receiver = %GetDefaultReceiver(f) || receiver;
1001
+ }
997
1002
  // Pull out the length so that modifications to the length in the
998
1003
  // loop will not affect the looping.
999
- var length = this.length;
1004
+ var length = ToUint32(this.length);
1000
1005
  var result = [];
1001
1006
  var result_length = 0;
1002
1007
  for (var i = 0; i < length; i++) {
1003
1008
  var current = this[i];
1004
1009
  if (!IS_UNDEFINED(current) || i in this) {
1005
- if (f.call(receiver, current, i, this)) {
1010
+ if (%_CallFunction(receiver, current, i, this, f)) {
1006
1011
  result[result_length++] = current;
1007
1012
  }
1008
1013
  }
@@ -1020,13 +1025,16 @@ function ArrayForEach(f, receiver) {
1020
1025
  if (!IS_FUNCTION(f)) {
1021
1026
  throw MakeTypeError('called_non_callable', [ f ]);
1022
1027
  }
1028
+ if (IS_NULL_OR_UNDEFINED(receiver)) {
1029
+ receiver = %GetDefaultReceiver(f) || receiver;
1030
+ }
1023
1031
  // Pull out the length so that modifications to the length in the
1024
1032
  // loop will not affect the looping.
1025
1033
  var length = TO_UINT32(this.length);
1026
1034
  for (var i = 0; i < length; i++) {
1027
1035
  var current = this[i];
1028
1036
  if (!IS_UNDEFINED(current) || i in this) {
1029
- f.call(receiver, current, i, this);
1037
+ %_CallFunction(receiver, current, i, this, f);
1030
1038
  }
1031
1039
  }
1032
1040
  }
@@ -1043,13 +1051,16 @@ function ArraySome(f, receiver) {
1043
1051
  if (!IS_FUNCTION(f)) {
1044
1052
  throw MakeTypeError('called_non_callable', [ f ]);
1045
1053
  }
1054
+ if (IS_NULL_OR_UNDEFINED(receiver)) {
1055
+ receiver = %GetDefaultReceiver(f) || receiver;
1056
+ }
1046
1057
  // Pull out the length so that modifications to the length in the
1047
1058
  // loop will not affect the looping.
1048
1059
  var length = TO_UINT32(this.length);
1049
1060
  for (var i = 0; i < length; i++) {
1050
1061
  var current = this[i];
1051
1062
  if (!IS_UNDEFINED(current) || i in this) {
1052
- if (f.call(receiver, current, i, this)) return true;
1063
+ if (%_CallFunction(receiver, current, i, this, f)) return true;
1053
1064
  }
1054
1065
  }
1055
1066
  return false;
@@ -1065,13 +1076,16 @@ function ArrayEvery(f, receiver) {
1065
1076
  if (!IS_FUNCTION(f)) {
1066
1077
  throw MakeTypeError('called_non_callable', [ f ]);
1067
1078
  }
1079
+ if (IS_NULL_OR_UNDEFINED(receiver)) {
1080
+ receiver = %GetDefaultReceiver(f) || receiver;
1081
+ }
1068
1082
  // Pull out the length so that modifications to the length in the
1069
1083
  // loop will not affect the looping.
1070
1084
  var length = TO_UINT32(this.length);
1071
1085
  for (var i = 0; i < length; i++) {
1072
1086
  var current = this[i];
1073
1087
  if (!IS_UNDEFINED(current) || i in this) {
1074
- if (!f.call(receiver, current, i, this)) return false;
1088
+ if (!%_CallFunction(receiver, current, i, this, f)) return false;
1075
1089
  }
1076
1090
  }
1077
1091
  return true;
@@ -1086,6 +1100,9 @@ function ArrayMap(f, receiver) {
1086
1100
  if (!IS_FUNCTION(f)) {
1087
1101
  throw MakeTypeError('called_non_callable', [ f ]);
1088
1102
  }
1103
+ if (IS_NULL_OR_UNDEFINED(receiver)) {
1104
+ receiver = %GetDefaultReceiver(f) || receiver;
1105
+ }
1089
1106
  // Pull out the length so that modifications to the length in the
1090
1107
  // loop will not affect the looping.
1091
1108
  var length = TO_UINT32(this.length);
@@ -1094,7 +1111,7 @@ function ArrayMap(f, receiver) {
1094
1111
  for (var i = 0; i < length; i++) {
1095
1112
  var current = this[i];
1096
1113
  if (!IS_UNDEFINED(current) || i in this) {
1097
- accumulator[i] = f.call(receiver, current, i, this);
1114
+ accumulator[i] = %_CallFunction(receiver, current, i, this, f);
1098
1115
  }
1099
1116
  }
1100
1117
  %MoveArrayContents(accumulator, result);
@@ -1231,9 +1248,10 @@ function ArrayReduce(callback, current) {
1231
1248
  if (!IS_FUNCTION(callback)) {
1232
1249
  throw MakeTypeError('called_non_callable', [callback]);
1233
1250
  }
1251
+
1234
1252
  // Pull out the length so that modifications to the length in the
1235
1253
  // loop will not affect the looping.
1236
- var length = this.length;
1254
+ var length = ToUint32(this.length);
1237
1255
  var i = 0;
1238
1256
 
1239
1257
  find_initial: if (%_ArgumentsLength() < 2) {
@@ -1247,10 +1265,11 @@ function ArrayReduce(callback, current) {
1247
1265
  throw MakeTypeError('reduce_no_initial', []);
1248
1266
  }
1249
1267
 
1268
+ var receiver = %GetDefaultReceiver(callback);
1250
1269
  for (; i < length; i++) {
1251
1270
  var element = this[i];
1252
1271
  if (!IS_UNDEFINED(element) || i in this) {
1253
- current = callback.call(null, current, element, i, this);
1272
+ current = %_CallFunction(receiver, current, element, i, this, callback);
1254
1273
  }
1255
1274
  }
1256
1275
  return current;
@@ -1265,7 +1284,7 @@ function ArrayReduceRight(callback, current) {
1265
1284
  if (!IS_FUNCTION(callback)) {
1266
1285
  throw MakeTypeError('called_non_callable', [callback]);
1267
1286
  }
1268
- var i = this.length - 1;
1287
+ var i = ToUint32(this.length) - 1;
1269
1288
 
1270
1289
  find_initial: if (%_ArgumentsLength() < 2) {
1271
1290
  for (; i >= 0; i--) {
@@ -1278,10 +1297,11 @@ function ArrayReduceRight(callback, current) {
1278
1297
  throw MakeTypeError('reduce_no_initial', []);
1279
1298
  }
1280
1299
 
1300
+ var receiver = %GetDefaultReceiver(callback);
1281
1301
  for (; i >= 0; i--) {
1282
1302
  var element = this[i];
1283
1303
  if (!IS_UNDEFINED(element) || i in this) {
1284
- current = callback.call(null, current, element, i, this);
1304
+ current = %_CallFunction(receiver, current, element, i, this, callback);
1285
1305
  }
1286
1306
  }
1287
1307
  return current;
@@ -1,4 +1,4 @@
1
- // Copyright (c) 1994-2006 Sun Microsystems Inc.
1
+ // Copyright (c) 2011 Sun Microsystems Inc.
2
2
  // All Rights Reserved.
3
3
  //
4
4
  // Redistribution and use in source and binary forms, with or without
@@ -71,9 +71,10 @@ const double DoubleConstant::one_half = 0.5;
71
71
  const double DoubleConstant::minus_zero = -0.0;
72
72
  const double DoubleConstant::uint8_max_value = 255;
73
73
  const double DoubleConstant::zero = 0.0;
74
- const double DoubleConstant::nan = OS::nan_value();
74
+ const double DoubleConstant::canonical_non_hole_nan = OS::nan_value();
75
+ const double DoubleConstant::the_hole_nan = BitCast<double>(kHoleNanInt64);
75
76
  const double DoubleConstant::negative_infinity = -V8_INFINITY;
76
- const char* RelocInfo::kFillerCommentString = "DEOPTIMIZATION PADDING";
77
+ const char* const RelocInfo::kFillerCommentString = "DEOPTIMIZATION PADDING";
77
78
 
78
79
  // -----------------------------------------------------------------------------
79
80
  // Implementation of AssemblerBase
@@ -921,9 +922,15 @@ ExternalReference ExternalReference::address_of_negative_infinity() {
921
922
  }
922
923
 
923
924
 
924
- ExternalReference ExternalReference::address_of_nan() {
925
+ ExternalReference ExternalReference::address_of_canonical_non_hole_nan() {
925
926
  return ExternalReference(reinterpret_cast<void*>(
926
- const_cast<double*>(&DoubleConstant::nan)));
927
+ const_cast<double*>(&DoubleConstant::canonical_non_hole_nan)));
928
+ }
929
+
930
+
931
+ ExternalReference ExternalReference::address_of_the_hole_nan() {
932
+ return ExternalReference(reinterpret_cast<void*>(
933
+ const_cast<double*>(&DoubleConstant::the_hole_nan)));
927
934
  }
928
935
 
929
936
 
@@ -70,7 +70,8 @@ class DoubleConstant: public AllStatic {
70
70
  static const double zero;
71
71
  static const double uint8_max_value;
72
72
  static const double negative_infinity;
73
- static const double nan;
73
+ static const double canonical_non_hole_nan;
74
+ static const double the_hole_nan;
74
75
  };
75
76
 
76
77
 
@@ -90,14 +91,18 @@ class Label BASE_EMBEDDED {
90
91
  Unuse();
91
92
  UnuseNear();
92
93
  }
93
- INLINE(~Label()) { ASSERT(!is_linked()); }
94
94
 
95
- INLINE(void Unuse()) { pos_ = 0; }
96
- INLINE(void UnuseNear()) { near_link_pos_ = 0; }
95
+ INLINE(~Label()) {
96
+ ASSERT(!is_linked());
97
+ ASSERT(!is_near_linked());
98
+ }
99
+
100
+ INLINE(void Unuse()) { pos_ = 0; }
101
+ INLINE(void UnuseNear()) { near_link_pos_ = 0; }
97
102
 
98
- INLINE(bool is_bound() const) { return pos_ < 0; }
99
- INLINE(bool is_unused() const) { return pos_ == 0 && near_link_pos_ == 0; }
100
- INLINE(bool is_linked() const) { return pos_ > 0; }
103
+ INLINE(bool is_bound() const) { return pos_ < 0; }
104
+ INLINE(bool is_unused() const) { return pos_ == 0 && near_link_pos_ == 0; }
105
+ INLINE(bool is_linked() const) { return pos_ > 0; }
101
106
  INLINE(bool is_near_linked() const) { return near_link_pos_ > 0; }
102
107
 
103
108
  // Returns the position of bound or linked labels. Cannot be used
@@ -166,7 +171,7 @@ class RelocInfo BASE_EMBEDDED {
166
171
  // where we are not sure to have enough space for patching in during
167
172
  // lazy deoptimization. This is the case if we have indirect calls for which
168
173
  // we do not normally record relocation info.
169
- static const char* kFillerCommentString;
174
+ static const char* const kFillerCommentString;
170
175
 
171
176
  // The minimum size of a comment is equal to three bytes for the extra tagged
172
177
  // pc + the tag for the data, and kPointerSize for the actual pointer to the
@@ -625,7 +630,8 @@ class ExternalReference BASE_EMBEDDED {
625
630
  static ExternalReference address_of_zero();
626
631
  static ExternalReference address_of_uint8_max_value();
627
632
  static ExternalReference address_of_negative_infinity();
628
- static ExternalReference address_of_nan();
633
+ static ExternalReference address_of_canonical_non_hole_nan();
634
+ static ExternalReference address_of_the_hole_nan();
629
635
 
630
636
  static ExternalReference math_sin_double_function(Isolate* isolate);
631
637
  static ExternalReference math_cos_double_function(Isolate* isolate);
@@ -37,68 +37,77 @@ namespace v8 {
37
37
  namespace internal {
38
38
 
39
39
 
40
- SwitchStatement::SwitchStatement(ZoneStringList* labels)
41
- : BreakableStatement(labels, TARGET_FOR_ANONYMOUS),
40
+ SwitchStatement::SwitchStatement(Isolate* isolate,
41
+ ZoneStringList* labels)
42
+ : BreakableStatement(isolate, labels, TARGET_FOR_ANONYMOUS),
42
43
  tag_(NULL), cases_(NULL) {
43
44
  }
44
45
 
45
46
 
46
- Block::Block(ZoneStringList* labels, int capacity, bool is_initializer_block)
47
- : BreakableStatement(labels, TARGET_FOR_NAMED_ONLY),
47
+ Block::Block(Isolate* isolate,
48
+ ZoneStringList* labels,
49
+ int capacity,
50
+ bool is_initializer_block)
51
+ : BreakableStatement(isolate, labels, TARGET_FOR_NAMED_ONLY),
48
52
  statements_(capacity),
49
- is_initializer_block_(is_initializer_block) {
53
+ is_initializer_block_(is_initializer_block),
54
+ block_scope_(NULL) {
50
55
  }
51
56
 
52
57
 
53
- BreakableStatement::BreakableStatement(ZoneStringList* labels, Type type)
58
+ BreakableStatement::BreakableStatement(Isolate* isolate,
59
+ ZoneStringList* labels,
60
+ Type type)
54
61
  : labels_(labels),
55
62
  type_(type),
56
- entry_id_(GetNextId()),
57
- exit_id_(GetNextId()) {
63
+ entry_id_(GetNextId(isolate)),
64
+ exit_id_(GetNextId(isolate)) {
58
65
  ASSERT(labels == NULL || labels->length() > 0);
59
66
  }
60
67
 
61
68
 
62
- IterationStatement::IterationStatement(ZoneStringList* labels)
63
- : BreakableStatement(labels, TARGET_FOR_ANONYMOUS),
69
+ IterationStatement::IterationStatement(Isolate* isolate, ZoneStringList* labels)
70
+ : BreakableStatement(isolate, labels, TARGET_FOR_ANONYMOUS),
64
71
  body_(NULL),
65
72
  continue_target_(),
66
- osr_entry_id_(GetNextId()) {
73
+ osr_entry_id_(GetNextId(isolate)) {
67
74
  }
68
75
 
69
76
 
70
- DoWhileStatement::DoWhileStatement(ZoneStringList* labels)
71
- : IterationStatement(labels),
77
+ DoWhileStatement::DoWhileStatement(Isolate* isolate, ZoneStringList* labels)
78
+ : IterationStatement(isolate, labels),
72
79
  cond_(NULL),
73
80
  condition_position_(-1),
74
- continue_id_(GetNextId()),
75
- back_edge_id_(GetNextId()) {
81
+ continue_id_(GetNextId(isolate)),
82
+ back_edge_id_(GetNextId(isolate)) {
76
83
  }
77
84
 
78
85
 
79
- WhileStatement::WhileStatement(ZoneStringList* labels)
80
- : IterationStatement(labels),
86
+ WhileStatement::WhileStatement(Isolate* isolate, ZoneStringList* labels)
87
+ : IterationStatement(isolate, labels),
81
88
  cond_(NULL),
82
89
  may_have_function_literal_(true),
83
- body_id_(GetNextId()) {
90
+ body_id_(GetNextId(isolate)) {
84
91
  }
85
92
 
86
93
 
87
- ForStatement::ForStatement(ZoneStringList* labels)
88
- : IterationStatement(labels),
94
+ ForStatement::ForStatement(Isolate* isolate, ZoneStringList* labels)
95
+ : IterationStatement(isolate, labels),
89
96
  init_(NULL),
90
97
  cond_(NULL),
91
98
  next_(NULL),
92
99
  may_have_function_literal_(true),
93
100
  loop_variable_(NULL),
94
- continue_id_(GetNextId()),
95
- body_id_(GetNextId()) {
101
+ continue_id_(GetNextId(isolate)),
102
+ body_id_(GetNextId(isolate)) {
96
103
  }
97
104
 
98
105
 
99
- ForInStatement::ForInStatement(ZoneStringList* labels)
100
- : IterationStatement(labels), each_(NULL), enumerable_(NULL),
101
- assignment_id_(GetNextId()) {
106
+ ForInStatement::ForInStatement(Isolate* isolate, ZoneStringList* labels)
107
+ : IterationStatement(isolate, labels),
108
+ each_(NULL),
109
+ enumerable_(NULL),
110
+ assignment_id_(GetNextId(isolate)) {
102
111
  }
103
112
 
104
113
 
@@ -37,11 +37,11 @@ namespace v8 {
37
37
  namespace internal {
38
38
 
39
39
  AstSentinels::AstSentinels()
40
- : this_proxy_(true),
41
- identifier_proxy_(false),
42
- valid_left_hand_side_sentinel_(),
43
- this_property_(&this_proxy_, NULL, 0),
44
- call_sentinel_(NULL, NULL, 0) {
40
+ : this_proxy_(Isolate::Current(), true),
41
+ identifier_proxy_(Isolate::Current(), false),
42
+ valid_left_hand_side_sentinel_(Isolate::Current()),
43
+ this_property_(Isolate::Current(), &this_proxy_, NULL, 0),
44
+ call_sentinel_(Isolate::Current(), NULL, NULL, 0) {
45
45
  }
46
46
 
47
47
 
@@ -72,8 +72,9 @@ CountOperation* ExpressionStatement::StatementAsCountOperation() {
72
72
  }
73
73
 
74
74
 
75
- VariableProxy::VariableProxy(Variable* var)
76
- : name_(var->name()),
75
+ VariableProxy::VariableProxy(Isolate* isolate, Variable* var)
76
+ : Expression(isolate),
77
+ name_(var->name()),
77
78
  var_(NULL), // Will be set by the call to BindTo.
78
79
  is_this_(var->is_this()),
79
80
  inside_with_(false),
@@ -83,26 +84,29 @@ VariableProxy::VariableProxy(Variable* var)
83
84
  }
84
85
 
85
86
 
86
- VariableProxy::VariableProxy(Handle<String> name,
87
+ VariableProxy::VariableProxy(Isolate* isolate,
88
+ Handle<String> name,
87
89
  bool is_this,
88
90
  bool inside_with,
89
91
  int position)
90
- : name_(name),
91
- var_(NULL),
92
- is_this_(is_this),
93
- inside_with_(inside_with),
94
- is_trivial_(false),
95
- position_(position) {
92
+ : Expression(isolate),
93
+ name_(name),
94
+ var_(NULL),
95
+ is_this_(is_this),
96
+ inside_with_(inside_with),
97
+ is_trivial_(false),
98
+ position_(position) {
96
99
  // Names must be canonicalized for fast equality checks.
97
100
  ASSERT(name->IsSymbol());
98
101
  }
99
102
 
100
103
 
101
- VariableProxy::VariableProxy(bool is_this)
102
- : var_(NULL),
103
- is_this_(is_this),
104
- inside_with_(false),
105
- is_trivial_(false) {
104
+ VariableProxy::VariableProxy(Isolate* isolate, bool is_this)
105
+ : Expression(isolate),
106
+ var_(NULL),
107
+ is_this_(is_this),
108
+ inside_with_(false),
109
+ is_trivial_(false) {
106
110
  }
107
111
 
108
112
 
@@ -120,26 +124,31 @@ void VariableProxy::BindTo(Variable* var) {
120
124
  }
121
125
 
122
126
 
123
- Assignment::Assignment(Token::Value op,
127
+ Assignment::Assignment(Isolate* isolate,
128
+ Token::Value op,
124
129
  Expression* target,
125
130
  Expression* value,
126
131
  int pos)
127
- : op_(op),
132
+ : Expression(isolate),
133
+ op_(op),
128
134
  target_(target),
129
135
  value_(value),
130
136
  pos_(pos),
131
137
  binary_operation_(NULL),
132
138
  compound_load_id_(kNoNumber),
133
- assignment_id_(GetNextId()),
139
+ assignment_id_(GetNextId(isolate)),
134
140
  block_start_(false),
135
141
  block_end_(false),
136
- is_monomorphic_(false),
137
- receiver_types_(NULL) {
142
+ is_monomorphic_(false) {
138
143
  ASSERT(Token::IsAssignmentOp(op));
139
144
  if (is_compound()) {
140
145
  binary_operation_ =
141
- new BinaryOperation(binary_op(), target, value, pos + 1);
142
- compound_load_id_ = GetNextId();
146
+ new(isolate->zone()) BinaryOperation(isolate,
147
+ binary_op(),
148
+ target,
149
+ value,
150
+ pos + 1);
151
+ compound_load_id_ = GetNextId(isolate);
143
152
  }
144
153
  }
145
154
 
@@ -186,8 +195,9 @@ ObjectLiteral::Property::Property(Literal* key, Expression* value) {
186
195
 
187
196
 
188
197
  ObjectLiteral::Property::Property(bool is_getter, FunctionLiteral* value) {
198
+ Isolate* isolate = Isolate::Current();
189
199
  emit_store_ = true;
190
- key_ = new Literal(value->name());
200
+ key_ = new(isolate->zone()) Literal(isolate, value->name());
191
201
  value_ = value;
192
202
  kind_ = is_getter ? GETTER : SETTER;
193
203
  }
@@ -293,11 +303,11 @@ void ObjectLiteral::CalculateEmitStore() {
293
303
 
294
304
  void TargetCollector::AddTarget(Label* target) {
295
305
  // Add the label to the collector, but discard duplicates.
296
- int length = targets_->length();
306
+ int length = targets_.length();
297
307
  for (int i = 0; i < length; i++) {
298
- if (targets_->at(i) == target) return;
308
+ if (targets_[i] == target) return;
299
309
  }
300
- targets_->Add(target);
310
+ targets_.Add(target);
301
311
  }
302
312
 
303
313
 
@@ -337,12 +347,64 @@ bool BinaryOperation::ResultOverwriteAllowed() {
337
347
  }
338
348
 
339
349
 
350
+ bool CompareOperation::IsLiteralCompareTypeof(Expression** expr,
351
+ Handle<String>* check) {
352
+ if (op_ != Token::EQ && op_ != Token::EQ_STRICT) return false;
353
+
354
+ UnaryOperation* left_unary = left_->AsUnaryOperation();
355
+ UnaryOperation* right_unary = right_->AsUnaryOperation();
356
+ Literal* left_literal = left_->AsLiteral();
357
+ Literal* right_literal = right_->AsLiteral();
358
+
359
+ // Check for the pattern: typeof <expression> == <string literal>.
360
+ if (left_unary != NULL && left_unary->op() == Token::TYPEOF &&
361
+ right_literal != NULL && right_literal->handle()->IsString()) {
362
+ *expr = left_unary->expression();
363
+ *check = Handle<String>::cast(right_literal->handle());
364
+ return true;
365
+ }
366
+
367
+ // Check for the pattern: <string literal> == typeof <expression>.
368
+ if (right_unary != NULL && right_unary->op() == Token::TYPEOF &&
369
+ left_literal != NULL && left_literal->handle()->IsString()) {
370
+ *expr = right_unary->expression();
371
+ *check = Handle<String>::cast(left_literal->handle());
372
+ return true;
373
+ }
374
+
375
+ return false;
376
+ }
377
+
378
+
379
+ bool CompareOperation::IsLiteralCompareUndefined(Expression** expr) {
380
+ if (op_ != Token::EQ_STRICT) return false;
381
+
382
+ UnaryOperation* left_unary = left_->AsUnaryOperation();
383
+ UnaryOperation* right_unary = right_->AsUnaryOperation();
384
+
385
+ // Check for the pattern: <expression> === void <literal>.
386
+ if (right_unary != NULL && right_unary->op() == Token::VOID &&
387
+ right_unary->expression()->AsLiteral() != NULL) {
388
+ *expr = left_;
389
+ return true;
390
+ }
391
+
392
+ // Check for the pattern: void <literal> === <expression>.
393
+ if (left_unary != NULL && left_unary->op() == Token::VOID &&
394
+ left_unary->expression()->AsLiteral() != NULL) {
395
+ *expr = right_;
396
+ return true;
397
+ }
398
+
399
+ return false;
400
+ }
401
+
402
+
340
403
  // ----------------------------------------------------------------------------
341
404
  // Inlining support
342
405
 
343
406
  bool Declaration::IsInlineable() const {
344
- UNREACHABLE();
345
- return false;
407
+ return proxy()->var()->IsStackAllocated() && fun() == NULL;
346
408
  }
347
409
 
348
410
 
@@ -363,12 +425,12 @@ bool ForInStatement::IsInlineable() const {
363
425
  }
364
426
 
365
427
 
366
- bool WithEnterStatement::IsInlineable() const {
428
+ bool WithStatement::IsInlineable() const {
367
429
  return false;
368
430
  }
369
431
 
370
432
 
371
- bool WithExitStatement::IsInlineable() const {
433
+ bool ExitContextStatement::IsInlineable() const {
372
434
  return false;
373
435
  }
374
436
 
@@ -393,11 +455,6 @@ bool TryFinallyStatement::IsInlineable() const {
393
455
  }
394
456
 
395
457
 
396
- bool CatchExtensionObject::IsInlineable() const {
397
- return false;
398
- }
399
-
400
-
401
458
  bool DebuggerStatement::IsInlineable() const {
402
459
  return false;
403
460
  }
@@ -544,6 +601,17 @@ bool CallNew::IsInlineable() const {
544
601
 
545
602
 
546
603
  bool CallRuntime::IsInlineable() const {
604
+ // Don't try to inline JS runtime calls because we don't (currently) even
605
+ // optimize them.
606
+ if (is_jsruntime()) return false;
607
+ // Don't inline the %_ArgumentsLength or %_Arguments because their
608
+ // implementation will not work. There is no stack frame to get them
609
+ // from.
610
+ if (function()->intrinsic_type == Runtime::INLINE &&
611
+ (name()->IsEqualTo(CStrVector("_ArgumentsLength")) ||
612
+ name()->IsEqualTo(CStrVector("_Arguments")))) {
613
+ return false;
614
+ }
547
615
  const int count = arguments()->length();
548
616
  for (int i = 0; i < count; ++i) {
549
617
  if (!arguments()->at(i)->IsInlineable()) return false;
@@ -582,7 +650,8 @@ bool CountOperation::IsInlineable() const {
582
650
 
583
651
  void Property::RecordTypeFeedback(TypeFeedbackOracle* oracle) {
584
652
  // Record type feedback from the oracle in the AST.
585
- is_monomorphic_ = oracle->LoadIsMonomorphic(this);
653
+ is_monomorphic_ = oracle->LoadIsMonomorphicNormal(this);
654
+ receiver_types_.Clear();
586
655
  if (key()->IsPropertyName()) {
587
656
  if (oracle->LoadIsBuiltin(this, Builtins::kLoadIC_ArrayLength)) {
588
657
  is_array_length_ = true;
@@ -595,16 +664,15 @@ void Property::RecordTypeFeedback(TypeFeedbackOracle* oracle) {
595
664
  Literal* lit_key = key()->AsLiteral();
596
665
  ASSERT(lit_key != NULL && lit_key->handle()->IsString());
597
666
  Handle<String> name = Handle<String>::cast(lit_key->handle());
598
- ZoneMapList* types = oracle->LoadReceiverTypes(this, name);
599
- receiver_types_ = types;
667
+ oracle->LoadReceiverTypes(this, name, &receiver_types_);
600
668
  }
601
669
  } else if (oracle->LoadIsBuiltin(this, Builtins::kKeyedLoadIC_String)) {
602
670
  is_string_access_ = true;
603
671
  } else if (is_monomorphic_) {
604
- monomorphic_receiver_type_ = oracle->LoadMonomorphicReceiverType(this);
605
- if (monomorphic_receiver_type_->has_external_array_elements()) {
606
- set_external_array_type(oracle->GetKeyedLoadExternalArrayType(this));
607
- }
672
+ receiver_types_.Add(oracle->LoadMonomorphicReceiverType(this));
673
+ } else if (oracle->LoadIsMegamorphicWithTypeInfo(this)) {
674
+ receiver_types_.Reserve(kMaxKeyedPolymorphism);
675
+ oracle->CollectKeyedReceiverTypes(this->id(), &receiver_types_);
608
676
  }
609
677
  }
610
678
 
@@ -612,31 +680,32 @@ void Property::RecordTypeFeedback(TypeFeedbackOracle* oracle) {
612
680
  void Assignment::RecordTypeFeedback(TypeFeedbackOracle* oracle) {
613
681
  Property* prop = target()->AsProperty();
614
682
  ASSERT(prop != NULL);
615
- is_monomorphic_ = oracle->StoreIsMonomorphic(this);
683
+ is_monomorphic_ = oracle->StoreIsMonomorphicNormal(this);
684
+ receiver_types_.Clear();
616
685
  if (prop->key()->IsPropertyName()) {
617
686
  Literal* lit_key = prop->key()->AsLiteral();
618
687
  ASSERT(lit_key != NULL && lit_key->handle()->IsString());
619
688
  Handle<String> name = Handle<String>::cast(lit_key->handle());
620
- ZoneMapList* types = oracle->StoreReceiverTypes(this, name);
621
- receiver_types_ = types;
689
+ oracle->StoreReceiverTypes(this, name, &receiver_types_);
622
690
  } else if (is_monomorphic_) {
623
- // Record receiver type for monomorphic keyed loads.
624
- monomorphic_receiver_type_ = oracle->StoreMonomorphicReceiverType(this);
625
- if (monomorphic_receiver_type_->has_external_array_elements()) {
626
- set_external_array_type(oracle->GetKeyedStoreExternalArrayType(this));
627
- }
691
+ // Record receiver type for monomorphic keyed stores.
692
+ receiver_types_.Add(oracle->StoreMonomorphicReceiverType(this));
693
+ } else if (oracle->StoreIsMegamorphicWithTypeInfo(this)) {
694
+ receiver_types_.Reserve(kMaxKeyedPolymorphism);
695
+ oracle->CollectKeyedReceiverTypes(this->id(), &receiver_types_);
628
696
  }
629
697
  }
630
698
 
631
699
 
632
700
  void CountOperation::RecordTypeFeedback(TypeFeedbackOracle* oracle) {
633
- is_monomorphic_ = oracle->StoreIsMonomorphic(this);
701
+ is_monomorphic_ = oracle->StoreIsMonomorphicNormal(this);
702
+ receiver_types_.Clear();
634
703
  if (is_monomorphic_) {
635
- // Record receiver type for monomorphic keyed loads.
636
- monomorphic_receiver_type_ = oracle->StoreMonomorphicReceiverType(this);
637
- if (monomorphic_receiver_type_->has_external_array_elements()) {
638
- set_external_array_type(oracle->GetKeyedStoreExternalArrayType(this));
639
- }
704
+ // Record receiver type for monomorphic keyed stores.
705
+ receiver_types_.Add(oracle->StoreMonomorphicReceiverType(this));
706
+ } else if (oracle->StoreIsMegamorphicWithTypeInfo(this)) {
707
+ receiver_types_.Reserve(kMaxKeyedPolymorphism);
708
+ oracle->CollectKeyedReceiverTypes(this->id(), &receiver_types_);
640
709
  }
641
710
  }
642
711
 
@@ -720,15 +789,14 @@ void Call::RecordTypeFeedback(TypeFeedbackOracle* oracle,
720
789
  Literal* key = property->key()->AsLiteral();
721
790
  ASSERT(key != NULL && key->handle()->IsString());
722
791
  Handle<String> name = Handle<String>::cast(key->handle());
723
- receiver_types_ = oracle->CallReceiverTypes(this, name, call_kind);
792
+ receiver_types_.Clear();
793
+ oracle->CallReceiverTypes(this, name, call_kind, &receiver_types_);
724
794
  #ifdef DEBUG
725
795
  if (FLAG_enable_slow_asserts) {
726
- if (receiver_types_ != NULL) {
727
- int length = receiver_types_->length();
728
- for (int i = 0; i < length; i++) {
729
- Handle<Map> map = receiver_types_->at(i);
730
- ASSERT(!map.is_null() && *map != NULL);
731
- }
796
+ int length = receiver_types_.length();
797
+ for (int i = 0; i < length; i++) {
798
+ Handle<Map> map = receiver_types_.at(i);
799
+ ASSERT(!map.is_null() && *map != NULL);
732
800
  }
733
801
  }
734
802
  #endif
@@ -736,9 +804,9 @@ void Call::RecordTypeFeedback(TypeFeedbackOracle* oracle,
736
804
  check_type_ = oracle->GetCallCheckType(this);
737
805
  if (is_monomorphic_) {
738
806
  Handle<Map> map;
739
- if (receiver_types_ != NULL && receiver_types_->length() > 0) {
807
+ if (receiver_types_.length() > 0) {
740
808
  ASSERT(check_type_ == RECEIVER_MAP_CHECK);
741
- map = receiver_types_->at(0);
809
+ map = receiver_types_.at(0);
742
810
  } else {
743
811
  ASSERT(check_type_ != RECEIVER_MAP_CHECK);
744
812
  holder_ = Handle<JSObject>(
@@ -1132,15 +1200,16 @@ RegExpAlternative::RegExpAlternative(ZoneList<RegExpTree*>* nodes)
1132
1200
  }
1133
1201
 
1134
1202
 
1135
- CaseClause::CaseClause(Expression* label,
1203
+ CaseClause::CaseClause(Isolate* isolate,
1204
+ Expression* label,
1136
1205
  ZoneList<Statement*>* statements,
1137
1206
  int pos)
1138
1207
  : label_(label),
1139
1208
  statements_(statements),
1140
1209
  position_(pos),
1141
1210
  compare_type_(NONE),
1142
- compare_id_(AstNode::GetNextId()),
1143
- entry_id_(AstNode::GetNextId()) {
1211
+ compare_id_(AstNode::GetNextId(isolate)),
1212
+ entry_id_(AstNode::GetNextId(isolate)) {
1144
1213
  }
1145
1214
 
1146
1215
  } } // namespace v8::internal