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
@@ -116,14 +116,14 @@ class HBasicBlock: public ZoneObject {
116
116
 
117
117
  bool HasParentLoopHeader() const { return parent_loop_header_ != NULL; }
118
118
 
119
- void SetJoinId(int id);
119
+ void SetJoinId(int ast_id);
120
120
 
121
121
  void Finish(HControlInstruction* last);
122
122
  void FinishExit(HControlInstruction* instruction);
123
- void Goto(HBasicBlock* block, bool include_stack_check = false);
123
+ void Goto(HBasicBlock* block);
124
124
 
125
125
  int PredecessorIndexOf(HBasicBlock* predecessor) const;
126
- void AddSimulate(int id) { AddInstruction(CreateSimulate(id)); }
126
+ void AddSimulate(int ast_id) { AddInstruction(CreateSimulate(ast_id)); }
127
127
  void AssignCommonDominator(HBasicBlock* other);
128
128
 
129
129
  void FinishExitWithDeoptimization(HDeoptimize::UseEnvironment has_uses) {
@@ -143,6 +143,9 @@ class HBasicBlock: public ZoneObject {
143
143
  bool IsInlineReturnTarget() const { return is_inline_return_target_; }
144
144
  void MarkAsInlineReturnTarget() { is_inline_return_target_ = true; }
145
145
 
146
+ bool IsDeoptimizing() const { return is_deoptimizing_; }
147
+ void MarkAsDeoptimizing() { is_deoptimizing_ = true; }
148
+
146
149
  inline Zone* zone();
147
150
 
148
151
  #ifdef DEBUG
@@ -153,7 +156,7 @@ class HBasicBlock: public ZoneObject {
153
156
  void RegisterPredecessor(HBasicBlock* pred);
154
157
  void AddDominatedBlock(HBasicBlock* block);
155
158
 
156
- HSimulate* CreateSimulate(int id);
159
+ HSimulate* CreateSimulate(int ast_id);
157
160
  HDeoptimize* CreateDeoptimize(HDeoptimize::UseEnvironment has_uses);
158
161
 
159
162
  int block_id_;
@@ -175,13 +178,17 @@ class HBasicBlock: public ZoneObject {
175
178
  ZoneList<int> deleted_phis_;
176
179
  HBasicBlock* parent_loop_header_;
177
180
  bool is_inline_return_target_;
181
+ bool is_deoptimizing_;
178
182
  };
179
183
 
180
184
 
181
185
  class HLoopInformation: public ZoneObject {
182
186
  public:
183
187
  explicit HLoopInformation(HBasicBlock* loop_header)
184
- : back_edges_(4), loop_header_(loop_header), blocks_(8) {
188
+ : back_edges_(4),
189
+ loop_header_(loop_header),
190
+ blocks_(8),
191
+ stack_check_(NULL) {
185
192
  blocks_.Add(loop_header);
186
193
  }
187
194
  virtual ~HLoopInformation() {}
@@ -192,12 +199,18 @@ class HLoopInformation: public ZoneObject {
192
199
  HBasicBlock* GetLastBackEdge() const;
193
200
  void RegisterBackEdge(HBasicBlock* block);
194
201
 
202
+ HStackCheck* stack_check() const { return stack_check_; }
203
+ void set_stack_check(HStackCheck* stack_check) {
204
+ stack_check_ = stack_check;
205
+ }
206
+
195
207
  private:
196
208
  void AddBlock(HBasicBlock* block);
197
209
 
198
210
  ZoneList<HBasicBlock*> back_edges_;
199
211
  HBasicBlock* loop_header_;
200
212
  ZoneList<HBasicBlock*> blocks_;
213
+ HStackCheck* stack_check_;
201
214
  };
202
215
 
203
216
 
@@ -216,6 +229,7 @@ class HGraph: public ZoneObject {
216
229
  void InitializeInferredTypes();
217
230
  void InsertTypeConversions();
218
231
  void InsertRepresentationChanges();
232
+ void MarkDeoptimizeOnUndefined();
219
233
  void ComputeMinusZeroChecks();
220
234
  bool ProcessArgumentsObject();
221
235
  void EliminateRedundantPhis();
@@ -223,9 +237,15 @@ class HGraph: public ZoneObject {
223
237
  void Canonicalize();
224
238
  void OrderBlocks();
225
239
  void AssignDominators();
240
+ void ReplaceCheckedValues();
241
+ void PropagateDeoptimizingMark();
226
242
 
227
243
  // Returns false if there are phi-uses of the arguments-object
228
244
  // which are not supported by the optimizing compiler.
245
+ bool CheckPhis();
246
+
247
+ // Returns false if there are phi-uses of hole values comming
248
+ // from uninitialized consts.
229
249
  bool CollectPhis();
230
250
 
231
251
  Handle<Code> Compile(CompilationInfo* info);
@@ -238,6 +258,7 @@ class HGraph: public ZoneObject {
238
258
  HConstant* GetConstantMinus1();
239
259
  HConstant* GetConstantTrue();
240
260
  HConstant* GetConstantFalse();
261
+ HConstant* GetConstantHole();
241
262
 
242
263
  HBasicBlock* CreateBasicBlock();
243
264
  HArgumentsObject* GetArgumentsObject() const {
@@ -276,8 +297,10 @@ class HGraph: public ZoneObject {
276
297
  HConstant* GetConstant(SetOncePointer<HConstant>* pointer,
277
298
  Object* value);
278
299
 
300
+ void MarkAsDeoptimizingRecursively(HBasicBlock* block);
279
301
  void InsertTypeConversions(HInstruction* instr);
280
302
  void PropagateMinusZeroChecks(HValue* value, BitVector* visited);
303
+ void RecursivelyMarkPhiDeoptimizeOnUndefined(HPhi* phi);
281
304
  void InsertRepresentationChangeForUse(HValue* value,
282
305
  HValue* use_value,
283
306
  int use_index,
@@ -299,6 +322,7 @@ class HGraph: public ZoneObject {
299
322
  SetOncePointer<HConstant> constant_minus1_;
300
323
  SetOncePointer<HConstant> constant_true_;
301
324
  SetOncePointer<HConstant> constant_false_;
325
+ SetOncePointer<HConstant> constant_hole_;
302
326
  SetOncePointer<HArgumentsObject> arguments_object_;
303
327
 
304
328
  DISALLOW_COPY_AND_ASSIGN(HGraph);
@@ -310,8 +334,6 @@ Zone* HBasicBlock::zone() { return graph_->zone(); }
310
334
 
311
335
  class HEnvironment: public ZoneObject {
312
336
  public:
313
- enum CompilationPhase { HYDROGEN, LITHIUM };
314
-
315
337
  HEnvironment(HEnvironment* outer,
316
338
  Scope* scope,
317
339
  Handle<JSFunction> closure);
@@ -398,12 +420,9 @@ class HEnvironment: public ZoneObject {
398
420
 
399
421
  // Create an "inlined version" of this environment, where the original
400
422
  // environment is the outer environment but the top expression stack
401
- // elements are moved to an inner environment as parameters. If
402
- // is_speculative, the argument values are expected to be PushArgument
403
- // instructions, otherwise they are the actual values.
423
+ // elements are moved to an inner environment as parameters.
404
424
  HEnvironment* CopyForInlining(Handle<JSFunction> target,
405
425
  FunctionLiteral* function,
406
- CompilationPhase compilation_phase,
407
426
  HConstant* undefined,
408
427
  CallKind call_kind) const;
409
428
 
@@ -484,6 +503,12 @@ class AstContext {
484
503
  // the instruction as value.
485
504
  virtual void ReturnInstruction(HInstruction* instr, int ast_id) = 0;
486
505
 
506
+ // Finishes the current basic block and materialize a boolean for
507
+ // value context, nothing for effect, generate a branch for test context.
508
+ // Call this function in tail position in the Visit functions for
509
+ // expressions.
510
+ virtual void ReturnControl(HControlInstruction* instr, int ast_id) = 0;
511
+
487
512
  void set_for_typeof(bool for_typeof) { for_typeof_ = for_typeof; }
488
513
  bool is_for_typeof() { return for_typeof_; }
489
514
 
@@ -518,6 +543,7 @@ class EffectContext: public AstContext {
518
543
 
519
544
  virtual void ReturnValue(HValue* value);
520
545
  virtual void ReturnInstruction(HInstruction* instr, int ast_id);
546
+ virtual void ReturnControl(HControlInstruction* instr, int ast_id);
521
547
  };
522
548
 
523
549
 
@@ -530,6 +556,7 @@ class ValueContext: public AstContext {
530
556
 
531
557
  virtual void ReturnValue(HValue* value);
532
558
  virtual void ReturnInstruction(HInstruction* instr, int ast_id);
559
+ virtual void ReturnControl(HControlInstruction* instr, int ast_id);
533
560
 
534
561
  bool arguments_allowed() { return flag_ == ARGUMENTS_ALLOWED; }
535
562
 
@@ -541,21 +568,25 @@ class ValueContext: public AstContext {
541
568
  class TestContext: public AstContext {
542
569
  public:
543
570
  TestContext(HGraphBuilder* owner,
571
+ Expression* condition,
544
572
  HBasicBlock* if_true,
545
573
  HBasicBlock* if_false)
546
574
  : AstContext(owner, Expression::kTest),
575
+ condition_(condition),
547
576
  if_true_(if_true),
548
577
  if_false_(if_false) {
549
578
  }
550
579
 
551
580
  virtual void ReturnValue(HValue* value);
552
581
  virtual void ReturnInstruction(HInstruction* instr, int ast_id);
582
+ virtual void ReturnControl(HControlInstruction* instr, int ast_id);
553
583
 
554
584
  static TestContext* cast(AstContext* context) {
555
585
  ASSERT(context->IsTest());
556
586
  return reinterpret_cast<TestContext*>(context);
557
587
  }
558
588
 
589
+ Expression* condition() const { return condition_; }
559
590
  HBasicBlock* if_true() const { return if_true_; }
560
591
  HBasicBlock* if_false() const { return if_false_; }
561
592
 
@@ -564,6 +595,7 @@ class TestContext: public AstContext {
564
595
  // control flow.
565
596
  void BuildBranch(HValue* value);
566
597
 
598
+ Expression* condition_;
567
599
  HBasicBlock* if_true_;
568
600
  HBasicBlock* if_false_;
569
601
  };
@@ -680,7 +712,7 @@ class HGraphBuilder: public AstVisitor {
680
712
 
681
713
  // Adding instructions.
682
714
  HInstruction* AddInstruction(HInstruction* instr);
683
- void AddSimulate(int id);
715
+ void AddSimulate(int ast_id);
684
716
 
685
717
  // Bailout environment manipulation.
686
718
  void Push(HValue* value) { environment()->Push(value); }
@@ -688,6 +720,12 @@ class HGraphBuilder: public AstVisitor {
688
720
 
689
721
  void Bailout(const char* reason);
690
722
 
723
+ HBasicBlock* CreateJoin(HBasicBlock* first,
724
+ HBasicBlock* second,
725
+ int join_id);
726
+
727
+ TypeFeedbackOracle* oracle() const { return function_state()->oracle(); }
728
+
691
729
  private:
692
730
  // Type of a member function that generates inline code for a native function.
693
731
  typedef void (HGraphBuilder::*InlineFunctionGenerator)(CallRuntime* call);
@@ -716,7 +754,6 @@ class HGraphBuilder: public AstVisitor {
716
754
  CompilationInfo* info() const {
717
755
  return function_state()->compilation_info();
718
756
  }
719
- TypeFeedbackOracle* oracle() const { return function_state()->oracle(); }
720
757
 
721
758
  AstContext* call_context() const {
722
759
  return function_state()->call_context();
@@ -751,16 +788,15 @@ class HGraphBuilder: public AstVisitor {
751
788
  void VisitNot(UnaryOperation* expr);
752
789
 
753
790
  void VisitComma(BinaryOperation* expr);
754
- void VisitAndOr(BinaryOperation* expr, bool is_logical_and);
755
- void VisitCommon(BinaryOperation* expr);
791
+ void VisitLogicalExpression(BinaryOperation* expr);
792
+ void VisitArithmeticExpression(BinaryOperation* expr);
756
793
 
757
794
  void PreProcessOsrEntry(IterationStatement* statement);
758
795
  // True iff. we are compiling for OSR and the statement is the entry.
759
796
  bool HasOsrEntryAt(IterationStatement* statement);
760
-
761
- HBasicBlock* CreateJoin(HBasicBlock* first,
762
- HBasicBlock* second,
763
- int join_id);
797
+ void VisitLoopBody(IterationStatement* stmt,
798
+ HBasicBlock* loop_entry,
799
+ BreakAndContinueInfo* break_info);
764
800
 
765
801
  // Create a back edge in the flow graph. body_exit is the predecessor
766
802
  // block and loop_entry is the successor block. loop_successor is the
@@ -795,8 +831,9 @@ class HGraphBuilder: public AstVisitor {
795
831
  HBasicBlock* false_block);
796
832
 
797
833
  // Visit an argument subexpression and emit a push to the outgoing
798
- // arguments.
799
- void VisitArgument(Expression* expr);
834
+ // arguments. Returns the hydrogen value that was pushed.
835
+ HValue* VisitArgument(Expression* expr);
836
+
800
837
  void VisitArgumentList(ZoneList<Expression*>* arguments);
801
838
 
802
839
  // Visit a list of expressions from left to right, each in a value context.
@@ -837,7 +874,10 @@ class HGraphBuilder: public AstVisitor {
837
874
  bool is_store);
838
875
 
839
876
  bool TryArgumentsAccess(Property* expr);
877
+
878
+ // Try to optimize fun.apply(receiver, arguments) pattern.
840
879
  bool TryCallApply(Call* expr);
880
+
841
881
  bool TryInline(Call* expr);
842
882
  bool TryInlineBuiltinFunction(Call* expr,
843
883
  HValue* receiver,
@@ -861,25 +901,24 @@ class HGraphBuilder: public AstVisitor {
861
901
  void HandlePolymorphicStoreNamedField(Assignment* expr,
862
902
  HValue* object,
863
903
  HValue* value,
864
- ZoneMapList* types,
904
+ SmallMapList* types,
865
905
  Handle<String> name);
866
906
  void HandlePolymorphicCallNamed(Call* expr,
867
907
  HValue* receiver,
868
- ZoneMapList* types,
908
+ SmallMapList* types,
869
909
  Handle<String> name);
870
-
871
- HCompareSymbolEq* BuildSymbolCompare(HValue* left,
872
- HValue* right,
873
- Token::Value op);
874
- HStringCharCodeAt* BuildStringCharCodeAt(HValue* string,
910
+ void HandleLiteralCompareTypeof(CompareOperation* compare_expr,
911
+ Expression* expr,
912
+ Handle<String> check);
913
+ void HandleLiteralCompareUndefined(CompareOperation* compare_expr,
914
+ Expression* expr);
915
+
916
+ HStringCharCodeAt* BuildStringCharCodeAt(HValue* context,
917
+ HValue* string,
875
918
  HValue* index);
876
919
  HInstruction* BuildBinaryOperation(BinaryOperation* expr,
877
920
  HValue* left,
878
921
  HValue* right);
879
- HInstruction* BuildBinaryOperation(Token::Value op,
880
- HValue* left,
881
- HValue* right,
882
- TypeInfo info);
883
922
  HInstruction* BuildIncrement(bool returns_original_input,
884
923
  CountOperation* expr);
885
924
  HLoadNamedField* BuildLoadNamedField(HValue* object,
@@ -888,18 +927,37 @@ class HGraphBuilder: public AstVisitor {
888
927
  LookupResult* result,
889
928
  bool smi_and_map_check);
890
929
  HInstruction* BuildLoadNamedGeneric(HValue* object, Property* expr);
891
- HInstruction* BuildLoadKeyedFastElement(HValue* object,
892
- HValue* key,
893
- Property* expr);
894
- HInstruction* BuildLoadKeyedSpecializedArrayElement(HValue* object,
895
- HValue* key,
896
- Property* expr);
897
930
  HInstruction* BuildLoadKeyedGeneric(HValue* object,
898
931
  HValue* key);
899
-
900
- HInstruction* BuildLoadKeyed(HValue* obj,
901
- HValue* key,
902
- Property* prop);
932
+ HInstruction* BuildExternalArrayElementAccess(
933
+ HValue* external_elements,
934
+ HValue* checked_key,
935
+ HValue* val,
936
+ JSObject::ElementsKind elements_kind,
937
+ bool is_store);
938
+
939
+ HInstruction* BuildMonomorphicElementAccess(HValue* object,
940
+ HValue* key,
941
+ HValue* val,
942
+ Expression* expr,
943
+ bool is_store);
944
+ HValue* HandlePolymorphicElementAccess(HValue* object,
945
+ HValue* key,
946
+ HValue* val,
947
+ Expression* prop,
948
+ int ast_id,
949
+ int position,
950
+ bool is_store,
951
+ bool* has_side_effects);
952
+
953
+ HValue* HandleKeyedElementAccess(HValue* obj,
954
+ HValue* key,
955
+ HValue* val,
956
+ Expression* expr,
957
+ int ast_id,
958
+ int position,
959
+ bool is_store,
960
+ bool* has_side_effects);
903
961
 
904
962
  HInstruction* BuildLoadNamed(HValue* object,
905
963
  Property* prop,
@@ -921,22 +979,6 @@ class HGraphBuilder: public AstVisitor {
921
979
  HValue* key,
922
980
  HValue* value);
923
981
 
924
- HInstruction* BuildStoreKeyedFastElement(HValue* object,
925
- HValue* key,
926
- HValue* val,
927
- Expression* expr);
928
-
929
- HInstruction* BuildStoreKeyedSpecializedArrayElement(
930
- HValue* object,
931
- HValue* key,
932
- HValue* val,
933
- Expression* expr);
934
-
935
- HInstruction* BuildStoreKeyed(HValue* object,
936
- HValue* key,
937
- HValue* value,
938
- Expression* assignment);
939
-
940
982
  HValue* BuildContextChainWalk(Variable* var);
941
983
 
942
984
  void AddCheckConstantFunction(Call* expr,
@@ -1050,7 +1092,6 @@ class HStatistics: public Malloced {
1050
1092
  }
1051
1093
 
1052
1094
  private:
1053
-
1054
1095
  HStatistics()
1055
1096
  : timing_(5),
1056
1097
  names_(5),
@@ -1174,11 +1215,6 @@ class HTracer: public Malloced {
1174
1215
  trace_.Add("%s \"B%d\"\n", name, block_id);
1175
1216
  }
1176
1217
 
1177
- void PrintBlockProperty(const char* name, int block_id1, int block_id2) {
1178
- PrintIndent();
1179
- trace_.Add("%s \"B%d\" \"B%d\"\n", name, block_id1, block_id2);
1180
- }
1181
-
1182
1218
  void PrintIntProperty(const char* name, int value) {
1183
1219
  PrintIndent();
1184
1220
  trace_.Add("%s %d\n", name, value);
@@ -449,6 +449,13 @@ void Assembler::push(const Operand& src) {
449
449
  }
450
450
 
451
451
 
452
+ void Assembler::push(Handle<Object> handle) {
453
+ EnsureSpace ensure_space(this);
454
+ EMIT(0x68);
455
+ emit(handle);
456
+ }
457
+
458
+
452
459
  void Assembler::pop(Register dst) {
453
460
  ASSERT(reloc_info_writer.last_pc() != NULL);
454
461
  EnsureSpace ensure_space(this);
@@ -1950,6 +1957,18 @@ void Assembler::ucomisd(XMMRegister dst, XMMRegister src) {
1950
1957
  }
1951
1958
 
1952
1959
 
1960
+ void Assembler::roundsd(XMMRegister dst, XMMRegister src, RoundingMode mode) {
1961
+ ASSERT(CpuFeatures::IsEnabled(SSE4_1));
1962
+ EnsureSpace ensure_space(this);
1963
+ EMIT(0x66);
1964
+ EMIT(0x0F);
1965
+ EMIT(0x3A);
1966
+ EMIT(0x0B);
1967
+ emit_sse_operand(dst, src);
1968
+ // Mask precision exeption.
1969
+ EMIT(static_cast<byte>(mode) | 0x8);
1970
+ }
1971
+
1953
1972
  void Assembler::movmskpd(Register dst, XMMRegister src) {
1954
1973
  ASSERT(CpuFeatures::IsEnabled(SSE2));
1955
1974
  EnsureSpace ensure_space(this);
@@ -659,6 +659,7 @@ class Assembler : public AssemblerBase {
659
659
  void push_imm32(int32_t imm32);
660
660
  void push(Register src);
661
661
  void push(const Operand& src);
662
+ void push(Handle<Object> handle);
662
663
 
663
664
  void pop(Register dst);
664
665
  void pop(const Operand& dst);
@@ -834,7 +835,7 @@ class Assembler : public AssemblerBase {
834
835
  void call(const Operand& adr);
835
836
  int CallSize(Handle<Code> code, RelocInfo::Mode mode);
836
837
  void call(Handle<Code> code,
837
- RelocInfo::Mode rmode,
838
+ RelocInfo::Mode rmode = RelocInfo::CODE_TARGET,
838
839
  unsigned ast_id = kNoASTId);
839
840
 
840
841
  // Jumps
@@ -940,6 +941,16 @@ class Assembler : public AssemblerBase {
940
941
  void andpd(XMMRegister dst, XMMRegister src);
941
942
 
942
943
  void ucomisd(XMMRegister dst, XMMRegister src);
944
+
945
+ enum RoundingMode {
946
+ kRoundToNearest = 0x0,
947
+ kRoundDown = 0x1,
948
+ kRoundUp = 0x2,
949
+ kRoundToZero = 0x3
950
+ };
951
+
952
+ void roundsd(XMMRegister dst, XMMRegister src, RoundingMode mode);
953
+
943
954
  void movmskpd(Register dst, XMMRegister src);
944
955
 
945
956
  void cmpltsd(XMMRegister dst, XMMRegister src);
@@ -989,7 +1000,9 @@ class Assembler : public AssemblerBase {
989
1000
  void Print();
990
1001
 
991
1002
  // Check the code size generated from label to here.
992
- int SizeOfCodeGeneratedSince(Label* l) { return pc_offset() - l->pos(); }
1003
+ int SizeOfCodeGeneratedSince(Label* label) {
1004
+ return pc_offset() - label->pos();
1005
+ }
993
1006
 
994
1007
  // Mark address of the ExitJSFrame code.
995
1008
  void RecordJSReturn();