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,203 @@
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
+ // This file is an internal atomic implementation, use atomicops.h instead.
29
+
30
+ #ifndef V8_ATOMICOPS_INTERNALS_X86_MSVC_H_
31
+ #define V8_ATOMICOPS_INTERNALS_X86_MSVC_H_
32
+
33
+ #include "checks.h"
34
+ #include "win32-headers.h"
35
+
36
+ namespace v8 {
37
+ namespace internal {
38
+
39
+ inline Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32* ptr,
40
+ Atomic32 old_value,
41
+ Atomic32 new_value) {
42
+ LONG result = InterlockedCompareExchange(
43
+ reinterpret_cast<volatile LONG*>(ptr),
44
+ static_cast<LONG>(new_value),
45
+ static_cast<LONG>(old_value));
46
+ return static_cast<Atomic32>(result);
47
+ }
48
+
49
+ inline Atomic32 NoBarrier_AtomicExchange(volatile Atomic32* ptr,
50
+ Atomic32 new_value) {
51
+ LONG result = InterlockedExchange(
52
+ reinterpret_cast<volatile LONG*>(ptr),
53
+ static_cast<LONG>(new_value));
54
+ return static_cast<Atomic32>(result);
55
+ }
56
+
57
+ inline Atomic32 Barrier_AtomicIncrement(volatile Atomic32* ptr,
58
+ Atomic32 increment) {
59
+ return InterlockedExchangeAdd(
60
+ reinterpret_cast<volatile LONG*>(ptr),
61
+ static_cast<LONG>(increment)) + increment;
62
+ }
63
+
64
+ inline Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32* ptr,
65
+ Atomic32 increment) {
66
+ return Barrier_AtomicIncrement(ptr, increment);
67
+ }
68
+
69
+ #if !(defined(_MSC_VER) && _MSC_VER >= 1400)
70
+ #error "We require at least vs2005 for MemoryBarrier"
71
+ #endif
72
+ inline void MemoryBarrier() {
73
+ // We use MemoryBarrier from WinNT.h
74
+ ::MemoryBarrier();
75
+ }
76
+
77
+ inline Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr,
78
+ Atomic32 old_value,
79
+ Atomic32 new_value) {
80
+ return NoBarrier_CompareAndSwap(ptr, old_value, new_value);
81
+ }
82
+
83
+ inline Atomic32 Release_CompareAndSwap(volatile Atomic32* ptr,
84
+ Atomic32 old_value,
85
+ Atomic32 new_value) {
86
+ return NoBarrier_CompareAndSwap(ptr, old_value, new_value);
87
+ }
88
+
89
+ inline void NoBarrier_Store(volatile Atomic32* ptr, Atomic32 value) {
90
+ *ptr = value;
91
+ }
92
+
93
+ inline void Acquire_Store(volatile Atomic32* ptr, Atomic32 value) {
94
+ NoBarrier_AtomicExchange(ptr, value);
95
+ // acts as a barrier in this implementation
96
+ }
97
+
98
+ inline void Release_Store(volatile Atomic32* ptr, Atomic32 value) {
99
+ *ptr = value; // works w/o barrier for current Intel chips as of June 2005
100
+ // See comments in Atomic64 version of Release_Store() below.
101
+ }
102
+
103
+ inline Atomic32 NoBarrier_Load(volatile const Atomic32* ptr) {
104
+ return *ptr;
105
+ }
106
+
107
+ inline Atomic32 Acquire_Load(volatile const Atomic32* ptr) {
108
+ Atomic32 value = *ptr;
109
+ return value;
110
+ }
111
+
112
+ inline Atomic32 Release_Load(volatile const Atomic32* ptr) {
113
+ MemoryBarrier();
114
+ return *ptr;
115
+ }
116
+
117
+ #if defined(_WIN64)
118
+
119
+ // 64-bit low-level operations on 64-bit platform.
120
+
121
+ STATIC_ASSERT(sizeof(Atomic64) == sizeof(PVOID));
122
+
123
+ inline Atomic64 NoBarrier_CompareAndSwap(volatile Atomic64* ptr,
124
+ Atomic64 old_value,
125
+ Atomic64 new_value) {
126
+ PVOID result = InterlockedCompareExchangePointer(
127
+ reinterpret_cast<volatile PVOID*>(ptr),
128
+ reinterpret_cast<PVOID>(new_value), reinterpret_cast<PVOID>(old_value));
129
+ return reinterpret_cast<Atomic64>(result);
130
+ }
131
+
132
+ inline Atomic64 NoBarrier_AtomicExchange(volatile Atomic64* ptr,
133
+ Atomic64 new_value) {
134
+ PVOID result = InterlockedExchangePointer(
135
+ reinterpret_cast<volatile PVOID*>(ptr),
136
+ reinterpret_cast<PVOID>(new_value));
137
+ return reinterpret_cast<Atomic64>(result);
138
+ }
139
+
140
+ inline Atomic64 Barrier_AtomicIncrement(volatile Atomic64* ptr,
141
+ Atomic64 increment) {
142
+ return InterlockedExchangeAdd64(
143
+ reinterpret_cast<volatile LONGLONG*>(ptr),
144
+ static_cast<LONGLONG>(increment)) + increment;
145
+ }
146
+
147
+ inline Atomic64 NoBarrier_AtomicIncrement(volatile Atomic64* ptr,
148
+ Atomic64 increment) {
149
+ return Barrier_AtomicIncrement(ptr, increment);
150
+ }
151
+
152
+ inline void NoBarrier_Store(volatile Atomic64* ptr, Atomic64 value) {
153
+ *ptr = value;
154
+ }
155
+
156
+ inline void Acquire_Store(volatile Atomic64* ptr, Atomic64 value) {
157
+ NoBarrier_AtomicExchange(ptr, value);
158
+ // acts as a barrier in this implementation
159
+ }
160
+
161
+ inline void Release_Store(volatile Atomic64* ptr, Atomic64 value) {
162
+ *ptr = value; // works w/o barrier for current Intel chips as of June 2005
163
+
164
+ // When new chips come out, check:
165
+ // IA-32 Intel Architecture Software Developer's Manual, Volume 3:
166
+ // System Programming Guide, Chatper 7: Multiple-processor management,
167
+ // Section 7.2, Memory Ordering.
168
+ // Last seen at:
169
+ // http://developer.intel.com/design/pentium4/manuals/index_new.htm
170
+ }
171
+
172
+ inline Atomic64 NoBarrier_Load(volatile const Atomic64* ptr) {
173
+ return *ptr;
174
+ }
175
+
176
+ inline Atomic64 Acquire_Load(volatile const Atomic64* ptr) {
177
+ Atomic64 value = *ptr;
178
+ return value;
179
+ }
180
+
181
+ inline Atomic64 Release_Load(volatile const Atomic64* ptr) {
182
+ MemoryBarrier();
183
+ return *ptr;
184
+ }
185
+
186
+ inline Atomic64 Acquire_CompareAndSwap(volatile Atomic64* ptr,
187
+ Atomic64 old_value,
188
+ Atomic64 new_value) {
189
+ return NoBarrier_CompareAndSwap(ptr, old_value, new_value);
190
+ }
191
+
192
+ inline Atomic64 Release_CompareAndSwap(volatile Atomic64* ptr,
193
+ Atomic64 old_value,
194
+ Atomic64 new_value) {
195
+ return NoBarrier_CompareAndSwap(ptr, old_value, new_value);
196
+ }
197
+
198
+
199
+ #endif // defined(_WIN64)
200
+
201
+ } } // namespace v8::internal
202
+
203
+ #endif // V8_ATOMICOPS_INTERNALS_X86_MSVC_H_
@@ -0,0 +1,655 @@
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
+ #include <math.h>
29
+
30
+ #include "v8.h"
31
+ #include "bignum-dtoa.h"
32
+
33
+ #include "bignum.h"
34
+ #include "double.h"
35
+
36
+ namespace v8 {
37
+ namespace internal {
38
+
39
+ static int NormalizedExponent(uint64_t significand, int exponent) {
40
+ ASSERT(significand != 0);
41
+ while ((significand & Double::kHiddenBit) == 0) {
42
+ significand = significand << 1;
43
+ exponent = exponent - 1;
44
+ }
45
+ return exponent;
46
+ }
47
+
48
+
49
+ // Forward declarations:
50
+ // Returns an estimation of k such that 10^(k-1) <= v < 10^k.
51
+ static int EstimatePower(int exponent);
52
+ // Computes v / 10^estimated_power exactly, as a ratio of two bignums, numerator
53
+ // and denominator.
54
+ static void InitialScaledStartValues(double v,
55
+ int estimated_power,
56
+ bool need_boundary_deltas,
57
+ Bignum* numerator,
58
+ Bignum* denominator,
59
+ Bignum* delta_minus,
60
+ Bignum* delta_plus);
61
+ // Multiplies numerator/denominator so that its values lies in the range 1-10.
62
+ // Returns decimal_point s.t.
63
+ // v = numerator'/denominator' * 10^(decimal_point-1)
64
+ // where numerator' and denominator' are the values of numerator and
65
+ // denominator after the call to this function.
66
+ static void FixupMultiply10(int estimated_power, bool is_even,
67
+ int* decimal_point,
68
+ Bignum* numerator, Bignum* denominator,
69
+ Bignum* delta_minus, Bignum* delta_plus);
70
+ // Generates digits from the left to the right and stops when the generated
71
+ // digits yield the shortest decimal representation of v.
72
+ static void GenerateShortestDigits(Bignum* numerator, Bignum* denominator,
73
+ Bignum* delta_minus, Bignum* delta_plus,
74
+ bool is_even,
75
+ Vector<char> buffer, int* length);
76
+ // Generates 'requested_digits' after the decimal point.
77
+ static void BignumToFixed(int requested_digits, int* decimal_point,
78
+ Bignum* numerator, Bignum* denominator,
79
+ Vector<char>(buffer), int* length);
80
+ // Generates 'count' digits of numerator/denominator.
81
+ // Once 'count' digits have been produced rounds the result depending on the
82
+ // remainder (remainders of exactly .5 round upwards). Might update the
83
+ // decimal_point when rounding up (for example for 0.9999).
84
+ static void GenerateCountedDigits(int count, int* decimal_point,
85
+ Bignum* numerator, Bignum* denominator,
86
+ Vector<char>(buffer), int* length);
87
+
88
+
89
+ void BignumDtoa(double v, BignumDtoaMode mode, int requested_digits,
90
+ Vector<char> buffer, int* length, int* decimal_point) {
91
+ ASSERT(v > 0);
92
+ ASSERT(!Double(v).IsSpecial());
93
+ uint64_t significand = Double(v).Significand();
94
+ bool is_even = (significand & 1) == 0;
95
+ int exponent = Double(v).Exponent();
96
+ int normalized_exponent = NormalizedExponent(significand, exponent);
97
+ // estimated_power might be too low by 1.
98
+ int estimated_power = EstimatePower(normalized_exponent);
99
+
100
+ // Shortcut for Fixed.
101
+ // The requested digits correspond to the digits after the point. If the
102
+ // number is much too small, then there is no need in trying to get any
103
+ // digits.
104
+ if (mode == BIGNUM_DTOA_FIXED && -estimated_power - 1 > requested_digits) {
105
+ buffer[0] = '\0';
106
+ *length = 0;
107
+ // Set decimal-point to -requested_digits. This is what Gay does.
108
+ // Note that it should not have any effect anyways since the string is
109
+ // empty.
110
+ *decimal_point = -requested_digits;
111
+ return;
112
+ }
113
+
114
+ Bignum numerator;
115
+ Bignum denominator;
116
+ Bignum delta_minus;
117
+ Bignum delta_plus;
118
+ // Make sure the bignum can grow large enough. The smallest double equals
119
+ // 4e-324. In this case the denominator needs fewer than 324*4 binary digits.
120
+ // The maximum double is 1.7976931348623157e308 which needs fewer than
121
+ // 308*4 binary digits.
122
+ ASSERT(Bignum::kMaxSignificantBits >= 324*4);
123
+ bool need_boundary_deltas = (mode == BIGNUM_DTOA_SHORTEST);
124
+ InitialScaledStartValues(v, estimated_power, need_boundary_deltas,
125
+ &numerator, &denominator,
126
+ &delta_minus, &delta_plus);
127
+ // We now have v = (numerator / denominator) * 10^estimated_power.
128
+ FixupMultiply10(estimated_power, is_even, decimal_point,
129
+ &numerator, &denominator,
130
+ &delta_minus, &delta_plus);
131
+ // We now have v = (numerator / denominator) * 10^(decimal_point-1), and
132
+ // 1 <= (numerator + delta_plus) / denominator < 10
133
+ switch (mode) {
134
+ case BIGNUM_DTOA_SHORTEST:
135
+ GenerateShortestDigits(&numerator, &denominator,
136
+ &delta_minus, &delta_plus,
137
+ is_even, buffer, length);
138
+ break;
139
+ case BIGNUM_DTOA_FIXED:
140
+ BignumToFixed(requested_digits, decimal_point,
141
+ &numerator, &denominator,
142
+ buffer, length);
143
+ break;
144
+ case BIGNUM_DTOA_PRECISION:
145
+ GenerateCountedDigits(requested_digits, decimal_point,
146
+ &numerator, &denominator,
147
+ buffer, length);
148
+ break;
149
+ default:
150
+ UNREACHABLE();
151
+ }
152
+ buffer[*length] = '\0';
153
+ }
154
+
155
+
156
+ // The procedure starts generating digits from the left to the right and stops
157
+ // when the generated digits yield the shortest decimal representation of v. A
158
+ // decimal representation of v is a number lying closer to v than to any other
159
+ // double, so it converts to v when read.
160
+ //
161
+ // This is true if d, the decimal representation, is between m- and m+, the
162
+ // upper and lower boundaries. d must be strictly between them if !is_even.
163
+ // m- := (numerator - delta_minus) / denominator
164
+ // m+ := (numerator + delta_plus) / denominator
165
+ //
166
+ // Precondition: 0 <= (numerator+delta_plus) / denominator < 10.
167
+ // If 1 <= (numerator+delta_plus) / denominator < 10 then no leading 0 digit
168
+ // will be produced. This should be the standard precondition.
169
+ static void GenerateShortestDigits(Bignum* numerator, Bignum* denominator,
170
+ Bignum* delta_minus, Bignum* delta_plus,
171
+ bool is_even,
172
+ Vector<char> buffer, int* length) {
173
+ // Small optimization: if delta_minus and delta_plus are the same just reuse
174
+ // one of the two bignums.
175
+ if (Bignum::Equal(*delta_minus, *delta_plus)) {
176
+ delta_plus = delta_minus;
177
+ }
178
+ *length = 0;
179
+ while (true) {
180
+ uint16_t digit;
181
+ digit = numerator->DivideModuloIntBignum(*denominator);
182
+ ASSERT(digit <= 9); // digit is a uint16_t and therefore always positive.
183
+ // digit = numerator / denominator (integer division).
184
+ // numerator = numerator % denominator.
185
+ buffer[(*length)++] = digit + '0';
186
+
187
+ // Can we stop already?
188
+ // If the remainder of the division is less than the distance to the lower
189
+ // boundary we can stop. In this case we simply round down (discarding the
190
+ // remainder).
191
+ // Similarly we test if we can round up (using the upper boundary).
192
+ bool in_delta_room_minus;
193
+ bool in_delta_room_plus;
194
+ if (is_even) {
195
+ in_delta_room_minus = Bignum::LessEqual(*numerator, *delta_minus);
196
+ } else {
197
+ in_delta_room_minus = Bignum::Less(*numerator, *delta_minus);
198
+ }
199
+ if (is_even) {
200
+ in_delta_room_plus =
201
+ Bignum::PlusCompare(*numerator, *delta_plus, *denominator) >= 0;
202
+ } else {
203
+ in_delta_room_plus =
204
+ Bignum::PlusCompare(*numerator, *delta_plus, *denominator) > 0;
205
+ }
206
+ if (!in_delta_room_minus && !in_delta_room_plus) {
207
+ // Prepare for next iteration.
208
+ numerator->Times10();
209
+ delta_minus->Times10();
210
+ // We optimized delta_plus to be equal to delta_minus (if they share the
211
+ // same value). So don't multiply delta_plus if they point to the same
212
+ // object.
213
+ if (delta_minus != delta_plus) {
214
+ delta_plus->Times10();
215
+ }
216
+ } else if (in_delta_room_minus && in_delta_room_plus) {
217
+ // Let's see if 2*numerator < denominator.
218
+ // If yes, then the next digit would be < 5 and we can round down.
219
+ int compare = Bignum::PlusCompare(*numerator, *numerator, *denominator);
220
+ if (compare < 0) {
221
+ // Remaining digits are less than .5. -> Round down (== do nothing).
222
+ } else if (compare > 0) {
223
+ // Remaining digits are more than .5 of denominator. -> Round up.
224
+ // Note that the last digit could not be a '9' as otherwise the whole
225
+ // loop would have stopped earlier.
226
+ // We still have an assert here in case the preconditions were not
227
+ // satisfied.
228
+ ASSERT(buffer[(*length) - 1] != '9');
229
+ buffer[(*length) - 1]++;
230
+ } else {
231
+ // Halfway case.
232
+ // TODO(floitsch): need a way to solve half-way cases.
233
+ // For now let's round towards even (since this is what Gay seems to
234
+ // do).
235
+
236
+ if ((buffer[(*length) - 1] - '0') % 2 == 0) {
237
+ // Round down => Do nothing.
238
+ } else {
239
+ ASSERT(buffer[(*length) - 1] != '9');
240
+ buffer[(*length) - 1]++;
241
+ }
242
+ }
243
+ return;
244
+ } else if (in_delta_room_minus) {
245
+ // Round down (== do nothing).
246
+ return;
247
+ } else { // in_delta_room_plus
248
+ // Round up.
249
+ // Note again that the last digit could not be '9' since this would have
250
+ // stopped the loop earlier.
251
+ // We still have an ASSERT here, in case the preconditions were not
252
+ // satisfied.
253
+ ASSERT(buffer[(*length) -1] != '9');
254
+ buffer[(*length) - 1]++;
255
+ return;
256
+ }
257
+ }
258
+ }
259
+
260
+
261
+ // Let v = numerator / denominator < 10.
262
+ // Then we generate 'count' digits of d = x.xxxxx... (without the decimal point)
263
+ // from left to right. Once 'count' digits have been produced we decide wether
264
+ // to round up or down. Remainders of exactly .5 round upwards. Numbers such
265
+ // as 9.999999 propagate a carry all the way, and change the
266
+ // exponent (decimal_point), when rounding upwards.
267
+ static void GenerateCountedDigits(int count, int* decimal_point,
268
+ Bignum* numerator, Bignum* denominator,
269
+ Vector<char>(buffer), int* length) {
270
+ ASSERT(count >= 0);
271
+ for (int i = 0; i < count - 1; ++i) {
272
+ uint16_t digit;
273
+ digit = numerator->DivideModuloIntBignum(*denominator);
274
+ ASSERT(digit <= 9); // digit is a uint16_t and therefore always positive.
275
+ // digit = numerator / denominator (integer division).
276
+ // numerator = numerator % denominator.
277
+ buffer[i] = digit + '0';
278
+ // Prepare for next iteration.
279
+ numerator->Times10();
280
+ }
281
+ // Generate the last digit.
282
+ uint16_t digit;
283
+ digit = numerator->DivideModuloIntBignum(*denominator);
284
+ if (Bignum::PlusCompare(*numerator, *numerator, *denominator) >= 0) {
285
+ digit++;
286
+ }
287
+ buffer[count - 1] = digit + '0';
288
+ // Correct bad digits (in case we had a sequence of '9's). Propagate the
289
+ // carry until we hat a non-'9' or til we reach the first digit.
290
+ for (int i = count - 1; i > 0; --i) {
291
+ if (buffer[i] != '0' + 10) break;
292
+ buffer[i] = '0';
293
+ buffer[i - 1]++;
294
+ }
295
+ if (buffer[0] == '0' + 10) {
296
+ // Propagate a carry past the top place.
297
+ buffer[0] = '1';
298
+ (*decimal_point)++;
299
+ }
300
+ *length = count;
301
+ }
302
+
303
+
304
+ // Generates 'requested_digits' after the decimal point. It might omit
305
+ // trailing '0's. If the input number is too small then no digits at all are
306
+ // generated (ex.: 2 fixed digits for 0.00001).
307
+ //
308
+ // Input verifies: 1 <= (numerator + delta) / denominator < 10.
309
+ static void BignumToFixed(int requested_digits, int* decimal_point,
310
+ Bignum* numerator, Bignum* denominator,
311
+ Vector<char>(buffer), int* length) {
312
+ // Note that we have to look at more than just the requested_digits, since
313
+ // a number could be rounded up. Example: v=0.5 with requested_digits=0.
314
+ // Even though the power of v equals 0 we can't just stop here.
315
+ if (-(*decimal_point) > requested_digits) {
316
+ // The number is definitively too small.
317
+ // Ex: 0.001 with requested_digits == 1.
318
+ // Set decimal-point to -requested_digits. This is what Gay does.
319
+ // Note that it should not have any effect anyways since the string is
320
+ // empty.
321
+ *decimal_point = -requested_digits;
322
+ *length = 0;
323
+ return;
324
+ } else if (-(*decimal_point) == requested_digits) {
325
+ // We only need to verify if the number rounds down or up.
326
+ // Ex: 0.04 and 0.06 with requested_digits == 1.
327
+ ASSERT(*decimal_point == -requested_digits);
328
+ // Initially the fraction lies in range (1, 10]. Multiply the denominator
329
+ // by 10 so that we can compare more easily.
330
+ denominator->Times10();
331
+ if (Bignum::PlusCompare(*numerator, *numerator, *denominator) >= 0) {
332
+ // If the fraction is >= 0.5 then we have to include the rounded
333
+ // digit.
334
+ buffer[0] = '1';
335
+ *length = 1;
336
+ (*decimal_point)++;
337
+ } else {
338
+ // Note that we caught most of similar cases earlier.
339
+ *length = 0;
340
+ }
341
+ return;
342
+ } else {
343
+ // The requested digits correspond to the digits after the point.
344
+ // The variable 'needed_digits' includes the digits before the point.
345
+ int needed_digits = (*decimal_point) + requested_digits;
346
+ GenerateCountedDigits(needed_digits, decimal_point,
347
+ numerator, denominator,
348
+ buffer, length);
349
+ }
350
+ }
351
+
352
+
353
+ // Returns an estimation of k such that 10^(k-1) <= v < 10^k where
354
+ // v = f * 2^exponent and 2^52 <= f < 2^53.
355
+ // v is hence a normalized double with the given exponent. The output is an
356
+ // approximation for the exponent of the decimal approimation .digits * 10^k.
357
+ //
358
+ // The result might undershoot by 1 in which case 10^k <= v < 10^k+1.
359
+ // Note: this property holds for v's upper boundary m+ too.
360
+ // 10^k <= m+ < 10^k+1.
361
+ // (see explanation below).
362
+ //
363
+ // Examples:
364
+ // EstimatePower(0) => 16
365
+ // EstimatePower(-52) => 0
366
+ //
367
+ // Note: e >= 0 => EstimatedPower(e) > 0. No similar claim can be made for e<0.
368
+ static int EstimatePower(int exponent) {
369
+ // This function estimates log10 of v where v = f*2^e (with e == exponent).
370
+ // Note that 10^floor(log10(v)) <= v, but v <= 10^ceil(log10(v)).
371
+ // Note that f is bounded by its container size. Let p = 53 (the double's
372
+ // significand size). Then 2^(p-1) <= f < 2^p.
373
+ //
374
+ // Given that log10(v) == log2(v)/log2(10) and e+(len(f)-1) is quite close
375
+ // to log2(v) the function is simplified to (e+(len(f)-1)/log2(10)).
376
+ // The computed number undershoots by less than 0.631 (when we compute log3
377
+ // and not log10).
378
+ //
379
+ // Optimization: since we only need an approximated result this computation
380
+ // can be performed on 64 bit integers. On x86/x64 architecture the speedup is
381
+ // not really measurable, though.
382
+ //
383
+ // Since we want to avoid overshooting we decrement by 1e10 so that
384
+ // floating-point imprecisions don't affect us.
385
+ //
386
+ // Explanation for v's boundary m+: the computation takes advantage of
387
+ // the fact that 2^(p-1) <= f < 2^p. Boundaries still satisfy this requirement
388
+ // (even for denormals where the delta can be much more important).
389
+
390
+ const double k1Log10 = 0.30102999566398114; // 1/lg(10)
391
+
392
+ // For doubles len(f) == 53 (don't forget the hidden bit).
393
+ const int kSignificandSize = 53;
394
+ double estimate = ceil((exponent + kSignificandSize - 1) * k1Log10 - 1e-10);
395
+ return static_cast<int>(estimate);
396
+ }
397
+
398
+
399
+ // See comments for InitialScaledStartValues.
400
+ static void InitialScaledStartValuesPositiveExponent(
401
+ double v, int estimated_power, bool need_boundary_deltas,
402
+ Bignum* numerator, Bignum* denominator,
403
+ Bignum* delta_minus, Bignum* delta_plus) {
404
+ // A positive exponent implies a positive power.
405
+ ASSERT(estimated_power >= 0);
406
+ // Since the estimated_power is positive we simply multiply the denominator
407
+ // by 10^estimated_power.
408
+
409
+ // numerator = v.
410
+ numerator->AssignUInt64(Double(v).Significand());
411
+ numerator->ShiftLeft(Double(v).Exponent());
412
+ // denominator = 10^estimated_power.
413
+ denominator->AssignPowerUInt16(10, estimated_power);
414
+
415
+ if (need_boundary_deltas) {
416
+ // Introduce a common denominator so that the deltas to the boundaries are
417
+ // integers.
418
+ denominator->ShiftLeft(1);
419
+ numerator->ShiftLeft(1);
420
+ // Let v = f * 2^e, then m+ - v = 1/2 * 2^e; With the common
421
+ // denominator (of 2) delta_plus equals 2^e.
422
+ delta_plus->AssignUInt16(1);
423
+ delta_plus->ShiftLeft(Double(v).Exponent());
424
+ // Same for delta_minus (with adjustments below if f == 2^p-1).
425
+ delta_minus->AssignUInt16(1);
426
+ delta_minus->ShiftLeft(Double(v).Exponent());
427
+
428
+ // If the significand (without the hidden bit) is 0, then the lower
429
+ // boundary is closer than just half a ulp (unit in the last place).
430
+ // There is only one exception: if the next lower number is a denormal then
431
+ // the distance is 1 ulp. This cannot be the case for exponent >= 0 (but we
432
+ // have to test it in the other function where exponent < 0).
433
+ uint64_t v_bits = Double(v).AsUint64();
434
+ if ((v_bits & Double::kSignificandMask) == 0) {
435
+ // The lower boundary is closer at half the distance of "normal" numbers.
436
+ // Increase the common denominator and adapt all but the delta_minus.
437
+ denominator->ShiftLeft(1); // *2
438
+ numerator->ShiftLeft(1); // *2
439
+ delta_plus->ShiftLeft(1); // *2
440
+ }
441
+ }
442
+ }
443
+
444
+
445
+ // See comments for InitialScaledStartValues
446
+ static void InitialScaledStartValuesNegativeExponentPositivePower(
447
+ double v, int estimated_power, bool need_boundary_deltas,
448
+ Bignum* numerator, Bignum* denominator,
449
+ Bignum* delta_minus, Bignum* delta_plus) {
450
+ uint64_t significand = Double(v).Significand();
451
+ int exponent = Double(v).Exponent();
452
+ // v = f * 2^e with e < 0, and with estimated_power >= 0.
453
+ // This means that e is close to 0 (have a look at how estimated_power is
454
+ // computed).
455
+
456
+ // numerator = significand
457
+ // since v = significand * 2^exponent this is equivalent to
458
+ // numerator = v * / 2^-exponent
459
+ numerator->AssignUInt64(significand);
460
+ // denominator = 10^estimated_power * 2^-exponent (with exponent < 0)
461
+ denominator->AssignPowerUInt16(10, estimated_power);
462
+ denominator->ShiftLeft(-exponent);
463
+
464
+ if (need_boundary_deltas) {
465
+ // Introduce a common denominator so that the deltas to the boundaries are
466
+ // integers.
467
+ denominator->ShiftLeft(1);
468
+ numerator->ShiftLeft(1);
469
+ // Let v = f * 2^e, then m+ - v = 1/2 * 2^e; With the common
470
+ // denominator (of 2) delta_plus equals 2^e.
471
+ // Given that the denominator already includes v's exponent the distance
472
+ // to the boundaries is simply 1.
473
+ delta_plus->AssignUInt16(1);
474
+ // Same for delta_minus (with adjustments below if f == 2^p-1).
475
+ delta_minus->AssignUInt16(1);
476
+
477
+ // If the significand (without the hidden bit) is 0, then the lower
478
+ // boundary is closer than just one ulp (unit in the last place).
479
+ // There is only one exception: if the next lower number is a denormal
480
+ // then the distance is 1 ulp. Since the exponent is close to zero
481
+ // (otherwise estimated_power would have been negative) this cannot happen
482
+ // here either.
483
+ uint64_t v_bits = Double(v).AsUint64();
484
+ if ((v_bits & Double::kSignificandMask) == 0) {
485
+ // The lower boundary is closer at half the distance of "normal" numbers.
486
+ // Increase the denominator and adapt all but the delta_minus.
487
+ denominator->ShiftLeft(1); // *2
488
+ numerator->ShiftLeft(1); // *2
489
+ delta_plus->ShiftLeft(1); // *2
490
+ }
491
+ }
492
+ }
493
+
494
+
495
+ // See comments for InitialScaledStartValues
496
+ static void InitialScaledStartValuesNegativeExponentNegativePower(
497
+ double v, int estimated_power, bool need_boundary_deltas,
498
+ Bignum* numerator, Bignum* denominator,
499
+ Bignum* delta_minus, Bignum* delta_plus) {
500
+ const uint64_t kMinimalNormalizedExponent =
501
+ V8_2PART_UINT64_C(0x00100000, 00000000);
502
+ uint64_t significand = Double(v).Significand();
503
+ int exponent = Double(v).Exponent();
504
+ // Instead of multiplying the denominator with 10^estimated_power we
505
+ // multiply all values (numerator and deltas) by 10^-estimated_power.
506
+
507
+ // Use numerator as temporary container for power_ten.
508
+ Bignum* power_ten = numerator;
509
+ power_ten->AssignPowerUInt16(10, -estimated_power);
510
+
511
+ if (need_boundary_deltas) {
512
+ // Since power_ten == numerator we must make a copy of 10^estimated_power
513
+ // before we complete the computation of the numerator.
514
+ // delta_plus = delta_minus = 10^estimated_power
515
+ delta_plus->AssignBignum(*power_ten);
516
+ delta_minus->AssignBignum(*power_ten);
517
+ }
518
+
519
+ // numerator = significand * 2 * 10^-estimated_power
520
+ // since v = significand * 2^exponent this is equivalent to
521
+ // numerator = v * 10^-estimated_power * 2 * 2^-exponent.
522
+ // Remember: numerator has been abused as power_ten. So no need to assign it
523
+ // to itself.
524
+ ASSERT(numerator == power_ten);
525
+ numerator->MultiplyByUInt64(significand);
526
+
527
+ // denominator = 2 * 2^-exponent with exponent < 0.
528
+ denominator->AssignUInt16(1);
529
+ denominator->ShiftLeft(-exponent);
530
+
531
+ if (need_boundary_deltas) {
532
+ // Introduce a common denominator so that the deltas to the boundaries are
533
+ // integers.
534
+ numerator->ShiftLeft(1);
535
+ denominator->ShiftLeft(1);
536
+ // With this shift the boundaries have their correct value, since
537
+ // delta_plus = 10^-estimated_power, and
538
+ // delta_minus = 10^-estimated_power.
539
+ // These assignments have been done earlier.
540
+
541
+ // The special case where the lower boundary is twice as close.
542
+ // This time we have to look out for the exception too.
543
+ uint64_t v_bits = Double(v).AsUint64();
544
+ if ((v_bits & Double::kSignificandMask) == 0 &&
545
+ // The only exception where a significand == 0 has its boundaries at
546
+ // "normal" distances:
547
+ (v_bits & Double::kExponentMask) != kMinimalNormalizedExponent) {
548
+ numerator->ShiftLeft(1); // *2
549
+ denominator->ShiftLeft(1); // *2
550
+ delta_plus->ShiftLeft(1); // *2
551
+ }
552
+ }
553
+ }
554
+
555
+
556
+ // Let v = significand * 2^exponent.
557
+ // Computes v / 10^estimated_power exactly, as a ratio of two bignums, numerator
558
+ // and denominator. The functions GenerateShortestDigits and
559
+ // GenerateCountedDigits will then convert this ratio to its decimal
560
+ // representation d, with the required accuracy.
561
+ // Then d * 10^estimated_power is the representation of v.
562
+ // (Note: the fraction and the estimated_power might get adjusted before
563
+ // generating the decimal representation.)
564
+ //
565
+ // The initial start values consist of:
566
+ // - a scaled numerator: s.t. numerator/denominator == v / 10^estimated_power.
567
+ // - a scaled (common) denominator.
568
+ // optionally (used by GenerateShortestDigits to decide if it has the shortest
569
+ // decimal converting back to v):
570
+ // - v - m-: the distance to the lower boundary.
571
+ // - m+ - v: the distance to the upper boundary.
572
+ //
573
+ // v, m+, m-, and therefore v - m- and m+ - v all share the same denominator.
574
+ //
575
+ // Let ep == estimated_power, then the returned values will satisfy:
576
+ // v / 10^ep = numerator / denominator.
577
+ // v's boundarys m- and m+:
578
+ // m- / 10^ep == v / 10^ep - delta_minus / denominator
579
+ // m+ / 10^ep == v / 10^ep + delta_plus / denominator
580
+ // Or in other words:
581
+ // m- == v - delta_minus * 10^ep / denominator;
582
+ // m+ == v + delta_plus * 10^ep / denominator;
583
+ //
584
+ // Since 10^(k-1) <= v < 10^k (with k == estimated_power)
585
+ // or 10^k <= v < 10^(k+1)
586
+ // we then have 0.1 <= numerator/denominator < 1
587
+ // or 1 <= numerator/denominator < 10
588
+ //
589
+ // It is then easy to kickstart the digit-generation routine.
590
+ //
591
+ // The boundary-deltas are only filled if need_boundary_deltas is set.
592
+ static void InitialScaledStartValues(double v,
593
+ int estimated_power,
594
+ bool need_boundary_deltas,
595
+ Bignum* numerator,
596
+ Bignum* denominator,
597
+ Bignum* delta_minus,
598
+ Bignum* delta_plus) {
599
+ if (Double(v).Exponent() >= 0) {
600
+ InitialScaledStartValuesPositiveExponent(
601
+ v, estimated_power, need_boundary_deltas,
602
+ numerator, denominator, delta_minus, delta_plus);
603
+ } else if (estimated_power >= 0) {
604
+ InitialScaledStartValuesNegativeExponentPositivePower(
605
+ v, estimated_power, need_boundary_deltas,
606
+ numerator, denominator, delta_minus, delta_plus);
607
+ } else {
608
+ InitialScaledStartValuesNegativeExponentNegativePower(
609
+ v, estimated_power, need_boundary_deltas,
610
+ numerator, denominator, delta_minus, delta_plus);
611
+ }
612
+ }
613
+
614
+
615
+ // This routine multiplies numerator/denominator so that its values lies in the
616
+ // range 1-10. That is after a call to this function we have:
617
+ // 1 <= (numerator + delta_plus) /denominator < 10.
618
+ // Let numerator the input before modification and numerator' the argument
619
+ // after modification, then the output-parameter decimal_point is such that
620
+ // numerator / denominator * 10^estimated_power ==
621
+ // numerator' / denominator' * 10^(decimal_point - 1)
622
+ // In some cases estimated_power was too low, and this is already the case. We
623
+ // then simply adjust the power so that 10^(k-1) <= v < 10^k (with k ==
624
+ // estimated_power) but do not touch the numerator or denominator.
625
+ // Otherwise the routine multiplies the numerator and the deltas by 10.
626
+ static void FixupMultiply10(int estimated_power, bool is_even,
627
+ int* decimal_point,
628
+ Bignum* numerator, Bignum* denominator,
629
+ Bignum* delta_minus, Bignum* delta_plus) {
630
+ bool in_range;
631
+ if (is_even) {
632
+ // For IEEE doubles half-way cases (in decimal system numbers ending with 5)
633
+ // are rounded to the closest floating-point number with even significand.
634
+ in_range = Bignum::PlusCompare(*numerator, *delta_plus, *denominator) >= 0;
635
+ } else {
636
+ in_range = Bignum::PlusCompare(*numerator, *delta_plus, *denominator) > 0;
637
+ }
638
+ if (in_range) {
639
+ // Since numerator + delta_plus >= denominator we already have
640
+ // 1 <= numerator/denominator < 10. Simply update the estimated_power.
641
+ *decimal_point = estimated_power + 1;
642
+ } else {
643
+ *decimal_point = estimated_power;
644
+ numerator->Times10();
645
+ if (Bignum::Equal(*delta_minus, *delta_plus)) {
646
+ delta_minus->Times10();
647
+ delta_plus->AssignBignum(*delta_minus);
648
+ } else {
649
+ delta_minus->Times10();
650
+ delta_plus->Times10();
651
+ }
652
+ }
653
+ }
654
+
655
+ } } // namespace v8::internal