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
@@ -33,21 +33,21 @@ namespace internal {
33
33
 
34
34
  #define T(name, string, precedence) #name,
35
35
  const char* const Token::name_[NUM_TOKENS] = {
36
- TOKEN_LIST(T, T, IGNORE_TOKEN)
36
+ TOKEN_LIST(T, T)
37
37
  };
38
38
  #undef T
39
39
 
40
40
 
41
41
  #define T(name, string, precedence) string,
42
42
  const char* const Token::string_[NUM_TOKENS] = {
43
- TOKEN_LIST(T, T, IGNORE_TOKEN)
43
+ TOKEN_LIST(T, T)
44
44
  };
45
45
  #undef T
46
46
 
47
47
 
48
48
  #define T(name, string, precedence) precedence,
49
49
  const int8_t Token::precedence_[NUM_TOKENS] = {
50
- TOKEN_LIST(T, T, IGNORE_TOKEN)
50
+ TOKEN_LIST(T, T)
51
51
  };
52
52
  #undef T
53
53
 
@@ -55,7 +55,7 @@ const int8_t Token::precedence_[NUM_TOKENS] = {
55
55
  #define KT(a, b, c) 'T',
56
56
  #define KK(a, b, c) 'K',
57
57
  const char Token::token_type[] = {
58
- TOKEN_LIST(KT, KK, IGNORE_TOKEN)
58
+ TOKEN_LIST(KT, KK)
59
59
  };
60
60
  #undef KT
61
61
  #undef KK
@@ -1,4 +1,4 @@
1
- // Copyright 2006-2008 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:
@@ -41,7 +41,6 @@ namespace internal {
41
41
  //
42
42
  // T: Non-keyword tokens
43
43
  // K: Keyword tokens
44
- // F: Future (reserved) keyword tokens
45
44
 
46
45
  // IGNORE_TOKEN is a convenience macro that can be supplied as
47
46
  // an argument (at any position) for a TOKEN_LIST call. It does
@@ -49,7 +48,7 @@ namespace internal {
49
48
 
50
49
  #define IGNORE_TOKEN(name, string, precedence)
51
50
 
52
- #define TOKEN_LIST(T, K, F) \
51
+ #define TOKEN_LIST(T, K) \
53
52
  /* End of source indicator. */ \
54
53
  T(EOS, "EOS", 0) \
55
54
  \
@@ -72,6 +71,7 @@ namespace internal {
72
71
  /* this block of enum values being contiguous and sorted in the */ \
73
72
  /* same order! */ \
74
73
  T(INIT_VAR, "=init_var", 2) /* AST-use only. */ \
74
+ T(INIT_LET, "=init_let", 2) /* AST-use only. */ \
75
75
  T(INIT_CONST, "=init_const", 2) /* AST-use only. */ \
76
76
  T(ASSIGN, "=", 2) \
77
77
  T(ASSIGN_BIT_OR, "|=", 2) \
@@ -167,8 +167,9 @@ namespace internal {
167
167
  \
168
168
  /* Future reserved words (ECMA-262, section 7.6.1.2). */ \
169
169
  T(FUTURE_RESERVED_WORD, NULL, 0) \
170
+ T(FUTURE_STRICT_RESERVED_WORD, NULL, 0) \
170
171
  K(CONST, "const", 0) \
171
- K(NATIVE, "native", 0) \
172
+ K(LET, "let", 0) \
172
173
  \
173
174
  /* Illegal token - not able to scan. */ \
174
175
  T(ILLEGAL, "ILLEGAL", 0) \
@@ -182,7 +183,7 @@ class Token {
182
183
  // All token values.
183
184
  #define T(name, string, precedence) name,
184
185
  enum Value {
185
- TOKEN_LIST(T, T, IGNORE_TOKEN)
186
+ TOKEN_LIST(T, T)
186
187
  NUM_TOKENS
187
188
  };
188
189
  #undef T
@@ -28,6 +28,7 @@
28
28
  #include "v8.h"
29
29
 
30
30
  #include "ast.h"
31
+ #include "code-stubs.h"
31
32
  #include "compiler.h"
32
33
  #include "ic.h"
33
34
  #include "macro-assembler.h"
@@ -61,7 +62,7 @@ TypeInfo TypeInfo::TypeFromValue(Handle<Object> value) {
61
62
  TypeFeedbackOracle::TypeFeedbackOracle(Handle<Code> code,
62
63
  Handle<Context> global_context) {
63
64
  global_context_ = global_context;
64
- PopulateMap(code);
65
+ BuildDictionary(code);
65
66
  ASSERT(reinterpret_cast<Address>(*dictionary_.location()) != kHandleZapValue);
66
67
  }
67
68
 
@@ -74,26 +75,55 @@ Handle<Object> TypeFeedbackOracle::GetInfo(unsigned ast_id) {
74
75
  }
75
76
 
76
77
 
77
- bool TypeFeedbackOracle::LoadIsMonomorphic(Property* expr) {
78
+ bool TypeFeedbackOracle::LoadIsMonomorphicNormal(Property* expr) {
78
79
  Handle<Object> map_or_code(GetInfo(expr->id()));
79
80
  if (map_or_code->IsMap()) return true;
80
81
  if (map_or_code->IsCode()) {
81
82
  Handle<Code> code = Handle<Code>::cast(map_or_code);
82
83
  return code->is_keyed_load_stub() &&
83
84
  code->ic_state() == MONOMORPHIC &&
85
+ Code::ExtractTypeFromFlags(code->flags()) == NORMAL &&
84
86
  code->FindFirstMap() != NULL;
85
87
  }
86
88
  return false;
87
89
  }
88
90
 
89
91
 
90
- bool TypeFeedbackOracle::StoreIsMonomorphic(Expression* expr) {
92
+ bool TypeFeedbackOracle::LoadIsMegamorphicWithTypeInfo(Property* expr) {
93
+ Handle<Object> map_or_code(GetInfo(expr->id()));
94
+ if (map_or_code->IsCode()) {
95
+ Handle<Code> code = Handle<Code>::cast(map_or_code);
96
+ Builtins* builtins = Isolate::Current()->builtins();
97
+ return code->is_keyed_load_stub() &&
98
+ *code != builtins->builtin(Builtins::kKeyedLoadIC_Generic) &&
99
+ code->ic_state() == MEGAMORPHIC;
100
+ }
101
+ return false;
102
+ }
103
+
104
+
105
+ bool TypeFeedbackOracle::StoreIsMonomorphicNormal(Expression* expr) {
91
106
  Handle<Object> map_or_code(GetInfo(expr->id()));
92
107
  if (map_or_code->IsMap()) return true;
93
108
  if (map_or_code->IsCode()) {
94
109
  Handle<Code> code = Handle<Code>::cast(map_or_code);
95
110
  return code->is_keyed_store_stub() &&
96
- code->ic_state() == MONOMORPHIC;
111
+ code->ic_state() == MONOMORPHIC &&
112
+ Code::ExtractTypeFromFlags(code->flags()) == NORMAL;
113
+ }
114
+ return false;
115
+ }
116
+
117
+
118
+ bool TypeFeedbackOracle::StoreIsMegamorphicWithTypeInfo(Expression* expr) {
119
+ Handle<Object> map_or_code(GetInfo(expr->id()));
120
+ if (map_or_code->IsCode()) {
121
+ Handle<Code> code = Handle<Code>::cast(map_or_code);
122
+ Builtins* builtins = Isolate::Current()->builtins();
123
+ return code->is_keyed_store_stub() &&
124
+ *code != builtins->builtin(Builtins::kKeyedStoreIC_Generic) &&
125
+ *code != builtins->builtin(Builtins::kKeyedStoreIC_Generic_Strict) &&
126
+ code->ic_state() == MEGAMORPHIC;
97
127
  }
98
128
  return false;
99
129
  }
@@ -106,7 +136,7 @@ bool TypeFeedbackOracle::CallIsMonomorphic(Call* expr) {
106
136
 
107
137
 
108
138
  Handle<Map> TypeFeedbackOracle::LoadMonomorphicReceiverType(Property* expr) {
109
- ASSERT(LoadIsMonomorphic(expr));
139
+ ASSERT(LoadIsMonomorphicNormal(expr));
110
140
  Handle<Object> map_or_code(GetInfo(expr->id()));
111
141
  if (map_or_code->IsCode()) {
112
142
  Handle<Code> code = Handle<Code>::cast(map_or_code);
@@ -119,7 +149,7 @@ Handle<Map> TypeFeedbackOracle::LoadMonomorphicReceiverType(Property* expr) {
119
149
 
120
150
 
121
151
  Handle<Map> TypeFeedbackOracle::StoreMonomorphicReceiverType(Expression* expr) {
122
- ASSERT(StoreIsMonomorphic(expr));
152
+ ASSERT(StoreIsMonomorphicNormal(expr));
123
153
  Handle<Object> map_or_code(GetInfo(expr->id()));
124
154
  if (map_or_code->IsCode()) {
125
155
  Handle<Code> code = Handle<Code>::cast(map_or_code);
@@ -129,23 +159,26 @@ Handle<Map> TypeFeedbackOracle::StoreMonomorphicReceiverType(Expression* expr) {
129
159
  }
130
160
 
131
161
 
132
- ZoneMapList* TypeFeedbackOracle::LoadReceiverTypes(Property* expr,
133
- Handle<String> name) {
162
+ void TypeFeedbackOracle::LoadReceiverTypes(Property* expr,
163
+ Handle<String> name,
164
+ SmallMapList* types) {
134
165
  Code::Flags flags = Code::ComputeMonomorphicFlags(Code::LOAD_IC, NORMAL);
135
- return CollectReceiverTypes(expr->id(), name, flags);
166
+ CollectReceiverTypes(expr->id(), name, flags, types);
136
167
  }
137
168
 
138
169
 
139
- ZoneMapList* TypeFeedbackOracle::StoreReceiverTypes(Assignment* expr,
140
- Handle<String> name) {
170
+ void TypeFeedbackOracle::StoreReceiverTypes(Assignment* expr,
171
+ Handle<String> name,
172
+ SmallMapList* types) {
141
173
  Code::Flags flags = Code::ComputeMonomorphicFlags(Code::STORE_IC, NORMAL);
142
- return CollectReceiverTypes(expr->id(), name, flags);
174
+ CollectReceiverTypes(expr->id(), name, flags, types);
143
175
  }
144
176
 
145
177
 
146
- ZoneMapList* TypeFeedbackOracle::CallReceiverTypes(Call* expr,
147
- Handle<String> name,
148
- CallKind call_kind) {
178
+ void TypeFeedbackOracle::CallReceiverTypes(Call* expr,
179
+ Handle<String> name,
180
+ CallKind call_kind,
181
+ SmallMapList* types) {
149
182
  int arity = expr->arguments()->length();
150
183
 
151
184
  // Note: Currently we do not take string extra ic data into account
@@ -159,7 +192,7 @@ ZoneMapList* TypeFeedbackOracle::CallReceiverTypes(Call* expr,
159
192
  OWN_MAP,
160
193
  NOT_IN_LOOP,
161
194
  arity);
162
- return CollectReceiverTypes(expr->id(), name, flags);
195
+ CollectReceiverTypes(expr->id(), name, flags, types);
163
196
  }
164
197
 
165
198
 
@@ -171,20 +204,6 @@ CheckType TypeFeedbackOracle::GetCallCheckType(Call* expr) {
171
204
  return check;
172
205
  }
173
206
 
174
- ExternalArrayType TypeFeedbackOracle::GetKeyedLoadExternalArrayType(
175
- Property* expr) {
176
- Handle<Object> stub = GetInfo(expr->id());
177
- ASSERT(stub->IsCode());
178
- return Code::cast(*stub)->external_array_type();
179
- }
180
-
181
- ExternalArrayType TypeFeedbackOracle::GetKeyedStoreExternalArrayType(
182
- Expression* expr) {
183
- Handle<Object> stub = GetInfo(expr->id());
184
- ASSERT(stub->IsCode());
185
- return Code::cast(*stub)->external_array_type();
186
- }
187
-
188
207
  Handle<JSObject> TypeFeedbackOracle::GetPrototypeForPrimitiveCheck(
189
208
  CheckType check) {
190
209
  JSFunction* function = NULL;
@@ -224,8 +243,7 @@ TypeInfo TypeFeedbackOracle::CompareType(CompareOperation* expr) {
224
243
  switch (state) {
225
244
  case CompareIC::UNINITIALIZED:
226
245
  // Uninitialized means never executed.
227
- // TODO(fschneider): Introduce a separate value for never-executed ICs.
228
- return unknown;
246
+ return TypeInfo::Uninitialized();
229
247
  case CompareIC::SMIS:
230
248
  return TypeInfo::Smi();
231
249
  case CompareIC::HEAP_NUMBERS:
@@ -286,8 +304,7 @@ TypeInfo TypeFeedbackOracle::BinaryType(BinaryOperation* expr) {
286
304
  switch (type) {
287
305
  case BinaryOpIC::UNINITIALIZED:
288
306
  // Uninitialized means never executed.
289
- // TODO(fschneider): Introduce a separate value for never-executed ICs
290
- return unknown;
307
+ return TypeInfo::Uninitialized();
291
308
  case BinaryOpIC::SMI:
292
309
  switch (result_type) {
293
310
  case BinaryOpIC::UNINITIALIZED:
@@ -377,131 +394,158 @@ TypeInfo TypeFeedbackOracle::IncrementType(CountOperation* expr) {
377
394
  }
378
395
 
379
396
 
380
- ZoneMapList* TypeFeedbackOracle::CollectReceiverTypes(unsigned ast_id,
381
- Handle<String> name,
382
- Code::Flags flags) {
397
+ void TypeFeedbackOracle::CollectReceiverTypes(unsigned ast_id,
398
+ Handle<String> name,
399
+ Code::Flags flags,
400
+ SmallMapList* types) {
383
401
  Isolate* isolate = Isolate::Current();
384
402
  Handle<Object> object = GetInfo(ast_id);
385
- if (object->IsUndefined() || object->IsSmi()) return NULL;
403
+ if (object->IsUndefined() || object->IsSmi()) return;
386
404
 
387
405
  if (*object == isolate->builtins()->builtin(Builtins::kStoreIC_GlobalProxy)) {
388
406
  // TODO(fschneider): We could collect the maps and signal that
389
407
  // we need a generic store (or load) here.
390
408
  ASSERT(Handle<Code>::cast(object)->ic_state() == MEGAMORPHIC);
391
- return NULL;
392
409
  } else if (object->IsMap()) {
393
- ZoneMapList* types = new ZoneMapList(1);
394
410
  types->Add(Handle<Map>::cast(object));
395
- return types;
396
411
  } else if (Handle<Code>::cast(object)->ic_state() == MEGAMORPHIC) {
397
- ZoneMapList* types = new ZoneMapList(4);
412
+ types->Reserve(4);
398
413
  ASSERT(object->IsCode());
399
414
  isolate->stub_cache()->CollectMatchingMaps(types, *name, flags);
400
- return types->length() > 0 ? types : NULL;
401
- } else {
402
- return NULL;
403
415
  }
404
416
  }
405
417
 
406
418
 
407
- void TypeFeedbackOracle::SetInfo(unsigned ast_id, Object* target) {
408
- ASSERT(dictionary_->FindEntry(ast_id) == NumberDictionary::kNotFound);
409
- MaybeObject* maybe_result = dictionary_->AtNumberPut(ast_id, target);
410
- USE(maybe_result);
411
- #ifdef DEBUG
412
- Object* result;
413
- // Dictionary has been allocated with sufficient size for all elements.
414
- ASSERT(maybe_result->ToObject(&result));
415
- ASSERT(*dictionary_ == result);
416
- #endif
419
+ void TypeFeedbackOracle::CollectKeyedReceiverTypes(unsigned ast_id,
420
+ SmallMapList* types) {
421
+ Handle<Object> object = GetInfo(ast_id);
422
+ if (!object->IsCode()) return;
423
+ Handle<Code> code = Handle<Code>::cast(object);
424
+ if (code->kind() == Code::KEYED_LOAD_IC ||
425
+ code->kind() == Code::KEYED_STORE_IC) {
426
+ AssertNoAllocation no_allocation;
427
+ int mask = RelocInfo::ModeMask(RelocInfo::EMBEDDED_OBJECT);
428
+ for (RelocIterator it(*code, mask); !it.done(); it.next()) {
429
+ RelocInfo* info = it.rinfo();
430
+ Object* object = info->target_object();
431
+ if (object->IsMap()) {
432
+ types->Add(Handle<Map>(Map::cast(object)));
433
+ }
434
+ }
435
+ }
417
436
  }
418
437
 
419
438
 
420
- void TypeFeedbackOracle::PopulateMap(Handle<Code> code) {
421
- Isolate* isolate = Isolate::Current();
422
- HandleScope scope(isolate);
423
-
424
- const int kInitialCapacity = 16;
425
- List<int> code_positions(kInitialCapacity);
426
- List<unsigned> ast_ids(kInitialCapacity);
427
- CollectIds(*code, &code_positions, &ast_ids);
439
+ byte TypeFeedbackOracle::ToBooleanTypes(unsigned ast_id) {
440
+ Handle<Object> object = GetInfo(ast_id);
441
+ return object->IsCode() ? Handle<Code>::cast(object)->to_boolean_state() : 0;
442
+ }
428
443
 
429
- ASSERT(dictionary_.is_null()); // Only initialize once.
430
- dictionary_ = isolate->factory()->NewNumberDictionary(
431
- code_positions.length());
432
444
 
433
- const int length = code_positions.length();
434
- ASSERT(ast_ids.length() == length);
435
- for (int i = 0; i < length; i++) {
436
- AssertNoAllocation no_allocation;
437
- RelocInfo info(code->instruction_start() + code_positions[i],
438
- RelocInfo::CODE_TARGET, 0);
439
- Code* target = Code::GetCodeFromTargetAddress(info.target_address());
440
- unsigned id = ast_ids[i];
441
- InlineCacheState state = target->ic_state();
442
- Code::Kind kind = target->kind();
443
-
444
- if (kind == Code::BINARY_OP_IC ||
445
- kind == Code::UNARY_OP_IC ||
446
- kind == Code::COMPARE_IC) {
447
- SetInfo(id, target);
448
- } else if (state == MONOMORPHIC) {
449
- if (kind == Code::KEYED_LOAD_IC ||
450
- kind == Code::KEYED_STORE_IC) {
451
- SetInfo(id, target);
452
- } else if (kind != Code::CALL_IC ||
453
- target->check_type() == RECEIVER_MAP_CHECK) {
454
- Map* map = target->FindFirstMap();
455
- if (map == NULL) {
456
- SetInfo(id, target);
457
- } else {
458
- SetInfo(id, map);
459
- }
460
- } else {
461
- ASSERT(target->kind() == Code::CALL_IC);
462
- CheckType check = target->check_type();
463
- ASSERT(check != RECEIVER_MAP_CHECK);
464
- SetInfo(id, Smi::FromInt(check));
465
- }
466
- } else if (state == MEGAMORPHIC) {
467
- SetInfo(id, target);
468
- }
469
- }
445
+ // Things are a bit tricky here: The iterator for the RelocInfos and the infos
446
+ // themselves are not GC-safe, so we first get all infos, then we create the
447
+ // dictionary (possibly triggering GC), and finally we relocate the collected
448
+ // infos before we process them.
449
+ void TypeFeedbackOracle::BuildDictionary(Handle<Code> code) {
450
+ AssertNoAllocation no_allocation;
451
+ ZoneList<RelocInfo> infos(16);
452
+ HandleScope scope;
453
+ GetRelocInfos(code, &infos);
454
+ CreateDictionary(code, &infos);
455
+ ProcessRelocInfos(&infos);
470
456
  // Allocate handle in the parent scope.
471
457
  dictionary_ = scope.CloseAndEscape(dictionary_);
472
458
  }
473
459
 
474
460
 
475
- void TypeFeedbackOracle::CollectIds(Code* code,
476
- List<int>* code_positions,
477
- List<unsigned>* ast_ids) {
478
- AssertNoAllocation no_allocation;
461
+ void TypeFeedbackOracle::GetRelocInfos(Handle<Code> code,
462
+ ZoneList<RelocInfo>* infos) {
479
463
  int mask = RelocInfo::ModeMask(RelocInfo::CODE_TARGET_WITH_ID);
480
- for (RelocIterator it(code, mask); !it.done(); it.next()) {
481
- RelocInfo* info = it.rinfo();
482
- ASSERT(RelocInfo::IsCodeTarget(info->rmode()));
483
- Code* target = Code::GetCodeFromTargetAddress(info->target_address());
484
- if (target->is_inline_cache_stub()) {
485
- InlineCacheState state = target->ic_state();
486
- Code::Kind kind = target->kind();
487
- if (kind == Code::BINARY_OP_IC) {
488
- if (target->binary_op_type() ==
489
- BinaryOpIC::GENERIC) {
490
- continue;
464
+ for (RelocIterator it(*code, mask); !it.done(); it.next()) {
465
+ infos->Add(*it.rinfo());
466
+ }
467
+ }
468
+
469
+
470
+ void TypeFeedbackOracle::CreateDictionary(Handle<Code> code,
471
+ ZoneList<RelocInfo>* infos) {
472
+ DisableAssertNoAllocation allocation_allowed;
473
+ byte* old_start = code->instruction_start();
474
+ dictionary_ = FACTORY->NewNumberDictionary(infos->length());
475
+ byte* new_start = code->instruction_start();
476
+ RelocateRelocInfos(infos, old_start, new_start);
477
+ }
478
+
479
+
480
+ void TypeFeedbackOracle::RelocateRelocInfos(ZoneList<RelocInfo>* infos,
481
+ byte* old_start,
482
+ byte* new_start) {
483
+ for (int i = 0; i < infos->length(); i++) {
484
+ RelocInfo* info = &(*infos)[i];
485
+ info->set_pc(new_start + (info->pc() - old_start));
486
+ }
487
+ }
488
+
489
+
490
+ void TypeFeedbackOracle::ProcessRelocInfos(ZoneList<RelocInfo>* infos) {
491
+ for (int i = 0; i < infos->length(); i++) {
492
+ unsigned ast_id = static_cast<unsigned>((*infos)[i].data());
493
+ Code* target = Code::GetCodeFromTargetAddress((*infos)[i].target_address());
494
+ ProcessTarget(ast_id, target);
495
+ }
496
+ }
497
+
498
+
499
+ void TypeFeedbackOracle::ProcessTarget(unsigned ast_id, Code* target) {
500
+ switch (target->kind()) {
501
+ case Code::LOAD_IC:
502
+ case Code::STORE_IC:
503
+ case Code::CALL_IC:
504
+ case Code::KEYED_CALL_IC:
505
+ if (target->ic_state() == MONOMORPHIC) {
506
+ if (target->kind() == Code::CALL_IC &&
507
+ target->check_type() != RECEIVER_MAP_CHECK) {
508
+ SetInfo(ast_id, Smi::FromInt(target->check_type()));
509
+ } else {
510
+ Object* map = target->FindFirstMap();
511
+ SetInfo(ast_id, map == NULL ? static_cast<Object*>(target) : map);
491
512
  }
492
- } else if (kind == Code::COMPARE_IC) {
493
- if (target->compare_state() == CompareIC::GENERIC) continue;
494
- } else {
495
- if (state != MONOMORPHIC && state != MEGAMORPHIC) continue;
513
+ } else if (target->ic_state() == MEGAMORPHIC) {
514
+ SetInfo(ast_id, target);
496
515
  }
497
- code_positions->Add(
498
- static_cast<int>(info->pc() - code->instruction_start()));
499
- ASSERT(ast_ids->length() == 0 ||
500
- (*ast_ids)[ast_ids->length()-1] !=
501
- static_cast<unsigned>(info->data()));
502
- ast_ids->Add(static_cast<unsigned>(info->data()));
503
- }
516
+ break;
517
+
518
+ case Code::KEYED_LOAD_IC:
519
+ case Code::KEYED_STORE_IC:
520
+ if (target->ic_state() == MONOMORPHIC ||
521
+ target->ic_state() == MEGAMORPHIC) {
522
+ SetInfo(ast_id, target);
523
+ }
524
+ break;
525
+
526
+ case Code::UNARY_OP_IC:
527
+ case Code::BINARY_OP_IC:
528
+ case Code::COMPARE_IC:
529
+ case Code::TO_BOOLEAN_IC:
530
+ SetInfo(ast_id, target);
531
+ break;
532
+
533
+ default:
534
+ break;
504
535
  }
505
536
  }
506
537
 
538
+
539
+ void TypeFeedbackOracle::SetInfo(unsigned ast_id, Object* target) {
540
+ ASSERT(dictionary_->FindEntry(ast_id) == NumberDictionary::kNotFound);
541
+ MaybeObject* maybe_result = dictionary_->AtNumberPut(ast_id, target);
542
+ USE(maybe_result);
543
+ #ifdef DEBUG
544
+ Object* result = NULL;
545
+ // Dictionary has been allocated with sufficient size for all elements.
546
+ ASSERT(maybe_result->ToObject(&result));
547
+ ASSERT(*dictionary_ == result);
548
+ #endif
549
+ }
550
+
507
551
  } } // namespace v8::internal