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
@@ -127,38 +127,38 @@ struct Register {
127
127
 
128
128
  const Register no_reg = { -1 };
129
129
 
130
- const Register zero_reg = { 0 };
131
- const Register at = { 1 };
132
- const Register v0 = { 2 };
133
- const Register v1 = { 3 };
134
- const Register a0 = { 4 };
130
+ const Register zero_reg = { 0 }; // Always zero.
131
+ const Register at = { 1 }; // at: Reserved for synthetic instructions.
132
+ const Register v0 = { 2 }; // v0, v1: Used when returning multiple values
133
+ const Register v1 = { 3 }; // from subroutines.
134
+ const Register a0 = { 4 }; // a0 - a4: Used to pass non-FP parameters.
135
135
  const Register a1 = { 5 };
136
136
  const Register a2 = { 6 };
137
137
  const Register a3 = { 7 };
138
- const Register t0 = { 8 };
139
- const Register t1 = { 9 };
140
- const Register t2 = { 10 };
138
+ const Register t0 = { 8 }; // t0 - t9: Can be used without reservation, act
139
+ const Register t1 = { 9 }; // as temporary registers and are allowed to
140
+ const Register t2 = { 10 }; // be destroyed by subroutines.
141
141
  const Register t3 = { 11 };
142
142
  const Register t4 = { 12 };
143
143
  const Register t5 = { 13 };
144
144
  const Register t6 = { 14 };
145
145
  const Register t7 = { 15 };
146
- const Register s0 = { 16 };
147
- const Register s1 = { 17 };
148
- const Register s2 = { 18 };
149
- const Register s3 = { 19 };
150
- const Register s4 = { 20 };
146
+ const Register s0 = { 16 }; // s0 - s7: Subroutine register variables.
147
+ const Register s1 = { 17 }; // Subroutines that write to these registers
148
+ const Register s2 = { 18 }; // must restore their values before exiting so
149
+ const Register s3 = { 19 }; // that the caller can expect the values to be
150
+ const Register s4 = { 20 }; // preserved.
151
151
  const Register s5 = { 21 };
152
152
  const Register s6 = { 22 };
153
153
  const Register s7 = { 23 };
154
154
  const Register t8 = { 24 };
155
155
  const Register t9 = { 25 };
156
- const Register k0 = { 26 };
157
- const Register k1 = { 27 };
158
- const Register gp = { 28 };
159
- const Register sp = { 29 };
160
- const Register s8_fp = { 30 };
161
- const Register ra = { 31 };
156
+ const Register k0 = { 26 }; // k0, k1: Reserved for system calls and
157
+ const Register k1 = { 27 }; // interrupt handlers.
158
+ const Register gp = { 28 }; // gp: Reserved.
159
+ const Register sp = { 29 }; // sp: Stack pointer.
160
+ const Register s8_fp = { 30 }; // fp: Frame pointer.
161
+ const Register ra = { 31 }; // ra: Return address pointer.
162
162
 
163
163
 
164
164
  int ToNumber(Register reg);
@@ -328,8 +328,8 @@ class Operand BASE_EMBEDDED {
328
328
  // Class MemOperand represents a memory operand in load and store instructions.
329
329
  class MemOperand : public Operand {
330
330
  public:
331
-
332
331
  explicit MemOperand(Register rn, int32_t offset = 0);
332
+ int32_t offset() const { return offset_; }
333
333
 
334
334
  private:
335
335
  int32_t offset_;
@@ -372,6 +372,7 @@ class CpuFeatures : public AllStatic {
372
372
  // Enable a specified feature within a scope.
373
373
  class Scope BASE_EMBEDDED {
374
374
  #ifdef DEBUG
375
+
375
376
  public:
376
377
  explicit Scope(CpuFeature f) {
377
378
  unsigned mask = 1u << f;
@@ -391,11 +392,13 @@ class CpuFeatures : public AllStatic {
391
392
  isolate_->set_enabled_cpu_features(old_enabled_);
392
393
  }
393
394
  }
394
- private:
395
+
396
+ private:
395
397
  Isolate* isolate_;
396
398
  unsigned old_enabled_;
397
399
  #else
398
- public:
400
+
401
+ public:
399
402
  explicit Scope(CpuFeature f) {}
400
403
  #endif
401
404
  };
@@ -478,6 +481,9 @@ class Assembler : public AssemblerBase {
478
481
  // Note: The same Label can be used for forward and backward branches
479
482
  // but it may be bound only once.
480
483
  void bind(Label* L); // Binds an unbound label L to current code position.
484
+ // Determines if Label is bound and near enough so that branch instruction
485
+ // can be used to reach it, instead of jump instruction.
486
+ bool is_near(Label* L);
481
487
 
482
488
  // Returns the branch offset to the given label from the current code
483
489
  // position. Links the label to the current position if it is still unbound.
@@ -488,6 +494,7 @@ class Assembler : public AssemblerBase {
488
494
  ASSERT((o & 3) == 0); // Assert the offset is aligned.
489
495
  return o >> 2;
490
496
  }
497
+ uint32_t jump_address(Label* L);
491
498
 
492
499
  // Puts a labels target address at the given position.
493
500
  // The high 8 bits are set to zero.
@@ -675,7 +682,8 @@ class Assembler : public AssemblerBase {
675
682
  //-------------Misc-instructions--------------
676
683
 
677
684
  // Break / Trap instructions.
678
- void break_(uint32_t code);
685
+ void break_(uint32_t code, bool break_as_stop = false);
686
+ void stop(const char* msg, uint32_t code = kMaxStopCode);
679
687
  void tge(Register rs, Register rt, uint16_t code);
680
688
  void tgeu(Register rs, Register rt, uint16_t code);
681
689
  void tlt(Register rs, Register rt, uint16_t code);
@@ -771,8 +779,13 @@ class Assembler : public AssemblerBase {
771
779
  void fcmp(FPURegister src1, const double src2, FPUCondition cond);
772
780
 
773
781
  // Check the code size generated from label to here.
774
- int InstructionsGeneratedSince(Label* l) {
775
- return (pc_offset() - l->pos()) / kInstrSize;
782
+ int SizeOfCodeGeneratedSince(Label* label) {
783
+ return pc_offset() - label->pos();
784
+ }
785
+
786
+ // Check the number of instructions generated from label to here.
787
+ int InstructionsGeneratedSince(Label* label) {
788
+ return SizeOfCodeGeneratedSince(label) / kInstrSize;
776
789
  }
777
790
 
778
791
  // Class for scoping postponing the trampoline pool generation.
@@ -791,6 +804,25 @@ class Assembler : public AssemblerBase {
791
804
  DISALLOW_IMPLICIT_CONSTRUCTORS(BlockTrampolinePoolScope);
792
805
  };
793
806
 
807
+ // Class for postponing the assembly buffer growth. Typically used for
808
+ // sequences of instructions that must be emitted as a unit, before
809
+ // buffer growth (and relocation) can occur.
810
+ // This blocking scope is not nestable.
811
+ class BlockGrowBufferScope {
812
+ public:
813
+ explicit BlockGrowBufferScope(Assembler* assem) : assem_(assem) {
814
+ assem_->StartBlockGrowBuffer();
815
+ }
816
+ ~BlockGrowBufferScope() {
817
+ assem_->EndBlockGrowBuffer();
818
+ }
819
+
820
+ private:
821
+ Assembler* assem_;
822
+
823
+ DISALLOW_IMPLICIT_CONSTRUCTORS(BlockGrowBufferScope);
824
+ };
825
+
794
826
  // Debugging.
795
827
 
796
828
  // Mark address of the ExitJSFrame code.
@@ -801,12 +833,24 @@ class Assembler : public AssemblerBase {
801
833
 
802
834
  // Record the AST id of the CallIC being compiled, so that it can be placed
803
835
  // in the relocation information.
804
- void RecordAstId(unsigned ast_id) { ast_id_for_reloc_info_ = ast_id; }
836
+ void SetRecordedAstId(unsigned ast_id) {
837
+ ASSERT(recorded_ast_id_ == kNoASTId);
838
+ recorded_ast_id_ = ast_id;
839
+ }
840
+
841
+ unsigned RecordedAstId() {
842
+ ASSERT(recorded_ast_id_ != kNoASTId);
843
+ return recorded_ast_id_;
844
+ }
845
+
846
+ void ClearRecordedAstId() { recorded_ast_id_ = kNoASTId; }
805
847
 
806
848
  // Record a comment relocation entry that can be used by a disassembler.
807
849
  // Use --code-comments to enable.
808
850
  void RecordComment(const char* msg);
809
851
 
852
+ static int RelocateInternalReference(byte* pc, intptr_t pc_delta);
853
+
810
854
  // Writes a single byte or word of data in the code stream. Used for
811
855
  // inline tables, e.g., jump-tables.
812
856
  void db(uint8_t data);
@@ -843,6 +887,11 @@ class Assembler : public AssemblerBase {
843
887
  static bool IsBeq(Instr instr);
844
888
  static bool IsBne(Instr instr);
845
889
 
890
+ static bool IsJump(Instr instr);
891
+ static bool IsJ(Instr instr);
892
+ static bool IsLui(Instr instr);
893
+ static bool IsOri(Instr instr);
894
+
846
895
  static bool IsNop(Instr instr, unsigned int type);
847
896
  static bool IsPop(Instr instr);
848
897
  static bool IsPush(Instr instr);
@@ -864,6 +913,8 @@ class Assembler : public AssemblerBase {
864
913
  static uint32_t GetSa(Instr instr);
865
914
  static uint32_t GetSaField(Instr instr);
866
915
  static uint32_t GetOpcodeField(Instr instr);
916
+ static uint32_t GetFunction(Instr instr);
917
+ static uint32_t GetFunctionField(Instr instr);
867
918
  static uint32_t GetImmediate16(Instr instr);
868
919
  static uint32_t GetLabelConst(Instr instr);
869
920
 
@@ -879,13 +930,13 @@ class Assembler : public AssemblerBase {
879
930
 
880
931
  static bool IsAndImmediate(Instr instr);
881
932
 
882
- void CheckTrampolinePool(bool force_emit = false);
933
+ void CheckTrampolinePool();
883
934
 
884
935
  protected:
885
936
  // Relocation for a type-recording IC has the AST id added to it. This
886
937
  // member variable is a way to pass the information from the call site to
887
938
  // the relocation info.
888
- unsigned ast_id_for_reloc_info_;
939
+ unsigned recorded_ast_id_;
889
940
 
890
941
  bool emit_debug_code() const { return emit_debug_code_; }
891
942
 
@@ -912,6 +963,7 @@ class Assembler : public AssemblerBase {
912
963
  void StartBlockTrampolinePool() {
913
964
  trampoline_pool_blocked_nesting_++;
914
965
  }
966
+
915
967
  void EndBlockTrampolinePool() {
916
968
  trampoline_pool_blocked_nesting_--;
917
969
  }
@@ -924,6 +976,25 @@ class Assembler : public AssemblerBase {
924
976
  return internal_trampoline_exception_;
925
977
  }
926
978
 
979
+ bool is_trampoline_emitted() const {
980
+ return trampoline_emitted_;
981
+ }
982
+
983
+ // Temporarily block automatic assembly buffer growth.
984
+ void StartBlockGrowBuffer() {
985
+ ASSERT(!block_buffer_growth_);
986
+ block_buffer_growth_ = true;
987
+ }
988
+
989
+ void EndBlockGrowBuffer() {
990
+ ASSERT(block_buffer_growth_);
991
+ block_buffer_growth_ = false;
992
+ }
993
+
994
+ bool is_buffer_growth_blocked() const {
995
+ return block_buffer_growth_;
996
+ }
997
+
927
998
  private:
928
999
  // Code buffer:
929
1000
  // The buffer into which code and relocation info are generated.
@@ -960,6 +1031,9 @@ class Assembler : public AssemblerBase {
960
1031
  // Keep track of the last emitted pool to guarantee a maximal distance.
961
1032
  int last_trampoline_pool_end_; // pc offset of the end of the last pool.
962
1033
 
1034
+ // Automatic growth of the assembly buffer may be blocked for some sequences.
1035
+ bool block_buffer_growth_; // Block growth when true.
1036
+
963
1037
  // Relocation information generation.
964
1038
  // Each relocation is encoded as a variable size value.
965
1039
  static const int kMaxRelocSize = RelocInfoWriter::kMaxSize;
@@ -1040,7 +1114,6 @@ class Assembler : public AssemblerBase {
1040
1114
  // Labels.
1041
1115
  void print(Label* L);
1042
1116
  void bind_to(Label* L, int pos);
1043
- void link_to(Label* L, Label* appendix);
1044
1117
  void next(Label* L);
1045
1118
 
1046
1119
  // One trampoline consists of:
@@ -1053,13 +1126,17 @@ class Assembler : public AssemblerBase {
1053
1126
  // label_count * kInstrSize.
1054
1127
  class Trampoline {
1055
1128
  public:
1056
- Trampoline(int start, int slot_count, int label_count) {
1129
+ Trampoline() {
1130
+ start_ = 0;
1131
+ next_slot_ = 0;
1132
+ free_slot_count_ = 0;
1133
+ end_ = 0;
1134
+ }
1135
+ Trampoline(int start, int slot_count) {
1057
1136
  start_ = start;
1058
1137
  next_slot_ = start;
1059
1138
  free_slot_count_ = slot_count;
1060
- next_label_ = start + slot_count * 2 * kInstrSize;
1061
- free_label_count_ = label_count;
1062
- end_ = next_label_ + (label_count - 1) * kInstrSize;
1139
+ end_ = start + slot_count * kTrampolineSlotsSize;
1063
1140
  }
1064
1141
  int start() {
1065
1142
  return start_;
@@ -1078,40 +1155,30 @@ class Assembler : public AssemblerBase {
1078
1155
  } else {
1079
1156
  trampoline_slot = next_slot_;
1080
1157
  free_slot_count_--;
1081
- next_slot_ += 2*kInstrSize;
1158
+ next_slot_ += kTrampolineSlotsSize;
1082
1159
  }
1083
1160
  return trampoline_slot;
1084
1161
  }
1085
- int take_label() {
1086
- int label_pos = next_label_;
1087
- ASSERT(free_label_count_ > 0);
1088
- free_label_count_--;
1089
- next_label_ += kInstrSize;
1090
- return label_pos;
1091
- }
1092
1162
  private:
1093
1163
  int start_;
1094
1164
  int end_;
1095
1165
  int next_slot_;
1096
1166
  int free_slot_count_;
1097
- int next_label_;
1098
- int free_label_count_;
1099
1167
  };
1100
1168
 
1101
- int32_t get_label_entry(int32_t pos, bool next_pool = true);
1102
- int32_t get_trampoline_entry(int32_t pos, bool next_pool = true);
1103
-
1104
- static const int kSlotsPerTrampoline = 2304;
1105
- static const int kLabelsPerTrampoline = 8;
1106
- static const int kTrampolineInst =
1107
- 2 * kSlotsPerTrampoline + kLabelsPerTrampoline;
1108
- static const int kTrampolineSize = kTrampolineInst * kInstrSize;
1169
+ int32_t get_trampoline_entry(int32_t pos);
1170
+ int unbound_labels_count_;
1171
+ // If trampoline is emitted, generated code is becoming large. As this is
1172
+ // already a slow case which can possibly break our code generation for the
1173
+ // extreme case, we use this information to trigger different mode of
1174
+ // branch instruction generation, where we use jump instructions rather
1175
+ // than regular branch instructions.
1176
+ bool trampoline_emitted_;
1177
+ static const int kTrampolineSlotsSize = 4 * kInstrSize;
1109
1178
  static const int kMaxBranchOffset = (1 << (18 - 1)) - 1;
1110
- static const int kMaxDistBetweenPools =
1111
- kMaxBranchOffset - 2 * kTrampolineSize;
1112
1179
  static const int kInvalidSlotPos = -1;
1113
1180
 
1114
- List<Trampoline> trampolines_;
1181
+ Trampoline trampoline_;
1115
1182
  bool internal_trampoline_exception_;
1116
1183
 
1117
1184
  friend class RegExpMacroAssemblerMIPS;
@@ -344,7 +344,7 @@ static void ArrayNativeCode(MacroAssembler* masm,
344
344
  // Handle construction of an empty array of a certain size. Bail out if size
345
345
  // is too large to actually allocate an elements array.
346
346
  ASSERT(kSmiTag == 0);
347
- __ Branch(call_generic_code, ge, a2,
347
+ __ Branch(call_generic_code, Ugreater_equal, a2,
348
348
  Operand(JSObject::kInitialMaxFastElementArray << kSmiTagSize));
349
349
 
350
350
  // a0: argc
@@ -634,7 +634,7 @@ void Builtins::Generate_JSConstructCall(MacroAssembler* masm) {
634
634
  __ lw(a2, FieldMemOperand(a1, JSFunction::kSharedFunctionInfoOffset));
635
635
  __ lw(a2, FieldMemOperand(a2, SharedFunctionInfo::kConstructStubOffset));
636
636
  __ Addu(t9, a2, Operand(Code::kHeaderSize - kHeapObjectTag));
637
- __ Jump(Operand(t9));
637
+ __ Jump(t9);
638
638
 
639
639
  // a0: number of arguments
640
640
  // a1: called object
@@ -942,10 +942,11 @@ static void Generate_JSConstructStubHelper(MacroAssembler* masm,
942
942
  masm->isolate()->builtins()->HandleApiCallConstruct();
943
943
  ParameterCount expected(0);
944
944
  __ InvokeCode(code, expected, expected,
945
- RelocInfo::CODE_TARGET, CALL_FUNCTION);
945
+ RelocInfo::CODE_TARGET, CALL_FUNCTION, CALL_AS_METHOD);
946
946
  } else {
947
947
  ParameterCount actual(a0);
948
- __ InvokeFunction(a1, actual, CALL_FUNCTION);
948
+ __ InvokeFunction(a1, actual, CALL_FUNCTION,
949
+ NullCallWrapper(), CALL_AS_METHOD);
949
950
  }
950
951
 
951
952
  // Pop the function from the stack.
@@ -973,9 +974,9 @@ static void Generate_JSConstructStubHelper(MacroAssembler* masm,
973
974
  __ Branch(&use_receiver, eq, t0, Operand(zero_reg));
974
975
 
975
976
  // If the type of the result (stored in its map) is less than
976
- // FIRST_JS_OBJECT_TYPE, it is not an object in the ECMA sense.
977
+ // FIRST_SPEC_OBJECT_TYPE, it is not an object in the ECMA sense.
977
978
  __ GetObjectType(v0, a3, a3);
978
- __ Branch(&exit, greater_equal, a3, Operand(FIRST_JS_OBJECT_TYPE));
979
+ __ Branch(&exit, greater_equal, a3, Operand(FIRST_SPEC_OBJECT_TYPE));
979
980
 
980
981
  // Throw away the result of the constructor invocation and use the
981
982
  // on-stack receiver as the result.
@@ -1074,11 +1075,11 @@ static void Generate_JSEntryTrampolineHelper(MacroAssembler* masm,
1074
1075
  // Invoke the code and pass argc as a0.
1075
1076
  __ mov(a0, a3);
1076
1077
  if (is_construct) {
1077
- __ Call(masm->isolate()->builtins()->JSConstructCall(),
1078
- RelocInfo::CODE_TARGET);
1078
+ __ Call(masm->isolate()->builtins()->JSConstructCall());
1079
1079
  } else {
1080
1080
  ParameterCount actual(a0);
1081
- __ InvokeFunction(a1, actual, CALL_FUNCTION);
1081
+ __ InvokeFunction(a1, actual, CALL_FUNCTION,
1082
+ NullCallWrapper(), CALL_AS_METHOD);
1082
1083
  }
1083
1084
 
1084
1085
  __ LeaveInternalFrame();
@@ -1214,8 +1215,7 @@ void Builtins::Generate_FunctionCall(MacroAssembler* masm) {
1214
1215
  __ Branch(&shift_arguments, ne, t0, Operand(zero_reg));
1215
1216
 
1216
1217
  // Do not transform the receiver for native (Compilerhints already in a3).
1217
- __ And(t0, a3, Operand(1 << (SharedFunctionInfo::kES5Native +
1218
- kSmiTagSize)));
1218
+ __ And(t0, a3, Operand(1 << (SharedFunctionInfo::kNative + kSmiTagSize)));
1219
1219
  __ Branch(&shift_arguments, ne, t0, Operand(zero_reg));
1220
1220
 
1221
1221
  // Compute the receiver in non-strict mode.
@@ -1233,10 +1233,9 @@ void Builtins::Generate_FunctionCall(MacroAssembler* masm) {
1233
1233
  __ LoadRoot(a3, Heap::kNullValueRootIndex);
1234
1234
  __ Branch(&use_global_receiver, eq, a2, Operand(a3));
1235
1235
 
1236
- STATIC_ASSERT(LAST_JS_OBJECT_TYPE + 1 == LAST_TYPE);
1237
- STATIC_ASSERT(LAST_TYPE == JS_FUNCTION_TYPE);
1236
+ STATIC_ASSERT(LAST_SPEC_OBJECT_TYPE == LAST_TYPE);
1238
1237
  __ GetObjectType(a2, a3, a3);
1239
- __ Branch(&shift_arguments, ge, a3, Operand(FIRST_JS_OBJECT_TYPE));
1238
+ __ Branch(&shift_arguments, ge, a3, Operand(FIRST_SPEC_OBJECT_TYPE));
1240
1239
 
1241
1240
  __ bind(&convert_to_object);
1242
1241
  __ EnterInternalFrame(); // In order to preserve argument count.
@@ -1339,7 +1338,8 @@ void Builtins::Generate_FunctionCall(MacroAssembler* masm) {
1339
1338
  RelocInfo::CODE_TARGET, ne, a2, Operand(a0));
1340
1339
 
1341
1340
  ParameterCount expected(0);
1342
- __ InvokeCode(a3, expected, expected, JUMP_FUNCTION);
1341
+ __ InvokeCode(a3, expected, expected, JUMP_FUNCTION,
1342
+ NullCallWrapper(), CALL_AS_METHOD);
1343
1343
  }
1344
1344
 
1345
1345
 
@@ -1401,8 +1401,7 @@ void Builtins::Generate_FunctionApply(MacroAssembler* masm) {
1401
1401
  __ Branch(&push_receiver, ne, t0, Operand(zero_reg));
1402
1402
 
1403
1403
  // Do not transform the receiver for native (Compilerhints already in a2).
1404
- __ And(t0, a2, Operand(1 << (SharedFunctionInfo::kES5Native +
1405
- kSmiTagSize)));
1404
+ __ And(t0, a2, Operand(1 << (SharedFunctionInfo::kNative + kSmiTagSize)));
1406
1405
  __ Branch(&push_receiver, ne, t0, Operand(zero_reg));
1407
1406
 
1408
1407
  // Compute the receiver in non-strict mode.
@@ -1415,10 +1414,9 @@ void Builtins::Generate_FunctionApply(MacroAssembler* masm) {
1415
1414
 
1416
1415
  // Check if the receiver is already a JavaScript object.
1417
1416
  // a0: receiver
1418
- STATIC_ASSERT(LAST_JS_OBJECT_TYPE + 1 == LAST_TYPE);
1419
- STATIC_ASSERT(LAST_TYPE == JS_FUNCTION_TYPE);
1417
+ STATIC_ASSERT(LAST_SPEC_OBJECT_TYPE == LAST_TYPE);
1420
1418
  __ GetObjectType(a0, a1, a1);
1421
- __ Branch(&push_receiver, ge, a1, Operand(FIRST_JS_OBJECT_TYPE));
1419
+ __ Branch(&push_receiver, ge, a1, Operand(FIRST_SPEC_OBJECT_TYPE));
1422
1420
 
1423
1421
  // Convert the receiver to a regular object.
1424
1422
  // a0: receiver
@@ -1473,7 +1471,8 @@ void Builtins::Generate_FunctionApply(MacroAssembler* masm) {
1473
1471
  ParameterCount actual(a0);
1474
1472
  __ sra(a0, a0, kSmiTagSize);
1475
1473
  __ lw(a1, MemOperand(fp, kFunctionOffset));
1476
- __ InvokeFunction(a1, actual, CALL_FUNCTION);
1474
+ __ InvokeFunction(a1, actual, CALL_FUNCTION,
1475
+ NullCallWrapper(), CALL_AS_METHOD);
1477
1476
 
1478
1477
  // Tear down the internal frame and remove function, receiver and args.
1479
1478
  __ LeaveInternalFrame();
@@ -1573,20 +1572,20 @@ void Builtins::Generate_ArgumentsAdaptorTrampoline(MacroAssembler* masm) {
1573
1572
  // Adjust for return address and receiver.
1574
1573
  __ Addu(a0, a0, Operand(2 * kPointerSize));
1575
1574
  // Compute copy end address. Also adjust for return address.
1576
- __ Addu(t1, fp, kPointerSize);
1575
+ __ Addu(t3, fp, kPointerSize);
1577
1576
 
1578
1577
  // Copy the arguments (including the receiver) to the new stack frame.
1579
1578
  // a0: copy start address
1580
1579
  // a1: function
1581
1580
  // a2: expected number of arguments
1582
1581
  // a3: code entry to call
1583
- // t1: copy end address
1582
+ // t3: copy end address
1584
1583
  Label copy;
1585
1584
  __ bind(&copy);
1586
1585
  __ lw(t0, MemOperand(a0)); // Adjusted above for return addr and receiver.
1587
1586
  __ push(t0);
1588
1587
  __ Subu(a0, a0, kPointerSize);
1589
- __ Branch(&copy, ne, a0, Operand(t1));
1588
+ __ Branch(&copy, ne, a0, Operand(t3));
1590
1589
 
1591
1590
  // Fill the remaining expected arguments with undefined.
1592
1591
  // a1: function