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
@@ -1,4 +1,4 @@
1
- // Copyright 2010 the V8 project authors. All rights reserved.
1
+ // Copyright 2011 the V8 project authors. All rights reserved.
2
2
  // Redistribution and use in source and binary forms, with or without
3
3
  // modification, are permitted provided that the following conditions are
4
4
  // met:
@@ -44,6 +44,9 @@ DeoptimizerData::DeoptimizerData() {
44
44
  lazy_deoptimization_entry_code_ = NULL;
45
45
  current_ = NULL;
46
46
  deoptimizing_code_list_ = NULL;
47
+ #ifdef ENABLE_DEBUGGER_SUPPORT
48
+ deoptimized_frame_info_ = NULL;
49
+ #endif
47
50
  }
48
51
 
49
52
 
@@ -58,6 +61,16 @@ DeoptimizerData::~DeoptimizerData() {
58
61
  }
59
62
  }
60
63
 
64
+
65
+ #ifdef ENABLE_DEBUGGER_SUPPORT
66
+ void DeoptimizerData::Iterate(ObjectVisitor* v) {
67
+ if (deoptimized_frame_info_ != NULL) {
68
+ deoptimized_frame_info_->Iterate(v);
69
+ }
70
+ }
71
+ #endif
72
+
73
+
61
74
  Deoptimizer* Deoptimizer::New(JSFunction* function,
62
75
  BailoutType type,
63
76
  unsigned bailout_id,
@@ -70,7 +83,8 @@ Deoptimizer* Deoptimizer::New(JSFunction* function,
70
83
  type,
71
84
  bailout_id,
72
85
  from,
73
- fp_to_sp_delta);
86
+ fp_to_sp_delta,
87
+ NULL);
74
88
  ASSERT(isolate->deoptimizer_data()->current_ == NULL);
75
89
  isolate->deoptimizer_data()->current_ = deoptimizer;
76
90
  return deoptimizer;
@@ -86,6 +100,91 @@ Deoptimizer* Deoptimizer::Grab(Isolate* isolate) {
86
100
  return result;
87
101
  }
88
102
 
