libv8 3.3.10.4 → 3.5.10.beta1

Sign up to get free protection for your applications and to get access to all the features.
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_;