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,85 @@
1
+ // Copyright 2010 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_DTOA_H_
29
+ #define V8_DTOA_H_
30
+
31
+ namespace v8 {
32
+ namespace internal {
33
+
34
+ enum DtoaMode {
35
+ // Return the shortest correct representation.
36
+ // For example the output of 0.299999999999999988897 is (the less accurate but
37
+ // correct) 0.3.
38
+ DTOA_SHORTEST,
39
+ // Return a fixed number of digits after the decimal point.
40
+ // For instance fixed(0.1, 4) becomes 0.1000
41
+ // If the input number is big, the output will be big.
42
+ DTOA_FIXED,
43
+ // Return a fixed number of digits, no matter what the exponent is.
44
+ DTOA_PRECISION
45
+ };
46
+
47
+ // The maximal length of digits a double can have in base 10.
48
+ // Note that DoubleToAscii null-terminates its input. So the given buffer should
49
+ // be at least kBase10MaximalLength + 1 characters long.
50
+ static const int kBase10MaximalLength = 17;
51
+
52
+ // Converts the given double 'v' to ascii.
53
+ // The result should be interpreted as buffer * 10^(point-length).
54
+ //
55
+ // The output depends on the given mode:
56
+ // - SHORTEST: produce the least amount of digits for which the internal
57
+ // identity requirement is still satisfied. If the digits are printed
58
+ // (together with the correct exponent) then reading this number will give
59
+ // 'v' again. The buffer will choose the representation that is closest to
60
+ // 'v'. If there are two at the same distance, than the one farther away
61
+ // from 0 is chosen (halfway cases - ending with 5 - are rounded up).
62
+ // In this mode the 'requested_digits' parameter is ignored.
63
+ // - FIXED: produces digits necessary to print a given number with
64
+ // 'requested_digits' digits after the decimal point. The produced digits
65
+ // might be too short in which case the caller has to fill the gaps with '0's.
66
+ // Example: toFixed(0.001, 5) is allowed to return buffer="1", point=-2.
67
+ // Halfway cases are rounded towards +/-Infinity (away from 0). The call
68
+ // toFixed(0.15, 2) thus returns buffer="2", point=0.
69
+ // The returned buffer may contain digits that would be truncated from the
70
+ // shortest representation of the input.
71
+ // - PRECISION: produces 'requested_digits' where the first digit is not '0'.
72
+ // Even though the length of produced digits usually equals
73
+ // 'requested_digits', the function is allowed to return fewer digits, in
74
+ // which case the caller has to fill the missing digits with '0's.
75
+ // Halfway cases are again rounded away from 0.
76
+ // 'DoubleToAscii' expects the given buffer to be big enough to hold all digits
77
+ // and a terminating null-character. In SHORTEST-mode it expects a buffer of
78
+ // at least kBase10MaximalLength + 1. Otherwise, the size of the output is
79
+ // limited to requested_digits digits plus the null terminator.
80
+ void DoubleToAscii(double v, DtoaMode mode, int requested_digits,
81
+ Vector<char> buffer, int* sign, int* length, int* point);
82
+
83
+ } } // namespace v8::internal
84
+
85
+ #endif // V8_DTOA_H_
@@ -0,0 +1,849 @@
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 <stdlib.h>
29
+
30
+ #include "v8.h"
31
+
32
+ #include "api.h"
33
+ #include "bootstrapper.h"
34
+ #include "codegen.h"
35
+ #include "debug.h"
36
+ #include "runtime-profiler.h"
37
+ #include "simulator.h"
38
+ #include "v8threads.h"
39
+ #include "vm-state-inl.h"
40
+
41
+ namespace v8 {
42
+ namespace internal {
43
+
44
+
45
+ StackGuard::StackGuard()
46
+ : isolate_(NULL) {
47
+ }
48
+
49
+
50
+ void StackGuard::set_interrupt_limits(const ExecutionAccess& lock) {
51
+ ASSERT(isolate_ != NULL);
52
+ // Ignore attempts to interrupt when interrupts are postponed.
53
+ if (should_postpone_interrupts(lock)) return;
54
+ thread_local_.jslimit_ = kInterruptLimit;
55
+ thread_local_.climit_ = kInterruptLimit;
56
+ isolate_->heap()->SetStackLimits();
57
+ }
58
+
59
+
60
+ void StackGuard::reset_limits(const ExecutionAccess& lock) {
61
+ ASSERT(isolate_ != NULL);
62
+ thread_local_.jslimit_ = thread_local_.real_jslimit_;
63
+ thread_local_.climit_ = thread_local_.real_climit_;
64
+ isolate_->heap()->SetStackLimits();
65
+ }
66
+
67
+
68
+ static Handle<Object> Invoke(bool construct,
69
+ Handle<JSFunction> func,
70
+ Handle<Object> receiver,
71
+ int argc,
72
+ Object*** args,
73
+ bool* has_pending_exception) {
74
+ Isolate* isolate = func->GetIsolate();
75
+
76
+ // Entering JavaScript.
77
+ VMState state(isolate, JS);
78
+
79
+ // Placeholder for return value.
80
+ MaybeObject* value = reinterpret_cast<Object*>(kZapValue);
81
+
82
+ typedef Object* (*JSEntryFunction)(
83
+ byte* entry,
84
+ Object* function,
85
+ Object* receiver,
86
+ int argc,
87
+ Object*** args);
88
+
89
+ Handle<Code> code;
90
+ if (construct) {
91
+ JSConstructEntryStub stub;
92
+ code = stub.GetCode();
93
+ } else {
94
+ JSEntryStub stub;
95
+ code = stub.GetCode();
96
+ }
97
+
98
+ // Convert calls on global objects to be calls on the global
99
+ // receiver instead to avoid having a 'this' pointer which refers
100
+ // directly to a global object.
101
+ if (receiver->IsGlobalObject()) {
102
+ Handle<GlobalObject> global = Handle<GlobalObject>::cast(receiver);
103
+ receiver = Handle<JSObject>(global->global_receiver());
104
+ }
105
+
106
+ // Make sure that the global object of the context we're about to
107
+ // make the current one is indeed a global object.
108
+ ASSERT(func->context()->global()->IsGlobalObject());
109
+
110
+ {
111
+ // Save and restore context around invocation and block the
112
+ // allocation of handles without explicit handle scopes.
113
+ SaveContext save(isolate);
114
+ NoHandleAllocation na;
115
+ JSEntryFunction entry = FUNCTION_CAST<JSEntryFunction>(code->entry());
116
+
117
+ // Call the function through the right JS entry stub.
118
+ byte* entry_address = func->code()->entry();
119
+ JSFunction* function = *func;
120
+ Object* receiver_pointer = *receiver;
121
+ value = CALL_GENERATED_CODE(entry, entry_address, function,
122
+ receiver_pointer, argc, args);
123
+ }
124
+
125
+ #ifdef DEBUG
126
+ value->Verify();
127
+ #endif
128
+
129
+ // Update the pending exception flag and return the value.
130
+ *has_pending_exception = value->IsException();
131
+ ASSERT(*has_pending_exception == Isolate::Current()->has_pending_exception());
132
+ if (*has_pending_exception) {
133
+ isolate->ReportPendingMessages();
134
+ if (isolate->pending_exception() == Failure::OutOfMemoryException()) {
135
+ if (!isolate->handle_scope_implementer()->ignore_out_of_memory()) {
136
+ V8::FatalProcessOutOfMemory("JS", true);
137
+ }
138
+ }
139
+ return Handle<Object>();
140
+ } else {
141
+ isolate->clear_pending_message();
142
+ }
143
+
144
+ return Handle<Object>(value->ToObjectUnchecked(), isolate);
145
+ }
146
+
147
+
148
+ Handle<Object> Execution::Call(Handle<Object> callable,
149
+ Handle<Object> receiver,
150
+ int argc,
151
+ Object*** args,
152
+ bool* pending_exception) {
153
+ if (!callable->IsJSFunction()) {
154
+ callable = TryGetFunctionDelegate(callable, pending_exception);
155
+ if (*pending_exception) return callable;
156
+ }
157
+ Handle<JSFunction> func = Handle<JSFunction>::cast(callable);
158
+ return Invoke(false, func, receiver, argc, args, pending_exception);
159
+ }
160
+
161
+
162
+ Handle<Object> Execution::New(Handle<JSFunction> func, int argc,
163
+ Object*** args, bool* pending_exception) {
164
+ return Invoke(true, func, Isolate::Current()->global(), argc, args,
165
+ pending_exception);
166
+ }
167
+
168
+
169
+ Handle<Object> Execution::TryCall(Handle<JSFunction> func,
170
+ Handle<Object> receiver,
171
+ int argc,
172
+ Object*** args,
173
+ bool* caught_exception) {
174
+ // Enter a try-block while executing the JavaScript code. To avoid
175
+ // duplicate error printing it must be non-verbose. Also, to avoid
176
+ // creating message objects during stack overflow we shouldn't
177
+ // capture messages.
178
+ v8::TryCatch catcher;
179
+ catcher.SetVerbose(false);
180
+ catcher.SetCaptureMessage(false);
181
+
182
+ Handle<Object> result = Invoke(false, func, receiver, argc, args,
183
+ caught_exception);
184
+
185
+ if (*caught_exception) {
186
+ ASSERT(catcher.HasCaught());
187
+ Isolate* isolate = Isolate::Current();
188
+ ASSERT(isolate->has_pending_exception());
189
+ ASSERT(isolate->external_caught_exception());
190
+ if (isolate->pending_exception() ==
191
+ isolate->heap()->termination_exception()) {
192
+ result = isolate->factory()->termination_exception();
193
+ } else {
194
+ result = v8::Utils::OpenHandle(*catcher.Exception());
195
+ }
196
+ isolate->OptionalRescheduleException(true);
197
+ }
198
+
199
+ ASSERT(!Isolate::Current()->has_pending_exception());
200
+ ASSERT(!Isolate::Current()->external_caught_exception());
201
+ return result;
202
+ }
203
+
204
+
205
+ Handle<Object> Execution::GetFunctionDelegate(Handle<Object> object) {
206
+ ASSERT(!object->IsJSFunction());
207
+ Isolate* isolate = Isolate::Current();
208
+ Factory* factory = isolate->factory();
209
+
210
+ // If you return a function from here, it will be called when an
211
+ // attempt is made to call the given object as a function.
212
+
213
+ // Regular expressions can be called as functions in both Firefox
214
+ // and Safari so we allow it too.
215
+ if (object->IsJSRegExp()) {
216
+ Handle<String> exec = factory->exec_symbol();
217
+ // TODO(lrn): Bug 617. We should use the default function here, not the
218
+ // one on the RegExp object.
219
+ Object* exec_function;
220
+ { MaybeObject* maybe_exec_function = object->GetProperty(*exec);
221
+ // This can lose an exception, but the alternative is to put a failure
222
+ // object in a handle, which is not GC safe.
223
+ if (!maybe_exec_function->ToObject(&exec_function)) {
224
+ return factory->undefined_value();
225
+ }
226
+ }
227
+ return Handle<Object>(exec_function);
228
+ }
229
+
230
+ // Objects created through the API can have an instance-call handler
231
+ // that should be used when calling the object as a function.
232
+ if (object->IsHeapObject() &&
233
+ HeapObject::cast(*object)->map()->has_instance_call_handler()) {
234
+ return Handle<JSFunction>(
235
+ isolate->global_context()->call_as_function_delegate());
236
+ }
237
+
238
+ return factory->undefined_value();
239
+ }
240
+
241
+
242
+ Handle<Object> Execution::TryGetFunctionDelegate(Handle<Object> object,
243
+ bool* has_pending_exception) {
244
+ ASSERT(!object->IsJSFunction());
245
+ Isolate* isolate = Isolate::Current();
246
+
247
+ // Objects created through the API can have an instance-call handler
248
+ // that should be used when calling the object as a function.
249
+ if (object->IsHeapObject() &&
250
+ HeapObject::cast(*object)->map()->has_instance_call_handler()) {
251
+ return Handle<JSFunction>(
252
+ isolate->global_context()->call_as_function_delegate());
253
+ }
254
+
255
+ // If the Object doesn't have an instance-call handler we should
256
+ // throw a non-callable exception.
257
+ i::Handle<i::Object> error_obj = isolate->factory()->NewTypeError(
258
+ "called_non_callable", i::HandleVector<i::Object>(&object, 1));
259
+ isolate->Throw(*error_obj);
260
+ *has_pending_exception = true;
261
+
262
+ return isolate->factory()->undefined_value();
263
+ }
264
+
265
+
266
+ Handle<Object> Execution::GetConstructorDelegate(Handle<Object> object) {
267
+ ASSERT(!object->IsJSFunction());
268
+ Isolate* isolate = Isolate::Current();
269
+
270
+ // If you return a function from here, it will be called when an
271
+ // attempt is made to call the given object as a constructor.
272
+
273
+ // Objects created through the API can have an instance-call handler
274
+ // that should be used when calling the object as a function.
275
+ if (object->IsHeapObject() &&
276
+ HeapObject::cast(*object)->map()->has_instance_call_handler()) {
277
+ return Handle<JSFunction>(
278
+ isolate->global_context()->call_as_constructor_delegate());
279
+ }
280
+
281
+ return isolate->factory()->undefined_value();
282
+ }
283
+
284
+
285
+ Handle<Object> Execution::TryGetConstructorDelegate(
286
+ Handle<Object> object,
287
+ bool* has_pending_exception) {
288
+ ASSERT(!object->IsJSFunction());
289
+ Isolate* isolate = Isolate::Current();
290
+
291
+ // If you return a function from here, it will be called when an
292
+ // attempt is made to call the given object as a constructor.
293
+
294
+ // Objects created through the API can have an instance-call handler
295
+ // that should be used when calling the object as a function.
296
+ if (object->IsHeapObject() &&
297
+ HeapObject::cast(*object)->map()->has_instance_call_handler()) {
298
+ return Handle<JSFunction>(
299
+ isolate->global_context()->call_as_constructor_delegate());
300
+ }
301
+
302
+ // If the Object doesn't have an instance-call handler we should
303
+ // throw a non-callable exception.
304
+ i::Handle<i::Object> error_obj = isolate->factory()->NewTypeError(
305
+ "called_non_callable", i::HandleVector<i::Object>(&object, 1));
306
+ isolate->Throw(*error_obj);
307
+ *has_pending_exception = true;
308
+
309
+ return isolate->factory()->undefined_value();
310
+ }
311
+
312
+
313
+ bool StackGuard::IsStackOverflow() {
314
+ ExecutionAccess access(isolate_);
315
+ return (thread_local_.jslimit_ != kInterruptLimit &&
316
+ thread_local_.climit_ != kInterruptLimit);
317
+ }
318
+
319
+
320
+ void StackGuard::EnableInterrupts() {
321
+ ExecutionAccess access(isolate_);
322
+ if (has_pending_interrupts(access)) {
323
+ set_interrupt_limits(access);
324
+ }
325
+ }
326
+
327
+
328
+ void StackGuard::SetStackLimit(uintptr_t limit) {
329
+ ExecutionAccess access(isolate_);
330
+ // If the current limits are special (eg due to a pending interrupt) then
331
+ // leave them alone.
332
+ uintptr_t jslimit = SimulatorStack::JsLimitFromCLimit(isolate_, limit);
333
+ if (thread_local_.jslimit_ == thread_local_.real_jslimit_) {
334
+ thread_local_.jslimit_ = jslimit;
335
+ }
336
+ if (thread_local_.climit_ == thread_local_.real_climit_) {
337
+ thread_local_.climit_ = limit;
338
+ }
339
+ thread_local_.real_climit_ = limit;
340
+ thread_local_.real_jslimit_ = jslimit;
341
+ }
342
+
343
+
344
+ void StackGuard::DisableInterrupts() {
345
+ ExecutionAccess access(isolate_);
346
+ reset_limits(access);
347
+ }
348
+
349
+
350
+ bool StackGuard::IsInterrupted() {
351
+ ExecutionAccess access(isolate_);
352
+ return thread_local_.interrupt_flags_ & INTERRUPT;
353
+ }
354
+
355
+
356
+ void StackGuard::Interrupt() {
357
+ ExecutionAccess access(isolate_);
358
+ thread_local_.interrupt_flags_ |= INTERRUPT;
359
+ set_interrupt_limits(access);
360
+ }
361
+
362
+
363
+ bool StackGuard::IsPreempted() {
364
+ ExecutionAccess access(isolate_);
365
+ return thread_local_.interrupt_flags_ & PREEMPT;
366
+ }
367
+
368
+
369
+ void StackGuard::Preempt() {
370
+ ExecutionAccess access(isolate_);
371
+ thread_local_.interrupt_flags_ |= PREEMPT;
372
+ set_interrupt_limits(access);
373
+ }
374
+
375
+
376
+ bool StackGuard::IsTerminateExecution() {
377
+ ExecutionAccess access(isolate_);
378
+ return thread_local_.interrupt_flags_ & TERMINATE;
379
+ }
380
+
381
+
382
+ void StackGuard::TerminateExecution() {
383
+ ExecutionAccess access(isolate_);
384
+ thread_local_.interrupt_flags_ |= TERMINATE;
385
+ set_interrupt_limits(access);
386
+ }
387
+
388
+
389
+ bool StackGuard::IsRuntimeProfilerTick() {
390
+ ExecutionAccess access(isolate_);
391
+ return thread_local_.interrupt_flags_ & RUNTIME_PROFILER_TICK;
392
+ }
393
+
394
+
395
+ void StackGuard::RequestRuntimeProfilerTick() {
396
+ // Ignore calls if we're not optimizing or if we can't get the lock.
397
+ if (FLAG_opt && ExecutionAccess::TryLock(isolate_)) {
398
+ thread_local_.interrupt_flags_ |= RUNTIME_PROFILER_TICK;
399
+ if (thread_local_.postpone_interrupts_nesting_ == 0) {
400
+ thread_local_.jslimit_ = thread_local_.climit_ = kInterruptLimit;
401
+ isolate_->heap()->SetStackLimits();
402
+ }
403
+ ExecutionAccess::Unlock(isolate_);
404
+ }
405
+ }
406
+
407
+
408
+ #ifdef ENABLE_DEBUGGER_SUPPORT
409
+ bool StackGuard::IsDebugBreak() {
410
+ ExecutionAccess access(isolate_);
411
+ return thread_local_.interrupt_flags_ & DEBUGBREAK;
412
+ }
413
+
414
+
415
+ void StackGuard::DebugBreak() {
416
+ ExecutionAccess access(isolate_);
417
+ thread_local_.interrupt_flags_ |= DEBUGBREAK;
418
+ set_interrupt_limits(access);
419
+ }
420
+
421
+
422
+ bool StackGuard::IsDebugCommand() {
423
+ ExecutionAccess access(isolate_);
424
+ return thread_local_.interrupt_flags_ & DEBUGCOMMAND;
425
+ }
426
+
427
+
428
+ void StackGuard::DebugCommand() {
429
+ if (FLAG_debugger_auto_break) {
430
+ ExecutionAccess access(isolate_);
431
+ thread_local_.interrupt_flags_ |= DEBUGCOMMAND;
432
+ set_interrupt_limits(access);
433
+ }
434
+ }
435
+ #endif
436
+
437
+ void StackGuard::Continue(InterruptFlag after_what) {
438
+ ExecutionAccess access(isolate_);
439
+ thread_local_.interrupt_flags_ &= ~static_cast<int>(after_what);
440
+ if (!should_postpone_interrupts(access) && !has_pending_interrupts(access)) {
441
+ reset_limits(access);
442
+ }
443
+ }
444
+
445
+
446
+ char* StackGuard::ArchiveStackGuard(char* to) {
447
+ ExecutionAccess access(isolate_);
448
+ memcpy(to, reinterpret_cast<char*>(&thread_local_), sizeof(ThreadLocal));
449
+ ThreadLocal blank;
450
+
451
+ // Set the stack limits using the old thread_local_.
452
+ // TODO(isolates): This was the old semantics of constructing a ThreadLocal
453
+ // (as the ctor called SetStackLimits, which looked at the
454
+ // current thread_local_ from StackGuard)-- but is this
455
+ // really what was intended?
456
+ isolate_->heap()->SetStackLimits();
457
+ thread_local_ = blank;
458
+
459
+ return to + sizeof(ThreadLocal);
460
+ }
461
+
462
+
463
+ char* StackGuard::RestoreStackGuard(char* from) {
464
+ ExecutionAccess access(isolate_);
465
+ memcpy(reinterpret_cast<char*>(&thread_local_), from, sizeof(ThreadLocal));
466
+ isolate_->heap()->SetStackLimits();
467
+ return from + sizeof(ThreadLocal);
468
+ }
469
+
470
+
471
+ void StackGuard::FreeThreadResources() {
472
+ Isolate::CurrentPerIsolateThreadData()->set_stack_limit(
473
+ thread_local_.real_climit_);
474
+ }
475
+
476
+
477
+ void StackGuard::ThreadLocal::Clear() {
478
+ real_jslimit_ = kIllegalLimit;
479
+ jslimit_ = kIllegalLimit;
480
+ real_climit_ = kIllegalLimit;
481
+ climit_ = kIllegalLimit;
482
+ nesting_ = 0;
483
+ postpone_interrupts_nesting_ = 0;
484
+ interrupt_flags_ = 0;
485
+ }
486
+
487
+
488
+ bool StackGuard::ThreadLocal::Initialize(Isolate* isolate) {
489
+ bool should_set_stack_limits = false;
490
+ if (real_climit_ == kIllegalLimit) {
491
+ // Takes the address of the limit variable in order to find out where
492
+ // the top of stack is right now.
493
+ const uintptr_t kLimitSize = FLAG_stack_size * KB;
494
+ uintptr_t limit = reinterpret_cast<uintptr_t>(&limit) - kLimitSize;
495
+ ASSERT(reinterpret_cast<uintptr_t>(&limit) > kLimitSize);
496
+ real_jslimit_ = SimulatorStack::JsLimitFromCLimit(isolate, limit);
497
+ jslimit_ = SimulatorStack::JsLimitFromCLimit(isolate, limit);
498
+ real_climit_ = limit;
499
+ climit_ = limit;
500
+ should_set_stack_limits = true;
501
+ }
502
+ nesting_ = 0;
503
+ postpone_interrupts_nesting_ = 0;
504
+ interrupt_flags_ = 0;
505
+ return should_set_stack_limits;
506
+ }
507
+
508
+
509
+ void StackGuard::ClearThread(const ExecutionAccess& lock) {
510
+ thread_local_.Clear();
511
+ isolate_->heap()->SetStackLimits();
512
+ }
513
+
514
+
515
+ void StackGuard::InitThread(const ExecutionAccess& lock) {
516
+ if (thread_local_.Initialize(isolate_)) isolate_->heap()->SetStackLimits();
517
+ Isolate::PerIsolateThreadData* per_thread =
518
+ isolate_->FindOrAllocatePerThreadDataForThisThread();
519
+ uintptr_t stored_limit = per_thread->stack_limit();
520
+ // You should hold the ExecutionAccess lock when you call this.
521
+ if (stored_limit != 0) {
522
+ StackGuard::SetStackLimit(stored_limit);
523
+ }
524
+ }
525
+
526
+
527
+ // --- C a l l s t o n a t i v e s ---
528
+
529
+ #define RETURN_NATIVE_CALL(name, argc, argv, has_pending_exception) \
530
+ do { \
531
+ Isolate* isolate = Isolate::Current(); \
532
+ Object** args[argc] = argv; \
533
+ ASSERT(has_pending_exception != NULL); \
534
+ return Call(isolate->name##_fun(), \
535
+ isolate->js_builtins_object(), argc, args, \
536
+ has_pending_exception); \
537
+ } while (false)
538
+
539
+
540
+ Handle<Object> Execution::ToBoolean(Handle<Object> obj) {
541
+ // See the similar code in runtime.js:ToBoolean.
542
+ if (obj->IsBoolean()) return obj;
543
+ bool result = true;
544
+ if (obj->IsString()) {
545
+ result = Handle<String>::cast(obj)->length() != 0;
546
+ } else if (obj->IsNull() || obj->IsUndefined()) {
547
+ result = false;
548
+ } else if (obj->IsNumber()) {
549
+ double value = obj->Number();
550
+ result = !((value == 0) || isnan(value));
551
+ }
552
+ return Handle<Object>(HEAP->ToBoolean(result));
553
+ }
554
+
555
+
556
+ Handle<Object> Execution::ToNumber(Handle<Object> obj, bool* exc) {
557
+ RETURN_NATIVE_CALL(to_number, 1, { obj.location() }, exc);
558
+ }
559
+
560
+
561
+ Handle<Object> Execution::ToString(Handle<Object> obj, bool* exc) {
562
+ RETURN_NATIVE_CALL(to_string, 1, { obj.location() }, exc);
563
+ }
564
+
565
+
566
+ Handle<Object> Execution::ToDetailString(Handle<Object> obj, bool* exc) {
567
+ RETURN_NATIVE_CALL(to_detail_string, 1, { obj.location() }, exc);
568
+ }
569
+
570
+
571
+ Handle<Object> Execution::ToObject(Handle<Object> obj, bool* exc) {
572
+ if (obj->IsJSObject()) return obj;
573
+ RETURN_NATIVE_CALL(to_object, 1, { obj.location() }, exc);
574
+ }
575
+
576
+
577
+ Handle<Object> Execution::ToInteger(Handle<Object> obj, bool* exc) {
578
+ RETURN_NATIVE_CALL(to_integer, 1, { obj.location() }, exc);
579
+ }
580
+
581
+
582
+ Handle<Object> Execution::ToUint32(Handle<Object> obj, bool* exc) {
583
+ RETURN_NATIVE_CALL(to_uint32, 1, { obj.location() }, exc);
584
+ }
585
+
586
+
587
+ Handle<Object> Execution::ToInt32(Handle<Object> obj, bool* exc) {
588
+ RETURN_NATIVE_CALL(to_int32, 1, { obj.location() }, exc);
589
+ }
590
+
591
+
592
+ Handle<Object> Execution::NewDate(double time, bool* exc) {
593
+ Handle<Object> time_obj = FACTORY->NewNumber(time);
594
+ RETURN_NATIVE_CALL(create_date, 1, { time_obj.location() }, exc);
595
+ }
596
+
597
+
598
+ #undef RETURN_NATIVE_CALL
599
+
600
+
601
+ Handle<JSRegExp> Execution::NewJSRegExp(Handle<String> pattern,
602
+ Handle<String> flags,
603
+ bool* exc) {
604
+ Handle<JSFunction> function = Handle<JSFunction>(
605
+ pattern->GetIsolate()->global_context()->regexp_function());
606
+ Handle<Object> re_obj = RegExpImpl::CreateRegExpLiteral(
607
+ function, pattern, flags, exc);
608
+ if (*exc) return Handle<JSRegExp>();
609
+ return Handle<JSRegExp>::cast(re_obj);
610
+ }
611
+
612
+
613
+ Handle<Object> Execution::CharAt(Handle<String> string, uint32_t index) {
614
+ Isolate* isolate = string->GetIsolate();
615
+ Factory* factory = isolate->factory();
616
+
617
+ int int_index = static_cast<int>(index);
618
+ if (int_index < 0 || int_index >= string->length()) {
619
+ return factory->undefined_value();
620
+ }
621
+
622
+ Handle<Object> char_at =
623
+ GetProperty(isolate->js_builtins_object(),
624
+ factory->char_at_symbol());
625
+ if (!char_at->IsJSFunction()) {
626
+ return factory->undefined_value();
627
+ }
628
+
629
+ bool caught_exception;
630
+ Handle<Object> index_object = factory->NewNumberFromInt(int_index);
631
+ Object** index_arg[] = { index_object.location() };
632
+ Handle<Object> result = TryCall(Handle<JSFunction>::cast(char_at),
633
+ string,
634
+ ARRAY_SIZE(index_arg),
635
+ index_arg,
636
+ &caught_exception);
637
+ if (caught_exception) {
638
+ return factory->undefined_value();
639
+ }
640
+ return result;
641
+ }
642
+
643
+
644
+ Handle<JSFunction> Execution::InstantiateFunction(
645
+ Handle<FunctionTemplateInfo> data, bool* exc) {
646
+ Isolate* isolate = data->GetIsolate();
647
+ // Fast case: see if the function has already been instantiated
648
+ int serial_number = Smi::cast(data->serial_number())->value();
649
+ Object* elm =
650
+ isolate->global_context()->function_cache()->
651
+ GetElementNoExceptionThrown(serial_number);
652
+ if (elm->IsJSFunction()) return Handle<JSFunction>(JSFunction::cast(elm));
653
+ // The function has not yet been instantiated in this context; do it.
654
+ Object** args[1] = { Handle<Object>::cast(data).location() };
655
+ Handle<Object> result =
656
+ Call(isolate->instantiate_fun(),
657
+ isolate->js_builtins_object(), 1, args, exc);
658
+ if (*exc) return Handle<JSFunction>::null();
659
+ return Handle<JSFunction>::cast(result);
660
+ }
661
+
662
+
663
+ Handle<JSObject> Execution::InstantiateObject(Handle<ObjectTemplateInfo> data,
664
+ bool* exc) {
665
+ Isolate* isolate = data->GetIsolate();
666
+ if (data->property_list()->IsUndefined() &&
667
+ !data->constructor()->IsUndefined()) {
668
+ // Initialization to make gcc happy.
669
+ Object* result = NULL;
670
+ {
671
+ HandleScope scope(isolate);
672
+ Handle<FunctionTemplateInfo> cons_template =
673
+ Handle<FunctionTemplateInfo>(
674
+ FunctionTemplateInfo::cast(data->constructor()));
675
+ Handle<JSFunction> cons = InstantiateFunction(cons_template, exc);
676
+ if (*exc) return Handle<JSObject>::null();
677
+ Handle<Object> value = New(cons, 0, NULL, exc);
678
+ if (*exc) return Handle<JSObject>::null();
679
+ result = *value;
680
+ }
681
+ ASSERT(!*exc);
682
+ return Handle<JSObject>(JSObject::cast(result));
683
+ } else {
684
+ Object** args[1] = { Handle<Object>::cast(data).location() };
685
+ Handle<Object> result =
686
+ Call(isolate->instantiate_fun(),
687
+ isolate->js_builtins_object(), 1, args, exc);
688
+ if (*exc) return Handle<JSObject>::null();
689
+ return Handle<JSObject>::cast(result);
690
+ }
691
+ }
692
+
693
+
694
+ void Execution::ConfigureInstance(Handle<Object> instance,
695
+ Handle<Object> instance_template,
696
+ bool* exc) {
697
+ Isolate* isolate = Isolate::Current();
698
+ Object** args[2] = { instance.location(), instance_template.location() };
699
+ Execution::Call(isolate->configure_instance_fun(),
700
+ isolate->js_builtins_object(), 2, args, exc);
701
+ }
702
+
703
+
704
+ Handle<String> Execution::GetStackTraceLine(Handle<Object> recv,
705
+ Handle<JSFunction> fun,
706
+ Handle<Object> pos,
707
+ Handle<Object> is_global) {
708
+ Isolate* isolate = fun->GetIsolate();
709
+ const int argc = 4;
710
+ Object** args[argc] = { recv.location(),
711
+ Handle<Object>::cast(fun).location(),
712
+ pos.location(),
713
+ is_global.location() };
714
+ bool caught_exception = false;
715
+ Handle<Object> result =
716
+ TryCall(isolate->get_stack_trace_line_fun(),
717
+ isolate->js_builtins_object(), argc, args,
718
+ &caught_exception);
719
+ if (caught_exception || !result->IsString()) {
720
+ return isolate->factory()->empty_symbol();
721
+ }
722
+
723
+ return Handle<String>::cast(result);
724
+ }
725
+
726
+
727
+ static Object* RuntimePreempt() {
728
+ Isolate* isolate = Isolate::Current();
729
+
730
+ // Clear the preempt request flag.
731
+ isolate->stack_guard()->Continue(PREEMPT);
732
+
733
+ ContextSwitcher::PreemptionReceived();
734
+
735
+ #ifdef ENABLE_DEBUGGER_SUPPORT
736
+ if (isolate->debug()->InDebugger()) {
737
+ // If currently in the debugger don't do any actual preemption but record
738
+ // that preemption occoured while in the debugger.
739
+ isolate->debug()->PreemptionWhileInDebugger();
740
+ } else {
741
+ // Perform preemption.
742
+ v8::Unlocker unlocker(reinterpret_cast<v8::Isolate*>(isolate));
743
+ Thread::YieldCPU();
744
+ }
745
+ #else
746
+ { // NOLINT
747
+ // Perform preemption.
748
+ v8::Unlocker unlocker(reinterpret_cast<v8::Isolate*>(isolate));
749
+ Thread::YieldCPU();
750
+ }
751
+ #endif
752
+
753
+ return isolate->heap()->undefined_value();
754
+ }
755
+
756
+
757
+ #ifdef ENABLE_DEBUGGER_SUPPORT
758
+ Object* Execution::DebugBreakHelper() {
759
+ Isolate* isolate = Isolate::Current();
760
+
761
+ // Just continue if breaks are disabled.
762
+ if (isolate->debug()->disable_break()) {
763
+ return isolate->heap()->undefined_value();
764
+ }
765
+
766
+ // Ignore debug break during bootstrapping.
767
+ if (isolate->bootstrapper()->IsActive()) {
768
+ return isolate->heap()->undefined_value();
769
+ }
770
+
771
+ {
772
+ JavaScriptFrameIterator it(isolate);
773
+ ASSERT(!it.done());
774
+ Object* fun = it.frame()->function();
775
+ if (fun && fun->IsJSFunction()) {
776
+ // Don't stop in builtin functions.
777
+ if (JSFunction::cast(fun)->IsBuiltin()) {
778
+ return isolate->heap()->undefined_value();
779
+ }
780
+ GlobalObject* global = JSFunction::cast(fun)->context()->global();
781
+ // Don't stop in debugger functions.
782
+ if (isolate->debug()->IsDebugGlobal(global)) {
783
+ return isolate->heap()->undefined_value();
784
+ }
785
+ }
786
+ }
787
+
788
+ // Collect the break state before clearing the flags.
789
+ bool debug_command_only =
790
+ isolate->stack_guard()->IsDebugCommand() &&
791
+ !isolate->stack_guard()->IsDebugBreak();
792
+
793
+ // Clear the debug break request flag.
794
+ isolate->stack_guard()->Continue(DEBUGBREAK);
795
+
796
+ ProcessDebugMesssages(debug_command_only);
797
+
798
+ // Return to continue execution.
799
+ return isolate->heap()->undefined_value();
800
+ }
801
+
802
+ void Execution::ProcessDebugMesssages(bool debug_command_only) {
803
+ Isolate* isolate = Isolate::Current();
804
+ // Clear the debug command request flag.
805
+ isolate->stack_guard()->Continue(DEBUGCOMMAND);
806
+
807
+ HandleScope scope(isolate);
808
+ // Enter the debugger. Just continue if we fail to enter the debugger.
809
+ EnterDebugger debugger;
810
+ if (debugger.FailedToEnter()) {
811
+ return;
812
+ }
813
+
814
+ // Notify the debug event listeners. Indicate auto continue if the break was
815
+ // a debug command break.
816
+ isolate->debugger()->OnDebugBreak(isolate->factory()->undefined_value(),
817
+ debug_command_only);
818
+ }
819
+
820
+
821
+ #endif
822
+
823
+ MaybeObject* Execution::HandleStackGuardInterrupt() {
824
+ Isolate* isolate = Isolate::Current();
825
+ StackGuard* stack_guard = isolate->stack_guard();
826
+ isolate->counters()->stack_interrupts()->Increment();
827
+ if (stack_guard->IsRuntimeProfilerTick()) {
828
+ isolate->counters()->runtime_profiler_ticks()->Increment();
829
+ stack_guard->Continue(RUNTIME_PROFILER_TICK);
830
+ isolate->runtime_profiler()->OptimizeNow();
831
+ }
832
+ #ifdef ENABLE_DEBUGGER_SUPPORT
833
+ if (stack_guard->IsDebugBreak() || stack_guard->IsDebugCommand()) {
834
+ DebugBreakHelper();
835
+ }
836
+ #endif
837
+ if (stack_guard->IsPreempted()) RuntimePreempt();
838
+ if (stack_guard->IsTerminateExecution()) {
839
+ stack_guard->Continue(TERMINATE);
840
+ return isolate->TerminateExecution();
841
+ }
842
+ if (stack_guard->IsInterrupted()) {
843
+ stack_guard->Continue(INTERRUPT);
844
+ return isolate->StackOverflow();
845
+ }
846
+ return isolate->heap()->undefined_value();
847
+ }
848
+
849
+ } } // namespace v8::internal