103
+ #ifdef ENABLE_DEBUGGER_SUPPORT
104
+ DeoptimizedFrameInfo* Deoptimizer::DebuggerInspectableFrame(
105
+ JavaScriptFrame* frame,
106
+ int frame_index,
107
+ Isolate* isolate) {
108
+ ASSERT(isolate == Isolate::Current());
109
+ ASSERT(frame->is_optimized());
110
+ ASSERT(isolate->deoptimizer_data()->deoptimized_frame_info_ == NULL);
111
+
112
+ // Get the function and code from the frame.
113
+ JSFunction* function = JSFunction::cast(frame->function());
114
+ Code* code = frame->LookupCode();
115
+ Address code_start_address = code->instruction_start();
116
+
117
+ // Locate the deoptimization point in the code. As we are at a call the
118
+ // return address must be at a place in the code with deoptimization support.
119
+ int deoptimization_index = Safepoint::kNoDeoptimizationIndex;
120
+ // Scope this as the safe point constructor will disallow allocation.
121
+ {
122
+ SafepointTable table(code);
123
+ for (unsigned i = 0; i < table.length(); ++i) {
124
+ Address address = code_start_address + table.GetPcOffset(i);
125
+ if (address == frame->pc()) {
126
+ SafepointEntry safepoint_entry = table.GetEntry(i);
127
+ ASSERT(safepoint_entry.deoptimization_index() !=
128
+ Safepoint::kNoDeoptimizationIndex);
129
+ deoptimization_index = safepoint_entry.deoptimization_index();
130
+ break;
131
+ }
132
+ }
133
+ }
134
+ ASSERT(deoptimization_index != Safepoint::kNoDeoptimizationIndex);
135
+
136
+ // Always use the actual stack slots when calculating the fp to sp
137
+ // delta adding two for the function and context.
138
+ unsigned stack_slots = code->stack_slots();
139
+ unsigned fp_to_sp_delta = ((stack_slots + 2) * kPointerSize);
140
+
141
+ Deoptimizer* deoptimizer = new Deoptimizer(isolate,
142
+ function,
143
+ Deoptimizer::DEBUGGER,
144
+ deoptimization_index,
145
+ frame->pc(),
146
+ fp_to_sp_delta,
147
+ code);
148
+ Address tos = frame->fp() - fp_to_sp_delta;
149
+ deoptimizer->FillInputFrame(tos, frame);
150
+
151
+ // Calculate the output frames.
152
+ Deoptimizer::ComputeOutputFrames(deoptimizer);
153
+
154
+ // Create the GC safe output frame information and register it for GC
155
+ // handling.
156
+ ASSERT_LT(frame_index, deoptimizer->output_count());
157
+ DeoptimizedFrameInfo* info =
158
+ new DeoptimizedFrameInfo(deoptimizer, frame_index);
159
+ isolate->deoptimizer_data()->deoptimized_frame_info_ = info;
160
+
161
+ // Get the "simulated" top and size for the requested frame.
162
+ Address top =
163
+ reinterpret_cast<Address>(deoptimizer->output_[frame_index]->GetTop());
164
+ uint32_t size = deoptimizer->output_[frame_index]->GetFrameSize();
165
+
166
+ // Done with the GC-unsafe frame descriptions. This re-enables allocation.
167
+ deoptimizer->DeleteFrameDescriptions();
168
+
169
+ // Allocate a heap number for the doubles belonging to this frame.
170
+ deoptimizer->MaterializeHeapNumbersForDebuggerInspectableFrame(
171
+ top, size, info);
172
+
173
+ // Finished using the deoptimizer instance.
174
+ delete deoptimizer;
175
+
176
+ return info;
177
+ }
178
+
179
+
180
+ void Deoptimizer::DeleteDebuggerInspectableFrame(DeoptimizedFrameInfo* info,
181
+ Isolate* isolate) {
182
+ ASSERT(isolate == Isolate::Current());
183
+ ASSERT(isolate->deoptimizer_data()->deoptimized_frame_info_ == info);
184
+ delete info;
185
+ isolate->deoptimizer_data()->deoptimized_frame_info_ = NULL;
186
+ }
187
+ #endif
89
188
 
90
189
  void Deoptimizer::GenerateDeoptimizationEntries(MacroAssembler* masm,
91
190
  int count,
@@ -209,18 +308,24 @@ Deoptimizer::Deoptimizer(Isolate* isolate,
209
308
  BailoutType type,
210
309
  unsigned bailout_id,
211
310
  Address from,
212
- int fp_to_sp_delta)
311
+ int fp_to_sp_delta,
312
+ Code* optimized_code)
213
313
  : isolate_(isolate),
214
314
  function_(function),
215
315
  bailout_id_(bailout_id),
216
316
  bailout_type_(type),
217
317
  from_(from),
218
318
  fp_to_sp_delta_(fp_to_sp_delta),
319
+ input_(NULL),
219
320
  output_count_(0),
220
321
  output_(NULL),
