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,368 @@
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
+ import sys
29
+ from os.path import join, dirname, abspath
30
+ root_dir = dirname(File('SConstruct').rfile().abspath)
31
+ sys.path.append(join(root_dir, 'tools'))
32
+ import js2c
33
+ Import('context')
34
+ Import('tools')
35
+
36
+
37
+ SOURCES = {
38
+ 'all': Split("""
39
+ accessors.cc
40
+ allocation.cc
41
+ api.cc
42
+ assembler.cc
43
+ ast.cc
44
+ atomicops_internals_x86_gcc.cc
45
+ bignum.cc
46
+ bignum-dtoa.cc
47
+ bootstrapper.cc
48
+ builtins.cc
49
+ cached-powers.cc
50
+ checks.cc
51
+ circular-queue.cc
52
+ code-stubs.cc
53
+ codegen.cc
54
+ compilation-cache.cc
55
+ compiler.cc
56
+ contexts.cc
57
+ conversions.cc
58
+ counters.cc
59
+ cpu-profiler.cc
60
+ data-flow.cc
61
+ dateparser.cc
62
+ debug-agent.cc
63
+ debug.cc
64
+ deoptimizer.cc
65
+ disassembler.cc
66
+ diy-fp.cc
67
+ dtoa.cc
68
+ execution.cc
69
+ factory.cc
70
+ flags.cc
71
+ frames.cc
72
+ full-codegen.cc
73
+ func-name-inferrer.cc
74
+ gdb-jit.cc
75
+ global-handles.cc
76
+ fast-dtoa.cc
77
+ fixed-dtoa.cc
78
+ handles.cc
79
+ hashmap.cc
80
+ heap-profiler.cc
81
+ heap.cc
82
+ hydrogen.cc
83
+ hydrogen-instructions.cc
84
+ ic.cc
85
+ inspector.cc
86
+ interpreter-irregexp.cc
87
+ isolate.cc
88
+ json-parser.cc
89
+ jsregexp.cc
90
+ lithium-allocator.cc
91
+ lithium.cc
92
+ liveedit.cc
93
+ liveobjectlist.cc
94
+ log-utils.cc
95
+ log.cc
96
+ mark-compact.cc
97
+ messages.cc
98
+ objects.cc
99
+ objects-printer.cc
100
+ objects-visiting.cc
101
+ parser.cc
102
+ preparser.cc
103
+ preparse-data.cc
104
+ profile-generator.cc
105
+ property.cc
106
+ regexp-macro-assembler-irregexp.cc
107
+ regexp-macro-assembler.cc
108
+ regexp-stack.cc
109
+ rewriter.cc
110
+ runtime.cc
111
+ runtime-profiler.cc
112
+ safepoint-table.cc
113
+ scanner-base.cc
114
+ scanner.cc
115
+ scopeinfo.cc
116
+ scopes.cc
117
+ serialize.cc
118
+ snapshot-common.cc
119
+ spaces.cc
120
+ string-search.cc
121
+ string-stream.cc
122
+ strtod.cc
123
+ stub-cache.cc
124
+ token.cc
125
+ type-info.cc
126
+ unicode.cc
127
+ utils.cc
128
+ v8-counters.cc
129
+ v8.cc
130
+ v8threads.cc
131
+ variables.cc
132
+ version.cc
133
+ zone.cc
134
+ extensions/gc-extension.cc
135
+ extensions/externalize-string-extension.cc
136
+ """),
137
+ 'arch:arm': Split("""
138
+ arm/builtins-arm.cc
139
+ arm/code-stubs-arm.cc
140
+ arm/codegen-arm.cc
141
+ arm/constants-arm.cc
142
+ arm/cpu-arm.cc
143
+ arm/debug-arm.cc
144
+ arm/deoptimizer-arm.cc
145
+ arm/disasm-arm.cc
146
+ arm/frames-arm.cc
147
+ arm/full-codegen-arm.cc
148
+ arm/ic-arm.cc
149
+ arm/lithium-arm.cc
150
+ arm/lithium-codegen-arm.cc
151
+ arm/lithium-gap-resolver-arm.cc
152
+ arm/macro-assembler-arm.cc
153
+ arm/regexp-macro-assembler-arm.cc
154
+ arm/stub-cache-arm.cc
155
+ arm/assembler-arm.cc
156
+ """),
157
+ 'arch:mips': Split("""
158
+ mips/assembler-mips.cc
159
+ mips/builtins-mips.cc
160
+ mips/code-stubs-mips.cc
161
+ mips/codegen-mips.cc
162
+ mips/constants-mips.cc
163
+ mips/cpu-mips.cc
164
+ mips/debug-mips.cc
165
+ mips/deoptimizer-mips.cc
166
+ mips/disasm-mips.cc
167
+ mips/frames-mips.cc
168
+ mips/full-codegen-mips.cc
169
+ mips/ic-mips.cc
170
+ mips/macro-assembler-mips.cc
171
+ mips/regexp-macro-assembler-mips.cc
172
+ mips/stub-cache-mips.cc
173
+ """),
174
+ 'arch:ia32': Split("""
175
+ ia32/assembler-ia32.cc
176
+ ia32/builtins-ia32.cc
177
+ ia32/code-stubs-ia32.cc
178
+ ia32/codegen-ia32.cc
179
+ ia32/cpu-ia32.cc
180
+ ia32/debug-ia32.cc
181
+ ia32/deoptimizer-ia32.cc
182
+ ia32/disasm-ia32.cc
183
+ ia32/frames-ia32.cc
184
+ ia32/full-codegen-ia32.cc
185
+ ia32/ic-ia32.cc
186
+ ia32/lithium-codegen-ia32.cc
187
+ ia32/lithium-gap-resolver-ia32.cc
188
+ ia32/lithium-ia32.cc
189
+ ia32/macro-assembler-ia32.cc
190
+ ia32/regexp-macro-assembler-ia32.cc
191
+ ia32/stub-cache-ia32.cc
192
+ """),
193
+ 'arch:x64': Split("""
194
+ x64/assembler-x64.cc
195
+ x64/builtins-x64.cc
196
+ x64/code-stubs-x64.cc
197
+ x64/codegen-x64.cc
198
+ x64/cpu-x64.cc
199
+ x64/debug-x64.cc
200
+ x64/deoptimizer-x64.cc
201
+ x64/disasm-x64.cc
202
+ x64/frames-x64.cc
203
+ x64/full-codegen-x64.cc
204
+ x64/ic-x64.cc
205
+ x64/lithium-codegen-x64.cc
206
+ x64/lithium-gap-resolver-x64.cc
207
+ x64/lithium-x64.cc
208
+ x64/macro-assembler-x64.cc
209
+ x64/regexp-macro-assembler-x64.cc
210
+ x64/stub-cache-x64.cc
211
+ """),
212
+ 'simulator:arm': ['arm/simulator-arm.cc'],
213
+ 'simulator:mips': ['mips/simulator-mips.cc'],
214
+ 'os:freebsd': ['platform-freebsd.cc', 'platform-posix.cc'],
215
+ 'os:openbsd': ['platform-openbsd.cc', 'platform-posix.cc'],
216
+ 'os:linux': ['platform-linux.cc', 'platform-posix.cc'],
217
+ 'os:android': ['platform-linux.cc', 'platform-posix.cc'],
218
+ 'os:macos': ['platform-macos.cc', 'platform-posix.cc'],
219
+ 'os:solaris': ['platform-solaris.cc', 'platform-posix.cc'],
220
+ 'os:cygwin': ['platform-cygwin.cc', 'platform-posix.cc'],
221
+ 'os:nullos': ['platform-nullos.cc'],
222
+ 'os:win32': ['platform-win32.cc'],
223
+ 'mode:release': [],
224
+ 'mode:debug': [
225
+ 'objects-debug.cc', 'prettyprinter.cc', 'regexp-macro-assembler-tracer.cc'
226
+ ]
227
+ }
228
+
229
+
230
+ PREPARSER_SOURCES = {
231
+ 'all': Split("""
232
+ allocation.cc
233
+ hashmap.cc
234
+ preparse-data.cc
235
+ preparser.cc
236
+ preparser-api.cc
237
+ scanner-base.cc
238
+ token.cc
239
+ unicode.cc
240
+ """)
241
+ }
242
+
243
+
244
+ D8_FILES = {
245
+ 'all': [
246
+ 'd8.cc', 'd8-debug.cc'
247
+ ],
248
+ 'os:linux': [
249
+ 'd8-posix.cc'
250
+ ],
251
+ 'os:macos': [
252
+ 'd8-posix.cc'
253
+ ],
254
+ 'os:android': [
255
+ 'd8-posix.cc'
256
+ ],
257
+ 'os:freebsd': [
258
+ 'd8-posix.cc'
259
+ ],
260
+ 'os:openbsd': [
261
+ 'd8-posix.cc'
262
+ ],
263
+ 'os:solaris': [
264
+ 'd8-posix.cc'
265
+ ],
266
+ 'os:cygwin': [
267
+ 'd8-posix.cc'
268
+ ],
269
+ 'os:win32': [
270
+ 'd8-windows.cc'
271
+ ],
272
+ 'os:nullos': [
273
+ 'd8-windows.cc' # Empty implementation at the moment.
274
+ ],
275
+ 'console:readline': [
276
+ 'd8-readline.cc'
277
+ ]
278
+ }
279
+
280
+
281
+ LIBRARY_FILES = '''
282
+ runtime.js
283
+ v8natives.js
284
+ array.js
285
+ string.js
286
+ uri.js
287
+ math.js
288
+ messages.js
289
+ apinatives.js
290
+ date.js
291
+ regexp.js
292
+ json.js
293
+ liveedit-debugger.js
294
+ mirror-debugger.js
295
+ debug-debugger.js
296
+ '''.split()
297
+
298
+
299
+ EXPERIMENTAL_LIBRARY_FILES = '''
300
+ proxy.js
301
+ '''.split()
302
+
303
+
304
+ def Abort(message):
305
+ print message
306
+ sys.exit(1)
307
+
308
+
309
+ def ConfigureObjectFiles():
310
+ env = Environment(tools=tools)
311
+ env.Replace(**context.flags['v8'])
312
+ context.ApplyEnvOverrides(env)
313
+ env['BUILDERS']['JS2C'] = Builder(action=js2c.JS2C)
314
+ env['BUILDERS']['Snapshot'] = Builder(action='$SOURCE $TARGET --logfile "$LOGFILE" --log-snapshot-positions')
315
+
316
+ # Build the standard platform-independent source files.
317
+ source_files = context.GetRelevantSources(SOURCES)
318
+
319
+ d8_files = context.GetRelevantSources(D8_FILES)
320
+ d8_js = env.JS2C('d8-js.cc', 'd8.js', TYPE='D8')
321
+ d8_js_obj = context.ConfigureObject(env, d8_js, CPPPATH=['.'])
322
+ d8_objs = [context.ConfigureObject(env, [d8_files]), d8_js_obj]
323
+
324
+ # Combine the JavaScript library files into a single C++ file and
325
+ # compile it.
326
+ library_files = [s for s in LIBRARY_FILES]
327
+ library_files.append('macros.py')
328
+ libraries_src = env.JS2C(['libraries.cc'], library_files, TYPE='CORE')
329
+ libraries_obj = context.ConfigureObject(env, libraries_src, CPPPATH=['.'])
330
+
331
+ # Combine the experimental JavaScript library files into a C++ file
332
+ # and compile it.
333
+ experimental_library_files = [ s for s in EXPERIMENTAL_LIBRARY_FILES ]
334
+ experimental_library_files.append('macros.py')
335
+ experimental_libraries_src = env.JS2C(['experimental-libraries.cc'], experimental_library_files, TYPE='EXPERIMENTAL')
336
+ experimental_libraries_obj = context.ConfigureObject(env, experimental_libraries_src, CPPPATH=['.'])
337
+
338
+ source_objs = context.ConfigureObject(env, source_files)
339
+ non_snapshot_files = [source_objs]
340
+
341
+ preparser_source_files = context.GetRelevantSources(PREPARSER_SOURCES)
342
+ preparser_objs = context.ConfigureObject(env, preparser_source_files)
343
+
344
+ # Create snapshot if necessary. For cross compilation you should either
345
+ # do without snapshots and take the performance hit or you should build a
346
+ # host VM with the simulator=arm and snapshot=on options and then take the
347
+ # resulting snapshot.cc file from obj/release and put it in the src
348
+ # directory. Then rebuild the VM with the cross compiler and specify
349
+ # snapshot=nobuild on the scons command line.
350
+ empty_snapshot_obj = context.ConfigureObject(env, 'snapshot-empty.cc')
351
+ mksnapshot_env = env.Copy()
352
+ mksnapshot_env.Replace(**context.flags['mksnapshot'])
353
+ mksnapshot_src = 'mksnapshot.cc'
354
+ mksnapshot = mksnapshot_env.Program('mksnapshot', [mksnapshot_src, libraries_obj, experimental_libraries_obj, non_snapshot_files, empty_snapshot_obj], PDB='mksnapshot.exe.pdb')
355
+ if context.use_snapshot:
356
+ if context.build_snapshot:
357
+ snapshot_cc = env.Snapshot('snapshot.cc', mksnapshot, LOGFILE=File('snapshot.log').abspath)
358
+ else:
359
+ snapshot_cc = 'snapshot.cc'
360
+ snapshot_obj = context.ConfigureObject(env, snapshot_cc, CPPPATH=['.'])
361
+ else:
362
+ snapshot_obj = empty_snapshot_obj
363
+ library_objs = [non_snapshot_files, libraries_obj, experimental_libraries_obj, snapshot_obj]
364
+ return (library_objs, d8_objs, [mksnapshot], preparser_objs)
365
+
366
+
367
+ (library_objs, d8_objs, mksnapshot, preparser_objs) = ConfigureObjectFiles()
368
+ Return('library_objs d8_objs mksnapshot preparser_objs')
@@ -0,0 +1,767 @@
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
+ #include "v8.h"
29
+
30
+ #include "accessors.h"
31
+ #include "ast.h"
32
+ #include "deoptimizer.h"
33
+ #include "execution.h"
34
+ #include "factory.h"
35
+ #include "list-inl.h"
36
+ #include "safepoint-table.h"
37
+ #include "scopeinfo.h"
38
+
39
+ namespace v8 {
40
+ namespace internal {
41
+
42
+
43
+ template <class C>
44
+ static C* FindInPrototypeChain(Object* obj, bool* found_it) {
45
+ ASSERT(!*found_it);
46
+ Heap* heap = HEAP;
47
+ while (!Is<C>(obj)) {
48
+ if (obj == heap->null_value()) return NULL;
49
+ obj = obj->GetPrototype();
50
+ }
51
+ *found_it = true;
52
+ return C::cast(obj);
53
+ }
54
+
55
+
56
+ // Entry point that never should be called.
57
+ MaybeObject* Accessors::IllegalSetter(JSObject*, Object*, void*) {
58
+ UNREACHABLE();
59
+ return NULL;
60
+ }
61
+
62
+
63
+ Object* Accessors::IllegalGetAccessor(Object* object, void*) {
64
+ UNREACHABLE();
65
+ return object;
66
+ }
67
+
68
+
69
+ MaybeObject* Accessors::ReadOnlySetAccessor(JSObject*, Object* value, void*) {
70
+ // According to ECMA-262, section 8.6.2.2, page 28, setting
71
+ // read-only properties must be silently ignored.
72
+ return value;
73
+ }
74
+
75
+
76
+ //
77
+ // Accessors::ArrayLength
78
+ //
79
+
80
+
81
+ MaybeObject* Accessors::ArrayGetLength(Object* object, void*) {
82
+ // Traverse the prototype chain until we reach an array.
83
+ bool found_it = false;
84
+ JSArray* holder = FindInPrototypeChain<JSArray>(object, &found_it);
85
+ if (!found_it) return Smi::FromInt(0);
86
+ return holder->length();
87
+ }
88
+
89
+
90
+ // The helper function will 'flatten' Number objects.
91
+ Object* Accessors::FlattenNumber(Object* value) {
92
+ if (value->IsNumber() || !value->IsJSValue()) return value;
93
+ JSValue* wrapper = JSValue::cast(value);
94
+ ASSERT(Isolate::Current()->context()->global_context()->number_function()->
95
+ has_initial_map());
96
+ Map* number_map = Isolate::Current()->context()->global_context()->
97
+ number_function()->initial_map();
98
+ if (wrapper->map() == number_map) return wrapper->value();
99
+ return value;
100
+ }
101
+
102
+
103
+ MaybeObject* Accessors::ArraySetLength(JSObject* object, Object* value, void*) {
104
+ Isolate* isolate = object->GetIsolate();
105
+ value = FlattenNumber(value);
106
+
107
+ // Need to call methods that may trigger GC.
108
+ HandleScope scope(isolate);
109
+
110
+ // Protect raw pointers.
111
+ Handle<JSObject> object_handle(object, isolate);
112
+ Handle<Object> value_handle(value, isolate);
113
+
114
+ bool has_exception;
115
+ Handle<Object> uint32_v = Execution::ToUint32(value_handle, &has_exception);
116
+ if (has_exception) return Failure::Exception();
117
+ Handle<Object> number_v = Execution::ToNumber(value_handle, &has_exception);
118
+ if (has_exception) return Failure::Exception();
119
+
120
+ // Restore raw pointers,
121
+ object = *object_handle;
122
+ value = *value_handle;
123
+
124
+ if (uint32_v->Number() == number_v->Number()) {
125
+ if (object->IsJSArray()) {
126
+ return JSArray::cast(object)->SetElementsLength(*uint32_v);
127
+ } else {
128
+ // This means one of the object's prototypes is a JSArray and
129
+ // the object does not have a 'length' property.
130
+ // Calling SetProperty causes an infinite loop.
131
+ return object->SetLocalPropertyIgnoreAttributes(
132
+ isolate->heap()->length_symbol(), value, NONE);
133
+ }
134
+ }
135
+ return isolate->Throw(
136
+ *isolate->factory()->NewRangeError("invalid_array_length",
137
+ HandleVector<Object>(NULL, 0)));
138
+ }
139
+
140
+
141
+ const AccessorDescriptor Accessors::ArrayLength = {
142
+ ArrayGetLength,
143
+ ArraySetLength,
144
+ 0
145
+ };
146
+
147
+
148
+ //
149
+ // Accessors::StringLength
150
+ //
151
+
152
+
153
+ MaybeObject* Accessors::StringGetLength(Object* object, void*) {
154
+ Object* value = object;
155
+ if (object->IsJSValue()) value = JSValue::cast(object)->value();
156
+ if (value->IsString()) return Smi::FromInt(String::cast(value)->length());
157
+ // If object is not a string we return 0 to be compatible with WebKit.
158
+ // Note: Firefox returns the length of ToString(object).
159
+ return Smi::FromInt(0);
160
+ }
161
+
162
+
163
+ const AccessorDescriptor Accessors::StringLength = {
164
+ StringGetLength,
165
+ IllegalSetter,
166
+ 0
167
+ };
168
+
169
+
170
+ //
171
+ // Accessors::ScriptSource
172
+ //
173
+
174
+
175
+ MaybeObject* Accessors::ScriptGetSource(Object* object, void*) {
176
+ Object* script = JSValue::cast(object)->value();
177
+ return Script::cast(script)->source();
178
+ }
179
+
180
+
181
+ const AccessorDescriptor Accessors::ScriptSource = {
182
+ ScriptGetSource,
183
+ IllegalSetter,
184
+ 0
185
+ };
186
+
187
+
188
+ //
189
+ // Accessors::ScriptName
190
+ //
191
+
192
+
193
+ MaybeObject* Accessors::ScriptGetName(Object* object, void*) {
194
+ Object* script = JSValue::cast(object)->value();
195
+ return Script::cast(script)->name();
196
+ }
197
+
198
+
199
+ const AccessorDescriptor Accessors::ScriptName = {
200
+ ScriptGetName,
201
+ IllegalSetter,
202
+ 0
203
+ };
204
+
205
+
206
+ //
207
+ // Accessors::ScriptId
208
+ //
209
+
210
+
211
+ MaybeObject* Accessors::ScriptGetId(Object* object, void*) {
212
+ Object* script = JSValue::cast(object)->value();
213
+ return Script::cast(script)->id();
214
+ }
215
+
216
+
217
+ const AccessorDescriptor Accessors::ScriptId = {
218
+ ScriptGetId,
219
+ IllegalSetter,
220
+ 0
221
+ };
222
+
223
+
224
+ //
225
+ // Accessors::ScriptLineOffset
226
+ //
227
+
228
+
229
+ MaybeObject* Accessors::ScriptGetLineOffset(Object* object, void*) {
230
+ Object* script = JSValue::cast(object)->value();
231
+ return Script::cast(script)->line_offset();
232
+ }
233
+
234
+
235
+ const AccessorDescriptor Accessors::ScriptLineOffset = {
236
+ ScriptGetLineOffset,
237
+ IllegalSetter,
238
+ 0
239
+ };
240
+
241
+
242
+ //
243
+ // Accessors::ScriptColumnOffset
244
+ //
245
+
246
+
247
+ MaybeObject* Accessors::ScriptGetColumnOffset(Object* object, void*) {
248
+ Object* script = JSValue::cast(object)->value();
249
+ return Script::cast(script)->column_offset();
250
+ }
251
+
252
+
253
+ const AccessorDescriptor Accessors::ScriptColumnOffset = {
254
+ ScriptGetColumnOffset,
255
+ IllegalSetter,
256
+ 0
257
+ };
258
+
259
+
260
+ //
261
+ // Accessors::ScriptData
262
+ //
263
+
264
+
265
+ MaybeObject* Accessors::ScriptGetData(Object* object, void*) {
266
+ Object* script = JSValue::cast(object)->value();
267
+ return Script::cast(script)->data();
268
+ }
269
+
270
+
271
+ const AccessorDescriptor Accessors::ScriptData = {
272
+ ScriptGetData,
273
+ IllegalSetter,
274
+ 0
275
+ };
276
+
277
+
278
+ //
279
+ // Accessors::ScriptType
280
+ //
281
+
282
+
283
+ MaybeObject* Accessors::ScriptGetType(Object* object, void*) {
284
+ Object* script = JSValue::cast(object)->value();
285
+ return Script::cast(script)->type();
286
+ }
287
+
288
+
289
+ const AccessorDescriptor Accessors::ScriptType = {
290
+ ScriptGetType,
291
+ IllegalSetter,
292
+ 0
293
+ };
294
+
295
+
296
+ //
297
+ // Accessors::ScriptCompilationType
298
+ //
299
+
300
+
301
+ MaybeObject* Accessors::ScriptGetCompilationType(Object* object, void*) {
302
+ Object* script = JSValue::cast(object)->value();
303
+ return Script::cast(script)->compilation_type();
304
+ }
305
+
306
+
307
+ const AccessorDescriptor Accessors::ScriptCompilationType = {
308
+ ScriptGetCompilationType,
309
+ IllegalSetter,
310
+ 0
311
+ };
312
+
313
+
314
+ //
315
+ // Accessors::ScriptGetLineEnds
316
+ //
317
+
318
+
319
+ MaybeObject* Accessors::ScriptGetLineEnds(Object* object, void*) {
320
+ JSValue* wrapper = JSValue::cast(object);
321
+ Isolate* isolate = wrapper->GetIsolate();
322
+ HandleScope scope(isolate);
323
+ Handle<Script> script(Script::cast(wrapper->value()), isolate);
324
+ InitScriptLineEnds(script);
325
+ ASSERT(script->line_ends()->IsFixedArray());
326
+ Handle<FixedArray> line_ends(FixedArray::cast(script->line_ends()));
327
+ // We do not want anyone to modify this array from JS.
328
+ ASSERT(*line_ends == isolate->heap()->empty_fixed_array() ||
329
+ line_ends->map() == isolate->heap()->fixed_cow_array_map());
330
+ Handle<JSArray> js_array =
331
+ isolate->factory()->NewJSArrayWithElements(line_ends);
332
+ return *js_array;
333
+ }
334
+
335
+
336
+ const AccessorDescriptor Accessors::ScriptLineEnds = {
337
+ ScriptGetLineEnds,
338
+ IllegalSetter,
339
+ 0
340
+ };
341
+
342
+
343
+ //
344
+ // Accessors::ScriptGetContextData
345
+ //
346
+
347
+
348
+ MaybeObject* Accessors::ScriptGetContextData(Object* object, void*) {
349
+ Object* script = JSValue::cast(object)->value();
350
+ return Script::cast(script)->context_data();
351
+ }
352
+
353
+
354
+ const AccessorDescriptor Accessors::ScriptContextData = {
355
+ ScriptGetContextData,
356
+ IllegalSetter,
357
+ 0
358
+ };
359
+
360
+
361
+ //
362
+ // Accessors::ScriptGetEvalFromScript
363
+ //
364
+
365
+
366
+ MaybeObject* Accessors::ScriptGetEvalFromScript(Object* object, void*) {
367
+ Object* script = JSValue::cast(object)->value();
368
+ if (!Script::cast(script)->eval_from_shared()->IsUndefined()) {
369
+ Handle<SharedFunctionInfo> eval_from_shared(
370
+ SharedFunctionInfo::cast(Script::cast(script)->eval_from_shared()));
371
+
372
+ if (eval_from_shared->script()->IsScript()) {
373
+ Handle<Script> eval_from_script(Script::cast(eval_from_shared->script()));
374
+ return *GetScriptWrapper(eval_from_script);
375
+ }
376
+ }
377
+ return HEAP->undefined_value();
378
+ }
379
+
380
+
381
+ const AccessorDescriptor Accessors::ScriptEvalFromScript = {
382
+ ScriptGetEvalFromScript,
383
+ IllegalSetter,
384
+ 0
385
+ };
386
+
387
+
388
+ //
389
+ // Accessors::ScriptGetEvalFromScriptPosition
390
+ //
391
+
392
+
393
+ MaybeObject* Accessors::ScriptGetEvalFromScriptPosition(Object* object, void*) {
394
+ HandleScope scope;
395
+ Handle<Script> script(Script::cast(JSValue::cast(object)->value()));
396
+
397
+ // If this is not a script compiled through eval there is no eval position.
398
+ int compilation_type = Smi::cast(script->compilation_type())->value();
399
+ if (compilation_type != Script::COMPILATION_TYPE_EVAL) {
400
+ return HEAP->undefined_value();
401
+ }
402
+
403
+ // Get the function from where eval was called and find the source position
404
+ // from the instruction offset.
405
+ Handle<Code> code(SharedFunctionInfo::cast(
406
+ script->eval_from_shared())->code());
407
+ return Smi::FromInt(code->SourcePosition(code->instruction_start() +
408
+ script->eval_from_instructions_offset()->value()));
409
+ }
410
+
411
+
412
+ const AccessorDescriptor Accessors::ScriptEvalFromScriptPosition = {
413
+ ScriptGetEvalFromScriptPosition,
414
+ IllegalSetter,
415
+ 0
416
+ };
417
+
418
+
419
+ //
420
+ // Accessors::ScriptGetEvalFromFunctionName
421
+ //
422
+
423
+
424
+ MaybeObject* Accessors::ScriptGetEvalFromFunctionName(Object* object, void*) {
425
+ Object* script = JSValue::cast(object)->value();
426
+ Handle<SharedFunctionInfo> shared(SharedFunctionInfo::cast(
427
+ Script::cast(script)->eval_from_shared()));
428
+
429
+
430
+ // Find the name of the function calling eval.
431
+ if (!shared->name()->IsUndefined()) {
432
+ return shared->name();
433
+ } else {
434
+ return shared->inferred_name();
435
+ }
436
+ }
437
+
438
+
439
+ const AccessorDescriptor Accessors::ScriptEvalFromFunctionName = {
440
+ ScriptGetEvalFromFunctionName,
441
+ IllegalSetter,
442
+ 0
443
+ };
444
+
445
+
446
+ //
447
+ // Accessors::FunctionPrototype
448
+ //
449
+
450
+
451
+ MaybeObject* Accessors::FunctionGetPrototype(Object* object, void*) {
452
+ Heap* heap = Isolate::Current()->heap();
453
+ bool found_it = false;
454
+ JSFunction* function = FindInPrototypeChain<JSFunction>(object, &found_it);
455
+ if (!found_it) return heap->undefined_value();
456
+ while (!function->should_have_prototype()) {
457
+ found_it = false;
458
+ function = FindInPrototypeChain<JSFunction>(object->GetPrototype(),
459
+ &found_it);
460
+ // There has to be one because we hit the getter.
461
+ ASSERT(found_it);
462
+ }
463
+
464
+ if (!function->has_prototype()) {
465
+ Object* prototype;
466
+ { MaybeObject* maybe_prototype = heap->AllocateFunctionPrototype(function);
467
+ if (!maybe_prototype->ToObject(&prototype)) return maybe_prototype;
468
+ }
469
+ Object* result;
470
+ { MaybeObject* maybe_result = function->SetPrototype(prototype);
471
+ if (!maybe_result->ToObject(&result)) return maybe_result;
472
+ }
473
+ }
474
+ return function->prototype();
475
+ }
476
+
477
+
478
+ MaybeObject* Accessors::FunctionSetPrototype(JSObject* object,
479
+ Object* value,
480
+ void*) {
481
+ Heap* heap = object->GetHeap();
482
+ bool found_it = false;
483
+ JSFunction* function = FindInPrototypeChain<JSFunction>(object, &found_it);
484
+ if (!found_it) return heap->undefined_value();
485
+ if (!function->should_have_prototype()) {
486
+ // Since we hit this accessor, object will have no prototype property.
487
+ return object->SetLocalPropertyIgnoreAttributes(heap->prototype_symbol(),
488
+ value,
489
+ NONE);
490
+ }
491
+
492
+ if (function->has_initial_map()) {
493
+ // If the function has allocated the initial map
494
+ // replace it with a copy containing the new prototype.
495
+ Object* new_map;
496
+ { MaybeObject* maybe_new_map =
497
+ function->initial_map()->CopyDropTransitions();
498
+ if (!maybe_new_map->ToObject(&new_map)) return maybe_new_map;
499
+ }
500
+ function->set_initial_map(Map::cast(new_map));
501
+ }
502
+ Object* prototype;
503
+ { MaybeObject* maybe_prototype = function->SetPrototype(value);
504
+ if (!maybe_prototype->ToObject(&prototype)) return maybe_prototype;
505
+ }
506
+ ASSERT(function->prototype() == value);
507
+ return function;
508
+ }
509
+
510
+
511
+ const AccessorDescriptor Accessors::FunctionPrototype = {
512
+ FunctionGetPrototype,
513
+ FunctionSetPrototype,
514
+ 0
515
+ };
516
+
517
+
518
+ //
519
+ // Accessors::FunctionLength
520
+ //
521
+
522
+
523
+ MaybeObject* Accessors::FunctionGetLength(Object* object, void*) {
524
+ bool found_it = false;
525
+ JSFunction* function = FindInPrototypeChain<JSFunction>(object, &found_it);
526
+ if (!found_it) return Smi::FromInt(0);
527
+ // Check if already compiled.
528
+ if (!function->shared()->is_compiled()) {
529
+ // If the function isn't compiled yet, the length is not computed
530
+ // correctly yet. Compile it now and return the right length.
531
+ HandleScope scope;
532
+ Handle<JSFunction> handle(function);
533
+ if (!CompileLazy(handle, KEEP_EXCEPTION)) return Failure::Exception();
534
+ return Smi::FromInt(handle->shared()->length());
535
+ } else {
536
+ return Smi::FromInt(function->shared()->length());
537
+ }
538
+ }
539
+
540
+
541
+ const AccessorDescriptor Accessors::FunctionLength = {
542
+ FunctionGetLength,
543
+ ReadOnlySetAccessor,
544
+ 0
545
+ };
546
+
547
+
548
+ //
549
+ // Accessors::FunctionName
550
+ //
551
+
552
+
553
+ MaybeObject* Accessors::FunctionGetName(Object* object, void*) {
554
+ bool found_it = false;
555
+ JSFunction* holder = FindInPrototypeChain<JSFunction>(object, &found_it);
556
+ if (!found_it) return HEAP->undefined_value();
557
+ return holder->shared()->name();
558
+ }
559
+
560
+
561
+ const AccessorDescriptor Accessors::FunctionName = {
562
+ FunctionGetName,
563
+ ReadOnlySetAccessor,
564
+ 0
565
+ };
566
+
567
+
568
+ //
569
+ // Accessors::FunctionArguments
570
+ //
571
+
572
+
573
+ static MaybeObject* ConstructArgumentsObjectForInlinedFunction(
574
+ JavaScriptFrame* frame,
575
+ Handle<JSFunction> inlined_function,
576
+ int inlined_frame_index) {
577
+ Factory* factory = Isolate::Current()->factory();
578
+ int args_count = inlined_function->shared()->formal_parameter_count();
579
+ ScopedVector<SlotRef> args_slots(args_count);
580
+ SlotRef::ComputeSlotMappingForArguments(frame,
581
+ inlined_frame_index,
582
+ &args_slots);
583
+ Handle<JSObject> arguments =
584
+ factory->NewArgumentsObject(inlined_function, args_count);
585
+ Handle<FixedArray> array = factory->NewFixedArray(args_count);
586
+ for (int i = 0; i < args_count; ++i) {
587
+ Handle<Object> value = args_slots[i].GetValue();
588
+ array->set(i, *value);
589
+ }
590
+ arguments->set_elements(*array);
591
+
592
+ // Return the freshly allocated arguments object.
593
+ return *arguments;
594
+ }
595
+
596
+
597
+ MaybeObject* Accessors::FunctionGetArguments(Object* object, void*) {
598
+ Isolate* isolate = Isolate::Current();
599
+ HandleScope scope(isolate);
600
+ bool found_it = false;
601
+ JSFunction* holder = FindInPrototypeChain<JSFunction>(object, &found_it);
602
+ if (!found_it) return isolate->heap()->undefined_value();
603
+ Handle<JSFunction> function(holder, isolate);
604
+
605
+ // Find the top invocation of the function by traversing frames.
606
+ List<JSFunction*> functions(2);
607
+ for (JavaScriptFrameIterator it(isolate); !it.done(); it.Advance()) {
608
+ JavaScriptFrame* frame = it.frame();
609
+ frame->GetFunctions(&functions);
610
+ for (int i = functions.length() - 1; i >= 0; i--) {
611
+ // Skip all frames that aren't invocations of the given function.
612
+ if (functions[i] != *function) continue;
613
+
614
+ if (i > 0) {
615
+ // The function in question was inlined. Inlined functions have the
616
+ // correct number of arguments and no allocated arguments object, so
617
+ // we can construct a fresh one by interpreting the function's
618
+ // deoptimization input data.
619
+ return ConstructArgumentsObjectForInlinedFunction(frame, function, i);
620
+ }
621
+
622
+ if (!frame->is_optimized()) {
623
+ // If there is an arguments variable in the stack, we return that.
624
+ Handle<SerializedScopeInfo> info(function->shared()->scope_info());
625
+ int index = info->StackSlotIndex(isolate->heap()->arguments_symbol());
626
+ if (index >= 0) {
627
+ Handle<Object> arguments(frame->GetExpression(index), isolate);
628
+ if (!arguments->IsArgumentsMarker()) return *arguments;
629
+ }
630
+ }
631
+
632
+ // If there is no arguments variable in the stack or we have an
633
+ // optimized frame, we find the frame that holds the actual arguments
634
+ // passed to the function.
635
+ it.AdvanceToArgumentsFrame();
636
+ frame = it.frame();
637
+
638
+ // Get the number of arguments and construct an arguments object
639
+ // mirror for the right frame.
640
+ const int length = frame->ComputeParametersCount();
641
+ Handle<JSObject> arguments = isolate->factory()->NewArgumentsObject(
642
+ function, length);
643
+ Handle<FixedArray> array = isolate->factory()->NewFixedArray(length);
644
+
645
+ // Copy the parameters to the arguments object.
646
+ ASSERT(array->length() == length);
647
+ for (int i = 0; i < length; i++) array->set(i, frame->GetParameter(i));
648
+ arguments->set_elements(*array);
649
+
650
+ // Return the freshly allocated arguments object.
651
+ return *arguments;
652
+ }
653
+ functions.Rewind(0);
654
+ }
655
+
656
+ // No frame corresponding to the given function found. Return null.
657
+ return isolate->heap()->null_value();
658
+ }
659
+
660
+
661
+ const AccessorDescriptor Accessors::FunctionArguments = {
662
+ FunctionGetArguments,
663
+ ReadOnlySetAccessor,
664
+ 0
665
+ };
666
+
667
+
668
+ //
669
+ // Accessors::FunctionCaller
670
+ //
671
+
672
+
673
+ static MaybeObject* CheckNonStrictCallerOrThrow(
674
+ Isolate* isolate,
675
+ JSFunction* caller) {
676
+ DisableAssertNoAllocation enable_allocation;
677
+ if (caller->shared()->strict_mode()) {
678
+ return isolate->Throw(
679
+ *isolate->factory()->NewTypeError("strict_caller",
680
+ HandleVector<Object>(NULL, 0)));
681
+ }
682
+ return caller;
683
+ }
684
+
685
+
686
+ MaybeObject* Accessors::FunctionGetCaller(Object* object, void*) {
687
+ Isolate* isolate = Isolate::Current();
688
+ HandleScope scope(isolate);
689
+ AssertNoAllocation no_alloc;
690
+ bool found_it = false;
691
+ JSFunction* holder = FindInPrototypeChain<JSFunction>(object, &found_it);
692
+ if (!found_it) return isolate->heap()->undefined_value();
693
+ Handle<JSFunction> function(holder, isolate);
694
+
695
+ List<JSFunction*> functions(2);
696
+ for (JavaScriptFrameIterator it(isolate); !it.done(); it.Advance()) {
697
+ JavaScriptFrame* frame = it.frame();
698
+ frame->GetFunctions(&functions);
699
+ for (int i = functions.length() - 1; i >= 0; i--) {
700
+ if (functions[i] == *function) {
701
+ // Once we have found the frame, we need to go to the caller
702
+ // frame. This may require skipping through a number of top-level
703
+ // frames, e.g. frames for scripts not functions.
704
+ if (i > 0) {
705
+ ASSERT(!functions[i - 1]->shared()->is_toplevel());
706
+ return CheckNonStrictCallerOrThrow(isolate, functions[i - 1]);
707
+ } else {
708
+ for (it.Advance(); !it.done(); it.Advance()) {
709
+ frame = it.frame();
710
+ functions.Rewind(0);
711
+ frame->GetFunctions(&functions);
712
+ if (!functions.last()->shared()->is_toplevel()) {
713
+ return CheckNonStrictCallerOrThrow(isolate, functions.last());
714
+ }
715
+ ASSERT(functions.length() == 1);
716
+ }
717
+ if (it.done()) return isolate->heap()->null_value();
718
+ break;
719
+ }
720
+ }
721
+ }
722
+ functions.Rewind(0);
723
+ }
724
+
725
+ // No frame corresponding to the given function found. Return null.
726
+ return isolate->heap()->null_value();
727
+ }
728
+
729
+
730
+ const AccessorDescriptor Accessors::FunctionCaller = {
731
+ FunctionGetCaller,
732
+ ReadOnlySetAccessor,
733
+ 0
734
+ };
735
+
736
+
737
+ //
738
+ // Accessors::ObjectPrototype
739
+ //
740
+
741
+
742
+ MaybeObject* Accessors::ObjectGetPrototype(Object* receiver, void*) {
743
+ Object* current = receiver->GetPrototype();
744
+ while (current->IsJSObject() &&
745
+ JSObject::cast(current)->map()->is_hidden_prototype()) {
746
+ current = current->GetPrototype();
747
+ }
748
+ return current;
749
+ }
750
+
751
+
752
+ MaybeObject* Accessors::ObjectSetPrototype(JSObject* receiver,
753
+ Object* value,
754
+ void*) {
755
+ const bool skip_hidden_prototypes = true;
756
+ // To be consistent with other Set functions, return the value.
757
+ return receiver->SetPrototype(value, skip_hidden_prototypes);
758
+ }
759
+
760
+
761
+ const AccessorDescriptor Accessors::ObjectPrototype = {
762
+ ObjectGetPrototype,
763
+ ObjectSetPrototype,
764
+ 0
765
+ };
766
+
767
+ } } // namespace v8::internal