libv8 3.3.10.2

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 (700) hide show
  1. data/.gitignore +8 -0
  2. data/.gitmodules +3 -0
  3. data/Gemfile +4 -0
  4. data/README.md +44 -0
  5. data/Rakefile +73 -0
  6. data/ext/libv8/extconf.rb +9 -0
  7. data/lib/libv8.rb +15 -0
  8. data/lib/libv8/Makefile +38 -0
  9. data/lib/libv8/detect_cpu.rb +27 -0
  10. data/lib/libv8/fpic-on-linux-amd64.patch +13 -0
  11. data/lib/libv8/scons/CHANGES.txt +5334 -0
  12. data/lib/libv8/scons/LICENSE.txt +20 -0
  13. data/lib/libv8/scons/MANIFEST +199 -0
  14. data/lib/libv8/scons/PKG-INFO +13 -0
  15. data/lib/libv8/scons/README.txt +243 -0
  16. data/lib/libv8/scons/RELEASE.txt +98 -0
  17. data/lib/libv8/scons/engine/SCons/Action.py +1241 -0
  18. data/lib/libv8/scons/engine/SCons/Builder.py +877 -0
  19. data/lib/libv8/scons/engine/SCons/CacheDir.py +216 -0
  20. data/lib/libv8/scons/engine/SCons/Conftest.py +793 -0
  21. data/lib/libv8/scons/engine/SCons/Debug.py +220 -0
  22. data/lib/libv8/scons/engine/SCons/Defaults.py +480 -0
  23. data/lib/libv8/scons/engine/SCons/Environment.py +2318 -0
  24. data/lib/libv8/scons/engine/SCons/Errors.py +205 -0
  25. data/lib/libv8/scons/engine/SCons/Executor.py +633 -0
  26. data/lib/libv8/scons/engine/SCons/Job.py +435 -0
  27. data/lib/libv8/scons/engine/SCons/Memoize.py +244 -0
  28. data/lib/libv8/scons/engine/SCons/Node/Alias.py +152 -0
  29. data/lib/libv8/scons/engine/SCons/Node/FS.py +3142 -0
  30. data/lib/libv8/scons/engine/SCons/Node/Python.py +128 -0
  31. data/lib/libv8/scons/engine/SCons/Node/__init__.py +1328 -0
  32. data/lib/libv8/scons/engine/SCons/Options/BoolOption.py +50 -0
  33. data/lib/libv8/scons/engine/SCons/Options/EnumOption.py +50 -0
  34. data/lib/libv8/scons/engine/SCons/Options/ListOption.py +50 -0
  35. data/lib/libv8/scons/engine/SCons/Options/PackageOption.py +50 -0
  36. data/lib/libv8/scons/engine/SCons/Options/PathOption.py +76 -0
  37. data/lib/libv8/scons/engine/SCons/Options/__init__.py +67 -0
  38. data/lib/libv8/scons/engine/SCons/PathList.py +231 -0
  39. data/lib/libv8/scons/engine/SCons/Platform/__init__.py +241 -0
  40. data/lib/libv8/scons/engine/SCons/Platform/aix.py +69 -0
  41. data/lib/libv8/scons/engine/SCons/Platform/cygwin.py +55 -0
  42. data/lib/libv8/scons/engine/SCons/Platform/darwin.py +46 -0
  43. data/lib/libv8/scons/engine/SCons/Platform/hpux.py +46 -0
  44. data/lib/libv8/scons/engine/SCons/Platform/irix.py +44 -0
  45. data/lib/libv8/scons/engine/SCons/Platform/os2.py +58 -0
  46. data/lib/libv8/scons/engine/SCons/Platform/posix.py +263 -0
  47. data/lib/libv8/scons/engine/SCons/Platform/sunos.py +50 -0
  48. data/lib/libv8/scons/engine/SCons/Platform/win32.py +385 -0
  49. data/lib/libv8/scons/engine/SCons/SConf.py +1030 -0
  50. data/lib/libv8/scons/engine/SCons/SConsign.py +383 -0
  51. data/lib/libv8/scons/engine/SCons/Scanner/C.py +132 -0
  52. data/lib/libv8/scons/engine/SCons/Scanner/D.py +73 -0
  53. data/lib/libv8/scons/engine/SCons/Scanner/Dir.py +109 -0
  54. data/lib/libv8/scons/engine/SCons/Scanner/Fortran.py +316 -0
  55. data/lib/libv8/scons/engine/SCons/Scanner/IDL.py +48 -0
  56. data/lib/libv8/scons/engine/SCons/Scanner/LaTeX.py +384 -0
  57. data/lib/libv8/scons/engine/SCons/Scanner/Prog.py +101 -0
  58. data/lib/libv8/scons/engine/SCons/Scanner/RC.py +55 -0
  59. data/lib/libv8/scons/engine/SCons/Scanner/__init__.py +413 -0
  60. data/lib/libv8/scons/engine/SCons/Script/Interactive.py +384 -0
  61. data/lib/libv8/scons/engine/SCons/Script/Main.py +1334 -0
  62. data/lib/libv8/scons/engine/SCons/Script/SConsOptions.py +939 -0
  63. data/lib/libv8/scons/engine/SCons/Script/SConscript.py +640 -0
  64. data/lib/libv8/scons/engine/SCons/Script/__init__.py +412 -0
  65. data/lib/libv8/scons/engine/SCons/Sig.py +63 -0
  66. data/lib/libv8/scons/engine/SCons/Subst.py +904 -0
  67. data/lib/libv8/scons/engine/SCons/Taskmaster.py +1017 -0
  68. data/lib/libv8/scons/engine/SCons/Tool/386asm.py +61 -0
  69. data/lib/libv8/scons/engine/SCons/Tool/BitKeeper.py +67 -0
  70. data/lib/libv8/scons/engine/SCons/Tool/CVS.py +73 -0
  71. data/lib/libv8/scons/engine/SCons/Tool/FortranCommon.py +246 -0
  72. data/lib/libv8/scons/engine/SCons/Tool/JavaCommon.py +323 -0
  73. data/lib/libv8/scons/engine/SCons/Tool/MSCommon/__init__.py +56 -0
  74. data/lib/libv8/scons/engine/SCons/Tool/MSCommon/arch.py +61 -0
  75. data/lib/libv8/scons/engine/SCons/Tool/MSCommon/common.py +240 -0
  76. data/lib/libv8/scons/engine/SCons/Tool/MSCommon/netframework.py +82 -0
  77. data/lib/libv8/scons/engine/SCons/Tool/MSCommon/sdk.py +391 -0
  78. data/lib/libv8/scons/engine/SCons/Tool/MSCommon/vc.py +456 -0
  79. data/lib/libv8/scons/engine/SCons/Tool/MSCommon/vs.py +499 -0
  80. data/lib/libv8/scons/engine/SCons/Tool/Perforce.py +103 -0
  81. data/lib/libv8/scons/engine/SCons/Tool/PharLapCommon.py +137 -0
  82. data/lib/libv8/scons/engine/SCons/Tool/RCS.py +64 -0
  83. data/lib/libv8/scons/engine/SCons/Tool/SCCS.py +64 -0
  84. data/lib/libv8/scons/engine/SCons/Tool/Subversion.py +71 -0
  85. data/lib/libv8/scons/engine/SCons/Tool/__init__.py +681 -0
  86. data/lib/libv8/scons/engine/SCons/Tool/aixc++.py +82 -0
  87. data/lib/libv8/scons/engine/SCons/Tool/aixcc.py +74 -0
  88. data/lib/libv8/scons/engine/SCons/Tool/aixf77.py +80 -0
  89. data/lib/libv8/scons/engine/SCons/Tool/aixlink.py +76 -0
  90. data/lib/libv8/scons/engine/SCons/Tool/applelink.py +71 -0
  91. data/lib/libv8/scons/engine/SCons/Tool/ar.py +63 -0
  92. data/lib/libv8/scons/engine/SCons/Tool/as.py +78 -0
  93. data/lib/libv8/scons/engine/SCons/Tool/bcc32.py +81 -0
  94. data/lib/libv8/scons/engine/SCons/Tool/c++.py +99 -0
  95. data/lib/libv8/scons/engine/SCons/Tool/cc.py +102 -0
  96. data/lib/libv8/scons/engine/SCons/Tool/cvf.py +58 -0
  97. data/lib/libv8/scons/engine/SCons/Tool/default.py +50 -0
  98. data/lib/libv8/scons/engine/SCons/Tool/dmd.py +223 -0
  99. data/lib/libv8/scons/engine/SCons/Tool/dvi.py +64 -0
  100. data/lib/libv8/scons/engine/SCons/Tool/dvipdf.py +124 -0
  101. data/lib/libv8/scons/engine/SCons/Tool/dvips.py +94 -0
  102. data/lib/libv8/scons/engine/SCons/Tool/f77.py +62 -0
  103. data/lib/libv8/scons/engine/SCons/Tool/f90.py +62 -0
  104. data/lib/libv8/scons/engine/SCons/Tool/f95.py +63 -0
  105. data/lib/libv8/scons/engine/SCons/Tool/filesystem.py +98 -0
  106. data/lib/libv8/scons/engine/SCons/Tool/fortran.py +62 -0
  107. data/lib/libv8/scons/engine/SCons/Tool/g++.py +90 -0
  108. data/lib/libv8/scons/engine/SCons/Tool/g77.py +73 -0
  109. data/lib/libv8/scons/engine/SCons/Tool/gas.py +53 -0
  110. data/lib/libv8/scons/engine/SCons/Tool/gcc.py +80 -0
  111. data/lib/libv8/scons/engine/SCons/Tool/gfortran.py +64 -0
  112. data/lib/libv8/scons/engine/SCons/Tool/gnulink.py +63 -0
  113. data/lib/libv8/scons/engine/SCons/Tool/gs.py +81 -0
  114. data/lib/libv8/scons/engine/SCons/Tool/hpc++.py +84 -0
  115. data/lib/libv8/scons/engine/SCons/Tool/hpcc.py +53 -0
  116. data/lib/libv8/scons/engine/SCons/Tool/hplink.py +77 -0
  117. data/lib/libv8/scons/engine/SCons/Tool/icc.py +59 -0
  118. data/lib/libv8/scons/engine/SCons/Tool/icl.py +52 -0
  119. data/lib/libv8/scons/engine/SCons/Tool/ifl.py +72 -0
  120. data/lib/libv8/scons/engine/SCons/Tool/ifort.py +88 -0
  121. data/lib/libv8/scons/engine/SCons/Tool/ilink.py +59 -0
  122. data/lib/libv8/scons/engine/SCons/Tool/ilink32.py +60 -0
  123. data/lib/libv8/scons/engine/SCons/Tool/install.py +229 -0
  124. data/lib/libv8/scons/engine/SCons/Tool/intelc.py +482 -0
  125. data/lib/libv8/scons/engine/SCons/Tool/ipkg.py +67 -0
  126. data/lib/libv8/scons/engine/SCons/Tool/jar.py +110 -0
  127. data/lib/libv8/scons/engine/SCons/Tool/javac.py +230 -0
  128. data/lib/libv8/scons/engine/SCons/Tool/javah.py +137 -0
  129. data/lib/libv8/scons/engine/SCons/Tool/latex.py +79 -0
  130. data/lib/libv8/scons/engine/SCons/Tool/lex.py +97 -0
  131. data/lib/libv8/scons/engine/SCons/Tool/link.py +121 -0
  132. data/lib/libv8/scons/engine/SCons/Tool/linkloc.py +112 -0
  133. data/lib/libv8/scons/engine/SCons/Tool/m4.py +63 -0
  134. data/lib/libv8/scons/engine/SCons/Tool/masm.py +77 -0
  135. data/lib/libv8/scons/engine/SCons/Tool/midl.py +88 -0
  136. data/lib/libv8/scons/engine/SCons/Tool/mingw.py +158 -0
  137. data/lib/libv8/scons/engine/SCons/Tool/mslib.py +64 -0
  138. data/lib/libv8/scons/engine/SCons/Tool/mslink.py +266 -0
  139. data/lib/libv8/scons/engine/SCons/Tool/mssdk.py +50 -0
  140. data/lib/libv8/scons/engine/SCons/Tool/msvc.py +268 -0
  141. data/lib/libv8/scons/engine/SCons/Tool/msvs.py +1388 -0
  142. data/lib/libv8/scons/engine/SCons/Tool/mwcc.py +207 -0
  143. data/lib/libv8/scons/engine/SCons/Tool/mwld.py +107 -0
  144. data/lib/libv8/scons/engine/SCons/Tool/nasm.py +72 -0
  145. data/lib/libv8/scons/engine/SCons/Tool/packaging/__init__.py +312 -0
  146. data/lib/libv8/scons/engine/SCons/Tool/packaging/ipk.py +185 -0
  147. data/lib/libv8/scons/engine/SCons/Tool/packaging/msi.py +527 -0
  148. data/lib/libv8/scons/engine/SCons/Tool/packaging/rpm.py +365 -0
  149. data/lib/libv8/scons/engine/SCons/Tool/packaging/src_tarbz2.py +43 -0
  150. data/lib/libv8/scons/engine/SCons/Tool/packaging/src_targz.py +43 -0
  151. data/lib/libv8/scons/engine/SCons/Tool/packaging/src_zip.py +43 -0
  152. data/lib/libv8/scons/engine/SCons/Tool/packaging/tarbz2.py +44 -0
  153. data/lib/libv8/scons/engine/SCons/Tool/packaging/targz.py +44 -0
  154. data/lib/libv8/scons/engine/SCons/Tool/packaging/zip.py +44 -0
  155. data/lib/libv8/scons/engine/SCons/Tool/pdf.py +78 -0
  156. data/lib/libv8/scons/engine/SCons/Tool/pdflatex.py +83 -0
  157. data/lib/libv8/scons/engine/SCons/Tool/pdftex.py +108 -0
  158. data/lib/libv8/scons/engine/SCons/Tool/qt.py +336 -0
  159. data/lib/libv8/scons/engine/SCons/Tool/rmic.py +120 -0
  160. data/lib/libv8/scons/engine/SCons/Tool/rpcgen.py +70 -0
  161. data/lib/libv8/scons/engine/SCons/Tool/rpm.py +132 -0
  162. data/lib/libv8/scons/engine/SCons/Tool/sgiar.py +68 -0
  163. data/lib/libv8/scons/engine/SCons/Tool/sgic++.py +58 -0
  164. data/lib/libv8/scons/engine/SCons/Tool/sgicc.py +53 -0
  165. data/lib/libv8/scons/engine/SCons/Tool/sgilink.py +63 -0
  166. data/lib/libv8/scons/engine/SCons/Tool/sunar.py +67 -0
  167. data/lib/libv8/scons/engine/SCons/Tool/sunc++.py +142 -0
  168. data/lib/libv8/scons/engine/SCons/Tool/suncc.py +58 -0
  169. data/lib/libv8/scons/engine/SCons/Tool/sunf77.py +63 -0
  170. data/lib/libv8/scons/engine/SCons/Tool/sunf90.py +64 -0
  171. data/lib/libv8/scons/engine/SCons/Tool/sunf95.py +64 -0
  172. data/lib/libv8/scons/engine/SCons/Tool/sunlink.py +77 -0
  173. data/lib/libv8/scons/engine/SCons/Tool/swig.py +182 -0
  174. data/lib/libv8/scons/engine/SCons/Tool/tar.py +73 -0
  175. data/lib/libv8/scons/engine/SCons/Tool/tex.py +813 -0
  176. data/lib/libv8/scons/engine/SCons/Tool/textfile.py +175 -0
  177. data/lib/libv8/scons/engine/SCons/Tool/tlib.py +53 -0
  178. data/lib/libv8/scons/engine/SCons/Tool/wix.py +99 -0
  179. data/lib/libv8/scons/engine/SCons/Tool/yacc.py +130 -0
  180. data/lib/libv8/scons/engine/SCons/Tool/zip.py +99 -0
  181. data/lib/libv8/scons/engine/SCons/Util.py +1492 -0
  182. data/lib/libv8/scons/engine/SCons/Variables/BoolVariable.py +89 -0
  183. data/lib/libv8/scons/engine/SCons/Variables/EnumVariable.py +103 -0
  184. data/lib/libv8/scons/engine/SCons/Variables/ListVariable.py +135 -0
  185. data/lib/libv8/scons/engine/SCons/Variables/PackageVariable.py +106 -0
  186. data/lib/libv8/scons/engine/SCons/Variables/PathVariable.py +147 -0
  187. data/lib/libv8/scons/engine/SCons/Variables/__init__.py +312 -0
  188. data/lib/libv8/scons/engine/SCons/Warnings.py +246 -0
  189. data/lib/libv8/scons/engine/SCons/__init__.py +49 -0
  190. data/lib/libv8/scons/engine/SCons/compat/__init__.py +237 -0
  191. data/lib/libv8/scons/engine/SCons/compat/_scons_builtins.py +150 -0
  192. data/lib/libv8/scons/engine/SCons/compat/_scons_collections.py +45 -0
  193. data/lib/libv8/scons/engine/SCons/compat/_scons_dbm.py +45 -0
  194. data/lib/libv8/scons/engine/SCons/compat/_scons_hashlib.py +76 -0
  195. data/lib/libv8/scons/engine/SCons/compat/_scons_io.py +45 -0
  196. data/lib/libv8/scons/engine/SCons/compat/_scons_sets.py +563 -0
  197. data/lib/libv8/scons/engine/SCons/compat/_scons_subprocess.py +1281 -0
  198. data/lib/libv8/scons/engine/SCons/cpp.py +589 -0
  199. data/lib/libv8/scons/engine/SCons/dblite.py +251 -0
  200. data/lib/libv8/scons/engine/SCons/exitfuncs.py +77 -0
  201. data/lib/libv8/scons/os_spawnv_fix.diff +83 -0
  202. data/lib/libv8/scons/scons-time.1 +1017 -0
  203. data/lib/libv8/scons/scons.1 +15219 -0
  204. data/lib/libv8/scons/sconsign.1 +208 -0
  205. data/lib/libv8/scons/script/scons +196 -0
  206. data/lib/libv8/scons/script/scons-time +1544 -0
  207. data/lib/libv8/scons/script/scons.bat +31 -0
  208. data/lib/libv8/scons/script/sconsign +513 -0
  209. data/lib/libv8/scons/setup.cfg +6 -0
  210. data/lib/libv8/scons/setup.py +425 -0
  211. data/lib/libv8/v8/.gitignore +35 -0
  212. data/lib/libv8/v8/AUTHORS +44 -0
  213. data/lib/libv8/v8/ChangeLog +2839 -0
  214. data/lib/libv8/v8/LICENSE +52 -0
  215. data/lib/libv8/v8/LICENSE.strongtalk +29 -0
  216. data/lib/libv8/v8/LICENSE.v8 +26 -0
  217. data/lib/libv8/v8/LICENSE.valgrind +45 -0
  218. data/lib/libv8/v8/SConstruct +1478 -0
  219. data/lib/libv8/v8/build/README.txt +49 -0
  220. data/lib/libv8/v8/build/all.gyp +18 -0
  221. data/lib/libv8/v8/build/armu.gypi +32 -0
  222. data/lib/libv8/v8/build/common.gypi +144 -0
  223. data/lib/libv8/v8/build/gyp_v8 +145 -0
  224. data/lib/libv8/v8/include/v8-debug.h +395 -0
  225. data/lib/libv8/v8/include/v8-preparser.h +117 -0
  226. data/lib/libv8/v8/include/v8-profiler.h +505 -0
  227. data/lib/libv8/v8/include/v8-testing.h +104 -0
  228. data/lib/libv8/v8/include/v8.h +4124 -0
  229. data/lib/libv8/v8/include/v8stdint.h +53 -0
  230. data/lib/libv8/v8/preparser/SConscript +38 -0
  231. data/lib/libv8/v8/preparser/preparser-process.cc +379 -0
  232. data/lib/libv8/v8/src/SConscript +368 -0
  233. data/lib/libv8/v8/src/accessors.cc +767 -0
  234. data/lib/libv8/v8/src/accessors.h +123 -0
  235. data/lib/libv8/v8/src/allocation-inl.h +49 -0
  236. data/lib/libv8/v8/src/allocation.cc +122 -0
  237. data/lib/libv8/v8/src/allocation.h +143 -0
  238. data/lib/libv8/v8/src/api.cc +5845 -0
  239. data/lib/libv8/v8/src/api.h +574 -0
  240. data/lib/libv8/v8/src/apinatives.js +110 -0
  241. data/lib/libv8/v8/src/apiutils.h +73 -0
  242. data/lib/libv8/v8/src/arguments.h +118 -0
  243. data/lib/libv8/v8/src/arm/assembler-arm-inl.h +353 -0
  244. data/lib/libv8/v8/src/arm/assembler-arm.cc +2661 -0
  245. data/lib/libv8/v8/src/arm/assembler-arm.h +1375 -0
  246. data/lib/libv8/v8/src/arm/builtins-arm.cc +1658 -0
  247. data/lib/libv8/v8/src/arm/code-stubs-arm.cc +6398 -0
  248. data/lib/libv8/v8/src/arm/code-stubs-arm.h +673 -0
  249. data/lib/libv8/v8/src/arm/codegen-arm.cc +52 -0
  250. data/lib/libv8/v8/src/arm/codegen-arm.h +91 -0
  251. data/lib/libv8/v8/src/arm/constants-arm.cc +152 -0
  252. data/lib/libv8/v8/src/arm/constants-arm.h +775 -0
  253. data/lib/libv8/v8/src/arm/cpu-arm.cc +120 -0
  254. data/lib/libv8/v8/src/arm/debug-arm.cc +317 -0
  255. data/lib/libv8/v8/src/arm/deoptimizer-arm.cc +754 -0
  256. data/lib/libv8/v8/src/arm/disasm-arm.cc +1506 -0
  257. data/lib/libv8/v8/src/arm/frames-arm.cc +45 -0
  258. data/lib/libv8/v8/src/arm/frames-arm.h +168 -0
  259. data/lib/libv8/v8/src/arm/full-codegen-arm.cc +4375 -0
  260. data/lib/libv8/v8/src/arm/ic-arm.cc +1562 -0
  261. data/lib/libv8/v8/src/arm/lithium-arm.cc +2206 -0
  262. data/lib/libv8/v8/src/arm/lithium-arm.h +2348 -0
  263. data/lib/libv8/v8/src/arm/lithium-codegen-arm.cc +4526 -0
  264. data/lib/libv8/v8/src/arm/lithium-codegen-arm.h +403 -0
  265. data/lib/libv8/v8/src/arm/lithium-gap-resolver-arm.cc +305 -0
  266. data/lib/libv8/v8/src/arm/lithium-gap-resolver-arm.h +84 -0
  267. data/lib/libv8/v8/src/arm/macro-assembler-arm.cc +3163 -0
  268. data/lib/libv8/v8/src/arm/macro-assembler-arm.h +1126 -0
  269. data/lib/libv8/v8/src/arm/regexp-macro-assembler-arm.cc +1287 -0
  270. data/lib/libv8/v8/src/arm/regexp-macro-assembler-arm.h +253 -0
  271. data/lib/libv8/v8/src/arm/simulator-arm.cc +3424 -0
  272. data/lib/libv8/v8/src/arm/simulator-arm.h +431 -0
  273. data/lib/libv8/v8/src/arm/stub-cache-arm.cc +4243 -0
  274. data/lib/libv8/v8/src/array.js +1366 -0
  275. data/lib/libv8/v8/src/assembler.cc +1207 -0
  276. data/lib/libv8/v8/src/assembler.h +858 -0
  277. data/lib/libv8/v8/src/ast-inl.h +112 -0
  278. data/lib/libv8/v8/src/ast.cc +1146 -0
  279. data/lib/libv8/v8/src/ast.h +2188 -0
  280. data/lib/libv8/v8/src/atomicops.h +167 -0
  281. data/lib/libv8/v8/src/atomicops_internals_arm_gcc.h +145 -0
  282. data/lib/libv8/v8/src/atomicops_internals_mips_gcc.h +169 -0
  283. data/lib/libv8/v8/src/atomicops_internals_x86_gcc.cc +133 -0
  284. data/lib/libv8/v8/src/atomicops_internals_x86_gcc.h +287 -0
  285. data/lib/libv8/v8/src/atomicops_internals_x86_macosx.h +301 -0
  286. data/lib/libv8/v8/src/atomicops_internals_x86_msvc.h +203 -0
  287. data/lib/libv8/v8/src/bignum-dtoa.cc +655 -0
  288. data/lib/libv8/v8/src/bignum-dtoa.h +81 -0
  289. data/lib/libv8/v8/src/bignum.cc +768 -0
  290. data/lib/libv8/v8/src/bignum.h +140 -0
  291. data/lib/libv8/v8/src/bootstrapper.cc +2184 -0
  292. data/lib/libv8/v8/src/bootstrapper.h +188 -0
  293. data/lib/libv8/v8/src/builtins.cc +1707 -0
  294. data/lib/libv8/v8/src/builtins.h +371 -0
  295. data/lib/libv8/v8/src/bytecodes-irregexp.h +105 -0
  296. data/lib/libv8/v8/src/cached-powers.cc +177 -0
  297. data/lib/libv8/v8/src/cached-powers.h +65 -0
  298. data/lib/libv8/v8/src/char-predicates-inl.h +94 -0
  299. data/lib/libv8/v8/src/char-predicates.h +67 -0
  300. data/lib/libv8/v8/src/checks.cc +110 -0
  301. data/lib/libv8/v8/src/checks.h +296 -0
  302. data/lib/libv8/v8/src/circular-queue-inl.h +53 -0
  303. data/lib/libv8/v8/src/circular-queue.cc +122 -0
  304. data/lib/libv8/v8/src/circular-queue.h +103 -0
  305. data/lib/libv8/v8/src/code-stubs.cc +267 -0
  306. data/lib/libv8/v8/src/code-stubs.h +1011 -0
  307. data/lib/libv8/v8/src/code.h +70 -0
  308. data/lib/libv8/v8/src/codegen.cc +231 -0
  309. data/lib/libv8/v8/src/codegen.h +84 -0
  310. data/lib/libv8/v8/src/compilation-cache.cc +540 -0
  311. data/lib/libv8/v8/src/compilation-cache.h +287 -0
  312. data/lib/libv8/v8/src/compiler.cc +786 -0
  313. data/lib/libv8/v8/src/compiler.h +312 -0
  314. data/lib/libv8/v8/src/contexts.cc +347 -0
  315. data/lib/libv8/v8/src/contexts.h +391 -0
  316. data/lib/libv8/v8/src/conversions-inl.h +106 -0
  317. data/lib/libv8/v8/src/conversions.cc +1131 -0
  318. data/lib/libv8/v8/src/conversions.h +135 -0
  319. data/lib/libv8/v8/src/counters.cc +93 -0
  320. data/lib/libv8/v8/src/counters.h +254 -0
  321. data/lib/libv8/v8/src/cpu-profiler-inl.h +101 -0
  322. data/lib/libv8/v8/src/cpu-profiler.cc +609 -0
  323. data/lib/libv8/v8/src/cpu-profiler.h +302 -0
  324. data/lib/libv8/v8/src/cpu.h +69 -0
  325. data/lib/libv8/v8/src/d8-debug.cc +367 -0
  326. data/lib/libv8/v8/src/d8-debug.h +158 -0
  327. data/lib/libv8/v8/src/d8-posix.cc +695 -0
  328. data/lib/libv8/v8/src/d8-readline.cc +130 -0
  329. data/lib/libv8/v8/src/d8-windows.cc +42 -0
  330. data/lib/libv8/v8/src/d8.cc +803 -0
  331. data/lib/libv8/v8/src/d8.gyp +91 -0
  332. data/lib/libv8/v8/src/d8.h +235 -0
  333. data/lib/libv8/v8/src/d8.js +2798 -0
  334. data/lib/libv8/v8/src/data-flow.cc +66 -0
  335. data/lib/libv8/v8/src/data-flow.h +205 -0
  336. data/lib/libv8/v8/src/date.js +1103 -0
  337. data/lib/libv8/v8/src/dateparser-inl.h +127 -0
  338. data/lib/libv8/v8/src/dateparser.cc +178 -0
  339. data/lib/libv8/v8/src/dateparser.h +266 -0
  340. data/lib/libv8/v8/src/debug-agent.cc +447 -0
  341. data/lib/libv8/v8/src/debug-agent.h +129 -0
  342. data/lib/libv8/v8/src/debug-debugger.js +2569 -0
  343. data/lib/libv8/v8/src/debug.cc +3165 -0
  344. data/lib/libv8/v8/src/debug.h +1057 -0
  345. data/lib/libv8/v8/src/deoptimizer.cc +1256 -0
  346. data/lib/libv8/v8/src/deoptimizer.h +602 -0
  347. data/lib/libv8/v8/src/disasm.h +80 -0
  348. data/lib/libv8/v8/src/disassembler.cc +343 -0
  349. data/lib/libv8/v8/src/disassembler.h +58 -0
  350. data/lib/libv8/v8/src/diy-fp.cc +58 -0
  351. data/lib/libv8/v8/src/diy-fp.h +117 -0
  352. data/lib/libv8/v8/src/double.h +238 -0
  353. data/lib/libv8/v8/src/dtoa.cc +103 -0
  354. data/lib/libv8/v8/src/dtoa.h +85 -0
  355. data/lib/libv8/v8/src/execution.cc +849 -0
  356. data/lib/libv8/v8/src/execution.h +297 -0
  357. data/lib/libv8/v8/src/extensions/experimental/break-iterator.cc +250 -0
  358. data/lib/libv8/v8/src/extensions/experimental/break-iterator.h +89 -0
  359. data/lib/libv8/v8/src/extensions/experimental/collator.cc +218 -0
  360. data/lib/libv8/v8/src/extensions/experimental/collator.h +69 -0
  361. data/lib/libv8/v8/src/extensions/experimental/experimental.gyp +94 -0
  362. data/lib/libv8/v8/src/extensions/experimental/i18n-extension.cc +78 -0
  363. data/lib/libv8/v8/src/extensions/experimental/i18n-extension.h +54 -0
  364. data/lib/libv8/v8/src/extensions/experimental/i18n-locale.cc +112 -0
  365. data/lib/libv8/v8/src/extensions/experimental/i18n-locale.h +60 -0
  366. data/lib/libv8/v8/src/extensions/experimental/i18n-utils.cc +43 -0
  367. data/lib/libv8/v8/src/extensions/experimental/i18n-utils.h +49 -0
  368. data/lib/libv8/v8/src/extensions/experimental/i18n.js +180 -0
  369. data/lib/libv8/v8/src/extensions/experimental/language-matcher.cc +251 -0
  370. data/lib/libv8/v8/src/extensions/experimental/language-matcher.h +95 -0
  371. data/lib/libv8/v8/src/extensions/externalize-string-extension.cc +141 -0
  372. data/lib/libv8/v8/src/extensions/externalize-string-extension.h +50 -0
  373. data/lib/libv8/v8/src/extensions/gc-extension.cc +58 -0
  374. data/lib/libv8/v8/src/extensions/gc-extension.h +49 -0
  375. data/lib/libv8/v8/src/factory.cc +1222 -0
  376. data/lib/libv8/v8/src/factory.h +442 -0
  377. data/lib/libv8/v8/src/fast-dtoa.cc +736 -0
  378. data/lib/libv8/v8/src/fast-dtoa.h +83 -0
  379. data/lib/libv8/v8/src/fixed-dtoa.cc +405 -0
  380. data/lib/libv8/v8/src/fixed-dtoa.h +55 -0
  381. data/lib/libv8/v8/src/flag-definitions.h +560 -0
  382. data/lib/libv8/v8/src/flags.cc +551 -0
  383. data/lib/libv8/v8/src/flags.h +79 -0
  384. data/lib/libv8/v8/src/frames-inl.h +247 -0
  385. data/lib/libv8/v8/src/frames.cc +1243 -0
  386. data/lib/libv8/v8/src/frames.h +870 -0
  387. data/lib/libv8/v8/src/full-codegen.cc +1374 -0
  388. data/lib/libv8/v8/src/full-codegen.h +771 -0
  389. data/lib/libv8/v8/src/func-name-inferrer.cc +92 -0
  390. data/lib/libv8/v8/src/func-name-inferrer.h +111 -0
  391. data/lib/libv8/v8/src/gdb-jit.cc +1555 -0
  392. data/lib/libv8/v8/src/gdb-jit.h +143 -0
  393. data/lib/libv8/v8/src/global-handles.cc +665 -0
  394. data/lib/libv8/v8/src/global-handles.h +284 -0
  395. data/lib/libv8/v8/src/globals.h +325 -0
  396. data/lib/libv8/v8/src/handles-inl.h +177 -0
  397. data/lib/libv8/v8/src/handles.cc +987 -0
  398. data/lib/libv8/v8/src/handles.h +382 -0
  399. data/lib/libv8/v8/src/hashmap.cc +230 -0
  400. data/lib/libv8/v8/src/hashmap.h +123 -0
  401. data/lib/libv8/v8/src/heap-inl.h +704 -0
  402. data/lib/libv8/v8/src/heap-profiler.cc +1173 -0
  403. data/lib/libv8/v8/src/heap-profiler.h +397 -0
  404. data/lib/libv8/v8/src/heap.cc +5930 -0
  405. data/lib/libv8/v8/src/heap.h +2268 -0
  406. data/lib/libv8/v8/src/hydrogen-instructions.cc +1769 -0
  407. data/lib/libv8/v8/src/hydrogen-instructions.h +3971 -0
  408. data/lib/libv8/v8/src/hydrogen.cc +6239 -0
  409. data/lib/libv8/v8/src/hydrogen.h +1202 -0
  410. data/lib/libv8/v8/src/ia32/assembler-ia32-inl.h +446 -0
  411. data/lib/libv8/v8/src/ia32/assembler-ia32.cc +2487 -0
  412. data/lib/libv8/v8/src/ia32/assembler-ia32.h +1144 -0
  413. data/lib/libv8/v8/src/ia32/builtins-ia32.cc +1621 -0
  414. data/lib/libv8/v8/src/ia32/code-stubs-ia32.cc +6198 -0
  415. data/lib/libv8/v8/src/ia32/code-stubs-ia32.h +517 -0
  416. data/lib/libv8/v8/src/ia32/codegen-ia32.cc +265 -0
  417. data/lib/libv8/v8/src/ia32/codegen-ia32.h +79 -0
  418. data/lib/libv8/v8/src/ia32/cpu-ia32.cc +88 -0
  419. data/lib/libv8/v8/src/ia32/debug-ia32.cc +312 -0
  420. data/lib/libv8/v8/src/ia32/deoptimizer-ia32.cc +774 -0
  421. data/lib/libv8/v8/src/ia32/disasm-ia32.cc +1628 -0
  422. data/lib/libv8/v8/src/ia32/frames-ia32.cc +45 -0
  423. data/lib/libv8/v8/src/ia32/frames-ia32.h +142 -0
  424. data/lib/libv8/v8/src/ia32/full-codegen-ia32.cc +4338 -0
  425. data/lib/libv8/v8/src/ia32/ic-ia32.cc +1597 -0
  426. data/lib/libv8/v8/src/ia32/lithium-codegen-ia32.cc +4461 -0
  427. data/lib/libv8/v8/src/ia32/lithium-codegen-ia32.h +375 -0
  428. data/lib/libv8/v8/src/ia32/lithium-gap-resolver-ia32.cc +475 -0
  429. data/lib/libv8/v8/src/ia32/lithium-gap-resolver-ia32.h +110 -0
  430. data/lib/libv8/v8/src/ia32/lithium-ia32.cc +2261 -0
  431. data/lib/libv8/v8/src/ia32/lithium-ia32.h +2396 -0
  432. data/lib/libv8/v8/src/ia32/macro-assembler-ia32.cc +2136 -0
  433. data/lib/libv8/v8/src/ia32/macro-assembler-ia32.h +775 -0
  434. data/lib/libv8/v8/src/ia32/regexp-macro-assembler-ia32.cc +1263 -0
  435. data/lib/libv8/v8/src/ia32/regexp-macro-assembler-ia32.h +216 -0
  436. data/lib/libv8/v8/src/ia32/simulator-ia32.cc +30 -0
  437. data/lib/libv8/v8/src/ia32/simulator-ia32.h +74 -0
  438. data/lib/libv8/v8/src/ia32/stub-cache-ia32.cc +3847 -0
  439. data/lib/libv8/v8/src/ic-inl.h +130 -0
  440. data/lib/libv8/v8/src/ic.cc +2577 -0
  441. data/lib/libv8/v8/src/ic.h +736 -0
  442. data/lib/libv8/v8/src/inspector.cc +63 -0
  443. data/lib/libv8/v8/src/inspector.h +62 -0
  444. data/lib/libv8/v8/src/interpreter-irregexp.cc +659 -0
  445. data/lib/libv8/v8/src/interpreter-irregexp.h +49 -0
  446. data/lib/libv8/v8/src/isolate-inl.h +50 -0
  447. data/lib/libv8/v8/src/isolate.cc +1869 -0
  448. data/lib/libv8/v8/src/isolate.h +1382 -0
  449. data/lib/libv8/v8/src/json-parser.cc +504 -0
  450. data/lib/libv8/v8/src/json-parser.h +161 -0
  451. data/lib/libv8/v8/src/json.js +342 -0
  452. data/lib/libv8/v8/src/jsregexp.cc +5385 -0
  453. data/lib/libv8/v8/src/jsregexp.h +1492 -0
  454. data/lib/libv8/v8/src/list-inl.h +212 -0
  455. data/lib/libv8/v8/src/list.h +174 -0
  456. data/lib/libv8/v8/src/lithium-allocator-inl.h +142 -0
  457. data/lib/libv8/v8/src/lithium-allocator.cc +2123 -0
  458. data/lib/libv8/v8/src/lithium-allocator.h +630 -0
  459. data/lib/libv8/v8/src/lithium.cc +190 -0
  460. data/lib/libv8/v8/src/lithium.h +597 -0
  461. data/lib/libv8/v8/src/liveedit-debugger.js +1082 -0
  462. data/lib/libv8/v8/src/liveedit.cc +1691 -0
  463. data/lib/libv8/v8/src/liveedit.h +180 -0
  464. data/lib/libv8/v8/src/liveobjectlist-inl.h +126 -0
  465. data/lib/libv8/v8/src/liveobjectlist.cc +2589 -0
  466. data/lib/libv8/v8/src/liveobjectlist.h +322 -0
  467. data/lib/libv8/v8/src/log-inl.h +59 -0
  468. data/lib/libv8/v8/src/log-utils.cc +428 -0
  469. data/lib/libv8/v8/src/log-utils.h +231 -0
  470. data/lib/libv8/v8/src/log.cc +1993 -0
  471. data/lib/libv8/v8/src/log.h +476 -0
  472. data/lib/libv8/v8/src/macro-assembler.h +120 -0
  473. data/lib/libv8/v8/src/macros.py +178 -0
  474. data/lib/libv8/v8/src/mark-compact.cc +3143 -0
  475. data/lib/libv8/v8/src/mark-compact.h +506 -0
  476. data/lib/libv8/v8/src/math.js +264 -0
  477. data/lib/libv8/v8/src/messages.cc +179 -0
  478. data/lib/libv8/v8/src/messages.h +113 -0
  479. data/lib/libv8/v8/src/messages.js +1096 -0
  480. data/lib/libv8/v8/src/mips/assembler-mips-inl.h +312 -0
  481. data/lib/libv8/v8/src/mips/assembler-mips.cc +1960 -0
  482. data/lib/libv8/v8/src/mips/assembler-mips.h +1138 -0
  483. data/lib/libv8/v8/src/mips/builtins-mips.cc +1628 -0
  484. data/lib/libv8/v8/src/mips/code-stubs-mips.cc +6656 -0
  485. data/lib/libv8/v8/src/mips/code-stubs-mips.h +682 -0
  486. data/lib/libv8/v8/src/mips/codegen-mips.cc +52 -0
  487. data/lib/libv8/v8/src/mips/codegen-mips.h +98 -0
  488. data/lib/libv8/v8/src/mips/constants-mips.cc +352 -0
  489. data/lib/libv8/v8/src/mips/constants-mips.h +739 -0
  490. data/lib/libv8/v8/src/mips/cpu-mips.cc +96 -0
  491. data/lib/libv8/v8/src/mips/debug-mips.cc +308 -0
  492. data/lib/libv8/v8/src/mips/deoptimizer-mips.cc +91 -0
  493. data/lib/libv8/v8/src/mips/disasm-mips.cc +1050 -0
  494. data/lib/libv8/v8/src/mips/frames-mips.cc +47 -0
  495. data/lib/libv8/v8/src/mips/frames-mips.h +219 -0
  496. data/lib/libv8/v8/src/mips/full-codegen-mips.cc +4388 -0
  497. data/lib/libv8/v8/src/mips/ic-mips.cc +1580 -0
  498. data/lib/libv8/v8/src/mips/lithium-codegen-mips.h +65 -0
  499. data/lib/libv8/v8/src/mips/lithium-mips.h +307 -0
  500. data/lib/libv8/v8/src/mips/macro-assembler-mips.cc +4056 -0
  501. data/lib/libv8/v8/src/mips/macro-assembler-mips.h +1214 -0
  502. data/lib/libv8/v8/src/mips/regexp-macro-assembler-mips.cc +1251 -0
  503. data/lib/libv8/v8/src/mips/regexp-macro-assembler-mips.h +252 -0
  504. data/lib/libv8/v8/src/mips/simulator-mips.cc +2621 -0
  505. data/lib/libv8/v8/src/mips/simulator-mips.h +401 -0
  506. data/lib/libv8/v8/src/mips/stub-cache-mips.cc +4285 -0
  507. data/lib/libv8/v8/src/mirror-debugger.js +2382 -0
  508. data/lib/libv8/v8/src/mksnapshot.cc +328 -0
  509. data/lib/libv8/v8/src/natives.h +64 -0
  510. data/lib/libv8/v8/src/objects-debug.cc +738 -0
  511. data/lib/libv8/v8/src/objects-inl.h +4323 -0
  512. data/lib/libv8/v8/src/objects-printer.cc +829 -0
  513. data/lib/libv8/v8/src/objects-visiting.cc +148 -0
  514. data/lib/libv8/v8/src/objects-visiting.h +424 -0
  515. data/lib/libv8/v8/src/objects.cc +10585 -0
  516. data/lib/libv8/v8/src/objects.h +6838 -0
  517. data/lib/libv8/v8/src/parser.cc +4997 -0
  518. data/lib/libv8/v8/src/parser.h +765 -0
  519. data/lib/libv8/v8/src/platform-cygwin.cc +779 -0
  520. data/lib/libv8/v8/src/platform-freebsd.cc +826 -0
  521. data/lib/libv8/v8/src/platform-linux.cc +1149 -0
  522. data/lib/libv8/v8/src/platform-macos.cc +830 -0
  523. data/lib/libv8/v8/src/platform-nullos.cc +479 -0
  524. data/lib/libv8/v8/src/platform-openbsd.cc +640 -0
  525. data/lib/libv8/v8/src/platform-posix.cc +424 -0
  526. data/lib/libv8/v8/src/platform-solaris.cc +762 -0
  527. data/lib/libv8/v8/src/platform-tls-mac.h +62 -0
  528. data/lib/libv8/v8/src/platform-tls-win32.h +62 -0
  529. data/lib/libv8/v8/src/platform-tls.h +50 -0
  530. data/lib/libv8/v8/src/platform-win32.cc +2021 -0
  531. data/lib/libv8/v8/src/platform.h +667 -0
  532. data/lib/libv8/v8/src/preparse-data-format.h +62 -0
  533. data/lib/libv8/v8/src/preparse-data.cc +183 -0
  534. data/lib/libv8/v8/src/preparse-data.h +225 -0
  535. data/lib/libv8/v8/src/preparser-api.cc +220 -0
  536. data/lib/libv8/v8/src/preparser.cc +1450 -0
  537. data/lib/libv8/v8/src/preparser.h +493 -0
  538. data/lib/libv8/v8/src/prettyprinter.cc +1493 -0
  539. data/lib/libv8/v8/src/prettyprinter.h +223 -0
  540. data/lib/libv8/v8/src/profile-generator-inl.h +128 -0
  541. data/lib/libv8/v8/src/profile-generator.cc +3098 -0
  542. data/lib/libv8/v8/src/profile-generator.h +1126 -0
  543. data/lib/libv8/v8/src/property.cc +105 -0
  544. data/lib/libv8/v8/src/property.h +365 -0
  545. data/lib/libv8/v8/src/proxy.js +83 -0
  546. data/lib/libv8/v8/src/regexp-macro-assembler-irregexp-inl.h +78 -0
  547. data/lib/libv8/v8/src/regexp-macro-assembler-irregexp.cc +471 -0
  548. data/lib/libv8/v8/src/regexp-macro-assembler-irregexp.h +142 -0
  549. data/lib/libv8/v8/src/regexp-macro-assembler-tracer.cc +373 -0
  550. data/lib/libv8/v8/src/regexp-macro-assembler-tracer.h +104 -0
  551. data/lib/libv8/v8/src/regexp-macro-assembler.cc +267 -0
  552. data/lib/libv8/v8/src/regexp-macro-assembler.h +243 -0
  553. data/lib/libv8/v8/src/regexp-stack.cc +111 -0
  554. data/lib/libv8/v8/src/regexp-stack.h +147 -0
  555. data/lib/libv8/v8/src/regexp.js +483 -0
  556. data/lib/libv8/v8/src/rewriter.cc +360 -0
  557. data/lib/libv8/v8/src/rewriter.h +50 -0
  558. data/lib/libv8/v8/src/runtime-profiler.cc +489 -0
  559. data/lib/libv8/v8/src/runtime-profiler.h +201 -0
  560. data/lib/libv8/v8/src/runtime.cc +12227 -0
  561. data/lib/libv8/v8/src/runtime.h +652 -0
  562. data/lib/libv8/v8/src/runtime.js +649 -0
  563. data/lib/libv8/v8/src/safepoint-table.cc +256 -0
  564. data/lib/libv8/v8/src/safepoint-table.h +270 -0
  565. data/lib/libv8/v8/src/scanner-base.cc +952 -0
  566. data/lib/libv8/v8/src/scanner-base.h +670 -0
  567. data/lib/libv8/v8/src/scanner.cc +345 -0
  568. data/lib/libv8/v8/src/scanner.h +146 -0
  569. data/lib/libv8/v8/src/scopeinfo.cc +646 -0
  570. data/lib/libv8/v8/src/scopeinfo.h +254 -0
  571. data/lib/libv8/v8/src/scopes.cc +1150 -0
  572. data/lib/libv8/v8/src/scopes.h +507 -0
  573. data/lib/libv8/v8/src/serialize.cc +1574 -0
  574. data/lib/libv8/v8/src/serialize.h +589 -0
  575. data/lib/libv8/v8/src/shell.h +55 -0
  576. data/lib/libv8/v8/src/simulator.h +43 -0
  577. data/lib/libv8/v8/src/small-pointer-list.h +163 -0
  578. data/lib/libv8/v8/src/smart-pointer.h +109 -0
  579. data/lib/libv8/v8/src/snapshot-common.cc +83 -0
  580. data/lib/libv8/v8/src/snapshot-empty.cc +54 -0
  581. data/lib/libv8/v8/src/snapshot.h +91 -0
  582. data/lib/libv8/v8/src/spaces-inl.h +529 -0
  583. data/lib/libv8/v8/src/spaces.cc +3145 -0
  584. data/lib/libv8/v8/src/spaces.h +2369 -0
  585. data/lib/libv8/v8/src/splay-tree-inl.h +310 -0
  586. data/lib/libv8/v8/src/splay-tree.h +205 -0
  587. data/lib/libv8/v8/src/string-search.cc +41 -0
  588. data/lib/libv8/v8/src/string-search.h +568 -0
  589. data/lib/libv8/v8/src/string-stream.cc +592 -0
  590. data/lib/libv8/v8/src/string-stream.h +191 -0
  591. data/lib/libv8/v8/src/string.js +994 -0
  592. data/lib/libv8/v8/src/strtod.cc +440 -0
  593. data/lib/libv8/v8/src/strtod.h +40 -0
  594. data/lib/libv8/v8/src/stub-cache.cc +1965 -0
  595. data/lib/libv8/v8/src/stub-cache.h +924 -0
  596. data/lib/libv8/v8/src/third_party/valgrind/valgrind.h +3925 -0
  597. data/lib/libv8/v8/src/token.cc +63 -0
  598. data/lib/libv8/v8/src/token.h +288 -0
  599. data/lib/libv8/v8/src/type-info.cc +507 -0
  600. data/lib/libv8/v8/src/type-info.h +272 -0
  601. data/lib/libv8/v8/src/unbound-queue-inl.h +95 -0
  602. data/lib/libv8/v8/src/unbound-queue.h +69 -0
  603. data/lib/libv8/v8/src/unicode-inl.h +238 -0
  604. data/lib/libv8/v8/src/unicode.cc +1624 -0
  605. data/lib/libv8/v8/src/unicode.h +280 -0
  606. data/lib/libv8/v8/src/uri.js +408 -0
  607. data/lib/libv8/v8/src/utils-inl.h +48 -0
  608. data/lib/libv8/v8/src/utils.cc +371 -0
  609. data/lib/libv8/v8/src/utils.h +800 -0
  610. data/lib/libv8/v8/src/v8-counters.cc +62 -0
  611. data/lib/libv8/v8/src/v8-counters.h +314 -0
  612. data/lib/libv8/v8/src/v8.cc +213 -0
  613. data/lib/libv8/v8/src/v8.h +131 -0
  614. data/lib/libv8/v8/src/v8checks.h +64 -0
  615. data/lib/libv8/v8/src/v8dll-main.cc +44 -0
  616. data/lib/libv8/v8/src/v8globals.h +512 -0
  617. data/lib/libv8/v8/src/v8memory.h +82 -0
  618. data/lib/libv8/v8/src/v8natives.js +1310 -0
  619. data/lib/libv8/v8/src/v8preparserdll-main.cc +39 -0
  620. data/lib/libv8/v8/src/v8threads.cc +464 -0
  621. data/lib/libv8/v8/src/v8threads.h +165 -0
  622. data/lib/libv8/v8/src/v8utils.h +319 -0
  623. data/lib/libv8/v8/src/variables.cc +114 -0
  624. data/lib/libv8/v8/src/variables.h +167 -0
  625. data/lib/libv8/v8/src/version.cc +116 -0
  626. data/lib/libv8/v8/src/version.h +68 -0
  627. data/lib/libv8/v8/src/vm-state-inl.h +138 -0
  628. data/lib/libv8/v8/src/vm-state.h +71 -0
  629. data/lib/libv8/v8/src/win32-headers.h +96 -0
  630. data/lib/libv8/v8/src/x64/assembler-x64-inl.h +462 -0
  631. data/lib/libv8/v8/src/x64/assembler-x64.cc +3027 -0
  632. data/lib/libv8/v8/src/x64/assembler-x64.h +1633 -0
  633. data/lib/libv8/v8/src/x64/builtins-x64.cc +1520 -0
  634. data/lib/libv8/v8/src/x64/code-stubs-x64.cc +5132 -0
  635. data/lib/libv8/v8/src/x64/code-stubs-x64.h +514 -0
  636. data/lib/libv8/v8/src/x64/codegen-x64.cc +146 -0
  637. data/lib/libv8/v8/src/x64/codegen-x64.h +76 -0
  638. data/lib/libv8/v8/src/x64/cpu-x64.cc +88 -0
  639. data/lib/libv8/v8/src/x64/debug-x64.cc +319 -0
  640. data/lib/libv8/v8/src/x64/deoptimizer-x64.cc +815 -0
  641. data/lib/libv8/v8/src/x64/disasm-x64.cc +1832 -0
  642. data/lib/libv8/v8/src/x64/frames-x64.cc +45 -0
  643. data/lib/libv8/v8/src/x64/frames-x64.h +130 -0
  644. data/lib/libv8/v8/src/x64/full-codegen-x64.cc +4318 -0
  645. data/lib/libv8/v8/src/x64/ic-x64.cc +1608 -0
  646. data/lib/libv8/v8/src/x64/lithium-codegen-x64.cc +4267 -0
  647. data/lib/libv8/v8/src/x64/lithium-codegen-x64.h +367 -0
  648. data/lib/libv8/v8/src/x64/lithium-gap-resolver-x64.cc +320 -0
  649. data/lib/libv8/v8/src/x64/lithium-gap-resolver-x64.h +74 -0
  650. data/lib/libv8/v8/src/x64/lithium-x64.cc +2202 -0
  651. data/lib/libv8/v8/src/x64/lithium-x64.h +2333 -0
  652. data/lib/libv8/v8/src/x64/macro-assembler-x64.cc +3745 -0
  653. data/lib/libv8/v8/src/x64/macro-assembler-x64.h +1290 -0
  654. data/lib/libv8/v8/src/x64/regexp-macro-assembler-x64.cc +1398 -0
  655. data/lib/libv8/v8/src/x64/regexp-macro-assembler-x64.h +282 -0
  656. data/lib/libv8/v8/src/x64/simulator-x64.cc +27 -0
  657. data/lib/libv8/v8/src/x64/simulator-x64.h +72 -0
  658. data/lib/libv8/v8/src/x64/stub-cache-x64.cc +3610 -0
  659. data/lib/libv8/v8/src/zone-inl.h +140 -0
  660. data/lib/libv8/v8/src/zone.cc +196 -0
  661. data/lib/libv8/v8/src/zone.h +240 -0
  662. data/lib/libv8/v8/tools/codemap.js +265 -0
  663. data/lib/libv8/v8/tools/consarray.js +93 -0
  664. data/lib/libv8/v8/tools/csvparser.js +78 -0
  665. data/lib/libv8/v8/tools/disasm.py +92 -0
  666. data/lib/libv8/v8/tools/freebsd-tick-processor +10 -0
  667. data/lib/libv8/v8/tools/gc-nvp-trace-processor.py +342 -0
  668. data/lib/libv8/v8/tools/gcmole/README +62 -0
  669. data/lib/libv8/v8/tools/gcmole/gccause.lua +60 -0
  670. data/lib/libv8/v8/tools/gcmole/gcmole.cc +1261 -0
  671. data/lib/libv8/v8/tools/gcmole/gcmole.lua +378 -0
  672. data/lib/libv8/v8/tools/generate-ten-powers.scm +286 -0
  673. data/lib/libv8/v8/tools/grokdump.py +841 -0
  674. data/lib/libv8/v8/tools/gyp/v8.gyp +995 -0
  675. data/lib/libv8/v8/tools/js2c.py +364 -0
  676. data/lib/libv8/v8/tools/jsmin.py +280 -0
  677. data/lib/libv8/v8/tools/linux-tick-processor +35 -0
  678. data/lib/libv8/v8/tools/ll_prof.py +942 -0
  679. data/lib/libv8/v8/tools/logreader.js +185 -0
  680. data/lib/libv8/v8/tools/mac-nm +18 -0
  681. data/lib/libv8/v8/tools/mac-tick-processor +6 -0
  682. data/lib/libv8/v8/tools/oom_dump/README +31 -0
  683. data/lib/libv8/v8/tools/oom_dump/SConstruct +42 -0
  684. data/lib/libv8/v8/tools/oom_dump/oom_dump.cc +288 -0
  685. data/lib/libv8/v8/tools/presubmit.py +305 -0
  686. data/lib/libv8/v8/tools/process-heap-prof.py +120 -0
  687. data/lib/libv8/v8/tools/profile.js +751 -0
  688. data/lib/libv8/v8/tools/profile_view.js +219 -0
  689. data/lib/libv8/v8/tools/run-valgrind.py +77 -0
  690. data/lib/libv8/v8/tools/splaytree.js +316 -0
  691. data/lib/libv8/v8/tools/stats-viewer.py +468 -0
  692. data/lib/libv8/v8/tools/test.py +1510 -0
  693. data/lib/libv8/v8/tools/tickprocessor-driver.js +59 -0
  694. data/lib/libv8/v8/tools/tickprocessor.js +877 -0
  695. data/lib/libv8/v8/tools/utils.py +96 -0
  696. data/lib/libv8/v8/tools/visual_studio/README.txt +12 -0
  697. data/lib/libv8/v8/tools/windows-tick-processor.bat +30 -0
  698. data/lib/libv8/version.rb +4 -0
  699. data/libv8.gemspec +31 -0
  700. metadata +800 -0