221
322
  deferred_heap_numbers_(0) {
222
323
  if (FLAG_trace_deopt && type != OSR) {
223
- PrintF("**** DEOPT: ");
324
+ if (type == DEBUGGER) {
325
+ PrintF("**** DEOPT FOR DEBUGGER: ");
326
+ } else {
327
+ PrintF("**** DEOPT: ");
328
+ }
224
329
  function->PrintName();
225
330
  PrintF(" at bailout #%u, address 0x%" V8PRIxPTR ", frame size %d\n",
226
331
  bailout_id,
@@ -248,10 +353,16 @@ Deoptimizer::Deoptimizer(Isolate* isolate,
248
353
  optimized_code_ = function_->code();
249
354
  ASSERT(optimized_code_->kind() == Code::OPTIMIZED_FUNCTION);
250
355
  ASSERT(!optimized_code_->contains(from));
356
+ } else if (type == DEBUGGER) {
357
+ optimized_code_ = optimized_code;
358
+ ASSERT(optimized_code_->contains(from));
251
359
  }
252
360
  ASSERT(HEAP->allow_allocation(false));
253
361
  unsigned size = ComputeInputFrameSize();
254
362
  input_ = new(size) FrameDescription(size, function);
363
+ #ifdef DEBUG
364
+ input_->SetKind(Code::OPTIMIZED_FUNCTION);
365
+ #endif
255
366
  }
256
367
 
257
368
 
@@ -417,6 +528,7 @@ void Deoptimizer::DoComputeOutputFrames() {
417
528
 
418
529
 
419
530
  void Deoptimizer::MaterializeHeapNumbers() {
531
+ ASSERT_NE(DEBUGGER, bailout_type_);
420
532
  for (int i = 0; i < deferred_heap_numbers_.length(); i++) {
421
533
  HeapNumberMaterializationDescriptor d = deferred_heap_numbers_[i];
422
534
  Handle<Object> num = isolate_->factory()->NewNumber(d.value());
@@ -432,6 +544,47 @@ void Deoptimizer::MaterializeHeapNumbers() {
432
544
  }
433
545
 
434
546
 
547
+ #ifdef ENABLE_DEBUGGER_SUPPORT
548
+ void Deoptimizer::MaterializeHeapNumbersForDebuggerInspectableFrame(
549
+ Address top, uint32_t size, DeoptimizedFrameInfo* info) {
550
+ ASSERT_EQ(DEBUGGER, bailout_type_);
551
+ for (int i = 0; i < deferred_heap_numbers_.length(); i++) {
552
+ HeapNumberMaterializationDescriptor d = deferred_heap_numbers_[i];
553
+
554
+ // Check of the heap number to materialize actually belong to the frame
555
+ // being extracted.
556
+ Address slot = d.slot_address();
557
+ if (top <= slot && slot < top + size) {
558
+ Handle<Object> num = isolate_->factory()->NewNumber(d.value());
559
+ // Calculate the index with the botton of the expression stack
560
+ // at index 0, and the fixed part (including incoming arguments)
561
+ // at negative indexes.
562
+ int index = static_cast<int>(
563
+ info->expression_count_ - (slot - top) / kPointerSize - 1);
564
+ if (FLAG_trace_deopt) {
565
+ PrintF("Materializing a new heap number %p [%e] in slot %p"
566
+ "for stack index %d\n",
567
+ reinterpret_cast<void*>(*num),
568
+ d.value(),
569
+ d.slot_address(),
570
+ index);
571
+ }
572
+ if (index >=0) {
573
+ info->SetExpression(index, *num);
574
+ } else {
575
+ // Calculate parameter index subtracting one for the receiver.
576
+ int parameter_index =
577
+ index +
578
+ static_cast<int>(size) / kPointerSize -
579
+ info->expression_count_ - 1;
580
+ info->SetParameter(parameter_index, *num);
581
+ }
582
+ }
583
+ }
584
+ }
585
+ #endif
586
+
587
+
435
588
  void Deoptimizer::DoTranslateCommand(TranslationIterator* iterator,
436
589
  int frame_index,
437
590
  unsigned output_offset) {
@@ -901,6 +1054,9 @@ LargeObjectChunk* Deoptimizer::CreateCode(BailoutType type) {
901
1054
  ASSERT(desc.reloc_size == 0);
902
1055
 
903
1056
  LargeObjectChunk* chunk = LargeObjectChunk::New(desc.instr_size, EXECUTABLE);
1057
+ if (chunk == NULL) {
1058
+ V8::FatalProcessOutOfMemory("Not enough memory for deoptimization table");
1059
+ }
904
1060
  memcpy(chunk->GetStartAddress(), desc.buffer, desc.instr_size);
905
1061
  CPU::FlushICache(chunk->GetStartAddress(), desc.instr_size);
906
1062
  return chunk;
@@ -969,18 +1125,48 @@ unsigned FrameDescription::GetOffsetFromSlotIndex(Deoptimizer* deoptimizer,
969
1125
  if (slot_index >= 0) {
970
1126
  // Local or spill slots. Skip the fixed part of the frame
971
1127
  // including all arguments.
972
- unsigned base = static_cast<unsigned>(
973
- GetFrameSize() - deoptimizer->ComputeFixedSize(GetFunction()));
1128
+ unsigned base =
1129
+ GetFrameSize() - deoptimizer->ComputeFixedSize(GetFunction());
974
1130
  return base - ((slot_index + 1) * kPointerSize);
975
1131
  } else {
976
1132
  // Incoming parameter.
977
- unsigned base = static_cast<unsigned>(GetFrameSize() -
978
- deoptimizer->ComputeIncomingArgumentSize(GetFunction()));
1133
+ unsigned base = GetFrameSize() -
1134
+ deoptimizer->ComputeIncomingArgumentSize(GetFunction());
979
1135
  return base - ((slot_index + 1) * kPointerSize);
980
1136
  }
981
1137
  }
982
1138
 
983
1139
 
1140
+ int FrameDescription::ComputeParametersCount() {
1141
+ return function_->shared()->formal_parameter_count();
1142
+ }
1143
+
1144
+
1145
+ Object* FrameDescription::GetParameter(Deoptimizer* deoptimizer, int index) {
1146
+ ASSERT_EQ(Code::FUNCTION, kind_);
1147
+ ASSERT(index >= 0);
1148
+ ASSERT(index < ComputeParametersCount());
1149
+ // The slot indexes for incoming arguments are negative.
1150
+ unsigned offset = GetOffsetFromSlotIndex(deoptimizer,
1151
+ index - ComputeParametersCount());
1152
+ return reinterpret_cast<Object*>(*GetFrameSlotPointer(offset));
1153
+ }
1154
+
1155
+
1156
+ unsigned FrameDescription::GetExpressionCount(Deoptimizer* deoptimizer) {
1157
+ ASSERT_EQ(Code::FUNCTION, kind_);
1158
+ unsigned size = GetFrameSize() - deoptimizer->ComputeFixedSize(GetFunction());
1159
+ return size / kPointerSize;
1160
+ }
1161
+
1162
+
1163
+ Object* FrameDescription::GetExpression(Deoptimizer* deoptimizer, int index) {
1164
+ ASSERT_EQ(Code::FUNCTION, kind_);
1165
+ unsigned offset = GetOffsetFromSlotIndex(deoptimizer, index);
1166
+ return reinterpret_cast<Object*>(*GetFrameSlotPointer(offset));
1167
+ }
1168
+
1169
+
984
1170
  void TranslationBuffer::Add(int32_t value) {
985
1171
  // Encode the sign bit in the least significant bit.
986
1172
  bool is_negative = (value < 0);
@@ -997,11 +1183,11 @@ void TranslationBuffer::Add(int32_t value) {
997
1183
 
998
1184
 
999
1185
  int32_t TranslationIterator::Next() {
1000
- ASSERT(HasNext());
1001
1186
  // Run through the bytes until we reach one with a least significant
1002
1187
  // bit of zero (marks the end).
1003
1188
  uint32_t bits = 0;
1004
1189
  for (int i = 0; true; i += 7) {
1190
+ ASSERT(HasNext());
1005
1191
  uint8_t next = buffer_->get(index_++);
1006
1192
  bits |= (next >> 1) << i;
1007
1193
  if ((next & 1) == 0) break;
@@ -1104,7 +1290,7 @@ int Translation::NumberOfOperandsFor(Opcode opcode) {
1104
1290
  }
1105
1291
 
1106
1292
 
1107
- #ifdef OBJECT_PRINT
1293
+ #if defined(OBJECT_PRINT) || defined(ENABLE_DISASSEMBLER)
1108
1294
 
1109
1295
  const char* Translation::StringFor(Opcode opcode) {
1110
1296
  switch (opcode) {
@@ -1252,5 +1438,36 @@ void SlotRef::ComputeSlotMappingForArguments(JavaScriptFrame* frame,
1252
1438
  UNREACHABLE();
1253
1439
  }
1254
1440
 
1441
+ #ifdef ENABLE_DEBUGGER_SUPPORT
1442
+
1443
+ DeoptimizedFrameInfo::DeoptimizedFrameInfo(
1444
+ Deoptimizer* deoptimizer, int frame_index) {
1445
+ FrameDescription* output_frame = deoptimizer->output_[frame_index];
1446
+ SetFunction(output_frame->GetFunction());
1447
+ expression_count_ = output_frame->GetExpressionCount(deoptimizer);
1448
+ parameters_count_ = output_frame->ComputeParametersCount();
1449
+ parameters_ = new Object*[parameters_count_];
1450
+ for (int i = 0; i < parameters_count_; i++) {
1451
+ SetParameter(i, output_frame->GetParameter(deoptimizer, i));
1452
+ }
1453
+ expression_stack_ = new Object*[expression_count_];
1454
+ for (int i = 0; i < expression_count_; i++) {
1455
+ SetExpression(i, output_frame->GetExpression(deoptimizer, i));
1456
+ }
1457
+ }
1458
+
1459
+
1460
+ DeoptimizedFrameInfo::~DeoptimizedFrameInfo() {
1461
+ delete[] expression_stack_;
1462
+ delete[] parameters_;
1463
+ }
1464
+
1465
+ void DeoptimizedFrameInfo::Iterate(ObjectVisitor* v) {
1466
+ v->VisitPointer(BitCast<Object**>(&function_));
1467
+ v->VisitPointers(parameters_, parameters_ + parameters_count_);
1468
+ v->VisitPointers(expression_stack_, expression_stack_ + expression_count_);
1469
+ }
1470
+
1471
+ #endif // ENABLE_DEBUGGER_SUPPORT
1255
1472
 
1256
1473
  } } // namespace v8::internal
@@ -41,7 +41,7 @@ namespace internal {
41
41
  class FrameDescription;
42
42
  class TranslationIterator;
43
43
  class DeoptimizingCodeListNode;
44
-
44
+ class DeoptimizedFrameInfo;
45
45
 
46
46
  class HeapNumberMaterializationDescriptor BASE_EMBEDDED {
47
47
  public:
@@ -81,11 +81,19 @@ class DeoptimizerData {
81
81
  DeoptimizerData();
82
82
  ~DeoptimizerData();
83
83
 
84
+ #ifdef ENABLE_DEBUGGER_SUPPORT
85
+ void Iterate(ObjectVisitor* v);
86
+ #endif
87
+
84
88
  private:
85
89
  LargeObjectChunk* eager_deoptimization_entry_code_;
86
90
  LargeObjectChunk* lazy_deoptimization_entry_code_;
87
91
  Deoptimizer* current_;
88
92
 
93
+ #ifdef ENABLE_DEBUGGER_SUPPORT
94
+ DeoptimizedFrameInfo* deoptimized_frame_info_;
95
+ #endif
96
+
89
97
  // List of deoptimized code which still have references from active stack
90
98
  // frames. These code objects are needed by the deoptimizer when deoptimizing
91
99
  // a frame for which the code object for the function function has been
@@ -103,7 +111,10 @@ class Deoptimizer : public Malloced {
103
111
  enum BailoutType {
104
112
  EAGER,
105
113
  LAZY,
106
- OSR
114
+ OSR,
115
+ // This last bailout type is not really a bailout, but used by the
116
+ // debugger to deoptimize stack frames to allow inspection.
117
+ DEBUGGER
107
118
  };
108
119
 
109
120
  int output_count() const { return output_count_; }
@@ -116,6 +127,16 @@ class Deoptimizer : public Malloced {
116
127
  Isolate* isolate);
117
128
  static Deoptimizer* Grab(Isolate* isolate);
118
129
 
130
+ #ifdef ENABLE_DEBUGGER_SUPPORT
131
+ // The returned object with information on the optimized frame needs to be
132
+ // freed before another one can be generated.
133
+ static DeoptimizedFrameInfo* DebuggerInspectableFrame(JavaScriptFrame* frame,
134
+ int frame_index,
135
+ Isolate* isolate);
136
+ static void DeleteDebuggerInspectableFrame(DeoptimizedFrameInfo* info,
137
+ Isolate* isolate);
138
+ #endif
139
+
119
140
  // Makes sure that there is enough room in the relocation
120
141
  // information of a code object to perform lazy deoptimization
121
142
  // patching. If there is not enough room a new relocation
@@ -171,6 +192,10 @@ class Deoptimizer : public Malloced {
171
192
  ~Deoptimizer();
172
193
 
173
194
  void MaterializeHeapNumbers();
195
+ #ifdef ENABLE_DEBUGGER_SUPPORT
196
+ void MaterializeHeapNumbersForDebuggerInspectableFrame(
197
+ Address top, uint32_t size, DeoptimizedFrameInfo* info);
198
+ #endif
174
199
 
175
200
  static void ComputeOutputFrames(Deoptimizer* deoptimizer);
176
201
 
@@ -233,7 +258,8 @@ class Deoptimizer : public Malloced {
233
258
  BailoutType type,
234
259
  unsigned bailout_id,
235
260
  Address from,
236
- int fp_to_sp_delta);
261
+ int fp_to_sp_delta,
262
+ Code* optimized_code);
237
263
  void DeleteFrameDescriptions();
238
264
 
239
265
  void DoComputeOutputFrames();
@@ -269,6 +295,11 @@ class Deoptimizer : public Malloced {
269
295
  static Code* FindDeoptimizingCodeFromAddress(Address addr);
270
296
  static void RemoveDeoptimizingCode(Code* code);
271
297
 
298
+ // Fill the input from from a JavaScript frame. This is used when
299
+ // the debugger needs to inspect an optimized frame. For normal
300
+ // deoptimizations the input frame is filled in generated code.
301
+ void FillInputFrame(Address tos, JavaScriptFrame* frame);
302
+
272
303
  Isolate* isolate_;
273
304
  JSFunction* function_;
274
305
  Code* optimized_code_;
@@ -286,10 +317,11 @@ class Deoptimizer : public Malloced {
286
317
 
287
318
  List<HeapNumberMaterializationDescriptor> deferred_heap_numbers_;
288
319
 
289
- static int table_entry_size_;
320
+ static const int table_entry_size_;
290
321
 
291
322
  friend class FrameDescription;
292
323
  friend class DeoptimizingCodeListNode;
324
+ friend class DeoptimizedFrameInfo;
293
325
  };
294
326
 
295
327
 
@@ -304,11 +336,18 @@ class FrameDescription {
304
336
  return malloc(size + frame_size - kPointerSize);
305
337
  }
306
338
 
339
+ void operator delete(void* pointer, uint32_t frame_size) {
340
+ free(pointer);
341
+ }
342
+
307
343
  void operator delete(void* description) {
308
344
  free(description);
309
345
  }
310
346
 
311
- intptr_t GetFrameSize() const { return frame_size_; }
347
+ uint32_t GetFrameSize() const {
348
+ ASSERT(static_cast<uint32_t>(frame_size_) == frame_size_);
349
+ return static_cast<uint32_t>(frame_size_);
350
+ }
312
351
 
313
352
  JSFunction* GetFunction() const { return function_; }
314
353
 
@@ -360,6 +399,23 @@ class FrameDescription {
360
399
 
361
400
  void SetContinuation(intptr_t pc) { continuation_ = pc; }
362
401
 
402
+ #ifdef DEBUG
403
+ Code::Kind GetKind() const { return kind_; }
404
+ void SetKind(Code::Kind kind) { kind_ = kind; }
405
+ #endif
406
+
407
+ // Get the incoming arguments count.
408
+ int ComputeParametersCount();
409
+
410
+ // Get a parameter value for an unoptimized frame.
411
+ Object* GetParameter(Deoptimizer* deoptimizer, int index);
412
+
413
+ // Get the expression stack height for a unoptimized frame.
414
+ unsigned GetExpressionCount(Deoptimizer* deoptimizer);
415
+
416
+ // Get the expression stack value for an unoptimized frame.
417
+ Object* GetExpression(Deoptimizer* deoptimizer, int index);
418
+
363
419
  static int registers_offset() {
364
420
  return OFFSET_OF(FrameDescription, registers_);
365
421
  }
@@ -391,6 +447,9 @@ class FrameDescription {
391
447
  private:
392
448
  static const uint32_t kZapUint32 = 0xbeeddead;
393
449
 
450
+ // Frame_size_ must hold a uint32_t value. It is only a uintptr_t to
451
+ // keep the variable-size array frame_content_ of type intptr_t at
452
+ // the end of the structure aligned.
394
453
  uintptr_t frame_size_; // Number of bytes.
395
454
  JSFunction* function_;
396
455
  intptr_t registers_[Register::kNumRegisters];
@@ -399,6 +458,9 @@ class FrameDescription {
399
458
  intptr_t pc_;
400
459
  intptr_t fp_;
401
460
  Smi* state_;
461
+ #ifdef DEBUG
462
+ Code::Kind kind_;
463
+ #endif
402
464
 
403
465
  // Continuation is the PC where the execution continues after
404
466
  // deoptimizing.
@@ -439,9 +501,7 @@ class TranslationIterator BASE_EMBEDDED {
439
501
 
440
502
  int32_t Next();
441
503
 
442
- bool HasNext() const { return index_ >= 0; }
443
-
444
- void Done() { index_ = -1; }
504
+ bool HasNext() const { return index_ < buffer_->length(); }
445
505
 
446
506
  void Skip(int n) {
447
507
  for (int i = 0; i < n; i++) Next();
@@ -495,7 +555,7 @@ class Translation BASE_EMBEDDED {
495
555
 
496
556
  static int NumberOfOperandsFor(Opcode opcode);
497
557
 
498
- #ifdef OBJECT_PRINT
558
+ #if defined(OBJECT_PRINT) || defined(ENABLE_DISASSEMBLER)
499
559
  static const char* StringFor(Opcode opcode);
500
560
  #endif
501
561
 
@@ -597,6 +657,70 @@ class SlotRef BASE_EMBEDDED {
597
657
  };
598
658
 
599
659
 
660
+ #ifdef ENABLE_DEBUGGER_SUPPORT
661
+ // Class used to represent an unoptimized frame when the debugger
662
+ // needs to inspect a frame that is part of an optimized frame. The
663
+ // internally used FrameDescription objects are not GC safe so for use
664
+ // by the debugger frame information is copied to an object of this type.
665
+ class DeoptimizedFrameInfo : public Malloced {
666
+ public:
667
+ DeoptimizedFrameInfo(Deoptimizer* deoptimizer, int frame_index);
668
+ virtual ~DeoptimizedFrameInfo();
669
+
670
+ // GC support.
671
+ void Iterate(ObjectVisitor* v);
672
+
673
+ // Return the number of incoming arguments.
674
+ int parameters_count() { return parameters_count_; }
675
+
676
+ // Return the height of the expression stack.
677
+ int expression_count() { return expression_count_; }
678
+
679
+ // Get the frame function.
680
+ JSFunction* GetFunction() {
681
+ return function_;
682
+ }
683
+
684
+ // Get an incoming argument.
685
+ Object* GetParameter(int index) {
686
+ ASSERT(0 <= index && index < parameters_count());
687
+ return parameters_[index];
688
+ }
689
+
690
+ // Get an expression from the expression stack.
691
+ Object* GetExpression(int index) {
692
+ ASSERT(0 <= index && index < expression_count());
693
+ return expression_stack_[index];
694
+ }
695
+
696
+ private:
697
+ // Set the frame function.
698
+ void SetFunction(JSFunction* function) {
699
+ function_ = function;
700
+ }
701
+
702
+ // Set an incoming argument.
703
+ void SetParameter(int index, Object* obj) {
704
+ ASSERT(0 <= index && index < parameters_count());
705
+ parameters_[index] = obj;
706
+ }
707
+
708
+ // Set an expression on the expression stack.
709
+ void SetExpression(int index, Object* obj) {
710
+ ASSERT(0 <= index && index < expression_count());
711
+ expression_stack_[index] = obj;
712
+ }
713
+
714
+ JSFunction* function_;
715
+ int parameters_count_;
716
+ int expression_count_;
717
+ Object** parameters_;
718
+ Object** expression_stack_;
719
+
720
+ friend class Deoptimizer;
721
+ };
722
+ #endif
723
+
600
724
  } } // namespace v8::internal
601
725
 
602
726
  #endif // V8_DEOPTIMIZER_H_