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
@@ -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_