@@ -0,0 +1,123 @@
1
+ // Copyright 2011 the V8 project authors. All rights reserved.
2
+ // Redistribution and use in source and binary forms, with or without
3
+ // modification, are permitted provided that the following conditions are
4
+ // met:
5
+ //
6
+ // * Redistributions of source code must retain the above copyright
7
+ // notice, this list of conditions and the following disclaimer.
8
+ // * Redistributions in binary form must reproduce the above
9
+ // copyright notice, this list of conditions and the following
10
+ // disclaimer in the documentation and/or other materials provided
11
+ // with the distribution.
12
+ // * Neither the name of Google Inc. nor the names of its
13
+ // contributors may be used to endorse or promote products derived
14
+ // from this software without specific prior written permission.
15
+ //
16
+ // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17
+ // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18
+ // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19
+ // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20
+ // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21
+ // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22
+ // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
+ // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
+ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
+ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26
+ // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
+
28
+ #ifndef V8_HASHMAP_H_
29
+ #define V8_HASHMAP_H_
30
+
31
+ #include "allocation.h"
32
+
33
+ namespace v8 {
34
+ namespace internal {
35
+
36
+
37
+ // Allocator defines the memory allocator interface
38
+ // used by HashMap and implements a default allocator.
39
+ class Allocator BASE_EMBEDDED {
40
+ public:
41
+ virtual ~Allocator() {}
42
+ virtual void* New(size_t size) { return Malloced::New(size); }
43
+ virtual void Delete(void* p) { Malloced::Delete(p); }
44
+ };
45
+
46
+
47
+ class HashMap {
48
+ public:
49
+ static Allocator DefaultAllocator;
50
+
51
+ typedef bool (*MatchFun) (void* key1, void* key2);
52
+
53
+ // Dummy constructor. This constructor doesn't set up the hash
54
+ // map properly so don't use it unless you have good reason (e.g.,
55
+ // you know that the HashMap will never be used).
56
+ HashMap();
57
+
58
+ // initial_capacity is the size of the initial hash map;
59
+ // it must be a power of 2 (and thus must not be 0).
60
+ explicit HashMap(MatchFun match,
61
+ Allocator* allocator = &DefaultAllocator,
62
+ uint32_t initial_capacity = 8);
63
+
64
+ ~HashMap();
65
+
66
+ // HashMap entries are (key, value, hash) triplets.
67
+ // Some clients may not need to use the value slot
68
+ // (e.g. implementers of sets, where the key is the value).
69
+ struct Entry {
70
+ void* key;
71
+ void* value;
72
+ uint32_t hash; // the full hash value for key
73
+ };
74
+
75
+ // If an entry with matching key is found, Lookup()
76
+ // returns that entry. If no matching entry is found,
77
+ // but insert is set, a new entry is inserted with
78
+ // corresponding key, key hash, and NULL value.
79
+ // Otherwise, NULL is returned.
80
+ Entry* Lookup(void* key, uint32_t hash, bool insert);
81
+
82
+ // Removes the entry with matching key.
83
+ void Remove(void* key, uint32_t hash);
84
+
85
+ // Empties the hash map (occupancy() == 0).
86
+ void Clear();
87
+
88
+ // The number of (non-empty) entries in the table.
89
+ uint32_t occupancy() const { return occupancy_; }
90
+
91
+ // The capacity of the table. The implementation
92
+ // makes sure that occupancy is at most 80% of
93
+ // the table capacity.
94
+ uint32_t capacity() const { return capacity_; }
95
+
96
+ // Iteration
97
+ //
98
+ // for (Entry* p = map.Start(); p != NULL; p = map.Next(p)) {
99
+ // ...
100
+ // }
101
+ //
102
+ // If entries are inserted during iteration, the effect of
103
+ // calling Next() is undefined.
104
+ Entry* Start() const;
105
+ Entry* Next(Entry* p) const;
106
+
107
+ private:
108
+ Allocator* allocator_;
109
+ MatchFun match_;
110
+ Entry* map_;
111
+ uint32_t capacity_;
112
+ uint32_t occupancy_;
113
+
114
+ Entry* map_end() const { return map_ + capacity_; }
115
+ Entry* Probe(void* key, uint32_t hash);
116
+ void Initialize(uint32_t capacity);
117
+ void Resize();
118
+ };
119
+
120
+
121
+ } } // namespace v8::internal
122
+
123
+ #endif // V8_HASHMAP_H_
@@ -0,0 +1,704 @@
1
+ // Copyright 2011 the V8 project authors. All rights reserved.
2
+ // Redistribution and use in source and binary forms, with or without
3
+ // modification, are permitted provided that the following conditions are
4
+ // met:
5
+ //
6
+ // * Redistributions of source code must retain the above copyright
7
+ // notice, this list of conditions and the following disclaimer.
8
+ // * Redistributions in binary form must reproduce the above
9
+ // copyright notice, this list of conditions and the following
10
+ // disclaimer in the documentation and/or other materials provided
11
+ // with the distribution.
12
+ // * Neither the name of Google Inc. nor the names of its
13
+ // contributors may be used to endorse or promote products derived
14
+ // from this software without specific prior written permission.
15
+ //
16
+ // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17
+ // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18
+ // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19
+ // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20
+ // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21
+ // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22
+ // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
+ // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
+ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
+ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26
+ // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
+
28
+ #ifndef V8_HEAP_INL_H_
29
+ #define V8_HEAP_INL_H_
30
+
31
+ #include "heap.h"
32
+ #include "isolate.h"
33
+ #include "list-inl.h"
34
+ #include "objects.h"
35
+ #include "v8-counters.h"
36
+
37
+ namespace v8 {
38
+ namespace internal {
39
+
40
+ void PromotionQueue::insert(HeapObject* target, int size) {
41
+ *(--rear_) = reinterpret_cast<intptr_t>(target);
42
+ *(--rear_) = size;
43
+ // Assert no overflow into live objects.
44
+ ASSERT(reinterpret_cast<Address>(rear_) >= HEAP->new_space()->top());
45
+ }
46
+
47
+
48
+ int Heap::MaxObjectSizeInPagedSpace() {
49
+ return Page::kMaxHeapObjectSize;
50
+ }
51
+
52
+
53
+ MaybeObject* Heap::AllocateStringFromUtf8(Vector<const char> str,
54
+ PretenureFlag pretenure) {
55
+ // Check for ASCII first since this is the common case.
56
+ if (String::IsAscii(str.start(), str.length())) {
57
+ // If the string is ASCII, we do not need to convert the characters
58
+ // since UTF8 is backwards compatible with ASCII.
59
+ return AllocateStringFromAscii(str, pretenure);
60
+ }
61
+ // Non-ASCII and we need to decode.
62
+ return AllocateStringFromUtf8Slow(str, pretenure);
63
+ }
64
+
65
+
66
+ MaybeObject* Heap::AllocateSymbol(Vector<const char> str,
67
+ int chars,
68
+ uint32_t hash_field) {
69
+ unibrow::Utf8InputBuffer<> buffer(str.start(),
70
+ static_cast<unsigned>(str.length()));
71
+ return AllocateInternalSymbol(&buffer, chars, hash_field);
72
+ }
73
+
74
+
75
+ MaybeObject* Heap::AllocateAsciiSymbol(Vector<const char> str,
76
+ uint32_t hash_field) {
77
+ if (str.length() > SeqAsciiString::kMaxLength) {
78
+ return Failure::OutOfMemoryException();
79
+ }
80
+ // Compute map and object size.
81
+ Map* map = ascii_symbol_map();
82
+ int size = SeqAsciiString::SizeFor(str.length());
83
+
84
+ // Allocate string.
85
+ Object* result;
86
+ { MaybeObject* maybe_result = (size > MaxObjectSizeInPagedSpace())
87
+ ? lo_space_->AllocateRaw(size)
88
+ : old_data_space_->AllocateRaw(size);
89
+ if (!maybe_result->ToObject(&result)) return maybe_result;
90
+ }
91
+
92
+ reinterpret_cast<HeapObject*>(result)->set_map(map);
93
+ // Set length and hash fields of the allocated string.
94
+ String* answer = String::cast(result);
95
+ answer->set_length(str.length());
96
+ answer->set_hash_field(hash_field);
97
+
98
+ ASSERT_EQ(size, answer->Size());
99
+
100
+ // Fill in the characters.
101
+ memcpy(answer->address() + SeqAsciiString::kHeaderSize,
102
+ str.start(), str.length());
103
+
104
+ return answer;
105
+ }
106
+
107
+
108
+ MaybeObject* Heap::AllocateTwoByteSymbol(Vector<const uc16> str,
109
+ uint32_t hash_field) {
110
+ if (str.length() > SeqTwoByteString::kMaxLength) {
111
+ return Failure::OutOfMemoryException();
112
+ }
113
+ // Compute map and object size.
114
+ Map* map = symbol_map();
115
+ int size = SeqTwoByteString::SizeFor(str.length());
116
+
117
+ // Allocate string.
118
+ Object* result;
119
+ { MaybeObject* maybe_result = (size > MaxObjectSizeInPagedSpace())
120
+ ? lo_space_->AllocateRaw(size)
121
+ : old_data_space_->AllocateRaw(size);
122
+ if (!maybe_result->ToObject(&result)) return maybe_result;
123
+ }
124
+
125
+ reinterpret_cast<HeapObject*>(result)->set_map(map);
126
+ // Set length and hash fields of the allocated string.
127
+ String* answer = String::cast(result);
128
+ answer->set_length(str.length());
129
+ answer->set_hash_field(hash_field);
130
+
131
+ ASSERT_EQ(size, answer->Size());
132
+
133
+ // Fill in the characters.
134
+ memcpy(answer->address() + SeqTwoByteString::kHeaderSize,
135
+ str.start(), str.length() * kUC16Size);
136
+
137
+ return answer;
138
+ }
139
+
140
+ MaybeObject* Heap::CopyFixedArray(FixedArray* src) {
141
+ return CopyFixedArrayWithMap(src, src->map());
142
+ }
143
+
144
+
145
+ MaybeObject* Heap::AllocateRaw(int size_in_bytes,
146
+ AllocationSpace space,
147
+ AllocationSpace retry_space) {
148
+ ASSERT(allocation_allowed_ && gc_state_ == NOT_IN_GC);
149
+ ASSERT(space != NEW_SPACE ||
150
+ retry_space == OLD_POINTER_SPACE ||
151
+ retry_space == OLD_DATA_SPACE ||
152
+ retry_space == LO_SPACE);
153
+ #ifdef DEBUG
154
+ if (FLAG_gc_interval >= 0 &&
155
+ !disallow_allocation_failure_ &&
156
+ Heap::allocation_timeout_-- <= 0) {
157
+ return Failure::RetryAfterGC(space);
158
+ }
159
+ isolate_->counters()->objs_since_last_full()->Increment();
160
+ isolate_->counters()->objs_since_last_young()->Increment();
161
+ #endif
162
+ MaybeObject* result;
163
+ if (NEW_SPACE == space) {
164
+ result = new_space_.AllocateRaw(size_in_bytes);
165
+ if (always_allocate() && result->IsFailure()) {
166
+ space = retry_space;
167
+ } else {
168
+ return result;
169
+ }
170
+ }
171
+
172
+ if (OLD_POINTER_SPACE == space) {
173
+ result = old_pointer_space_->AllocateRaw(size_in_bytes);
174
+ } else if (OLD_DATA_SPACE == space) {
175
+ result = old_data_space_->AllocateRaw(size_in_bytes);
176
+ } else if (CODE_SPACE == space) {
177
+ result = code_space_->AllocateRaw(size_in_bytes);
178
+ } else if (LO_SPACE == space) {
179
+ result = lo_space_->AllocateRaw(size_in_bytes);
180
+ } else if (CELL_SPACE == space) {
181
+ result = cell_space_->AllocateRaw(size_in_bytes);
182
+ } else {
183
+ ASSERT(MAP_SPACE == space);
184
+ result = map_space_->AllocateRaw(size_in_bytes);
185
+ }
186
+ if (result->IsFailure()) old_gen_exhausted_ = true;
187
+ return result;
188
+ }
189
+
190
+
191
+ MaybeObject* Heap::NumberFromInt32(int32_t value) {
192
+ if (Smi::IsValid(value)) return Smi::FromInt(value);
193
+ // Bypass NumberFromDouble to avoid various redundant checks.
194
+ return AllocateHeapNumber(FastI2D(value));
195
+ }
196
+
197
+
198
+ MaybeObject* Heap::NumberFromUint32(uint32_t value) {
199
+ if ((int32_t)value >= 0 && Smi::IsValid((int32_t)value)) {
200
+ return Smi::FromInt((int32_t)value);
201
+ }
202
+ // Bypass NumberFromDouble to avoid various redundant checks.
203
+ return AllocateHeapNumber(FastUI2D(value));
204
+ }
205
+
206
+
207
+ void Heap::FinalizeExternalString(String* string) {
208
+ ASSERT(string->IsExternalString());
209
+ v8::String::ExternalStringResourceBase** resource_addr =
210
+ reinterpret_cast<v8::String::ExternalStringResourceBase**>(
211
+ reinterpret_cast<byte*>(string) +
212
+ ExternalString::kResourceOffset -
213
+ kHeapObjectTag);
214
+
215
+ // Dispose of the C++ object if it has not already been disposed.
216
+ if (*resource_addr != NULL) {
217
+ (*resource_addr)->Dispose();
218
+ }
219
+
220
+ // Clear the resource pointer in the string.
221
+ *resource_addr = NULL;
222
+ }
223
+
224
+
225
+ MaybeObject* Heap::AllocateRawMap() {
226
+ #ifdef DEBUG
227
+ isolate_->counters()->objs_since_last_full()->Increment();
228
+ isolate_->counters()->objs_since_last_young()->Increment();
229
+ #endif
230
+ MaybeObject* result = map_space_->AllocateRaw(Map::kSize);
231
+ if (result->IsFailure()) old_gen_exhausted_ = true;
232
+ #ifdef DEBUG
233
+ if (!result->IsFailure()) {
234
+ // Maps have their own alignment.
235
+ CHECK((reinterpret_cast<intptr_t>(result) & kMapAlignmentMask) ==
236
+ static_cast<intptr_t>(kHeapObjectTag));
237
+ }
238
+ #endif
239
+ return result;
240
+ }
241
+
242
+
243
+ MaybeObject* Heap::AllocateRawCell() {
244
+ #ifdef DEBUG
245
+ isolate_->counters()->objs_since_last_full()->Increment();
246
+ isolate_->counters()->objs_since_last_young()->Increment();
247
+ #endif
248
+ MaybeObject* result = cell_space_->AllocateRaw(JSGlobalPropertyCell::kSize);
249
+ if (result->IsFailure()) old_gen_exhausted_ = true;
250
+ return result;
251
+ }
252
+
253
+
254
+ bool Heap::InNewSpace(Object* object) {
255
+ bool result = new_space_.Contains(object);
256
+ ASSERT(!result || // Either not in new space
257
+ gc_state_ != NOT_IN_GC || // ... or in the middle of GC
258
+ InToSpace(object)); // ... or in to-space (where we allocate).
259
+ return result;
260
+ }
261
+
262
+
263
+ bool Heap::InFromSpace(Object* object) {
264
+ return new_space_.FromSpaceContains(object);
265
+ }
266
+
267
+
268
+ bool Heap::InToSpace(Object* object) {
269
+ return new_space_.ToSpaceContains(object);
270
+ }
271
+
272
+
273
+ bool Heap::ShouldBePromoted(Address old_address, int object_size) {
274
+ // An object should be promoted if:
275
+ // - the object has survived a scavenge operation or
276
+ // - to space is already 25% full.
277
+ return old_address < new_space_.age_mark()
278
+ || (new_space_.Size() + object_size) >= (new_space_.Capacity() >> 2);
279
+ }
280
+
281
+
282
+ void Heap::RecordWrite(Address address, int offset) {
283
+ if (new_space_.Contains(address)) return;
284
+ ASSERT(!new_space_.FromSpaceContains(address));
285
+ SLOW_ASSERT(Contains(address + offset));
286
+ Page::FromAddress(address)->MarkRegionDirty(address + offset);
287
+ }
288
+
289
+
290
+ void Heap::RecordWrites(Address address, int start, int len) {
291
+ if (new_space_.Contains(address)) return;
292
+ ASSERT(!new_space_.FromSpaceContains(address));
293
+ Page* page = Page::FromAddress(address);
294
+ page->SetRegionMarks(page->GetRegionMarks() |
295
+ page->GetRegionMaskForSpan(address + start, len * kPointerSize));
296
+ }
297
+
298
+
299
+ OldSpace* Heap::TargetSpace(HeapObject* object) {
300
+ InstanceType type = object->map()->instance_type();
301
+ AllocationSpace space = TargetSpaceId(type);
302
+ return (space == OLD_POINTER_SPACE)
303
+ ? old_pointer_space_
304
+ : old_data_space_;
305
+ }
306
+
307
+
308
+ AllocationSpace Heap::TargetSpaceId(InstanceType type) {
309
+ // Heap numbers and sequential strings are promoted to old data space, all
310
+ // other object types are promoted to old pointer space. We do not use
311
+ // object->IsHeapNumber() and object->IsSeqString() because we already
312
+ // know that object has the heap object tag.
313
+
314
+ // These objects are never allocated in new space.
315
+ ASSERT(type != MAP_TYPE);
316
+ ASSERT(type != CODE_TYPE);
317
+ ASSERT(type != ODDBALL_TYPE);
318
+ ASSERT(type != JS_GLOBAL_PROPERTY_CELL_TYPE);
319
+
320
+ if (type < FIRST_NONSTRING_TYPE) {
321
+ // There are three string representations: sequential strings, cons
322
+ // strings, and external strings. Only cons strings contain
323
+ // non-map-word pointers to heap objects.
324
+ return ((type & kStringRepresentationMask) == kConsStringTag)
325
+ ? OLD_POINTER_SPACE
326
+ : OLD_DATA_SPACE;
327
+ } else {
328
+ return (type <= LAST_DATA_TYPE) ? OLD_DATA_SPACE : OLD_POINTER_SPACE;
329
+ }
330
+ }
331
+
332
+
333
+ void Heap::CopyBlock(Address dst, Address src, int byte_size) {
334
+ ASSERT(IsAligned(byte_size, kPointerSize));
335
+ CopyWords(reinterpret_cast<Object**>(dst),
336
+ reinterpret_cast<Object**>(src),
337
+ byte_size / kPointerSize);
338
+ }
339
+
340
+
341
+ void Heap::CopyBlockToOldSpaceAndUpdateRegionMarks(Address dst,
342
+ Address src,
343
+ int byte_size) {
344
+ ASSERT(IsAligned(byte_size, kPointerSize));
345
+
346
+ Page* page = Page::FromAddress(dst);
347
+ uint32_t marks = page->GetRegionMarks();
348
+
349
+ for (int remaining = byte_size / kPointerSize;
350
+ remaining > 0;
351
+ remaining--) {
352
+ Memory::Object_at(dst) = Memory::Object_at(src);
353
+
354
+ if (InNewSpace(Memory::Object_at(dst))) {
355
+ marks |= page->GetRegionMaskForAddress(dst);
356
+ }
357
+
358
+ dst += kPointerSize;
359
+ src += kPointerSize;
360
+ }
361
+
362
+ page->SetRegionMarks(marks);
363
+ }
364
+
365
+
366
+ void Heap::MoveBlock(Address dst, Address src, int byte_size) {
367
+ ASSERT(IsAligned(byte_size, kPointerSize));
368
+
369
+ int size_in_words = byte_size / kPointerSize;
370
+
371
+ if ((dst < src) || (dst >= (src + size_in_words))) {
372
+ ASSERT((dst >= (src + size_in_words)) ||
373
+ ((OffsetFrom(reinterpret_cast<Address>(src)) -
374
+ OffsetFrom(reinterpret_cast<Address>(dst))) >= kPointerSize));
375
+
376
+ Object** src_slot = reinterpret_cast<Object**>(src);
377
+ Object** dst_slot = reinterpret_cast<Object**>(dst);
378
+ Object** end_slot = src_slot + size_in_words;
379
+
380
+ while (src_slot != end_slot) {
381
+ *dst_slot++ = *src_slot++;
382
+ }
383
+ } else {
384
+ memmove(dst, src, byte_size);
385
+ }
386
+ }
387
+
388
+
389
+ void Heap::MoveBlockToOldSpaceAndUpdateRegionMarks(Address dst,
390
+ Address src,
391
+ int byte_size) {
392
+ ASSERT(IsAligned(byte_size, kPointerSize));
393
+ ASSERT((dst >= (src + byte_size)) ||
394
+ ((OffsetFrom(src) - OffsetFrom(dst)) >= kPointerSize));
395
+
396
+ CopyBlockToOldSpaceAndUpdateRegionMarks(dst, src, byte_size);
397
+ }
398
+
399
+
400
+ void Heap::ScavengePointer(HeapObject** p) {
401
+ ScavengeObject(p, *p);
402
+ }
403
+
404
+
405
+ void Heap::ScavengeObject(HeapObject** p, HeapObject* object) {
406
+ ASSERT(HEAP->InFromSpace(object));
407
+
408
+ // We use the first word (where the map pointer usually is) of a heap
409
+ // object to record the forwarding pointer. A forwarding pointer can
410
+ // point to an old space, the code space, or the to space of the new
411
+ // generation.
412
+ MapWord first_word = object->map_word();
413
+
414
+ // If the first word is a forwarding address, the object has already been
415
+ // copied.
416
+ if (first_word.IsForwardingAddress()) {
417
+ *p = first_word.ToForwardingAddress();
418
+ return;
419
+ }
420
+
421
+ // Call the slow part of scavenge object.
422
+ return ScavengeObjectSlow(p, object);
423
+ }
424
+
425
+
426
+ bool Heap::CollectGarbage(AllocationSpace space) {
427
+ return CollectGarbage(space, SelectGarbageCollector(space));
428
+ }
429
+
430
+
431
+ MaybeObject* Heap::PrepareForCompare(String* str) {
432
+ // Always flatten small strings and force flattening of long strings
433
+ // after we have accumulated a certain amount we failed to flatten.
434
+ static const int kMaxAlwaysFlattenLength = 32;
435
+ static const int kFlattenLongThreshold = 16*KB;
436
+
437
+ const int length = str->length();
438
+ MaybeObject* obj = str->TryFlatten();
439
+ if (length <= kMaxAlwaysFlattenLength ||
440
+ unflattened_strings_length_ >= kFlattenLongThreshold) {
441
+ return obj;
442
+ }
443
+ if (obj->IsFailure()) {
444
+ unflattened_strings_length_ += length;
445
+ }
446
+ return str;
447
+ }
448
+
449
+
450
+ int Heap::AdjustAmountOfExternalAllocatedMemory(int change_in_bytes) {
451
+ ASSERT(HasBeenSetup());
452
+ int amount = amount_of_external_allocated_memory_ + change_in_bytes;
453
+ if (change_in_bytes >= 0) {
454
+ // Avoid overflow.
455
+ if (amount > amount_of_external_allocated_memory_) {
456
+ amount_of_external_allocated_memory_ = amount;
457
+ }
458
+ int amount_since_last_global_gc =
459
+ amount_of_external_allocated_memory_ -
460
+ amount_of_external_allocated_memory_at_last_global_gc_;
461
+ if (amount_since_last_global_gc > external_allocation_limit_) {
462
+ CollectAllGarbage(false);
463
+ }
464
+ } else {
465
+ // Avoid underflow.
466
+ if (amount >= 0) {
467
+ amount_of_external_allocated_memory_ = amount;
468
+ }
469
+ }
470
+ ASSERT(amount_of_external_allocated_memory_ >= 0);
471
+ return amount_of_external_allocated_memory_;
472
+ }
473
+
474
+
475
+ void Heap::SetLastScriptId(Object* last_script_id) {
476
+ roots_[kLastScriptIdRootIndex] = last_script_id;
477
+ }
478
+
479
+ Isolate* Heap::isolate() {
480
+ return reinterpret_cast<Isolate*>(reinterpret_cast<intptr_t>(this) -
481
+ reinterpret_cast<size_t>(reinterpret_cast<Isolate*>(4)->heap()) + 4);
482
+ }
483
+
484
+
485
+ #ifdef DEBUG
486
+ #define GC_GREEDY_CHECK() \
487
+ if (FLAG_gc_greedy) HEAP->GarbageCollectionGreedyCheck()
488
+ #else
489
+ #define GC_GREEDY_CHECK() { }
490
+ #endif
491
+
492
+
493
+ // Calls the FUNCTION_CALL function and retries it up to three times
494
+ // to guarantee that any allocations performed during the call will
495
+ // succeed if there's enough memory.
496
+
497
+ // Warning: Do not use the identifiers __object__, __maybe_object__ or
498
+ // __scope__ in a call to this macro.
499
+
500
+ #define CALL_AND_RETRY(ISOLATE, FUNCTION_CALL, RETURN_VALUE, RETURN_EMPTY)\
501
+ do { \
502
+ GC_GREEDY_CHECK(); \
503
+ MaybeObject* __maybe_object__ = FUNCTION_CALL; \
504
+ Object* __object__ = NULL; \
505
+ if (__maybe_object__->ToObject(&__object__)) RETURN_VALUE; \
506
+ if (__maybe_object__->IsOutOfMemory()) { \
507
+ v8::internal::V8::FatalProcessOutOfMemory("CALL_AND_RETRY_0", true);\
508
+ } \
509
+ if (!__maybe_object__->IsRetryAfterGC()) RETURN_EMPTY; \
510
+ ISOLATE->heap()->CollectGarbage(Failure::cast(__maybe_object__)-> \
511
+ allocation_space()); \
512
+ __maybe_object__ = FUNCTION_CALL; \
513
+ if (__maybe_object__->ToObject(&__object__)) RETURN_VALUE; \
514
+ if (__maybe_object__->IsOutOfMemory()) { \
515
+ v8::internal::V8::FatalProcessOutOfMemory("CALL_AND_RETRY_1", true);\
516
+ } \
517
+ if (!__maybe_object__->IsRetryAfterGC()) RETURN_EMPTY; \
518
+ ISOLATE->counters()->gc_last_resort_from_handles()->Increment(); \
519
+ ISOLATE->heap()->CollectAllAvailableGarbage(); \
520
+ { \
521
+ AlwaysAllocateScope __scope__; \
522
+ __maybe_object__ = FUNCTION_CALL; \
523
+ } \
524
+ if (__maybe_object__->ToObject(&__object__)) RETURN_VALUE; \
525
+ if (__maybe_object__->IsOutOfMemory() || \
526
+ __maybe_object__->IsRetryAfterGC()) { \
527
+ /* TODO(1181417): Fix this. */ \
528
+ v8::internal::V8::FatalProcessOutOfMemory("CALL_AND_RETRY_2", true);\
529
+ } \
530
+ RETURN_EMPTY; \
531
+ } while (false)
532
+
533
+
534
+ // TODO(isolates): cache isolate: either accept as a parameter or
535
+ // set to some known symbol (__CUR_ISOLATE__?)
536
+ #define CALL_HEAP_FUNCTION(ISOLATE, FUNCTION_CALL, TYPE) \
537
+ CALL_AND_RETRY(ISOLATE, \
538
+ FUNCTION_CALL, \
539
+ return Handle<TYPE>(TYPE::cast(__object__), ISOLATE), \
540
+ return Handle<TYPE>())
541
+
542
+
543
+ #define CALL_HEAP_FUNCTION_VOID(ISOLATE, FUNCTION_CALL) \
544
+ CALL_AND_RETRY(ISOLATE, FUNCTION_CALL, return, return)
545
+
546
+
547
+ #ifdef DEBUG
548
+
549
+ inline bool Heap::allow_allocation(bool new_state) {
550
+ bool old = allocation_allowed_;
551
+ allocation_allowed_ = new_state;
552
+ return old;
553
+ }
554
+
555
+ #endif
556
+
557
+
558
+ void ExternalStringTable::AddString(String* string) {
559
+ ASSERT(string->IsExternalString());
560
+ if (heap_->InNewSpace(string)) {
561
+ new_space_strings_.Add(string);
562
+ } else {
563
+ old_space_strings_.Add(string);
564
+ }
565
+ }
566
+
567
+
568
+ void ExternalStringTable::Iterate(ObjectVisitor* v) {
569
+ if (!new_space_strings_.is_empty()) {
570
+ Object** start = &new_space_strings_[0];
571
+ v->VisitPointers(start, start + new_space_strings_.length());
572
+ }
573
+ if (!old_space_strings_.is_empty()) {
574
+ Object** start = &old_space_strings_[0];
575
+ v->VisitPointers(start, start + old_space_strings_.length());
576
+ }
577
+ }
578
+
579
+
580
+ // Verify() is inline to avoid ifdef-s around its calls in release
581
+ // mode.
582
+ void ExternalStringTable::Verify() {
583
+ #ifdef DEBUG
584
+ for (int i = 0; i < new_space_strings_.length(); ++i) {
585
+ ASSERT(heap_->InNewSpace(new_space_strings_[i]));
586
+ ASSERT(new_space_strings_[i] != HEAP->raw_unchecked_null_value());
587
+ }
588
+ for (int i = 0; i < old_space_strings_.length(); ++i) {
589
+ ASSERT(!heap_->InNewSpace(old_space_strings_[i]));
590
+ ASSERT(old_space_strings_[i] != HEAP->raw_unchecked_null_value());
591
+ }
592
+ #endif
593
+ }
594
+
595
+
596
+ void ExternalStringTable::AddOldString(String* string) {
597
+ ASSERT(string->IsExternalString());
598
+ ASSERT(!heap_->InNewSpace(string));
599
+ old_space_strings_.Add(string);
600
+ }
601
+
602
+
603
+ void ExternalStringTable::ShrinkNewStrings(int position) {
604
+ new_space_strings_.Rewind(position);
605
+ Verify();
606
+ }
607
+
608
+
609
+ void Heap::ClearInstanceofCache() {
610
+ set_instanceof_cache_function(the_hole_value());
611
+ }
612
+
613
+
614
+ Object* Heap::ToBoolean(bool condition) {
615
+ return condition ? true_value() : false_value();
616
+ }
617
+
618
+
619
+ void Heap::CompletelyClearInstanceofCache() {
620
+ set_instanceof_cache_map(the_hole_value());
621
+ set_instanceof_cache_function(the_hole_value());
622
+ }
623
+
624
+
625
+ MaybeObject* TranscendentalCache::Get(Type type, double input) {
626
+ SubCache* cache = caches_[type];
627
+ if (cache == NULL) {
628
+ caches_[type] = cache = new SubCache(type);
629
+ }
630
+ return cache->Get(input);
631
+ }
632
+
633
+
634
+ Address TranscendentalCache::cache_array_address() {
635
+ return reinterpret_cast<Address>(caches_);
636
+ }
637
+
638
+
639
+ double TranscendentalCache::SubCache::Calculate(double input) {
640
+ switch (type_) {
641
+ case ACOS:
642
+ return acos(input);
643
+ case ASIN:
644
+ return asin(input);
645
+ case ATAN:
646
+ return atan(input);
647
+ case COS:
648
+ return cos(input);
649
+ case EXP:
650
+ return exp(input);
651
+ case LOG:
652
+ return log(input);
653
+ case SIN:
654
+ return sin(input);
655
+ case TAN:
656
+ return tan(input);
657
+ default:
658
+ return 0.0; // Never happens.
659
+ }
660
+ }
661
+
662
+
663
+ MaybeObject* TranscendentalCache::SubCache::Get(double input) {
664
+ Converter c;
665
+ c.dbl = input;
666
+ int hash = Hash(c);
667
+ Element e = elements_[hash];
668
+ if (e.in[0] == c.integers[0] &&
669
+ e.in[1] == c.integers[1]) {
670
+ ASSERT(e.output != NULL);
671
+ isolate_->counters()->transcendental_cache_hit()->Increment();
672
+ return e.output;
673
+ }
674
+ double answer = Calculate(input);
675
+ isolate_->counters()->transcendental_cache_miss()->Increment();
676
+ Object* heap_number;
677
+ { MaybeObject* maybe_heap_number =
678
+ isolate_->heap()->AllocateHeapNumber(answer);
679
+ if (!maybe_heap_number->ToObject(&heap_number)) return maybe_heap_number;
680
+ }
681
+ elements_[hash].in[0] = c.integers[0];
682
+ elements_[hash].in[1] = c.integers[1];
683
+ elements_[hash].output = heap_number;
684
+ return heap_number;
685
+ }
686
+
687
+
688
+ Heap* _inline_get_heap_() {
689
+ return HEAP;
690
+ }
691
+
692
+
693
+ void MarkCompactCollector::SetMark(HeapObject* obj) {
694
+ tracer_->increment_marked_count();
695
+ #ifdef DEBUG
696
+ UpdateLiveObjectCount(obj);
697
+ #endif
698
+ obj->SetMark();
699
+ }
700
+
701
+
702
+ } } // namespace v8::internal
703
+
704
+ #endif // V8_HEAP_INL_H_