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
@@ -29,7 +29,6 @@
29
29
  #define V8_JSREGEXP_H_
30
30
 
31
31
  #include "allocation.h"
32
- #include "macro-assembler.h"
33
32
  #include "zone-inl.h"
34
33
 
35
34
  namespace v8 {
@@ -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:
@@ -62,27 +62,27 @@ TempIterator::TempIterator(LInstruction* instr)
62
62
  : instr_(instr),
63
63
  limit_(instr->TempCount()),
64
64
  current_(0) {
65
- current_ = AdvanceToNext(0);
65
+ SkipUninteresting();
66
66
  }
67
67
 
68
68
 
69
- bool TempIterator::HasNext() { return current_ < limit_; }
69
+ bool TempIterator::Done() { return current_ >= limit_; }
70
70
 
71
71
 
72
- LOperand* TempIterator::Next() {
73
- ASSERT(HasNext());
72
+ LOperand* TempIterator::Current() {
73
+ ASSERT(!Done());
74
74
  return instr_->TempAt(current_);
75
75
  }
76
76
 
77
77
 
78
- int TempIterator::AdvanceToNext(int start) {
79
- while (start < limit_ && instr_->TempAt(start) == NULL) start++;
80
- return start;
78
+ void TempIterator::SkipUninteresting() {
79
+ while (current_ < limit_ && instr_->TempAt(current_) == NULL) ++current_;
81
80
  }
82
81
 
83
82
 
84
83
  void TempIterator::Advance() {
85
- current_ = AdvanceToNext(current_ + 1);
84
+ ++current_;
85
+ SkipUninteresting();
86
86
  }
87
87
 
88
88
 
@@ -90,27 +90,29 @@ InputIterator::InputIterator(LInstruction* instr)
90
90
  : instr_(instr),
91
91
  limit_(instr->InputCount()),
92
92
  current_(0) {
93
- current_ = AdvanceToNext(0);
93
+ SkipUninteresting();
94
94
  }
95
95
 
96
96
 
97
- bool InputIterator::HasNext() { return current_ < limit_; }
97
+ bool InputIterator::Done() { return current_ >= limit_; }
98
98
 
99
99
 
100
- LOperand* InputIterator::Next() {
101
- ASSERT(HasNext());
100
+ LOperand* InputIterator::Current() {
101
+ ASSERT(!Done());
102
102
  return instr_->InputAt(current_);
103
103
  }
104
104
 
105
105
 
106
106
  void InputIterator::Advance() {
107
- current_ = AdvanceToNext(current_ + 1);
107
+ ++current_;
108
+ SkipUninteresting();
108
109
  }
109
110
 
110
111
 
111
- int InputIterator::AdvanceToNext(int start) {
112
- while (start < limit_ && instr_->InputAt(start)->IsConstantOperand()) start++;
113
- return start;
112
+ void InputIterator::SkipUninteresting() {
113
+ while (current_ < limit_ && instr_->InputAt(current_)->IsConstantOperand()) {
114
+ ++current_;
115
+ }
114
116
  }
115
117
 
116
118
 
@@ -118,23 +120,23 @@ UseIterator::UseIterator(LInstruction* instr)
118
120
  : input_iterator_(instr), env_iterator_(instr->environment()) { }
119
121
 
120
122
 
121
- bool UseIterator::HasNext() {
122
- return input_iterator_.HasNext() || env_iterator_.HasNext();
123
+ bool UseIterator::Done() {
124
+ return input_iterator_.Done() && env_iterator_.Done();
123
125
  }
124
126
 
125
127
 
126
- LOperand* UseIterator::Next() {
127
- ASSERT(HasNext());
128
- return input_iterator_.HasNext()
129
- ? input_iterator_.Next()
130
- : env_iterator_.Next();
128
+ LOperand* UseIterator::Current() {
129
+ ASSERT(!Done());
130
+ return input_iterator_.Done()
131
+ ? env_iterator_.Current()
132
+ : input_iterator_.Current();
131
133
  }
132
134
 
133
135
 
134
136
  void UseIterator::Advance() {
135
- input_iterator_.HasNext()
136
- ? input_iterator_.Advance()
137
- : env_iterator_.Advance();
137
+ input_iterator_.Done()
138
+ ? env_iterator_.Advance()
139
+ : input_iterator_.Advance();
138
140
  }
139
141
 
140
142
  } } // namespace v8::internal
@@ -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:
@@ -303,6 +303,11 @@ void LiveRange::SplitAt(LifetimePosition position, LiveRange* result) {
303
303
  // we need to split use positons in a special way.
304
304
  bool split_at_start = false;
305
305
 
306
+ if (current->start().Value() == position.Value()) {
307
+ // When splitting at start we need to locate the previous use interval.
308
+ current = first_interval_;
309
+ }
310
+
306
311
  while (current != NULL) {
307
312
  if (current->Contains(position)) {
308
313
  current->SplitAt(position);
@@ -352,6 +357,11 @@ void LiveRange::SplitAt(LifetimePosition position, LiveRange* result) {
352
357
  }
353
358
  result->first_pos_ = use_after;
354
359
 
360
+ // Discard cached iteration state. It might be pointing
361
+ // to the use that no longer belongs to this live range.
362
+ last_processed_use_ = NULL;
363
+ current_interval_ = NULL;
364
+
355
365
  // Link the new live range in the chain before any of the other
356
366
  // ranges linked from the range before the split.
357
367
  result->parent_ = (parent_ == NULL) ? this : parent_;
@@ -565,10 +575,10 @@ BitVector* LAllocator::ComputeLiveOut(HBasicBlock* block) {
565
575
  BitVector* live_out = new BitVector(next_virtual_register_);
566
576
 
567
577
  // Process all successor blocks.
568
- HBasicBlock* successor = block->end()->FirstSuccessor();
569
- while (successor != NULL) {
578
+ for (HSuccessorIterator it(block->end()); !it.Done(); it.Advance()) {
570
579
  // Add values live on entry to the successor. Note the successor's
571
580
  // live_in will not be computed yet for backwards edges.
581
+ HBasicBlock* successor = it.Current();
572
582
  BitVector* live_in = live_in_sets_[successor->block_id()];
573
583
  if (live_in != NULL) live_out->Union(*live_in);
574
584
 
@@ -582,11 +592,6 @@ BitVector* LAllocator::ComputeLiveOut(HBasicBlock* block) {
582
592
  live_out->Add(phi->OperandAt(index)->id());
583
593
  }
584
594
  }
585
-
586
- // Check if we are done with second successor.
587
- if (successor == block->end()->SecondSuccessor()) break;
588
-
589
- successor = block->end()->SecondSuccessor();
590
595
  }
591
596
 
592
597
  return live_out;
@@ -790,8 +795,8 @@ void LAllocator::MeetConstraintsBetween(LInstruction* first,
790
795
  int gap_index) {
791
796
  // Handle fixed temporaries.
792
797
  if (first != NULL) {
793
- for (TempIterator it(first); it.HasNext(); it.Advance()) {
794
- LUnallocated* temp = LUnallocated::cast(it.Next());
798
+ for (TempIterator it(first); !it.Done(); it.Advance()) {
799
+ LUnallocated* temp = LUnallocated::cast(it.Current());
795
800
  if (temp->HasFixedPolicy()) {
796
801
  AllocateFixed(temp, gap_index - 1, false);
797
802
  }
@@ -832,8 +837,8 @@ void LAllocator::MeetConstraintsBetween(LInstruction* first,
832
837
 
833
838
  // Handle fixed input operands of second instruction.
834
839
  if (second != NULL) {
835
- for (UseIterator it(second); it.HasNext(); it.Advance()) {
836
- LUnallocated* cur_input = LUnallocated::cast(it.Next());
840
+ for (UseIterator it(second); !it.Done(); it.Advance()) {
841
+ LUnallocated* cur_input = LUnallocated::cast(it.Current());
837
842
  if (cur_input->HasFixedPolicy()) {
838
843
  LUnallocated* input_copy = cur_input->CopyUnconstrained();
839
844
  bool is_tagged = HasTaggedValue(cur_input->VirtualRegister());
@@ -968,8 +973,8 @@ void LAllocator::ProcessInstructions(HBasicBlock* block, BitVector* live) {
968
973
  }
969
974
  }
970
975
 
971
- for (UseIterator it(instr); it.HasNext(); it.Advance()) {
972
- LOperand* input = it.Next();
976
+ for (UseIterator it(instr); !it.Done(); it.Advance()) {
977
+ LOperand* input = it.Current();
973
978
 
974
979
  LifetimePosition use_pos;
975
980
  if (input->IsUnallocated() &&
@@ -983,8 +988,8 @@ void LAllocator::ProcessInstructions(HBasicBlock* block, BitVector* live) {
983
988
  if (input->IsUnallocated()) live->Add(input->VirtualRegister());
984
989
  }
985
990
 
986
- for (TempIterator it(instr); it.HasNext(); it.Advance()) {
987
- LOperand* temp = it.Next();
991
+ for (TempIterator it(instr); !it.Done(); it.Advance()) {
992
+ LOperand* temp = it.Current();
988
993
  if (instr->IsMarkedAsCall()) {
989
994
  if (temp->IsRegister()) continue;
990
995
  if (temp->IsUnallocated()) {
@@ -1019,7 +1024,7 @@ void LAllocator::ResolvePhis(HBasicBlock* block) {
1019
1024
  operand = chunk_->DefineConstantOperand(constant);
1020
1025
  } else {
1021
1026
  ASSERT(!op->EmitAtUses());
1022
- LUnallocated* unalloc = new LUnallocated(LUnallocated::NONE);
1027
+ LUnallocated* unalloc = new LUnallocated(LUnallocated::ANY);
1023
1028
  unalloc->set_virtual_register(op->id());
1024
1029
  operand = unalloc;
1025
1030
  }
@@ -162,12 +162,12 @@ class LEnvironment;
162
162
  class TempIterator BASE_EMBEDDED {
163
163
  public:
164
164
  inline explicit TempIterator(LInstruction* instr);
165
- inline bool HasNext();
166
- inline LOperand* Next();
165
+ inline bool Done();
166
+ inline LOperand* Current();
167
167
  inline void Advance();
168
168
 
169
169
  private:
170
- inline int AdvanceToNext(int start);
170
+ inline void SkipUninteresting();
171
171
  LInstruction* instr_;
172
172
  int limit_;
173
173
  int current_;
@@ -178,12 +178,12 @@ class TempIterator BASE_EMBEDDED {
178
178
  class InputIterator BASE_EMBEDDED {
179
179
  public:
180
180
  inline explicit InputIterator(LInstruction* instr);
181
- inline bool HasNext();
182
- inline LOperand* Next();
181
+ inline bool Done();
182
+ inline LOperand* Current();
183
183
  inline void Advance();
184
184
 
185
185
  private:
186
- inline int AdvanceToNext(int start);
186
+ inline void SkipUninteresting();
187
187
  LInstruction* instr_;
188
188
  int limit_;
189
189
  int current_;
@@ -193,8 +193,8 @@ class InputIterator BASE_EMBEDDED {
193
193
  class UseIterator BASE_EMBEDDED {
194
194
  public:
195
195
  inline explicit UseIterator(LInstruction* instr);
196
- inline bool HasNext();
197
- inline LOperand* Next();
196
+ inline bool Done();
197
+ inline LOperand* Current();
198
198
  inline void Advance();
199
199
 
200
200
  private:
@@ -166,21 +166,26 @@ void LPointerMap::PrintTo(StringStream* stream) {
166
166
  }
167
167
 
168
168
 
169
- int ExternalArrayTypeToShiftSize(ExternalArrayType type) {
170
- switch (type) {
171
- case kExternalByteArray:
172
- case kExternalUnsignedByteArray:
173
- case kExternalPixelArray:
169
+ int ElementsKindToShiftSize(JSObject::ElementsKind elements_kind) {
170
+ switch (elements_kind) {
171
+ case JSObject::EXTERNAL_BYTE_ELEMENTS:
172
+ case JSObject::EXTERNAL_PIXEL_ELEMENTS:
173
+ case JSObject::EXTERNAL_UNSIGNED_BYTE_ELEMENTS:
174
174
  return 0;
175
- case kExternalShortArray:
176
- case kExternalUnsignedShortArray:
175
+ case JSObject::EXTERNAL_SHORT_ELEMENTS:
176
+ case JSObject::EXTERNAL_UNSIGNED_SHORT_ELEMENTS:
177
177
  return 1;
178
- case kExternalIntArray:
179
- case kExternalUnsignedIntArray:
180
- case kExternalFloatArray:
178
+ case JSObject::EXTERNAL_INT_ELEMENTS:
179
+ case JSObject::EXTERNAL_UNSIGNED_INT_ELEMENTS:
180
+ case JSObject::EXTERNAL_FLOAT_ELEMENTS:
181
181
  return 2;
182
- case kExternalDoubleArray:
182
+ case JSObject::EXTERNAL_DOUBLE_ELEMENTS:
183
+ case JSObject::FAST_DOUBLE_ELEMENTS:
183
184
  return 3;
185
+ case JSObject::FAST_ELEMENTS:
186
+ case JSObject::DICTIONARY_ELEMENTS:
187
+ case JSObject::NON_STRICT_ARGUMENTS_ELEMENTS:
188
+ return kPointerSizeLog2;
184
189
  }
185
190
  UNREACHABLE();
186
191
  return 0;
@@ -144,7 +144,8 @@ class LUnallocated: public LOperand {
144
144
  };
145
145
 
146
146
  static const int kMaxVirtualRegisters = 1 << (kVirtualRegisterWidth + 1);
147
- static const int kMaxFixedIndices = 128;
147
+ static const int kMaxFixedIndex = 63;
148
+ static const int kMinFixedIndex = -64;
148
149
 
149
150
  bool HasIgnorePolicy() const { return policy() == IGNORE; }
150
151
  bool HasNoPolicy() const { return policy() == NONE; }
@@ -518,34 +519,34 @@ class ShallowIterator BASE_EMBEDDED {
518
519
  : env_(env),
519
520
  limit_(env != NULL ? env->values()->length() : 0),
520
521
  current_(0) {
521
- current_ = AdvanceToNext(0);
522
+ SkipUninteresting();
522
523
  }
523
524
 
524
- inline bool HasNext() {
525
- return env_ != NULL && current_ < limit_;
526
- }
525
+ bool Done() { return current_ >= limit_; }
527
526
 
528
- inline LOperand* Next() {
529
- ASSERT(HasNext());
527
+ LOperand* Current() {
528
+ ASSERT(!Done());
530
529
  return env_->values()->at(current_);
531
530
  }
532
531
 
533
- inline void Advance() {
534
- current_ = AdvanceToNext(current_ + 1);
532
+ void Advance() {
533
+ ASSERT(!Done());
534
+ ++current_;
535
+ SkipUninteresting();
535
536
  }
536
537
 
537
- inline LEnvironment* env() { return env_; }
538
+ LEnvironment* env() { return env_; }
538
539
 
539
540
  private:
540
- inline bool ShouldSkip(LOperand* op) {
541
+ bool ShouldSkip(LOperand* op) {
541
542
  return op == NULL || op->IsConstantOperand() || op->IsArgument();
542
543
  }
543
544
 
544
- inline int AdvanceToNext(int start) {
545
- while (start < limit_ && ShouldSkip(env_->values()->at(start))) {
546
- start++;
545
+ // Skip until something interesting, beginning with and including current_.
546
+ void SkipUninteresting() {
547
+ while (current_ < limit_ && ShouldSkip(env_->values()->at(current_))) {
548
+ ++current_;
547
549
  }
548
- return start;
549
550
  }
550
551
 
551
552
  LEnvironment* env_;
@@ -558,38 +559,34 @@ class ShallowIterator BASE_EMBEDDED {
558
559
  class DeepIterator BASE_EMBEDDED {
559
560
  public:
560
561
  explicit DeepIterator(LEnvironment* env)
561
- : current_iterator_(env) { }
562
-
563
- inline bool HasNext() {
564
- if (current_iterator_.HasNext()) return true;
565
- if (current_iterator_.env() == NULL) return false;
566
- AdvanceToOuter();
567
- return current_iterator_.HasNext();
562
+ : current_iterator_(env) {
563
+ SkipUninteresting();
568
564
  }
569
565
 
570
- inline LOperand* Next() {
571
- ASSERT(current_iterator_.HasNext());
572
- return current_iterator_.Next();
566
+ bool Done() { return current_iterator_.Done(); }
567
+
568
+ LOperand* Current() {
569
+ ASSERT(!current_iterator_.Done());
570
+ return current_iterator_.Current();
573
571
  }
574
572
 
575
- inline void Advance() {
576
- if (current_iterator_.HasNext()) {
577
- current_iterator_.Advance();
578
- } else {
579
- AdvanceToOuter();
580
- }
573
+ void Advance() {
574
+ current_iterator_.Advance();
575
+ SkipUninteresting();
581
576
  }
582
577
 
583
578
  private:
584
- inline void AdvanceToOuter() {
585
- current_iterator_ = ShallowIterator(current_iterator_.env()->outer());
579
+ void SkipUninteresting() {
580
+ while (current_iterator_.env() != NULL && current_iterator_.Done()) {
581
+ current_iterator_ = ShallowIterator(current_iterator_.env()->outer());
582
+ }
586
583
  }
587
584
 
588
585
  ShallowIterator current_iterator_;
589
586
  };
590
587
 
591
588
 
592
- int ExternalArrayTypeToShiftSize(ExternalArrayType type);
589
+ int ElementsKindToShiftSize(JSObject::ElementsKind elements_kind);
593
590
 
594
591
 
595
592
  } } // namespace v8::internal
@@ -66,7 +66,7 @@ void SetElementNonStrict(Handle<JSObject> object,
66
66
  class Differencer {
67
67
  public:
68
68
  explicit Differencer(Comparator::Input* input)
69
- : input_(input), len1_(input->getLength1()), len2_(input->getLength2()) {
69
+ : input_(input), len1_(input->GetLength1()), len2_(input->GetLength2()) {
70
70
  buffer_ = NewArray<int>(len1_ * len2_);
71
71
  }
72
72
  ~Differencer() {
@@ -151,7 +151,7 @@ class Differencer {
151
151
  if (cached_res == kEmptyCellValue) {
152
152
  Direction dir;
153
153
  int res;
154
- if (input_->equals(pos1, pos2)) {
154
+ if (input_->Equals(pos1, pos2)) {
155
155
  res = CompareUpToTail(pos1 + 1, pos2 + 1);
156
156
  dir = EQ;
157
157
  } else {
@@ -279,6 +279,70 @@ static bool CompareSubstrings(Handle<String> s1, int pos1,
279
279
  }
280
280
 
281
281
 
282
+ // Additional to Input interface. Lets switch Input range to subrange.
283
+ // More elegant way would be to wrap one Input as another Input object
284
+ // and translate positions there, but that would cost us additional virtual
285
+ // call per comparison.
286
+ class SubrangableInput : public Comparator::Input {
287
+ public:
288
+ virtual void SetSubrange1(int offset, int len) = 0;
289
+ virtual void SetSubrange2(int offset, int len) = 0;
290
+ };
291
+
292
+
293
+ class SubrangableOutput : public Comparator::Output {
294
+ public:
295
+ virtual void SetSubrange1(int offset, int len) = 0;
296
+ virtual void SetSubrange2(int offset, int len) = 0;
297
+ };
298
+
299
+
300
+ static int min(int a, int b) {
301
+ return a < b ? a : b;
302
+ }
303
+
304
+
305
+ // Finds common prefix and suffix in input. This parts shouldn't take space in
306
+ // linear programming table. Enable subranging in input and output.
307
+ static void NarrowDownInput(SubrangableInput* input,
308
+ SubrangableOutput* output) {
309
+ const int len1 = input->GetLength1();
310
+ const int len2 = input->GetLength2();
311
+
312
+ int common_prefix_len;
313
+ int common_suffix_len;
314
+
315
+ {
316
+ common_prefix_len = 0;
317
+ int prefix_limit = min(len1, len2);
318
+ while (common_prefix_len < prefix_limit &&
319
+ input->Equals(common_prefix_len, common_prefix_len)) {
320
+ common_prefix_len++;
321
+ }
322
+
323
+ common_suffix_len = 0;
324
+ int suffix_limit = min(len1 - common_prefix_len, len2 - common_prefix_len);
325
+
326
+ while (common_suffix_len < suffix_limit &&
327
+ input->Equals(len1 - common_suffix_len - 1,
328
+ len2 - common_suffix_len - 1)) {
329
+ common_suffix_len++;
330
+ }
331
+ }
332
+
333
+ if (common_prefix_len > 0 || common_suffix_len > 0) {
334
+ int new_len1 = len1 - common_suffix_len - common_prefix_len;
335
+ int new_len2 = len2 - common_suffix_len - common_prefix_len;
336
+
337
+ input->SetSubrange1(common_prefix_len, new_len1);
338
+ input->SetSubrange2(common_prefix_len, new_len2);
339
+
340
+ output->SetSubrange1(common_prefix_len, new_len1);
341
+ output->SetSubrange2(common_prefix_len, new_len2);
342
+ }
343
+ }
344
+
345
+
282
346
  // A helper class that writes chunk numbers into JSArray.
283
347
  // Each chunk is stored as 3 array elements: (pos1_begin, pos1_end, pos2_end).
284
348
  class CompareOutputArrayWriter {
@@ -319,13 +383,13 @@ class TokensCompareInput : public Comparator::Input {
319
383
  : s1_(s1), offset1_(offset1), len1_(len1),
320
384
  s2_(s2), offset2_(offset2), len2_(len2) {
321
385
  }
322
- virtual int getLength1() {
386
+ virtual int GetLength1() {
323
387
  return len1_;
324
388
  }
325
- virtual int getLength2() {
389
+ virtual int GetLength2() {
326
390
  return len2_;
327
391
  }
328
- bool equals(int index1, int index2) {
392
+ bool Equals(int index1, int index2) {
329
393
  return s1_->Get(offset1_ + index1) == s2_->Get(offset2_ + index2);
330
394
  }
331
395
 
@@ -401,20 +465,26 @@ class LineEndsWrapper {
401
465
 
402
466
 
403
467
  // Represents 2 strings as 2 arrays of lines.
404
- class LineArrayCompareInput : public Comparator::Input {
468
+ class LineArrayCompareInput : public SubrangableInput {
405
469
  public:
406
470
  LineArrayCompareInput(Handle<String> s1, Handle<String> s2,
407
471
  LineEndsWrapper line_ends1, LineEndsWrapper line_ends2)
408
472
  : s1_(s1), s2_(s2), line_ends1_(line_ends1),
409
- line_ends2_(line_ends2) {
473
+ line_ends2_(line_ends2),
474
+ subrange_offset1_(0), subrange_offset2_(0),
475
+ subrange_len1_(line_ends1_.length()),
476
+ subrange_len2_(line_ends2_.length()) {
410
477
  }
411
- int getLength1() {
412
- return line_ends1_.length();
478
+ int GetLength1() {
479
+ return subrange_len1_;
413
480
  }
414
- int getLength2() {
415
- return line_ends2_.length();
481
+ int GetLength2() {
482
+ return subrange_len2_;
416
483
  }
417
- bool equals(int index1, int index2) {
484
+ bool Equals(int index1, int index2) {
485
+ index1 += subrange_offset1_;
486
+ index2 += subrange_offset2_;
487
+
418
488
  int line_start1 = line_ends1_.GetLineStart(index1);
419
489
  int line_start2 = line_ends2_.GetLineStart(index2);
420
490
  int line_end1 = line_ends1_.GetLineEnd(index1);
@@ -427,26 +497,42 @@ class LineArrayCompareInput : public Comparator::Input {
427
497
  return CompareSubstrings(s1_, line_start1, s2_, line_start2,
428
498
  len1);
429
499
  }
500
+ void SetSubrange1(int offset, int len) {
501
+ subrange_offset1_ = offset;
502
+ subrange_len1_ = len;
503
+ }
504
+ void SetSubrange2(int offset, int len) {
505
+ subrange_offset2_ = offset;
506
+ subrange_len2_ = len;
507
+ }
430
508
 
431
509
  private:
432
510
  Handle<String> s1_;
433
511
  Handle<String> s2_;
434
512
  LineEndsWrapper line_ends1_;
435
513
  LineEndsWrapper line_ends2_;
514
+ int subrange_offset1_;
515
+ int subrange_offset2_;
516
+ int subrange_len1_;
517
+ int subrange_len2_;
436
518
  };
437
519
 
438
520
 
439
521
  // Stores compare result in JSArray. For each chunk tries to conduct
440
522
  // a fine-grained nested diff token-wise.
441
- class TokenizingLineArrayCompareOutput : public Comparator::Output {
523
+ class TokenizingLineArrayCompareOutput : public SubrangableOutput {
442
524
  public:
443
525
  TokenizingLineArrayCompareOutput(LineEndsWrapper line_ends1,
444
526
  LineEndsWrapper line_ends2,
445
527
  Handle<String> s1, Handle<String> s2)
446
- : line_ends1_(line_ends1), line_ends2_(line_ends2), s1_(s1), s2_(s2) {
528
+ : line_ends1_(line_ends1), line_ends2_(line_ends2), s1_(s1), s2_(s2),
529
+ subrange_offset1_(0), subrange_offset2_(0) {
447
530
  }
448
531
 
449
532
  void AddChunk(int line_pos1, int line_pos2, int line_len1, int line_len2) {
533
+ line_pos1 += subrange_offset1_;
534
+ line_pos2 += subrange_offset2_;
535
+
450
536
  int char_pos1 = line_ends1_.GetLineStart(line_pos1);
451
537
  int char_pos2 = line_ends2_.GetLineStart(line_pos2);
452
538
  int char_len1 = line_ends1_.GetLineStart(line_pos1 + line_len1) - char_pos1;
@@ -466,6 +552,12 @@ class TokenizingLineArrayCompareOutput : public Comparator::Output {
466
552
  array_writer_.WriteChunk(char_pos1, char_pos2, char_len1, char_len2);
467
553
  }
468
554
  }
555
+ void SetSubrange1(int offset, int len) {
556
+ subrange_offset1_ = offset;
557
+ }
558
+ void SetSubrange2(int offset, int len) {
559
+ subrange_offset2_ = offset;
560
+ }
469
561
 
470
562
  Handle<JSArray> GetResult() {
471
563
  return array_writer_.GetResult();
@@ -479,6 +571,8 @@ class TokenizingLineArrayCompareOutput : public Comparator::Output {
479
571
  LineEndsWrapper line_ends2_;
480
572
  Handle<String> s1_;
481
573
  Handle<String> s2_;
574
+ int subrange_offset1_;
575
+ int subrange_offset2_;
482
576
  };
483
577
 
484
578
 
@@ -493,6 +587,8 @@ Handle<JSArray> LiveEdit::CompareStrings(Handle<String> s1,
493
587
  LineArrayCompareInput input(s1, s2, line_ends1, line_ends2);
494
588
  TokenizingLineArrayCompareOutput output(line_ends1, line_ends2, s1, s2);
495
589
 
590
+ NarrowDownInput(&input, &output);
591
+
496
592
  Comparator::CalculateDifference(&input, &output);
497
593
 
498
594
  return output.GetResult();
@@ -814,7 +910,7 @@ class FunctionInfoListener {
814
910
  JSArray* LiveEdit::GatherCompileInfo(Handle<Script> script,
815
911
  Handle<String> source) {
816
912
  Isolate* isolate = Isolate::Current();
817
- CompilationZoneScope zone_scope(isolate, DELETE_ON_EXIT);
913
+ ZoneScope zone_scope(isolate, DELETE_ON_EXIT);
818
914
 
819
915
  FunctionInfoListener listener;
820
916
  Handle<Object> original_source = Handle<Object>(script->source());