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
@@ -80,8 +80,10 @@ class FullCodeGenerator: public AstVisitor {
80
80
  explicit FullCodeGenerator(MacroAssembler* masm)
81
81
  : masm_(masm),
82
82
  info_(NULL),
83
+ scope_(NULL),
83
84
  nesting_stack_(NULL),
84
85
  loop_depth_(0),
86
+ stack_height_(0),
85
87
  context_(NULL),
86
88
  bailout_entries_(0),
87
89
  stack_checks_(2), // There's always at least one.
@@ -109,10 +111,8 @@ class FullCodeGenerator: public AstVisitor {
109
111
  private:
110
112
  class Breakable;
111
113
  class Iteration;
112
- class TryCatch;
113
- class TryFinally;
114
- class Finally;
115
- class ForIn;
114
+
115
+ class TestContext;
116
116
 
117
117
  class NestedStatement BASE_EMBEDDED {
118
118
  public:
@@ -129,132 +129,135 @@ class FullCodeGenerator: public AstVisitor {
129
129
 
130
130
  virtual Breakable* AsBreakable() { return NULL; }
131
131
  virtual Iteration* AsIteration() { return NULL; }
132
- virtual TryCatch* AsTryCatch() { return NULL; }
133
- virtual TryFinally* AsTryFinally() { return NULL; }
134
- virtual Finally* AsFinally() { return NULL; }
135
- virtual ForIn* AsForIn() { return NULL; }
136
132
 
137
133
  virtual bool IsContinueTarget(Statement* target) { return false; }
138
134
  virtual bool IsBreakTarget(Statement* target) { return false; }
139
135
 
140
- // Generate code to leave the nested statement. This includes
141
- // cleaning up any stack elements in use and restoring the
142
- // stack to the expectations of the surrounding statements.
143
- // Takes a number of stack elements currently on top of the
144
- // nested statement's stack, and returns a number of stack
145
- // elements left on top of the surrounding statement's stack.
146
- // The generated code must preserve the result register (which
147
- // contains the value in case of a return).
148
- virtual int Exit(int stack_depth) {
149
- // Default implementation for the case where there is
150
- // nothing to clean up.
151
- return stack_depth;
136
+ // Notify the statement that we are exiting it via break, continue, or
137
+ // return and give it a chance to generate cleanup code. Return the
138
+ // next outer statement in the nesting stack. We accumulate in
139
+ // *stack_depth the amount to drop the stack and in *context_length the
140
+ // number of context chain links to unwind as we traverse the nesting
141
+ // stack from an exit to its target.
142
+ virtual NestedStatement* Exit(int* stack_depth, int* context_length) {
143
+ return previous_;
152
144
  }
153
- NestedStatement* outer() { return previous_; }
154
- protected:
145
+
146
+ protected:
155
147
  MacroAssembler* masm() { return codegen_->masm(); }
156
- private:
148
+
157
149
  FullCodeGenerator* codegen_;
158
150
  NestedStatement* previous_;
159
151
  DISALLOW_COPY_AND_ASSIGN(NestedStatement);
160
152
  };
161
153
 
154
+ // A breakable statement such as a block.
162
155
  class Breakable : public NestedStatement {
163
156
  public:
164
- Breakable(FullCodeGenerator* codegen,
165
- BreakableStatement* break_target)
166
- : NestedStatement(codegen),
167
- target_(break_target) {}
157
+ Breakable(FullCodeGenerator* codegen, BreakableStatement* statement)
158
+ : NestedStatement(codegen), statement_(statement) {
159
+ }
168
160
  virtual ~Breakable() {}
161
+
169
162
  virtual Breakable* AsBreakable() { return this; }
170
- virtual bool IsBreakTarget(Statement* statement) {
171
- return target_ == statement;
163
+ virtual bool IsBreakTarget(Statement* target) {
164
+ return statement() == target;
172
165
  }
173
- BreakableStatement* statement() { return target_; }
174
- Label* break_target() { return &break_target_label_; }
166
+
167
+ BreakableStatement* statement() { return statement_; }
168
+ Label* break_label() { return &break_label_; }
169
+
175
170
  private:
176
- BreakableStatement* target_;
177
- Label break_target_label_;
178
- DISALLOW_COPY_AND_ASSIGN(Breakable);
171
+ BreakableStatement* statement_;
172
+ Label break_label_;
179
173
  };
180
174
 
175
+ // An iteration statement such as a while, for, or do loop.
181
176
  class Iteration : public Breakable {
182
177
  public:
183
- Iteration(FullCodeGenerator* codegen,
184
- IterationStatement* iteration_statement)
185
- : Breakable(codegen, iteration_statement) {}
178
+ Iteration(FullCodeGenerator* codegen, IterationStatement* statement)
179
+ : Breakable(codegen, statement) {
180
+ }
186
181
  virtual ~Iteration() {}
182
+
187
183
  virtual Iteration* AsIteration() { return this; }
188
- virtual bool IsContinueTarget(Statement* statement) {
189
- return this->statement() == statement;
184
+ virtual bool IsContinueTarget(Statement* target) {
185
+ return statement() == target;
190
186
  }
191
- Label* continue_target() { return &continue_target_label_; }
187
+
188
+ Label* continue_label() { return &continue_label_; }
189
+
192
190
  private:
193
- Label continue_target_label_;
194
- DISALLOW_COPY_AND_ASSIGN(Iteration);
191
+ Label continue_label_;
195
192
  };
196
193
 
197
- // The environment inside the try block of a try/catch statement.
194
+ // The try block of a try/catch statement.
198
195
  class TryCatch : public NestedStatement {
199
196
  public:
200
- explicit TryCatch(FullCodeGenerator* codegen, Label* catch_entry)
201
- : NestedStatement(codegen), catch_entry_(catch_entry) { }
197
+ explicit TryCatch(FullCodeGenerator* codegen) : NestedStatement(codegen) {
198
+ }
202
199
  virtual ~TryCatch() {}
203
- virtual TryCatch* AsTryCatch() { return this; }
204
- Label* catch_entry() { return catch_entry_; }
205
- virtual int Exit(int stack_depth);
206
- private:
207
- Label* catch_entry_;
208
- DISALLOW_COPY_AND_ASSIGN(TryCatch);
200
+
201
+ virtual NestedStatement* Exit(int* stack_depth, int* context_length);
209
202
  };
210
203
 
211
- // The environment inside the try block of a try/finally statement.
204
+ // The try block of a try/finally statement.
212
205
  class TryFinally : public NestedStatement {
213
206
  public:
214
- explicit TryFinally(FullCodeGenerator* codegen, Label* finally_entry)
215
- : NestedStatement(codegen), finally_entry_(finally_entry) { }
207
+ TryFinally(FullCodeGenerator* codegen, Label* finally_entry)
208
+ : NestedStatement(codegen), finally_entry_(finally_entry) {
209
+ }
216
210
  virtual ~TryFinally() {}
217
- virtual TryFinally* AsTryFinally() { return this; }
218
- Label* finally_entry() { return finally_entry_; }
219
- virtual int Exit(int stack_depth);
211
+
212
+ virtual NestedStatement* Exit(int* stack_depth, int* context_length);
213
+
220
214
  private:
221
215
  Label* finally_entry_;
222
- DISALLOW_COPY_AND_ASSIGN(TryFinally);
223
216
  };
224
217
 
225
- // A FinallyEnvironment represents being inside a finally block.
226
- // Abnormal termination of the finally block needs to clean up
227
- // the block's parameters from the stack.
218
+ // The finally block of a try/finally statement.
228
219
  class Finally : public NestedStatement {
229
220
  public:
221
+ static const int kElementCount = 2;
222
+
230
223
  explicit Finally(FullCodeGenerator* codegen) : NestedStatement(codegen) { }
231
224
  virtual ~Finally() {}
232
- virtual Finally* AsFinally() { return this; }
233
- virtual int Exit(int stack_depth) {
234
- return stack_depth + kFinallyStackElementCount;
225
+
226
+ virtual NestedStatement* Exit(int* stack_depth, int* context_length) {
227
+ *stack_depth += kElementCount;
228
+ return previous_;
235
229
  }
236
- private:
237
- // Number of extra stack slots occupied during a finally block.
238
- static const int kFinallyStackElementCount = 2;
239
- DISALLOW_COPY_AND_ASSIGN(Finally);
240
230
  };
241
231
 
242
- // A ForInEnvironment represents being inside a for-in loop.
243
- // Abnormal termination of the for-in block needs to clean up
244
- // the block's temporary storage from the stack.
232
+ // The body of a for/in loop.
245
233
  class ForIn : public Iteration {
246
234
  public:
247
- ForIn(FullCodeGenerator* codegen,
248
- ForInStatement* statement)
249
- : Iteration(codegen, statement) { }
235
+ static const int kElementCount = 5;
236
+
237
+ ForIn(FullCodeGenerator* codegen, ForInStatement* statement)
238
+ : Iteration(codegen, statement) {
239
+ }
250
240
  virtual ~ForIn() {}
251
- virtual ForIn* AsForIn() { return this; }
252
- virtual int Exit(int stack_depth) {
253
- return stack_depth + kForInStackElementCount;
241
+
242
+ virtual NestedStatement* Exit(int* stack_depth, int* context_length) {
243
+ *stack_depth += kElementCount;
244
+ return previous_;
245
+ }
246
+ };
247
+
248
+
249
+ // The body of a with or catch.
250
+ class WithOrCatch : public NestedStatement {
251
+ public:
252
+ explicit WithOrCatch(FullCodeGenerator* codegen)
253
+ : NestedStatement(codegen) {
254
+ }
255
+ virtual ~WithOrCatch() {}
256
+
257
+ virtual NestedStatement* Exit(int* stack_depth, int* context_length) {
258
+ ++(*context_length);
259
+ return previous_;
254
260
  }
255
- private:
256
- static const int kForInStackElementCount = 5;
257
- DISALLOW_COPY_AND_ASSIGN(ForIn);
258
261
  };
259
262
 
260
263
  // The forward bailout stack keeps track of the expressions that can
@@ -296,7 +299,11 @@ class FullCodeGenerator: public AstVisitor {
296
299
  // Helper function to convert a pure value into a test context. The value
297
300
  // is expected on the stack or the accumulator, depending on the platform.
298
301
  // See the platform-specific implementation for details.
299
- void DoTest(Label* if_true, Label* if_false, Label* fall_through);
302
+ void DoTest(Expression* condition,
303
+ Label* if_true,
304
+ Label* if_false,
305
+ Label* fall_through);
306
+ void DoTest(const TestContext* context);
300
307
 
301
308
  // Helper function to split control flow and avoid a branch to the
302
309
  // fall-through label if it is set up.
@@ -328,48 +335,55 @@ class FullCodeGenerator: public AstVisitor {
328
335
 
329
336
  void VisitForEffect(Expression* expr) {
330
337
  EffectContext context(this);
331
- HandleInNonTestContext(expr, NO_REGISTERS);
338
+ VisitInCurrentContext(expr);
332
339
  }
333
340
 
334
341
  void VisitForAccumulatorValue(Expression* expr) {
335
342
  AccumulatorValueContext context(this);
336
- HandleInNonTestContext(expr, TOS_REG);
343
+ VisitInCurrentContext(expr);
337
344
  }
338
345
 
339
346
  void VisitForStackValue(Expression* expr) {
340
347
  StackValueContext context(this);
341
- HandleInNonTestContext(expr, NO_REGISTERS);
348
+ VisitInCurrentContext(expr);
342
349
  }
343
350
 
344
351
  void VisitForControl(Expression* expr,
345
352
  Label* if_true,
346
353
  Label* if_false,
347
354
  Label* fall_through) {
348
- TestContext context(this, if_true, if_false, fall_through);
349
- VisitInTestContext(expr);
350
- // Forwarding bailouts to children is a one shot operation. It
351
- // should have been processed at this point.
352
- ASSERT(forward_bailout_pending_ == NULL);
355
+ TestContext context(this, expr, if_true, if_false, fall_through);
356
+ VisitInCurrentContext(expr);
353
357
  }
354
358
 
355
- void HandleInNonTestContext(Expression* expr, State state);
356
- void VisitInTestContext(Expression* expr);
357
-
358
359
  void VisitDeclarations(ZoneList<Declaration*>* declarations);
359
360
  void DeclareGlobals(Handle<FixedArray> pairs);
360
361
 
361
362
  // Try to perform a comparison as a fast inlined literal compare if
362
363
  // the operands allow it. Returns true if the compare operations
363
364
  // has been matched and all code generated; false otherwise.
364
- bool TryLiteralCompare(Token::Value op,
365
- Expression* left,
366
- Expression* right,
365
+ bool TryLiteralCompare(CompareOperation* compare,
367
366
  Label* if_true,
368
367
  Label* if_false,
369
368
  Label* fall_through);
370
369
 
370
+ // Platform-specific code for comparing the type of a value with
371
+ // a given literal string.
372
+ void EmitLiteralCompareTypeof(Expression* expr,
373
+ Handle<String> check,
374
+ Label* if_true,
375
+ Label* if_false,
376
+ Label* fall_through);
377
+
378
+ // Platform-specific code for strict equality comparison with
379
+ // the undefined value.
380
+ void EmitLiteralCompareUndefined(Expression* expr,
381
+ Label* if_true,
382
+ Label* if_false,
383
+ Label* fall_through);
384
+
371
385
  // Bailout support.
372
- void PrepareForBailout(AstNode* node, State state);
386
+ void PrepareForBailout(Expression* node, State state);
373
387
  void PrepareForBailoutForId(int id, State state);
374
388
 
375
389
  // Record a call's return site offset, used to rebuild the frame if the
@@ -429,7 +443,7 @@ class FullCodeGenerator: public AstVisitor {
429
443
  TypeofState typeof_state,
430
444
  Label* slow,
431
445
  Label* done);
432
- void EmitVariableLoad(Variable* expr);
446
+ void EmitVariableLoad(VariableProxy* proxy);
433
447
 
434
448
  enum ResolveEvalFlag {
435
449
  SKIP_CONTEXT_LOOKUP,
@@ -504,6 +518,35 @@ class FullCodeGenerator: public AstVisitor {
504
518
  loop_depth_--;
505
519
  }
506
520
 
521
+ #if defined(V8_TARGET_ARCH_IA32)
522
+ int stack_height() { return stack_height_; }
523
+ void set_stack_height(int depth) { stack_height_ = depth; }
524
+ void increment_stack_height() { stack_height_++; }
525
+ void increment_stack_height(int delta) { stack_height_ += delta; }
526
+ void decrement_stack_height() {
527
+ if (FLAG_verify_stack_height) {
528
+ ASSERT(stack_height_ > 0);
529
+ }
530
+ stack_height_--;
531
+ }
532
+ void decrement_stack_height(int delta) {
533
+ stack_height_-= delta;
534
+ if (FLAG_verify_stack_height) {
535
+ ASSERT(stack_height_ >= 0);
536
+ }
537
+ }
538
+ // Call this function only if FLAG_verify_stack_height is true.
539
+ void verify_stack_height(); // Generates a runtime check of esp - ebp.
540
+ #else
541
+ int stack_height() { return 0; }
542
+ void set_stack_height(int depth) {}
543
+ void increment_stack_height() {}
544
+ void increment_stack_height(int delta) {}
545
+ void decrement_stack_height() {}
546
+ void decrement_stack_height(int delta) {}
547
+ void verify_stack_height() {}
548
+ #endif // V8_TARGET_ARCH_IA32
549
+
507
550
  MacroAssembler* masm() { return masm_; }
508
551
 
509
552
  class ExpressionContext;
@@ -517,23 +560,11 @@ class FullCodeGenerator: public AstVisitor {
517
560
  return is_strict_mode() ? kStrictMode : kNonStrictMode;
518
561
  }
519
562
  FunctionLiteral* function() { return info_->function(); }
520
- Scope* scope() { return info_->scope(); }
563
+ Scope* scope() { return scope_; }
521
564
 
522
565
  static Register result_register();
523
566
  static Register context_register();
524
567
 
525
- // Helper for calling an IC stub.
526
- void EmitCallIC(Handle<Code> ic,
527
- RelocInfo::Mode mode,
528
- unsigned ast_id);
529
-
530
- // Calling an IC stub with a patch site. Passing NULL for patch_site
531
- // or non NULL patch_site which is not activated indicates no inlined smi code
532
- // and emits a nop after the IC call.
533
- void EmitCallIC(Handle<Code> ic,
534
- JumpPatchSite* patch_site,
535
- unsigned ast_id);
536
-
537
568
  // Set fields in the stack frame. Offsets are the frame pointer relative
538
569
  // offsets defined in, e.g., StandardFrameConstants.
539
570
  void StoreToFrameField(int frame_offset, Register value);
@@ -542,6 +573,10 @@ class FullCodeGenerator: public AstVisitor {
542
573
  // in v8::internal::Context.
543
574
  void LoadContextField(Register dst, int context_index);
544
575
 
576
+ // Push the function argument for the runtime functions PushWithContext
577
+ // and PushCatchContext.
578
+ void PushFunctionArgumentForContextAllocation();
579
+
545
580
  // AST node visit functions.
546
581
  #define DECLARE_VISIT(type) virtual void Visit##type(type* node);
547
582
  AST_NODE_LIST(DECLARE_VISIT)
@@ -549,8 +584,10 @@ class FullCodeGenerator: public AstVisitor {
549
584
 
550
585
  void EmitUnaryOperation(UnaryOperation* expr, const char* comment);
551
586
 
552
- // Handles the shortcutted logical binary operations in VisitBinaryOperation.
553
- void EmitLogicalOperation(BinaryOperation* expr);
587
+ void VisitComma(BinaryOperation* expr);
588
+ void VisitLogicalExpression(BinaryOperation* expr);
589
+ void VisitArithmeticExpression(BinaryOperation* expr);
590
+ void VisitInCurrentContext(Expression* expr);
554
591
 
555
592
  void VisitForTypeofValue(Expression* expr);
556
593
 
@@ -569,6 +606,10 @@ class FullCodeGenerator: public AstVisitor {
569
606
 
570
607
  virtual ~ExpressionContext() {
571
608
  codegen_->set_new_context(old_);
609
+ if (FLAG_verify_stack_height) {
610
+ ASSERT_EQ(expected_stack_height_, codegen()->stack_height());
611
+ codegen()->verify_stack_height();
612
+ }
572
613
  }
573
614
 
574
615
  Isolate* isolate() const { return codegen_->isolate(); }
@@ -598,11 +639,6 @@ class FullCodeGenerator: public AstVisitor {
598
639
  // context.
599
640
  virtual void DropAndPlug(int count, Register reg) const = 0;
600
641
 
601
- // For shortcutting operations || and &&.
602
- virtual void EmitLogicalLeft(BinaryOperation* expr,
603
- Label* eval_right,
604
- Label* done) const = 0;
605
-
606
642
  // Set up branch labels for a test expression. The three Label** parameters
607
643
  // are output parameters.
608
644
  virtual void PrepareTest(Label* materialize_true,
@@ -611,12 +647,14 @@ class FullCodeGenerator: public AstVisitor {
611
647
  Label** if_false,
612
648
  Label** fall_through) const = 0;
613
649
 
614
- virtual void HandleExpression(Expression* expr) const = 0;
615
-
616
650
  // Returns true if we are evaluating only for side effects (ie if the result
617
651
  // will be discarded).
618
652
  virtual bool IsEffect() const { return false; }
619
653
 
654
+ // Returns true if we are evaluating for the value (in accu/on stack).
655
+ virtual bool IsAccumulatorValue() const { return false; }
656
+ virtual bool IsStackValue() const { return false; }
657
+
620
658
  // Returns true if we are branching on the value rather than materializing
621
659
  // it. Only used for asserts.
622
660
  virtual bool IsTest() const { return false; }
@@ -625,6 +663,7 @@ class FullCodeGenerator: public AstVisitor {
625
663
  FullCodeGenerator* codegen() const { return codegen_; }
626
664
  MacroAssembler* masm() const { return masm_; }
627
665
  MacroAssembler* masm_;
666
+ int expected_stack_height_; // The expected stack height esp - ebp on exit.
628
667
 
629
668
  private:
630
669
  const ExpressionContext* old_;
@@ -634,7 +673,9 @@ class FullCodeGenerator: public AstVisitor {
634
673
  class AccumulatorValueContext : public ExpressionContext {
635
674
  public:
636
675
  explicit AccumulatorValueContext(FullCodeGenerator* codegen)
637
- : ExpressionContext(codegen) { }
676
+ : ExpressionContext(codegen) {
677
+ expected_stack_height_ = codegen->stack_height();
678
+ }
638
679
 
639
680
  virtual void Plug(bool flag) const;
640
681
  virtual void Plug(Register reg) const;
@@ -644,21 +685,20 @@ class FullCodeGenerator: public AstVisitor {
644
685
  virtual void Plug(Heap::RootListIndex) const;
645
686
  virtual void PlugTOS() const;
646
687
  virtual void DropAndPlug(int count, Register reg) const;
647
- virtual void EmitLogicalLeft(BinaryOperation* expr,
648
- Label* eval_right,
649
- Label* done) const;
650
688
  virtual void PrepareTest(Label* materialize_true,
651
689
  Label* materialize_false,
652
690
  Label** if_true,
653
691
  Label** if_false,
654
692
  Label** fall_through) const;
655
- virtual void HandleExpression(Expression* expr) const;
693
+ virtual bool IsAccumulatorValue() const { return true; }
656
694
  };
657
695
 
658
696
  class StackValueContext : public ExpressionContext {
659
697
  public:
660
698
  explicit StackValueContext(FullCodeGenerator* codegen)
661
- : ExpressionContext(codegen) { }
699
+ : ExpressionContext(codegen) {
700
+ expected_stack_height_ = codegen->stack_height() + 1;
701
+ }
662
702
 
663
703
  virtual void Plug(bool flag) const;
664
704
  virtual void Plug(Register reg) const;
@@ -668,33 +708,35 @@ class FullCodeGenerator: public AstVisitor {
668
708
  virtual void Plug(Heap::RootListIndex) const;
669
709
  virtual void PlugTOS() const;
670
710
  virtual void DropAndPlug(int count, Register reg) const;
671
- virtual void EmitLogicalLeft(BinaryOperation* expr,
672
- Label* eval_right,
673
- Label* done) const;
674
711
  virtual void PrepareTest(Label* materialize_true,
675
712
  Label* materialize_false,
676
713
  Label** if_true,
677
714
  Label** if_false,
678
715
  Label** fall_through) const;
679
- virtual void HandleExpression(Expression* expr) const;
716
+ virtual bool IsStackValue() const { return true; }
680
717
  };
681
718
 
682
719
  class TestContext : public ExpressionContext {
683
720
  public:
684
- explicit TestContext(FullCodeGenerator* codegen,
685
- Label* true_label,
686
- Label* false_label,
687
- Label* fall_through)
721
+ TestContext(FullCodeGenerator* codegen,
722
+ Expression* condition,
723
+ Label* true_label,
724
+ Label* false_label,
725
+ Label* fall_through)
688
726
  : ExpressionContext(codegen),
727
+ condition_(condition),
689
728
  true_label_(true_label),
690
729
  false_label_(false_label),
691
- fall_through_(fall_through) { }
730
+ fall_through_(fall_through) {
731
+ expected_stack_height_ = codegen->stack_height();
732
+ }
692
733
 
693
734
  static const TestContext* cast(const ExpressionContext* context) {
694
735
  ASSERT(context->IsTest());
695
736
  return reinterpret_cast<const TestContext*>(context);
696
737
  }
697
738
 
739
+ Expression* condition() const { return condition_; }
698
740
  Label* true_label() const { return true_label_; }
699
741
  Label* false_label() const { return false_label_; }
700
742
  Label* fall_through() const { return fall_through_; }
@@ -707,18 +749,15 @@ class FullCodeGenerator: public AstVisitor {
707
749
  virtual void Plug(Heap::RootListIndex) const;
708
750
  virtual void PlugTOS() const;
709
751
  virtual void DropAndPlug(int count, Register reg) const;
710
- virtual void EmitLogicalLeft(BinaryOperation* expr,
711
- Label* eval_right,
712
- Label* done) const;
713
752
  virtual void PrepareTest(Label* materialize_true,
714
753
  Label* materialize_false,
715
754
  Label** if_true,
716
755
  Label** if_false,
717
756
  Label** fall_through) const;
718
- virtual void HandleExpression(Expression* expr) const;
719
757
  virtual bool IsTest() const { return true; }
720
758
 
721
759
  private:
760
+ Expression* condition_;
722
761
  Label* true_label_;
723
762
  Label* false_label_;
724
763
  Label* fall_through_;
@@ -727,7 +766,10 @@ class FullCodeGenerator: public AstVisitor {
727
766
  class EffectContext : public ExpressionContext {
728
767
  public:
729
768
  explicit EffectContext(FullCodeGenerator* codegen)
730
- : ExpressionContext(codegen) { }
769
+ : ExpressionContext(codegen) {
770
+ expected_stack_height_ = codegen->stack_height();
771
+ }
772
+
731
773
 
732
774
  virtual void Plug(bool flag) const;
733
775
  virtual void Plug(Register reg) const;
@@ -737,23 +779,21 @@ class FullCodeGenerator: public AstVisitor {
737
779
  virtual void Plug(Heap::RootListIndex) const;
738
780
  virtual void PlugTOS() const;
739
781
  virtual void DropAndPlug(int count, Register reg) const;
740
- virtual void EmitLogicalLeft(BinaryOperation* expr,
741
- Label* eval_right,
742
- Label* done) const;
743
782
  virtual void PrepareTest(Label* materialize_true,
744
783
  Label* materialize_false,
745
784
  Label** if_true,
746
785
  Label** if_false,
747
786
  Label** fall_through) const;
748
- virtual void HandleExpression(Expression* expr) const;
749
787
  virtual bool IsEffect() const { return true; }
750
788
  };
751
789
 
752
790
  MacroAssembler* masm_;
753
791
  CompilationInfo* info_;
792
+ Scope* scope_;
754
793
  Label return_label_;
755
794
  NestedStatement* nesting_stack_;
756
795
  int loop_depth_;
796
+ int stack_height_;
757
797
  const ExpressionContext* context_;
758
798
  ZoneList<BailoutEntry> bailout_entries_;
759
799
  ZoneList<BailoutEntry> stack_checks_;