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
@@ -32,6 +32,7 @@
32
32
  #include "lithium-allocator.h"
33
33
  #include "lithium.h"
34
34
  #include "safepoint-table.h"
35
+ #include "utils.h"
35
36
 
36
37
  namespace v8 {
37
38
  namespace internal {
@@ -70,17 +71,12 @@ class LCodeGen;
70
71
  V(ClampDToUint8) \
71
72
  V(ClampIToUint8) \
72
73
  V(ClampTToUint8) \
73
- V(ClassOfTest) \
74
74
  V(ClassOfTestAndBranch) \
75
- V(CmpID) \
76
75
  V(CmpIDAndBranch) \
77
- V(CmpJSObjectEq) \
78
- V(CmpJSObjectEqAndBranch) \
79
- V(CmpSymbolEq) \
80
- V(CmpSymbolEqAndBranch) \
76
+ V(CmpObjectEqAndBranch) \
81
77
  V(CmpMapAndBranch) \
82
78
  V(CmpT) \
83
- V(CmpTAndBranch) \
79
+ V(CmpConstantEqAndBranch) \
84
80
  V(ConstantD) \
85
81
  V(ConstantI) \
86
82
  V(ConstantT) \
@@ -89,33 +85,25 @@ class LCodeGen;
89
85
  V(Deoptimize) \
90
86
  V(DivI) \
91
87
  V(DoubleToI) \
92
- V(ExternalArrayLength) \
93
- V(FixedArrayLength) \
88
+ V(ElementsKind) \
89
+ V(FixedArrayBaseLength) \
94
90
  V(FunctionLiteral) \
95
91
  V(GetCachedArrayIndex) \
96
92
  V(GlobalObject) \
97
93
  V(GlobalReceiver) \
98
94
  V(Goto) \
99
- V(HasCachedArrayIndex) \
100
95
  V(HasCachedArrayIndexAndBranch) \
101
- V(HasInstanceType) \
102
96
  V(HasInstanceTypeAndBranch) \
103
97
  V(In) \
104
98
  V(InstanceOf) \
105
- V(InstanceOfAndBranch) \
106
99
  V(InstanceOfKnownGlobal) \
107
100
  V(InstructionGap) \
108
101
  V(Integer32ToDouble) \
109
102
  V(InvokeFunction) \
110
- V(IsConstructCall) \
111
103
  V(IsConstructCallAndBranch) \
112
- V(IsNull) \
113
104
  V(IsNullAndBranch) \
114
- V(IsObject) \
115
105
  V(IsObjectAndBranch) \
116
- V(IsSmi) \
117
106
  V(IsSmiAndBranch) \
118
- V(IsUndetectable) \
119
107
  V(IsUndetectableAndBranch) \
120
108
  V(JSArrayLength) \
121
109
  V(Label) \
@@ -127,6 +115,7 @@ class LCodeGen;
127
115
  V(LoadGlobalCell) \
128
116
  V(LoadGlobalGeneric) \
129
117
  V(LoadKeyedFastElement) \
118
+ V(LoadKeyedFastDoubleElement) \
130
119
  V(LoadKeyedGeneric) \
131
120
  V(LoadKeyedSpecializedArrayElement) \
132
121
  V(LoadNamedField) \
@@ -152,6 +141,7 @@ class LCodeGen;
152
141
  V(StoreContextSlot) \
153
142
  V(StoreGlobalCell) \
154
143
  V(StoreGlobalGeneric) \
144
+ V(StoreKeyedFastDoubleElement) \
155
145
  V(StoreKeyedFastElement) \
156
146
  V(StoreKeyedGeneric) \
157
147
  V(StoreKeyedSpecializedArrayElement) \
@@ -163,10 +153,10 @@ class LCodeGen;
163
153
  V(StringLength) \
164
154
  V(SubI) \
165
155
  V(TaggedToI) \
156
+ V(ThisFunction) \
166
157
  V(Throw) \
167
158
  V(ToFastProperties) \
168
159
  V(Typeof) \
169
- V(TypeofIs) \
170
160
  V(TypeofIsAndBranch) \
171
161
  V(UnaryMathOperation) \
172
162
  V(UnknownOSRValue) \
@@ -225,7 +215,6 @@ class LInstruction: public ZoneObject {
225
215
  virtual bool IsGap() const { return false; }
226
216
 
227
217
  virtual bool IsControl() const { return false; }
228
- virtual void SetBranchTargets(int true_block_id, int false_block_id) { }
229
218
 
230
219
  void set_environment(LEnvironment* env) { environment_ = env; }
231
220
  LEnvironment* environment() const { return environment_; }
@@ -281,37 +270,6 @@ class LInstruction: public ZoneObject {
281
270
  };
282
271
 
283
272
 
284
- template<typename ElementType, int NumElements>
285
- class OperandContainer {
286
- public:
287
- OperandContainer() {
288
- for (int i = 0; i < NumElements; i++) elems_[i] = NULL;
289
- }
290
- int length() { return NumElements; }
291
- ElementType& operator[](int i) {
292
- ASSERT(i < length());
293
- return elems_[i];
294
- }
295
- void PrintOperandsTo(StringStream* stream);
296
-
297
- private:
298
- ElementType elems_[NumElements];
299
- };
300
-
301
-
302
- template<typename ElementType>
303
- class OperandContainer<ElementType, 0> {
304
- public:
305
- int length() { return 0; }
306
- void PrintOperandsTo(StringStream* stream) { }
307
- ElementType& operator[](int i) {
308
- UNREACHABLE();
309
- static ElementType t = 0;
310
- return t;
311
- }
312
- };
313
-
314
-
315
273
  // R = number of result operands (0 or 1).
316
274
  // I = number of input operands.
317
275
  // T = number of temporary operands.
@@ -334,9 +292,9 @@ class LTemplateInstruction: public LInstruction {
334
292
  virtual void PrintOutputOperandTo(StringStream* stream);
335
293
 
336
294
  protected:
337
- OperandContainer<LOperand*, R> results_;
338
- OperandContainer<LOperand*, I> inputs_;
339
- OperandContainer<LOperand*, T> temps_;
295
+ EmbeddedContainer<LOperand*, R> results_;
296
+ EmbeddedContainer<LOperand*, I> inputs_;
297
+ EmbeddedContainer<LOperand*, T> temps_;
340
298
  };
341
299
 
342
300
 
@@ -395,19 +353,16 @@ class LInstructionGap: public LGap {
395
353
 
396
354
  class LGoto: public LTemplateInstruction<0, 0, 0> {
397
355
  public:
398
- LGoto(int block_id, bool include_stack_check = false)
399
- : block_id_(block_id), include_stack_check_(include_stack_check) { }
356
+ explicit LGoto(int block_id) : block_id_(block_id) { }
400
357
 
401
358
  DECLARE_CONCRETE_INSTRUCTION(Goto, "goto")
402
359
  virtual void PrintDataTo(StringStream* stream);
403
360
  virtual bool IsControl() const { return true; }
404
361
 
405
362
  int block_id() const { return block_id_; }
406
- bool include_stack_check() const { return include_stack_check_; }
407
363
 
408
364
  private:
409
365
  int block_id_;
410
- bool include_stack_check_;
411
366
  };
412
367
 
413
368
 
@@ -489,16 +444,15 @@ class LControlInstruction: public LTemplateInstruction<0, I, T> {
489
444
  public:
490
445
  virtual bool IsControl() const { return true; }
491
446
 
492
- int true_block_id() const { return true_block_id_; }
493
- int false_block_id() const { return false_block_id_; }
494
- void SetBranchTargets(int true_block_id, int false_block_id) {
495
- true_block_id_ = true_block_id;
496
- false_block_id_ = false_block_id;
497
- }
447
+ int SuccessorCount() { return hydrogen()->SuccessorCount(); }
448
+ HBasicBlock* SuccessorAt(int i) { return hydrogen()->SuccessorAt(i); }
449
+ int true_block_id() { return hydrogen()->SuccessorAt(0)->block_id(); }
450
+ int false_block_id() { return hydrogen()->SuccessorAt(1)->block_id(); }
498
451
 
499
452
  private:
500
- int true_block_id_;
501
- int false_block_id_;
453
+ HControlInstruction* hydrogen() {
454
+ return HControlInstruction::cast(this->hydrogen_value());
455
+ }
502
456
  };
503
457
 
504
458
 
@@ -600,23 +554,6 @@ class LMulI: public LTemplateInstruction<1, 2, 1> {
600
554
  };
601
555
 
602
556
 
603
- class LCmpID: public LTemplateInstruction<1, 2, 0> {
604
- public:
605
- LCmpID(LOperand* left, LOperand* right) {
606
- inputs_[0] = left;
607
- inputs_[1] = right;
608
- }
609
-
610
- DECLARE_CONCRETE_INSTRUCTION(CmpID, "cmp-id")
611
- DECLARE_HYDROGEN_ACCESSOR(Compare)
612
-
613
- Token::Value op() const { return hydrogen()->token(); }
614
- bool is_double() const {
615
- return hydrogen()->GetInputRepresentation().IsDouble();
616
- }
617
- };
618
-
619
-
620
557
  class LCmpIDAndBranch: public LControlInstruction<2, 0> {
621
558
  public:
622
559
  LCmpIDAndBranch(LOperand* left, LOperand* right) {
@@ -625,7 +562,7 @@ class LCmpIDAndBranch: public LControlInstruction<2, 0> {
625
562
  }
626
563
 
627
564
  DECLARE_CONCRETE_INSTRUCTION(CmpIDAndBranch, "cmp-id-and-branch")
628
- DECLARE_HYDROGEN_ACCESSOR(Compare)
565
+ DECLARE_HYDROGEN_ACCESSOR(CompareIDAndBranch)
629
566
 
630
567
  Token::Value op() const { return hydrogen()->token(); }
631
568
  bool is_double() const {
@@ -636,12 +573,16 @@ class LCmpIDAndBranch: public LControlInstruction<2, 0> {
636
573
  };
637
574
 
638
575
 
639
- class LUnaryMathOperation: public LTemplateInstruction<1, 1, 0> {
576
+ class LUnaryMathOperation: public LTemplateInstruction<1, 2, 0> {
640
577
  public:
641
- explicit LUnaryMathOperation(LOperand* value) {
578
+ LUnaryMathOperation(LOperand* context, LOperand* value) {
579
+ inputs_[1] = context;
642
580
  inputs_[0] = value;
643
581
  }
644
582
 
583
+ LOperand* context() { return inputs_[1]; }
584
+ LOperand* value() { return inputs_[0]; }
585
+
645
586
  DECLARE_CONCRETE_INSTRUCTION(UnaryMathOperation, "unary-math-operation")
646
587
  DECLARE_HYDROGEN_ACCESSOR(UnaryMathOperation)
647
588
 
@@ -650,61 +591,27 @@ class LUnaryMathOperation: public LTemplateInstruction<1, 1, 0> {
650
591
  };
651
592
 
652
593
 
653
- class LCmpJSObjectEq: public LTemplateInstruction<1, 2, 0> {
654
- public:
655
- LCmpJSObjectEq(LOperand* left, LOperand* right) {
656
- inputs_[0] = left;
657
- inputs_[1] = right;
658
- }
659
-
660
- DECLARE_CONCRETE_INSTRUCTION(CmpJSObjectEq, "cmp-jsobject-eq")
661
- };
662
-
663
-
664
- class LCmpJSObjectEqAndBranch: public LControlInstruction<2, 0> {
665
- public:
666
- LCmpJSObjectEqAndBranch(LOperand* left, LOperand* right) {
667
- inputs_[0] = left;
668
- inputs_[1] = right;
669
- }
670
-
671
- DECLARE_CONCRETE_INSTRUCTION(CmpJSObjectEqAndBranch,
672
- "cmp-jsobject-eq-and-branch")
673
- };
674
-
675
-
676
- class LCmpSymbolEq: public LTemplateInstruction<1, 2, 0> {
594
+ class LCmpObjectEqAndBranch: public LControlInstruction<2, 0> {
677
595
  public:
678
- LCmpSymbolEq(LOperand* left, LOperand* right) {
596
+ LCmpObjectEqAndBranch(LOperand* left, LOperand* right) {
679
597
  inputs_[0] = left;
680
598
  inputs_[1] = right;
681
599
  }
682
600
 
683
- DECLARE_CONCRETE_INSTRUCTION(CmpSymbolEq, "cmp-symbol-eq")
601
+ DECLARE_CONCRETE_INSTRUCTION(CmpObjectEqAndBranch,
602
+ "cmp-object-eq-and-branch")
684
603
  };
685
604
 
686
605
 
687
- class LCmpSymbolEqAndBranch: public LControlInstruction<2, 0> {
606
+ class LCmpConstantEqAndBranch: public LControlInstruction<1, 0> {
688
607
  public:
689
- LCmpSymbolEqAndBranch(LOperand* left, LOperand* right) {
608
+ explicit LCmpConstantEqAndBranch(LOperand* left) {
690
609
  inputs_[0] = left;
691
- inputs_[1] = right;
692
- }
693
-
694
- DECLARE_CONCRETE_INSTRUCTION(CmpSymbolEqAndBranch, "cmp-symbol-eq-and-branch")
695
- };
696
-
697
-
698
- class LIsNull: public LTemplateInstruction<1, 1, 0> {
699
- public:
700
- explicit LIsNull(LOperand* value) {
701
- inputs_[0] = value;
702
610
  }
703
611
 
704
- DECLARE_CONCRETE_INSTRUCTION(IsNull, "is-null")
705
- DECLARE_HYDROGEN_ACCESSOR(IsNull)
706
-
707
- bool is_strict() const { return hydrogen()->is_strict(); }
612
+ DECLARE_CONCRETE_INSTRUCTION(CmpConstantEqAndBranch,
613
+ "cmp-constant-eq-and-branch")
614
+ DECLARE_HYDROGEN_ACCESSOR(CompareConstantEqAndBranch)
708
615
  };
709
616
 
710
617
 
@@ -716,7 +623,7 @@ class LIsNullAndBranch: public LControlInstruction<1, 1> {
716
623
  }
717
624
 
718
625
  DECLARE_CONCRETE_INSTRUCTION(IsNullAndBranch, "is-null-and-branch")
719
- DECLARE_HYDROGEN_ACCESSOR(IsNull)
626
+ DECLARE_HYDROGEN_ACCESSOR(IsNullAndBranch)
720
627
 
721
628
  bool is_strict() const { return hydrogen()->is_strict(); }
722
629
 
@@ -724,23 +631,11 @@ class LIsNullAndBranch: public LControlInstruction<1, 1> {
724
631
  };
725
632
 
726
633
 
727
- class LIsObject: public LTemplateInstruction<1, 1, 1> {
728
- public:
729
- LIsObject(LOperand* value, LOperand* temp) {
730
- inputs_[0] = value;
731
- temps_[0] = temp;
732
- }
733
-
734
- DECLARE_CONCRETE_INSTRUCTION(IsObject, "is-object")
735
- };
736
-
737
-
738
- class LIsObjectAndBranch: public LControlInstruction<1, 2> {
634
+ class LIsObjectAndBranch: public LControlInstruction<1, 1> {
739
635
  public:
740
- LIsObjectAndBranch(LOperand* value, LOperand* temp, LOperand* temp2) {
636
+ LIsObjectAndBranch(LOperand* value, LOperand* temp) {
741
637
  inputs_[0] = value;
742
638
  temps_[0] = temp;
743
- temps_[1] = temp2;
744
639
  }
745
640
 
746
641
  DECLARE_CONCRETE_INSTRUCTION(IsObjectAndBranch, "is-object-and-branch")
@@ -749,17 +644,6 @@ class LIsObjectAndBranch: public LControlInstruction<1, 2> {
749
644
  };
750
645
 
751
646
 
752
- class LIsSmi: public LTemplateInstruction<1, 1, 0> {
753
- public:
754
- explicit LIsSmi(LOperand* value) {
755
- inputs_[0] = value;
756
- }
757
-
758
- DECLARE_CONCRETE_INSTRUCTION(IsSmi, "is-smi")
759
- DECLARE_HYDROGEN_ACCESSOR(IsSmi)
760
- };
761
-
762
-
763
647
  class LIsSmiAndBranch: public LControlInstruction<1, 0> {
764
648
  public:
765
649
  explicit LIsSmiAndBranch(LOperand* value) {
@@ -767,25 +651,15 @@ class LIsSmiAndBranch: public LControlInstruction<1, 0> {
767
651
  }
768
652
 
769
653
  DECLARE_CONCRETE_INSTRUCTION(IsSmiAndBranch, "is-smi-and-branch")
654
+ DECLARE_HYDROGEN_ACCESSOR(IsSmiAndBranch)
770
655
 
771
656
  virtual void PrintDataTo(StringStream* stream);
772
657
  };
773
658
 
774
659
 
775
- class LIsUndetectable: public LTemplateInstruction<1, 1, 0> {
776
- public:
777
- explicit LIsUndetectable(LOperand* value) {
778
- inputs_[0] = value;
779
- }
780
-
781
- DECLARE_CONCRETE_INSTRUCTION(IsUndetectable, "is-undetectable")
782
- DECLARE_HYDROGEN_ACCESSOR(IsUndetectable)
783
- };
784
-
785
-
786
660
  class LIsUndetectableAndBranch: public LControlInstruction<1, 1> {
787
661
  public:
788
- explicit LIsUndetectableAndBranch(LOperand* value, LOperand* temp) {
662
+ LIsUndetectableAndBranch(LOperand* value, LOperand* temp) {
789
663
  inputs_[0] = value;
790
664
  temps_[0] = temp;
791
665
  }
@@ -797,17 +671,6 @@ class LIsUndetectableAndBranch: public LControlInstruction<1, 1> {
797
671
  };
798
672
 
799
673
 
800
- class LHasInstanceType: public LTemplateInstruction<1, 1, 0> {
801
- public:
802
- explicit LHasInstanceType(LOperand* value) {
803
- inputs_[0] = value;
804
- }
805
-
806
- DECLARE_CONCRETE_INSTRUCTION(HasInstanceType, "has-instance-type")
807
- DECLARE_HYDROGEN_ACCESSOR(HasInstanceType)
808
- };
809
-
810
-
811
674
  class LHasInstanceTypeAndBranch: public LControlInstruction<1, 1> {
812
675
  public:
813
676
  LHasInstanceTypeAndBranch(LOperand* value, LOperand* temp) {
@@ -817,7 +680,7 @@ class LHasInstanceTypeAndBranch: public LControlInstruction<1, 1> {
817
680
 
818
681
  DECLARE_CONCRETE_INSTRUCTION(HasInstanceTypeAndBranch,
819
682
  "has-instance-type-and-branch")
820
- DECLARE_HYDROGEN_ACCESSOR(HasInstanceType)
683
+ DECLARE_HYDROGEN_ACCESSOR(HasInstanceTypeAndBranch)
821
684
 
822
685
  virtual void PrintDataTo(StringStream* stream);
823
686
  };
@@ -834,17 +697,6 @@ class LGetCachedArrayIndex: public LTemplateInstruction<1, 1, 0> {
834
697
  };
835
698
 
836
699
 
837
- class LHasCachedArrayIndex: public LTemplateInstruction<1, 1, 0> {
838
- public:
839
- explicit LHasCachedArrayIndex(LOperand* value) {
840
- inputs_[0] = value;
841
- }
842
-
843
- DECLARE_CONCRETE_INSTRUCTION(HasCachedArrayIndex, "has-cached-array-index")
844
- DECLARE_HYDROGEN_ACCESSOR(HasCachedArrayIndex)
845
- };
846
-
847
-
848
700
  class LHasCachedArrayIndexAndBranch: public LControlInstruction<1, 0> {
849
701
  public:
850
702
  explicit LHasCachedArrayIndexAndBranch(LOperand* value) {
@@ -857,13 +709,6 @@ class LHasCachedArrayIndexAndBranch: public LControlInstruction<1, 0> {
857
709
  };
858
710
 
859
711
 
860
- class LIsConstructCall: public LTemplateInstruction<1, 0, 0> {
861
- public:
862
- DECLARE_CONCRETE_INSTRUCTION(IsConstructCall, "is-construct-call")
863
- DECLARE_HYDROGEN_ACCESSOR(IsConstructCall)
864
- };
865
-
866
-
867
712
  class LIsConstructCallAndBranch: public LControlInstruction<0, 1> {
868
713
  public:
869
714
  explicit LIsConstructCallAndBranch(LOperand* temp) {
@@ -875,20 +720,6 @@ class LIsConstructCallAndBranch: public LControlInstruction<0, 1> {
875
720
  };
876
721
 
877
722
 
878
- class LClassOfTest: public LTemplateInstruction<1, 1, 1> {
879
- public:
880
- LClassOfTest(LOperand* value, LOperand* temp) {
881
- inputs_[0] = value;
882
- temps_[0] = temp;
883
- }
884
-
885
- DECLARE_CONCRETE_INSTRUCTION(ClassOfTest, "class-of-test")
886
- DECLARE_HYDROGEN_ACCESSOR(ClassOfTest)
887
-
888
- virtual void PrintDataTo(StringStream* stream);
889
- };
890
-
891
-
892
723
  class LClassOfTestAndBranch: public LControlInstruction<1, 2> {
893
724
  public:
894
725
  LClassOfTestAndBranch(LOperand* value, LOperand* temp, LOperand* temp2) {
@@ -899,35 +730,22 @@ class LClassOfTestAndBranch: public LControlInstruction<1, 2> {
899
730
 
900
731
  DECLARE_CONCRETE_INSTRUCTION(ClassOfTestAndBranch,
901
732
  "class-of-test-and-branch")
902
- DECLARE_HYDROGEN_ACCESSOR(ClassOfTest)
733
+ DECLARE_HYDROGEN_ACCESSOR(ClassOfTestAndBranch)
903
734
 
904
735
  virtual void PrintDataTo(StringStream* stream);
905
736
  };
906
737
 
907
738
 
908
- class LCmpT: public LTemplateInstruction<1, 2, 0> {
739
+ class LCmpT: public LTemplateInstruction<1, 3, 0> {
909
740
  public:
910
- LCmpT(LOperand* left, LOperand* right) {
911
- inputs_[0] = left;
912
- inputs_[1] = right;
741
+ LCmpT(LOperand* context, LOperand* left, LOperand* right) {
742
+ inputs_[0] = context;
743
+ inputs_[1] = left;
744
+ inputs_[2] = right;
913
745
  }
914
746
 
915
747
  DECLARE_CONCRETE_INSTRUCTION(CmpT, "cmp-t")
916
- DECLARE_HYDROGEN_ACCESSOR(Compare)
917
-
918
- Token::Value op() const { return hydrogen()->token(); }
919
- };
920
-
921
-
922
- class LCmpTAndBranch: public LControlInstruction<2, 0> {
923
- public:
924
- LCmpTAndBranch(LOperand* left, LOperand* right) {
925
- inputs_[0] = left;
926
- inputs_[1] = right;
927
- }
928
-
929
- DECLARE_CONCRETE_INSTRUCTION(CmpTAndBranch, "cmp-t-and-branch")
930
- DECLARE_HYDROGEN_ACCESSOR(Compare)
748
+ DECLARE_HYDROGEN_ACCESSOR(CompareGeneric)
931
749
 
932
750
  Token::Value op() const { return hydrogen()->token(); }
933
751
  };
@@ -947,24 +765,11 @@ class LInstanceOf: public LTemplateInstruction<1, 3, 0> {
947
765
  };
948
766
 
949
767
 
950
- class LInstanceOfAndBranch: public LControlInstruction<3, 0> {
768
+ class LInstanceOfKnownGlobal: public LTemplateInstruction<1, 2, 1> {
951
769
  public:
952
- LInstanceOfAndBranch(LOperand* context, LOperand* left, LOperand* right) {
770
+ LInstanceOfKnownGlobal(LOperand* context, LOperand* value, LOperand* temp) {
953
771
  inputs_[0] = context;
954
- inputs_[1] = left;
955
- inputs_[2] = right;
956
- }
957
-
958
- DECLARE_CONCRETE_INSTRUCTION(InstanceOfAndBranch, "instance-of-and-branch")
959
-
960
- LOperand* context() { return inputs_[0]; }
961
- };
962
-
963
-
964
- class LInstanceOfKnownGlobal: public LTemplateInstruction<1, 1, 1> {
965
- public:
966
- LInstanceOfKnownGlobal(LOperand* value, LOperand* temp) {
967
- inputs_[0] = value;
772
+ inputs_[1] = value;
968
773
  temps_[0] = temp;
969
774
  }
970
775
 
@@ -1070,14 +875,15 @@ class LConstantT: public LTemplateInstruction<1, 0, 0> {
1070
875
  };
1071
876
 
1072
877
 
1073
- class LBranch: public LControlInstruction<1, 0> {
878
+ class LBranch: public LControlInstruction<1, 1> {
1074
879
  public:
1075
- explicit LBranch(LOperand* value) {
880
+ explicit LBranch(LOperand* value, LOperand* temp) {
1076
881
  inputs_[0] = value;
882
+ temps_[0] = temp;
1077
883
  }
1078
884
 
1079
885
  DECLARE_CONCRETE_INSTRUCTION(Branch, "branch")
1080
- DECLARE_HYDROGEN_ACCESSOR(Value)
886
+ DECLARE_HYDROGEN_ACCESSOR(Branch)
1081
887
 
1082
888
  virtual void PrintDataTo(StringStream* stream);
1083
889
  };
@@ -1115,25 +921,26 @@ class LJSArrayLength: public LTemplateInstruction<1, 1, 0> {
1115
921
  };
1116
922
 
1117
923
 
1118
- class LExternalArrayLength: public LTemplateInstruction<1, 1, 0> {
924
+ class LFixedArrayBaseLength: public LTemplateInstruction<1, 1, 0> {
1119
925
  public:
1120
- explicit LExternalArrayLength(LOperand* value) {
926
+ explicit LFixedArrayBaseLength(LOperand* value) {
1121
927
  inputs_[0] = value;
1122
928
  }
1123
929
 
1124
- DECLARE_CONCRETE_INSTRUCTION(ExternalArrayLength, "external-array-length")
1125
- DECLARE_HYDROGEN_ACCESSOR(ExternalArrayLength)
930
+ DECLARE_CONCRETE_INSTRUCTION(FixedArrayBaseLength,
931
+ "fixed-array-base-length")
932
+ DECLARE_HYDROGEN_ACCESSOR(FixedArrayBaseLength)
1126
933
  };
1127
934
 
1128
935
 
1129
- class LFixedArrayLength: public LTemplateInstruction<1, 1, 0> {
936
+ class LElementsKind: public LTemplateInstruction<1, 1, 0> {
1130
937
  public:
1131
- explicit LFixedArrayLength(LOperand* value) {
938
+ explicit LElementsKind(LOperand* value) {
1132
939
  inputs_[0] = value;
1133
940
  }
1134
941
 
1135
- DECLARE_CONCRETE_INSTRUCTION(FixedArrayLength, "fixed-array-length")
1136
- DECLARE_HYDROGEN_ACCESSOR(FixedArrayLength)
942
+ DECLARE_CONCRETE_INSTRUCTION(ElementsKind, "elements-kind")
943
+ DECLARE_HYDROGEN_ACCESSOR(ElementsKind)
1137
944
  };
1138
945
 
1139
946
 
@@ -1149,12 +956,16 @@ class LValueOf: public LTemplateInstruction<1, 1, 1> {
1149
956
  };
1150
957
 
1151
958
 
1152
- class LThrow: public LTemplateInstruction<0, 1, 0> {
959
+ class LThrow: public LTemplateInstruction<0, 2, 0> {
1153
960
  public:
1154
- explicit LThrow(LOperand* value) {
1155
- inputs_[0] = value;
961
+ LThrow(LOperand* context, LOperand* value) {
962
+ inputs_[0] = context;
963
+ inputs_[1] = value;
1156
964
  }
1157
965
 
966
+ LOperand* context() { return inputs_[0]; }
967
+ LOperand* value() { return inputs_[1]; }
968
+
1158
969
  DECLARE_CONCRETE_INSTRUCTION(Throw, "throw")
1159
970
  };
1160
971
 
@@ -1212,12 +1023,16 @@ class LArithmeticD: public LTemplateInstruction<1, 2, 0> {
1212
1023
  };
1213
1024
 
1214
1025
 
1215
- class LArithmeticT: public LTemplateInstruction<1, 2, 0> {
1026
+ class LArithmeticT: public LTemplateInstruction<1, 3, 0> {
1216
1027
  public:
1217
- LArithmeticT(Token::Value op, LOperand* left, LOperand* right)
1028
+ LArithmeticT(Token::Value op,
1029
+ LOperand* context,
1030
+ LOperand* left,
1031
+ LOperand* right)
1218
1032
  : op_(op) {
1219
- inputs_[0] = left;
1220
- inputs_[1] = right;
1033
+ inputs_[0] = context;
1034
+ inputs_[1] = left;
1035
+ inputs_[2] = right;
1221
1036
  }
1222
1037
 
1223
1038
  virtual Opcode opcode() const { return LInstruction::kArithmeticT; }
@@ -1225,6 +1040,9 @@ class LArithmeticT: public LTemplateInstruction<1, 2, 0> {
1225
1040
  virtual const char* Mnemonic() const;
1226
1041
 
1227
1042
  Token::Value op() const { return op_; }
1043
+ LOperand* context() { return inputs_[0]; }
1044
+ LOperand* left() { return inputs_[1]; }
1045
+ LOperand* right() { return inputs_[2]; }
1228
1046
 
1229
1047
  private:
1230
1048
  Token::Value op_;
@@ -1254,16 +1072,18 @@ class LLoadNamedField: public LTemplateInstruction<1, 1, 0> {
1254
1072
  };
1255
1073
 
1256
1074
 
1257
- class LLoadNamedFieldPolymorphic: public LTemplateInstruction<1, 1, 0> {
1075
+ class LLoadNamedFieldPolymorphic: public LTemplateInstruction<1, 2, 0> {
1258
1076
  public:
1259
- explicit LLoadNamedFieldPolymorphic(LOperand* object) {
1260
- inputs_[0] = object;
1077
+ LLoadNamedFieldPolymorphic(LOperand* context, LOperand* object) {
1078
+ inputs_[0] = context;
1079
+ inputs_[1] = object;
1261
1080
  }
1262
1081
 
1263
1082
  DECLARE_CONCRETE_INSTRUCTION(LoadNamedField, "load-named-field-polymorphic")
1264
1083
  DECLARE_HYDROGEN_ACCESSOR(LoadNamedFieldPolymorphic)
1265
1084
 
1266
- LOperand* object() { return inputs_[0]; }
1085
+ LOperand* context() { return inputs_[0]; }
1086
+ LOperand* object() { return inputs_[1]; }
1267
1087
  };
1268
1088
 
1269
1089
 
@@ -1333,6 +1153,23 @@ class LLoadKeyedFastElement: public LTemplateInstruction<1, 2, 0> {
1333
1153
  };
1334
1154
 
1335
1155
 
1156
+ class LLoadKeyedFastDoubleElement: public LTemplateInstruction<1, 2, 0> {
1157
+ public:
1158
+ LLoadKeyedFastDoubleElement(LOperand* elements,
1159
+ LOperand* key) {
1160
+ inputs_[0] = elements;
1161
+ inputs_[1] = key;
1162
+ }
1163
+
1164
+ DECLARE_CONCRETE_INSTRUCTION(LoadKeyedFastDoubleElement,
1165
+ "load-keyed-fast-double-element")
1166
+ DECLARE_HYDROGEN_ACCESSOR(LoadKeyedFastDoubleElement)
1167
+
1168
+ LOperand* elements() { return inputs_[0]; }
1169
+ LOperand* key() { return inputs_[1]; }
1170
+ };
1171
+
1172
+
1336
1173
  class LLoadKeyedSpecializedArrayElement: public LTemplateInstruction<1, 2, 0> {
1337
1174
  public:
1338
1175
  LLoadKeyedSpecializedArrayElement(LOperand* external_pointer,
@@ -1347,8 +1184,8 @@ class LLoadKeyedSpecializedArrayElement: public LTemplateInstruction<1, 2, 0> {
1347
1184
 
1348
1185
  LOperand* external_pointer() { return inputs_[0]; }
1349
1186
  LOperand* key() { return inputs_[1]; }
1350
- ExternalArrayType array_type() const {
1351
- return hydrogen()->array_type();
1187
+ JSObject::ElementsKind elements_kind() const {
1188
+ return hydrogen()->elements_kind();
1352
1189
  }
1353
1190
  };
1354
1191
 
@@ -1406,9 +1243,9 @@ class LStoreGlobalCell: public LTemplateInstruction<0, 1, 0> {
1406
1243
 
1407
1244
  class LStoreGlobalGeneric: public LTemplateInstruction<0, 3, 0> {
1408
1245
  public:
1409
- explicit LStoreGlobalGeneric(LOperand* context,
1410
- LOperand* global_object,
1411
- LOperand* value) {
1246
+ LStoreGlobalGeneric(LOperand* context,
1247
+ LOperand* global_object,
1248
+ LOperand* value) {
1412
1249
  inputs_[0] = context;
1413
1250
  inputs_[1] = global_object;
1414
1251
  inputs_[2] = value;
@@ -1471,6 +1308,11 @@ class LPushArgument: public LTemplateInstruction<0, 1, 0> {
1471
1308
  };
1472
1309
 
1473
1310
 
1311
+ class LThisFunction: public LTemplateInstruction<1, 0, 0> {
1312
+ DECLARE_CONCRETE_INSTRUCTION(ThisFunction, "this-function")
1313
+ };
1314
+
1315
+
1474
1316
  class LContext: public LTemplateInstruction<1, 0, 0> {
1475
1317
  public:
1476
1318
  DECLARE_CONCRETE_INSTRUCTION(Context, "context")
@@ -1641,11 +1483,15 @@ class LCallNew: public LTemplateInstruction<1, 2, 0> {
1641
1483
  };
1642
1484
 
1643
1485
 
1644
- class LCallRuntime: public LTemplateInstruction<1, 0, 0> {
1486
+ class LCallRuntime: public LTemplateInstruction<1, 1, 0> {
1645
1487
  public:
1488
+ explicit LCallRuntime(LOperand* context) {
1489
+ inputs_[0] = context;
1490
+ }
1646
1491
  DECLARE_CONCRETE_INSTRUCTION(CallRuntime, "call-runtime")
1647
1492
  DECLARE_HYDROGEN_ACCESSOR(CallRuntime)
1648
1493
 
1494
+ LOperand* context() { return inputs_[0]; }
1649
1495
  const Runtime::Function* function() const { return hydrogen()->function(); }
1650
1496
  int arity() const { return hydrogen()->argument_count(); }
1651
1497
  };
@@ -1691,7 +1537,7 @@ class LDoubleToI: public LTemplateInstruction<1, 1, 1> {
1691
1537
  }
1692
1538
 
1693
1539
  DECLARE_CONCRETE_INSTRUCTION(DoubleToI, "double-to-i")
1694
- DECLARE_HYDROGEN_ACCESSOR(Change)
1540
+ DECLARE_HYDROGEN_ACCESSOR(UnaryOperation)
1695
1541
 
1696
1542
  bool truncating() { return hydrogen()->CanTruncateToInt32(); }
1697
1543
  };
@@ -1706,7 +1552,7 @@ class LTaggedToI: public LTemplateInstruction<1, 1, 1> {
1706
1552
  }
1707
1553
 
1708
1554
  DECLARE_CONCRETE_INSTRUCTION(TaggedToI, "tagged-to-i")
1709
- DECLARE_HYDROGEN_ACCESSOR(Change)
1555
+ DECLARE_HYDROGEN_ACCESSOR(UnaryOperation)
1710
1556
 
1711
1557
  bool truncating() { return hydrogen()->CanTruncateToInt32(); }
1712
1558
  };
@@ -1729,6 +1575,7 @@ class LNumberUntagD: public LTemplateInstruction<1, 1, 0> {
1729
1575
  }
1730
1576
 
1731
1577
  DECLARE_CONCRETE_INSTRUCTION(NumberUntagD, "double-untag")
1578
+ DECLARE_HYDROGEN_ACCESSOR(Change);
1732
1579
  };
1733
1580
 
1734
1581
 
@@ -1813,6 +1660,28 @@ class LStoreKeyedFastElement: public LTemplateInstruction<0, 3, 0> {
1813
1660
  };
1814
1661
 
1815
1662
 
1663
+ class LStoreKeyedFastDoubleElement: public LTemplateInstruction<0, 3, 0> {
1664
+ public:
1665
+ LStoreKeyedFastDoubleElement(LOperand* elements,
1666
+ LOperand* key,
1667
+ LOperand* val) {
1668
+ inputs_[0] = elements;
1669
+ inputs_[1] = key;
1670
+ inputs_[2] = val;
1671
+ }
1672
+
1673
+ DECLARE_CONCRETE_INSTRUCTION(StoreKeyedFastDoubleElement,
1674
+ "store-keyed-fast-double-element")
1675
+ DECLARE_HYDROGEN_ACCESSOR(StoreKeyedFastDoubleElement)
1676
+
1677
+ virtual void PrintDataTo(StringStream* stream);
1678
+
1679
+ LOperand* elements() { return inputs_[0]; }
1680
+ LOperand* key() { return inputs_[1]; }
1681
+ LOperand* value() { return inputs_[2]; }
1682
+ };
1683
+
1684
+
1816
1685
  class LStoreKeyedSpecializedArrayElement: public LTemplateInstruction<0, 3, 0> {
1817
1686
  public:
1818
1687
  LStoreKeyedSpecializedArrayElement(LOperand* external_pointer,
@@ -1830,8 +1699,8 @@ class LStoreKeyedSpecializedArrayElement: public LTemplateInstruction<0, 3, 0> {
1830
1699
  LOperand* external_pointer() { return inputs_[0]; }
1831
1700
  LOperand* key() { return inputs_[1]; }
1832
1701
  LOperand* value() { return inputs_[2]; }
1833
- ExternalArrayType array_type() const {
1834
- return hydrogen()->array_type();
1702
+ JSObject::ElementsKind elements_kind() const {
1703
+ return hydrogen()->elements_kind();
1835
1704
  }
1836
1705
  };
1837
1706
 
@@ -1861,46 +1730,52 @@ class LStoreKeyedGeneric: public LTemplateInstruction<0, 4, 0> {
1861
1730
  };
1862
1731
 
1863
1732
 
1864
- class LStringAdd: public LTemplateInstruction<1, 2, 0> {
1733
+ class LStringAdd: public LTemplateInstruction<1, 3, 0> {
1865
1734
  public:
1866
- LStringAdd(LOperand* left, LOperand* right) {
1867
- inputs_[0] = left;
1868
- inputs_[1] = right;
1735
+ LStringAdd(LOperand* context, LOperand* left, LOperand* right) {
1736
+ inputs_[0] = context;
1737
+ inputs_[1] = left;
1738
+ inputs_[2] = right;
1869
1739
  }
1870
1740
 
1871
1741
  DECLARE_CONCRETE_INSTRUCTION(StringAdd, "string-add")
1872
1742
  DECLARE_HYDROGEN_ACCESSOR(StringAdd)
1873
1743
 
1874
- LOperand* left() { return inputs_[0]; }
1875
- LOperand* right() { return inputs_[1]; }
1744
+ LOperand* context() { return inputs_[0]; }
1745
+ LOperand* left() { return inputs_[1]; }
1746
+ LOperand* right() { return inputs_[2]; }
1876
1747
  };
1877
1748
 
1878
1749
 
1879
- class LStringCharCodeAt: public LTemplateInstruction<1, 2, 0> {
1750
+ class LStringCharCodeAt: public LTemplateInstruction<1, 3, 0> {
1880
1751
  public:
1881
- LStringCharCodeAt(LOperand* string, LOperand* index) {
1882
- inputs_[0] = string;
1883
- inputs_[1] = index;
1752
+ LStringCharCodeAt(LOperand* context, LOperand* string, LOperand* index) {
1753
+ inputs_[0] = context;
1754
+ inputs_[1] = string;
1755
+ inputs_[2] = index;
1884
1756
  }
1885
1757
 
1886
1758
  DECLARE_CONCRETE_INSTRUCTION(StringCharCodeAt, "string-char-code-at")
1887
1759
  DECLARE_HYDROGEN_ACCESSOR(StringCharCodeAt)
1888
1760
 
1889
- LOperand* string() { return inputs_[0]; }
1890
- LOperand* index() { return inputs_[1]; }
1761
+ LOperand* context() { return inputs_[0]; }
1762
+ LOperand* string() { return inputs_[1]; }
1763
+ LOperand* index() { return inputs_[2]; }
1891
1764
  };
1892
1765
 
1893
1766
 
1894
- class LStringCharFromCode: public LTemplateInstruction<1, 1, 0> {
1767
+ class LStringCharFromCode: public LTemplateInstruction<1, 2, 0> {
1895
1768
  public:
1896
- explicit LStringCharFromCode(LOperand* char_code) {
1897
- inputs_[0] = char_code;
1769
+ LStringCharFromCode(LOperand* context, LOperand* char_code) {
1770
+ inputs_[0] = context;
1771
+ inputs_[1] = char_code;
1898
1772
  }
1899
1773
 
1900
1774
  DECLARE_CONCRETE_INSTRUCTION(StringCharFromCode, "string-char-from-code")
1901
1775
  DECLARE_HYDROGEN_ACCESSOR(StringCharFromCode)
1902
1776
 
1903
- LOperand* char_code() { return inputs_[0]; }
1777
+ LOperand* context() { return inputs_[0]; }
1778
+ LOperand* char_code() { return inputs_[1]; }
1904
1779
  };
1905
1780
 
1906
1781
 
@@ -2022,8 +1897,14 @@ class LCheckNonSmi: public LTemplateInstruction<0, 1, 0> {
2022
1897
  };
2023
1898
 
2024
1899
 
2025
- class LArrayLiteral: public LTemplateInstruction<1, 0, 0> {
1900
+ class LArrayLiteral: public LTemplateInstruction<1, 1, 0> {
2026
1901
  public:
1902
+ explicit LArrayLiteral(LOperand* context) {
1903
+ inputs_[0] = context;
1904
+ }
1905
+
1906
+ LOperand* context() { return inputs_[0]; }
1907
+
2027
1908
  DECLARE_CONCRETE_INSTRUCTION(ArrayLiteral, "array-literal")
2028
1909
  DECLARE_HYDROGEN_ACCESSOR(ArrayLiteral)
2029
1910
  };
@@ -2035,22 +1916,34 @@ class LObjectLiteral: public LTemplateInstruction<1, 1, 0> {
2035
1916
  inputs_[0] = context;
2036
1917
  }
2037
1918
 
1919
+ LOperand* context() { return inputs_[0]; }
1920
+
2038
1921
  DECLARE_CONCRETE_INSTRUCTION(ObjectLiteral, "object-literal")
2039
1922
  DECLARE_HYDROGEN_ACCESSOR(ObjectLiteral)
2040
-
2041
- LOperand* context() { return inputs_[0]; }
2042
1923
  };
2043
1924
 
2044
1925
 
2045
- class LRegExpLiteral: public LTemplateInstruction<1, 0, 0> {
1926
+ class LRegExpLiteral: public LTemplateInstruction<1, 1, 0> {
2046
1927
  public:
1928
+ explicit LRegExpLiteral(LOperand* context) {
1929
+ inputs_[0] = context;
1930
+ }
1931
+
1932
+ LOperand* context() { return inputs_[0]; }
1933
+
2047
1934
  DECLARE_CONCRETE_INSTRUCTION(RegExpLiteral, "regexp-literal")
2048
1935
  DECLARE_HYDROGEN_ACCESSOR(RegExpLiteral)
2049
1936
  };
2050
1937
 
2051
1938
 
2052
- class LFunctionLiteral: public LTemplateInstruction<1, 0, 0> {
1939
+ class LFunctionLiteral: public LTemplateInstruction<1, 1, 0> {
2053
1940
  public:
1941
+ explicit LFunctionLiteral(LOperand* context) {
1942
+ inputs_[0] = context;
1943
+ }
1944
+
1945
+ LOperand* context() { return inputs_[0]; }
1946
+
2054
1947
  DECLARE_CONCRETE_INSTRUCTION(FunctionLiteral, "function-literal")
2055
1948
  DECLARE_HYDROGEN_ACCESSOR(FunctionLiteral)
2056
1949
 
@@ -2069,31 +1962,17 @@ class LToFastProperties: public LTemplateInstruction<1, 1, 0> {
2069
1962
  };
2070
1963
 
2071
1964
 
2072
- class LTypeof: public LTemplateInstruction<1, 1, 0> {
1965
+ class LTypeof: public LTemplateInstruction<1, 2, 0> {
2073
1966
  public:
2074
- explicit LTypeof(LOperand* value) {
2075
- inputs_[0] = value;
1967
+ LTypeof(LOperand* context, LOperand* value) {
1968
+ inputs_[0] = context;
1969
+ inputs_[1] = value;
2076
1970
  }
2077
1971
 
2078
1972
  DECLARE_CONCRETE_INSTRUCTION(Typeof, "typeof")
2079
1973
  };
2080
1974
 
2081
1975
 
2082
- class LTypeofIs: public LTemplateInstruction<1, 1, 0> {
2083
- public:
2084
- explicit LTypeofIs(LOperand* value) {
2085
- inputs_[0] = value;
2086
- }
2087
-
2088
- DECLARE_CONCRETE_INSTRUCTION(TypeofIs, "typeof-is")
2089
- DECLARE_HYDROGEN_ACCESSOR(TypeofIs)
2090
-
2091
- Handle<String> type_literal() { return hydrogen()->type_literal(); }
2092
-
2093
- virtual void PrintDataTo(StringStream* stream);
2094
- };
2095
-
2096
-
2097
1976
  class LTypeofIsAndBranch: public LControlInstruction<1, 0> {
2098
1977
  public:
2099
1978
  explicit LTypeofIsAndBranch(LOperand* value) {
@@ -2101,7 +1980,7 @@ class LTypeofIsAndBranch: public LControlInstruction<1, 0> {
2101
1980
  }
2102
1981
 
2103
1982
  DECLARE_CONCRETE_INSTRUCTION(TypeofIsAndBranch, "typeof-is-and-branch")
2104
- DECLARE_HYDROGEN_ACCESSOR(TypeofIs)
1983
+ DECLARE_HYDROGEN_ACCESSOR(TypeofIsAndBranch)
2105
1984
 
2106
1985
  Handle<String> type_literal() { return hydrogen()->type_literal(); }
2107
1986
 
@@ -2109,17 +1988,19 @@ class LTypeofIsAndBranch: public LControlInstruction<1, 0> {
2109
1988
  };
2110
1989
 
2111
1990
 
2112
- class LDeleteProperty: public LTemplateInstruction<1, 2, 0> {
1991
+ class LDeleteProperty: public LTemplateInstruction<1, 3, 0> {
2113
1992
  public:
2114
- LDeleteProperty(LOperand* obj, LOperand* key) {
2115
- inputs_[0] = obj;
2116
- inputs_[1] = key;
1993
+ LDeleteProperty(LOperand* context, LOperand* obj, LOperand* key) {
1994
+ inputs_[0] = context;
1995
+ inputs_[1] = obj;
1996
+ inputs_[2] = key;
2117
1997
  }
2118
1998
 
2119
1999
  DECLARE_CONCRETE_INSTRUCTION(DeleteProperty, "delete-property")
2120
2000
 
2121
- LOperand* object() { return inputs_[0]; }
2122
- LOperand* key() { return inputs_[1]; }
2001
+ LOperand* context() { return inputs_[0]; }
2002
+ LOperand* object() { return inputs_[1]; }
2003
+ LOperand* key() { return inputs_[2]; }
2123
2004
  };
2124
2005
 
2125
2006
 
@@ -2146,21 +2027,35 @@ class LOsrEntry: public LTemplateInstruction<0, 0, 0> {
2146
2027
  };
2147
2028
 
2148
2029
 
2149
- class LStackCheck: public LTemplateInstruction<0, 0, 0> {
2030
+ class LStackCheck: public LTemplateInstruction<0, 1, 0> {
2150
2031
  public:
2032
+ explicit LStackCheck(LOperand* context) {
2033
+ inputs_[0] = context;
2034
+ }
2035
+
2036
+ LOperand* context() { return inputs_[0]; }
2037
+
2151
2038
  DECLARE_CONCRETE_INSTRUCTION(StackCheck, "stack-check")
2039
+ DECLARE_HYDROGEN_ACCESSOR(StackCheck)
2040
+
2041
+ Label* done_label() { return &done_label_; }
2042
+
2043
+ private:
2044
+ Label done_label_;
2152
2045
  };
2153
2046
 
2154
2047
 
2155
- class LIn: public LTemplateInstruction<1, 2, 0> {
2048
+ class LIn: public LTemplateInstruction<1, 3, 0> {
2156
2049
  public:
2157
- LIn(LOperand* key, LOperand* object) {
2158
- inputs_[0] = key;
2159
- inputs_[1] = object;
2050
+ LIn(LOperand* context, LOperand* key, LOperand* object) {
2051
+ inputs_[0] = context;
2052
+ inputs_[1] = key;
2053
+ inputs_[2] = object;
2160
2054
  }
2161
2055
 
2162
- LOperand* key() { return inputs_[0]; }
2163
- LOperand* object() { return inputs_[1]; }
2056
+ LOperand* context() { return inputs_[0]; }
2057
+ LOperand* key() { return inputs_[1]; }
2058
+ LOperand* object() { return inputs_[2]; }
2164
2059
 
2165
2060
  DECLARE_CONCRETE_INSTRUCTION(In, "in")
2166
2061
  };
@@ -2169,7 +2064,7 @@ class LIn: public LTemplateInstruction<1, 2, 0> {
2169
2064
  class LChunkBuilder;
2170
2065
  class LChunk: public ZoneObject {
2171
2066
  public:
2172
- explicit LChunk(CompilationInfo* info, HGraph* graph)
2067
+ LChunk(CompilationInfo* info, HGraph* graph)
2173
2068
  : spill_slot_count_(0),
2174
2069
  info_(info),
2175
2070
  graph_(graph),
@@ -2342,14 +2237,18 @@ class LChunkBuilder BASE_EMBEDDED {
2342
2237
  template<int I, int T>
2343
2238
  LInstruction* DefineFixedDouble(LTemplateInstruction<1, I, T>* instr,
2344
2239
  XMMRegister reg);
2240
+ // Assigns an environment to an instruction. An instruction which can
2241
+ // deoptimize must have an environment.
2345
2242
  LInstruction* AssignEnvironment(LInstruction* instr);
2243
+ // Assigns a pointer map to an instruction. An instruction which can
2244
+ // trigger a GC or a lazy deoptimization must have a pointer map.
2346
2245
  LInstruction* AssignPointerMap(LInstruction* instr);
2347
2246
 
2348
2247
  enum CanDeoptimize { CAN_DEOPTIMIZE_EAGERLY, CANNOT_DEOPTIMIZE_EAGERLY };
2349
2248
 
2350
- // By default we assume that instruction sequences generated for calls
2351
- // cannot deoptimize eagerly and we do not attach environment to this
2352
- // instruction.
2249
+ // Marks a call for the register allocator. Assigns a pointer map to
2250
+ // support GC and lazy deoptimization. Assigns an environment to support
2251
+ // eager deoptimization if CAN_DEOPTIMIZE_EAGERLY.
2353
2252
  LInstruction* MarkAsCall(
2354
2253
  LInstruction* instr,
2355
2254
  HInstruction* hinstr,