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
@@ -44,6 +44,31 @@ class SmallPointerList {
44
44
  public:
45
45
  SmallPointerList() : data_(kEmptyTag) {}
46
46
 
47
+ explicit SmallPointerList(int capacity) : data_(kEmptyTag) {
48
+ Reserve(capacity);
49
+ }
50
+
51
+ void Reserve(int capacity) {
52
+ if (capacity < 2) return;
53
+ if ((data_ & kTagMask) == kListTag) {
54
+ if (list()->capacity() >= capacity) return;
55
+ int old_length = list()->length();
56
+ list()->AddBlock(NULL, capacity - list()->capacity());
57
+ list()->Rewind(old_length);
58
+ return;
59
+ }
60
+ PointerList* list = new PointerList(capacity);
61
+ if ((data_ & kTagMask) == kSingletonTag) {
62
+ list->Add(single_value());
63
+ }
64
+ ASSERT(IsAligned(reinterpret_cast<intptr_t>(list), kPointerAlignment));
65
+ data_ = reinterpret_cast<intptr_t>(list) | kListTag;
66
+ }
67
+
68
+ void Clear() {
69
+ data_ = kEmptyTag;
70
+ }
71
+
47
72
  bool is_empty() const { return length() == 0; }
48
73
 
49
74
  int length() const {
@@ -294,13 +294,13 @@ void Page::SetIsLargeObjectPage(bool is_large_object_page) {
294
294
  SetPageFlag(IS_NORMAL_PAGE, !is_large_object_page);
295
295
  }
296
296
 
297
- bool Page::IsPageExecutable() {
298
- return GetPageFlag(IS_EXECUTABLE);
297
+ Executability Page::PageExecutability() {
298
+ return GetPageFlag(IS_EXECUTABLE) ? EXECUTABLE : NOT_EXECUTABLE;
299
299
  }
300
300
 
301
301
 
302
- void Page::SetIsPageExecutable(bool is_page_executable) {
303
- SetPageFlag(IS_EXECUTABLE, is_page_executable);
302
+ void Page::SetPageExecutability(Executability executable) {
303
+ SetPageFlag(IS_EXECUTABLE, executable == EXECUTABLE);
304
304
  }
305
305
 
306
306
 
@@ -378,35 +378,6 @@ bool MemoryAllocator::InInitialChunk(Address address) {
378
378
  }
379
379
 
380
380
 
381
- #ifdef ENABLE_HEAP_PROTECTION
382
-
383
- void MemoryAllocator::Protect(Address start, size_t size) {
384
- OS::Protect(start, size);
385
- }
386
-
387
-
388
- void MemoryAllocator::Unprotect(Address start,
389
- size_t size,
390
- Executability executable) {
391
- OS::Unprotect(start, size, executable);
392
- }
393
-
394
-
395
- void MemoryAllocator::ProtectChunkFromPage(Page* page) {
396
- int id = GetChunkId(page);
397
- OS::Protect(chunks_[id].address(), chunks_[id].size());
398
- }
399
-
400
-
401
- void MemoryAllocator::UnprotectChunkFromPage(Page* page) {
402
- int id = GetChunkId(page);
403
- OS::Unprotect(chunks_[id].address(), chunks_[id].size(),
404
- chunks_[id].owner()->executable() == EXECUTABLE);
405
- }
406
-
407
- #endif
408
-
409
-
410
381
  // --------------------------------------------------------------------------
411
382
  // PagedSpace
412
383
 
@@ -462,23 +433,6 @@ MaybeObject* PagedSpace::MCAllocateRaw(int size_in_bytes) {
462
433
  }
463
434
 
464
435
 
465
- // -----------------------------------------------------------------------------
466
- // LargeObjectChunk
467
-
468
- Address LargeObjectChunk::GetStartAddress() {
469
- // Round the chunk address up to the nearest page-aligned address
470
- // and return the heap object in that page.
471
- Page* page = Page::FromAddress(RoundUp(address(), Page::kPageSize));
472
- return page->ObjectAreaStart();
473
- }
474
-
475
-
476
- void LargeObjectChunk::Free(Executability executable) {
477
- Isolate* isolate =
478
- Page::FromAddress(RoundUp(address(), Page::kPageSize))->heap_->isolate();
479
- isolate->memory_allocator()->FreeRawMemory(address(), size(), executable);
480
- }
481
-
482
436
  // -----------------------------------------------------------------------------
483
437
  // NewSpace
484
438
 
@@ -148,12 +148,12 @@ PageIterator::PageIterator(PagedSpace* space, Mode mode) : space_(space) {
148
148
  // CodeRange
149
149
 
150
150
 
151
- CodeRange::CodeRange()
152
- : code_range_(NULL),
151
+ CodeRange::CodeRange(Isolate* isolate)
152
+ : isolate_(isolate),
153
+ code_range_(NULL),
153
154
  free_list_(0),
154
155
  allocation_list_(0),
155
- current_allocation_block_index_(0),
156
- isolate_(NULL) {
156
+ current_allocation_block_index_(0) {
157
157
  }
158
158
 
159
159
 
@@ -279,8 +279,9 @@ void CodeRange::TearDown() {
279
279
  const int kEstimatedNumberOfChunks = 270;
280
280
 
281
281
 
282
- MemoryAllocator::MemoryAllocator()
283
- : capacity_(0),
282
+ MemoryAllocator::MemoryAllocator(Isolate* isolate)
283
+ : isolate_(isolate),
284
+ capacity_(0),
284
285
  capacity_executable_(0),
285
286
  size_(0),
286
287
  size_executable_(0),
@@ -288,8 +289,7 @@ MemoryAllocator::MemoryAllocator()
288
289
  chunks_(kEstimatedNumberOfChunks),
289
290
  free_chunk_ids_(kEstimatedNumberOfChunks),
290
291
  max_nof_chunks_(0),
291
- top_(0),
292
- isolate_(NULL) {
292
+ top_(0) {
293
293
  }
294
294
 
295
295
 
@@ -402,7 +402,9 @@ void MemoryAllocator::FreeRawMemory(void* mem,
402
402
  size_t length,
403
403
  Executability executable) {
404
404
  #ifdef DEBUG
405
- ZapBlock(reinterpret_cast<Address>(mem), length);
405
+ // Do not try to zap the guard page.
406
+ size_t guard_size = (executable == EXECUTABLE) ? Page::kPageSize : 0;
407
+ ZapBlock(reinterpret_cast<Address>(mem) + guard_size, length - guard_size);
406
408
  #endif
407
409
  if (isolate_->code_range()->contains(static_cast<Address>(mem))) {
408
410
  isolate_->code_range()->FreeRawMemory(mem, length);
@@ -504,14 +506,28 @@ Page* MemoryAllocator::AllocatePages(int requested_pages,
504
506
  LOG(isolate_, NewEvent("PagedChunk", chunk, chunk_size));
505
507
 
506
508
  *allocated_pages = PagesInChunk(static_cast<Address>(chunk), chunk_size);
509
+
507
510
  // We may 'lose' a page due to alignment.
508
511
  ASSERT(*allocated_pages >= kPagesPerChunk - 1);
509
- if (*allocated_pages == 0) {
510
- FreeRawMemory(chunk, chunk_size, owner->executable());
512
+
513
+ size_t guard_size = (owner->executable() == EXECUTABLE) ? Page::kPageSize : 0;
514
+
515
+ // Check that we got at least one page that we can use.
516
+ if (*allocated_pages <= ((guard_size != 0) ? 1 : 0)) {
517
+ FreeRawMemory(chunk,
518
+ chunk_size,
519
+ owner->executable());
511
520
  LOG(isolate_, DeleteEvent("PagedChunk", chunk));
512
521
  return Page::FromAddress(NULL);
513
522
  }
514
523
 
524
+ if (guard_size != 0) {
525
+ OS::Guard(chunk, guard_size);
526
+ chunk_size -= guard_size;
527
+ chunk = static_cast<Address>(chunk) + guard_size;
528
+ --*allocated_pages;
529
+ }
530
+
515
531
  int chunk_id = Pop();
516
532
  chunks_[chunk_id].init(static_cast<Address>(chunk), chunk_size, owner);
517
533
 
@@ -681,7 +697,8 @@ void MemoryAllocator::DeleteChunk(int chunk_id) {
681
697
  LOG(isolate_, DeleteEvent("PagedChunk", c.address()));
682
698
  ObjectSpace space = static_cast<ObjectSpace>(1 << c.owner_identity());
683
699
  size_t size = c.size();
684
- FreeRawMemory(c.address(), size, c.executable());
700
+ size_t guard_size = (c.executable() == EXECUTABLE) ? Page::kPageSize : 0;
701
+ FreeRawMemory(c.address() - guard_size, size + guard_size, c.executable());
685
702
  PerformAllocationCallback(space, kAllocationActionFree, size);
686
703
  }
687
704
  c.init(NULL, 0, NULL);
@@ -868,30 +885,6 @@ void PagedSpace::TearDown() {
868
885
  }
869
886
 
870
887
 
871
- #ifdef ENABLE_HEAP_PROTECTION
872
-
873
- void PagedSpace::Protect() {
874
- Page* page = first_page_;
875
- while (page->is_valid()) {
876
- Isolate::Current()->memory_allocator()->ProtectChunkFromPage(page);
877
- page = Isolate::Current()->memory_allocator()->
878
- FindLastPageInSameChunk(page)->next_page();
879
- }
880
- }
881
-
882
-
883
- void PagedSpace::Unprotect() {
884
- Page* page = first_page_;
885
- while (page->is_valid()) {
886
- Isolate::Current()->memory_allocator()->UnprotectChunkFromPage(page);
887
- page = Isolate::Current()->memory_allocator()->
888
- FindLastPageInSameChunk(page)->next_page();
889
- }
890
- }
891
-
892
- #endif
893
-
894
-
895
888
  void PagedSpace::MarkAllPagesClean() {
896
889
  PageIterator it(this, PageIterator::ALL_PAGES);
897
890
  while (it.has_next()) {
@@ -1196,7 +1189,6 @@ bool NewSpace::Setup(Address start, int size) {
1196
1189
  ASSERT(IsPowerOf2(maximum_semispace_capacity));
1197
1190
 
1198
1191
  // Allocate and setup the histogram arrays if necessary.
1199
- #if defined(DEBUG) || defined(ENABLE_LOGGING_AND_PROFILING)
1200
1192
  allocated_histogram_ = NewArray<HistogramInfo>(LAST_TYPE + 1);
1201
1193
  promoted_histogram_ = NewArray<HistogramInfo>(LAST_TYPE + 1);
1202
1194
 
@@ -1204,7 +1196,6 @@ bool NewSpace::Setup(Address start, int size) {
1204
1196
  promoted_histogram_[name].set_name(#name);
1205
1197
  INSTANCE_TYPE_LIST(SET_NAME)
1206
1198
  #undef SET_NAME
1207
- #endif
1208
1199
 
1209
1200
  ASSERT(size == 2 * heap()->ReservedSemiSpaceSize());
1210
1201
  ASSERT(IsAddressAligned(start, size, 0));
@@ -1236,7 +1227,6 @@ bool NewSpace::Setup(Address start, int size) {
1236
1227
 
1237
1228
 
1238
1229
  void NewSpace::TearDown() {
1239
- #if defined(DEBUG) || defined(ENABLE_LOGGING_AND_PROFILING)
1240
1230
  if (allocated_histogram_) {
1241
1231
  DeleteArray(allocated_histogram_);
1242
1232
  allocated_histogram_ = NULL;
@@ -1245,7 +1235,6 @@ void NewSpace::TearDown() {
1245
1235
  DeleteArray(promoted_histogram_);
1246
1236
  promoted_histogram_ = NULL;
1247
1237
  }
1248
- #endif
1249
1238
 
1250
1239
  start_ = NULL;
1251
1240
  allocation_info_.top = NULL;
@@ -1258,24 +1247,6 @@ void NewSpace::TearDown() {
1258
1247
  }
1259
1248
 
1260
1249
 
1261
- #ifdef ENABLE_HEAP_PROTECTION
1262
-
1263
- void NewSpace::Protect() {
1264
- heap()->isolate()->memory_allocator()->Protect(ToSpaceLow(), Capacity());
1265
- heap()->isolate()->memory_allocator()->Protect(FromSpaceLow(), Capacity());
1266
- }
1267
-
1268
-
1269
- void NewSpace::Unprotect() {
1270
- heap()->isolate()->memory_allocator()->Unprotect(ToSpaceLow(), Capacity(),
1271
- to_space_.executable());
1272
- heap()->isolate()->memory_allocator()->Unprotect(FromSpaceLow(), Capacity(),
1273
- from_space_.executable());
1274
- }
1275
-
1276
- #endif
1277
-
1278
-
1279
1250
  void NewSpace::Flip() {
1280
1251
  SemiSpace tmp = from_space_;
1281
1252
  from_space_ = to_space_;
@@ -1571,6 +1542,7 @@ static void ReportCodeKindStatistics() {
1571
1542
  CASE(UNARY_OP_IC);
1572
1543
  CASE(BINARY_OP_IC);
1573
1544
  CASE(COMPARE_IC);
1545
+ CASE(TO_BOOLEAN_IC);
1574
1546
  }
1575
1547
  }
1576
1548
 
@@ -1638,7 +1610,6 @@ static void ReportHistogram(bool print_spill) {
1638
1610
 
1639
1611
 
1640
1612
  // Support for statistics gathering for --heap-stats and --log-gc.
1641
- #if defined(DEBUG) || defined(ENABLE_LOGGING_AND_PROFILING)
1642
1613
  void NewSpace::ClearHistograms() {
1643
1614
  for (int i = 0; i <= LAST_TYPE; i++) {
1644
1615
  allocated_histogram_[i].clear();
@@ -1648,9 +1619,7 @@ void NewSpace::ClearHistograms() {
1648
1619
 
1649
1620
  // Because the copying collector does not touch garbage objects, we iterate
1650
1621
  // the new space before a collection to get a histogram of allocated objects.
1651
- // This only happens (1) when compiled with DEBUG and the --heap-stats flag is
1652
- // set, or when compiled with ENABLE_LOGGING_AND_PROFILING and the --log-gc
1653
- // flag is set.
1622
+ // This only happens when --log-gc flag is set.
1654
1623
  void NewSpace::CollectStatistics() {
1655
1624
  ClearHistograms();
1656
1625
  SemiSpaceIterator it(this);
@@ -1659,7 +1628,6 @@ void NewSpace::CollectStatistics() {
1659
1628
  }
1660
1629
 
1661
1630
 
1662
- #ifdef ENABLE_LOGGING_AND_PROFILING
1663
1631
  static void DoReportStatistics(Isolate* isolate,
1664
1632
  HistogramInfo* info, const char* description) {
1665
1633
  LOG(isolate, HeapSampleBeginEvent("NewSpace", description));
@@ -1686,7 +1654,6 @@ static void DoReportStatistics(Isolate* isolate,
1686
1654
  }
1687
1655
  LOG(isolate, HeapSampleEndEvent("NewSpace", description));
1688
1656
  }
1689
- #endif // ENABLE_LOGGING_AND_PROFILING
1690
1657
 
1691
1658
 
1692
1659
  void NewSpace::ReportStatistics() {
@@ -1709,13 +1676,11 @@ void NewSpace::ReportStatistics() {
1709
1676
  }
1710
1677
  #endif // DEBUG
1711
1678
 
1712
- #ifdef ENABLE_LOGGING_AND_PROFILING
1713
1679
  if (FLAG_log_gc) {
1714
1680
  Isolate* isolate = ISOLATE;
1715
1681
  DoReportStatistics(isolate, allocated_histogram_, "allocated");
1716
1682
  DoReportStatistics(isolate, promoted_histogram_, "promoted");
1717
1683
  }
1718
- #endif // ENABLE_LOGGING_AND_PROFILING
1719
1684
  }
1720
1685
 
1721
1686
 
@@ -1733,7 +1698,6 @@ void NewSpace::RecordPromotion(HeapObject* obj) {
1733
1698
  promoted_histogram_[type].increment_number(1);
1734
1699
  promoted_histogram_[type].increment_bytes(obj->Size());
1735
1700
  }
1736
- #endif // defined(DEBUG) || defined(ENABLE_LOGGING_AND_PROFILING)
1737
1701
 
1738
1702
 
1739
1703
  // -----------------------------------------------------------------------------
@@ -2726,9 +2690,10 @@ LargeObjectChunk* LargeObjectChunk::New(int size_in_bytes,
2726
2690
  Executability executable) {
2727
2691
  size_t requested = ChunkSizeFor(size_in_bytes);
2728
2692
  size_t size;
2693
+ size_t guard_size = (executable == EXECUTABLE) ? Page::kPageSize : 0;
2729
2694
  Isolate* isolate = Isolate::Current();
2730
2695
  void* mem = isolate->memory_allocator()->AllocateRawMemory(
2731
- requested, &size, executable);
2696
+ requested + guard_size, &size, executable);
2732
2697
  if (mem == NULL) return NULL;
2733
2698
 
2734
2699
  // The start of the chunk may be overlayed with a page so we have to
@@ -2736,13 +2701,19 @@ LargeObjectChunk* LargeObjectChunk::New(int size_in_bytes,
2736
2701
  ASSERT((size & Page::kPageFlagMask) == 0);
2737
2702
 
2738
2703
  LOG(isolate, NewEvent("LargeObjectChunk", mem, size));
2739
- if (size < requested) {
2704
+ if (size < requested + guard_size) {
2740
2705
  isolate->memory_allocator()->FreeRawMemory(
2741
2706
  mem, size, executable);
2742
2707
  LOG(isolate, DeleteEvent("LargeObjectChunk", mem));
2743
2708
  return NULL;
2744
2709
  }
2745
2710
 
2711
+ if (guard_size != 0) {
2712
+ OS::Guard(mem, guard_size);
2713
+ size -= guard_size;
2714
+ mem = static_cast<Address>(mem) + guard_size;
2715
+ }
2716
+
2746
2717
  ObjectSpace space = (executable == EXECUTABLE)
2747
2718
  ? kObjectSpaceCodeSpace
2748
2719
  : kObjectSpaceLoSpace;
@@ -2751,12 +2722,26 @@ LargeObjectChunk* LargeObjectChunk::New(int size_in_bytes,
2751
2722
 
2752
2723
  LargeObjectChunk* chunk = reinterpret_cast<LargeObjectChunk*>(mem);
2753
2724
  chunk->size_ = size;
2754
- Page* page = Page::FromAddress(RoundUp(chunk->address(), Page::kPageSize));
2755
- page->heap_ = isolate->heap();
2725
+ chunk->GetPage()->heap_ = isolate->heap();
2756
2726
  return chunk;
2757
2727
  }
2758
2728
 
2759
2729
 
2730
+ void LargeObjectChunk::Free(Executability executable) {
2731
+ size_t guard_size = (executable == EXECUTABLE) ? Page::kPageSize : 0;
2732
+ ObjectSpace space =
2733
+ (executable == EXECUTABLE) ? kObjectSpaceCodeSpace : kObjectSpaceLoSpace;
2734
+ // Do not access instance fields after FreeRawMemory!
2735
+ Address my_address = address();
2736
+ size_t my_size = size();
2737
+ Isolate* isolate = GetPage()->heap_->isolate();
2738
+ MemoryAllocator* a = isolate->memory_allocator();
2739
+ a->FreeRawMemory(my_address - guard_size, my_size + guard_size, executable);
2740
+ a->PerformAllocationCallback(space, kAllocationActionFree, my_size);
2741
+ LOG(isolate, DeleteEvent("LargeObjectChunk", my_address));
2742
+ }
2743
+
2744
+
2760
2745
  int LargeObjectChunk::ChunkSizeFor(int size_in_bytes) {
2761
2746
  int os_alignment = static_cast<int>(OS::AllocateAlignment());
2762
2747
  if (os_alignment < Page::kPageSize) {
@@ -2789,50 +2774,11 @@ void LargeObjectSpace::TearDown() {
2789
2774
  while (first_chunk_ != NULL) {
2790
2775
  LargeObjectChunk* chunk = first_chunk_;
2791
2776
  first_chunk_ = first_chunk_->next();
2792
- LOG(heap()->isolate(), DeleteEvent("LargeObjectChunk", chunk->address()));
2793
- Page* page = Page::FromAddress(RoundUp(chunk->address(), Page::kPageSize));
2794
- Executability executable =
2795
- page->IsPageExecutable() ? EXECUTABLE : NOT_EXECUTABLE;
2796
- ObjectSpace space = kObjectSpaceLoSpace;
2797
- if (executable == EXECUTABLE) space = kObjectSpaceCodeSpace;
2798
- size_t size = chunk->size();
2799
- heap()->isolate()->memory_allocator()->FreeRawMemory(chunk->address(),
2800
- size,
2801
- executable);
2802
- heap()->isolate()->memory_allocator()->PerformAllocationCallback(
2803
- space, kAllocationActionFree, size);
2804
- }
2805
-
2806
- size_ = 0;
2807
- page_count_ = 0;
2808
- objects_size_ = 0;
2809
- }
2810
-
2811
-
2812
- #ifdef ENABLE_HEAP_PROTECTION
2813
-
2814
- void LargeObjectSpace::Protect() {
2815
- LargeObjectChunk* chunk = first_chunk_;
2816
- while (chunk != NULL) {
2817
- heap()->isolate()->memory_allocator()->Protect(chunk->address(),
2818
- chunk->size());
2819
- chunk = chunk->next();
2820
- }
2821
- }
2822
-
2823
-
2824
- void LargeObjectSpace::Unprotect() {
2825
- LargeObjectChunk* chunk = first_chunk_;
2826
- while (chunk != NULL) {
2827
- bool is_code = chunk->GetObject()->IsCode();
2828
- heap()->isolate()->memory_allocator()->Unprotect(chunk->address(),
2829
- chunk->size(), is_code ? EXECUTABLE : NOT_EXECUTABLE);
2830
- chunk = chunk->next();
2777
+ chunk->Free(chunk->GetPage()->PageExecutability());
2831
2778
  }
2779
+ Setup();
2832
2780
  }
2833
2781
 
2834
- #endif
2835
-
2836
2782
 
2837
2783
  MaybeObject* LargeObjectSpace::AllocateRawInternal(int requested_size,
2838
2784
  int object_size,
@@ -2858,14 +2804,14 @@ MaybeObject* LargeObjectSpace::AllocateRawInternal(int requested_size,
2858
2804
  first_chunk_ = chunk;
2859
2805
 
2860
2806
  // Initialize page header.
2861
- Page* page = Page::FromAddress(RoundUp(chunk->address(), Page::kPageSize));
2807
+ Page* page = chunk->GetPage();
2862
2808
  Address object_address = page->ObjectAreaStart();
2863
2809
 
2864
2810
  // Clear the low order bit of the second word in the page to flag it as a
2865
2811
  // large object page. If the chunk_size happened to be written there, its
2866
2812
  // low order bit should already be clear.
2867
2813
  page->SetIsLargeObjectPage(true);
2868
- page->SetIsPageExecutable(executable);
2814
+ page->SetPageExecutability(executable);
2869
2815
  page->SetRegionMarks(Page::kAllRegionsCleanMarks);
2870
2816
  return HeapObject::FromAddress(object_address);
2871
2817
  }
@@ -2996,14 +2942,8 @@ void LargeObjectSpace::FreeUnmarkedObjects() {
2996
2942
  previous = current;
2997
2943
  current = current->next();
2998
2944
  } else {
2999
- Page* page = Page::FromAddress(RoundUp(current->address(),
3000
- Page::kPageSize));
3001
- Executability executable =
3002
- page->IsPageExecutable() ? EXECUTABLE : NOT_EXECUTABLE;
3003
- Address chunk_address = current->address();
3004
- size_t chunk_size = current->size();
3005
-
3006
2945
  // Cut the chunk out from the chunk list.
2946
+ LargeObjectChunk* current_chunk = current;
3007
2947
  current = current->next();
3008
2948
  if (previous == NULL) {
3009
2949
  first_chunk_ = current;
@@ -3016,17 +2956,10 @@ void LargeObjectSpace::FreeUnmarkedObjects() {
3016
2956
  object, heap()->isolate());
3017
2957
  LiveObjectList::ProcessNonLive(object);
3018
2958
 
3019
- size_ -= static_cast<int>(chunk_size);
2959
+ size_ -= static_cast<int>(current_chunk->size());
3020
2960
  objects_size_ -= object->Size();
3021
2961
  page_count_--;
3022
- ObjectSpace space = kObjectSpaceLoSpace;
3023
- if (executable == EXECUTABLE) space = kObjectSpaceCodeSpace;
3024
- heap()->isolate()->memory_allocator()->FreeRawMemory(chunk_address,
3025
- chunk_size,
3026
- executable);
3027
- heap()->isolate()->memory_allocator()->PerformAllocationCallback(
3028
- space, kAllocationActionFree, size_);
3029
- LOG(heap()->isolate(), DeleteEvent("LargeObjectChunk", chunk_address));
2962
+ current_chunk->Free(current_chunk->GetPage()->PageExecutability());
3030
2963
  }
3031
2964
  }
3032
2965
  }
@@ -3070,7 +3003,7 @@ void LargeObjectSpace::Verify() {
3070
3003
  // strings), fixed arrays, and byte arrays in large object space.
3071
3004
  ASSERT(object->IsCode() || object->IsSeqString() ||
3072
3005
  object->IsExternalString() || object->IsFixedArray() ||
3073
- object->IsByteArray());
3006
+ object->IsFixedDoubleArray() || object->IsByteArray());
3074
3007
 
3075
3008
  // The object itself should look OK.
3076
3009
  object->Verify();