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,191 @@
1
+ // Copyright 2006-2008 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_STRING_STREAM_H_
29
+ #define V8_STRING_STREAM_H_
30
+
31
+ namespace v8 {
32
+ namespace internal {
33
+
34
+
35
+ class StringAllocator {
36
+ public:
37
+ virtual ~StringAllocator() {}
38
+ // Allocate a number of bytes.
39
+ virtual char* allocate(unsigned bytes) = 0;
40
+ // Allocate a larger number of bytes and copy the old buffer to the new one.
41
+ // bytes is an input and output parameter passing the old size of the buffer
42
+ // and returning the new size. If allocation fails then we return the old
43
+ // buffer and do not increase the size.
44
+ virtual char* grow(unsigned* bytes) = 0;
45
+ };
46
+
47
+
48
+ // Normal allocator uses new[] and delete[].
49
+ class HeapStringAllocator: public StringAllocator {
50
+ public:
51
+ ~HeapStringAllocator() { DeleteArray(space_); }
52
+ char* allocate(unsigned bytes);
53
+ char* grow(unsigned* bytes);
54
+ private:
55
+ char* space_;
56
+ };
57
+
58
+
59
+ // Allocator for use when no new c++ heap allocation is allowed.
60
+ // Given a preallocated buffer up front and does no allocation while
61
+ // building message.
62
+ class NoAllocationStringAllocator: public StringAllocator {
63
+ public:
64
+ NoAllocationStringAllocator(char* memory, unsigned size);
65
+ char* allocate(unsigned bytes) { return space_; }
66
+ char* grow(unsigned* bytes);
67
+ private:
68
+ unsigned size_;
69
+ char* space_;
70
+ };
71
+
72
+
73
+ class FmtElm {
74
+ public:
75
+ FmtElm(int value) : type_(INT) { // NOLINT
76
+ data_.u_int_ = value;
77
+ }
78
+ explicit FmtElm(double value) : type_(DOUBLE) {
79
+ data_.u_double_ = value;
80
+ }
81
+ FmtElm(const char* value) : type_(C_STR) { // NOLINT
82
+ data_.u_c_str_ = value;
83
+ }
84
+ FmtElm(const Vector<const uc16>& value) : type_(LC_STR) { // NOLINT
85
+ data_.u_lc_str_ = &value;
86
+ }
87
+ FmtElm(Object* value) : type_(OBJ) { // NOLINT
88
+ data_.u_obj_ = value;
89
+ }
90
+ FmtElm(Handle<Object> value) : type_(HANDLE) { // NOLINT
91
+ data_.u_handle_ = value.location();
92
+ }
93
+ FmtElm(void* value) : type_(POINTER) { // NOLINT
94
+ data_.u_pointer_ = value;
95
+ }
96
+ private:
97
+ friend class StringStream;
98
+ enum Type { INT, DOUBLE, C_STR, LC_STR, OBJ, HANDLE, POINTER };
99
+ Type type_;
100
+ union {
101
+ int u_int_;
102
+ double u_double_;
103
+ const char* u_c_str_;
104
+ const Vector<const uc16>* u_lc_str_;
105
+ Object* u_obj_;
106
+ Object** u_handle_;
107
+ void* u_pointer_;
108
+ } data_;
109
+ };
110
+
111
+
112
+ class StringStream {
113
+ public:
114
+ explicit StringStream(StringAllocator* allocator):
115
+ allocator_(allocator),
116
+ capacity_(kInitialCapacity),
117
+ length_(0),
118
+ buffer_(allocator_->allocate(kInitialCapacity)) {
119
+ buffer_[0] = 0;
120
+ }
121
+
122
+ ~StringStream() {
123
+ }
124
+
125
+ bool Put(char c);
126
+ bool Put(String* str);
127
+ bool Put(String* str, int start, int end);
128
+ void Add(Vector<const char> format, Vector<FmtElm> elms);
129
+ void Add(const char* format);
130
+ void Add(Vector<const char> format);
131
+ void Add(const char* format, FmtElm arg0);
132
+ void Add(const char* format, FmtElm arg0, FmtElm arg1);
133
+ void Add(const char* format, FmtElm arg0, FmtElm arg1, FmtElm arg2);
134
+ void Add(const char* format,
135
+ FmtElm arg0,
136
+ FmtElm arg1,
137
+ FmtElm arg2,
138
+ FmtElm arg3);
139
+
140
+ // Getting the message out.
141
+ void OutputToFile(FILE* out);
142
+ void OutputToStdOut() { OutputToFile(stdout); }
143
+ void Log();
144
+ Handle<String> ToString();
145
+ SmartPointer<const char> ToCString() const;
146
+ int length() const { return length_; }
147
+
148
+ // Object printing support.
149
+ void PrintName(Object* o);
150
+ void PrintFixedArray(FixedArray* array, unsigned int limit);
151
+ void PrintByteArray(ByteArray* ba);
152
+ void PrintUsingMap(JSObject* js_object);
153
+ void PrintPrototype(JSFunction* fun, Object* receiver);
154
+ void PrintSecurityTokenIfChanged(Object* function);
155
+ // NOTE: Returns the code in the output parameter.
156
+ void PrintFunction(Object* function, Object* receiver, Code** code);
157
+
158
+ // Reset the stream.
159
+ void Reset() {
160
+ length_ = 0;
161
+ buffer_[0] = 0;
162
+ }
163
+
164
+ // Mentioned object cache support.
165
+ void PrintMentionedObjectCache();
166
+ static void ClearMentionedObjectCache();
167
+ #ifdef DEBUG
168
+ static bool IsMentionedObjectCacheClear();
169
+ #endif
170
+
171
+
172
+ static const int kInitialCapacity = 16;
173
+
174
+ private:
175
+ void PrintObject(Object* obj);
176
+
177
+ StringAllocator* allocator_;
178
+ unsigned capacity_;
179
+ unsigned length_; // does not include terminating 0-character
180
+ char* buffer_;
181
+
182
+ bool full() const { return (capacity_ - length_) == 1; }
183
+ int space() const { return capacity_ - length_; }
184
+
185
+ DISALLOW_IMPLICIT_CONSTRUCTORS(StringStream);
186
+ };
187
+
188
+
189
+ } } // namespace v8::internal
190
+
191
+ #endif // V8_STRING_STREAM_H_
@@ -0,0 +1,994 @@
1
+ // Copyright 2006-2009 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
+
29
+ // This file relies on the fact that the following declaration has been made
30
+ // in runtime.js:
31
+ // const $String = global.String;
32
+ // const $NaN = 0/0;
33
+
34
+
35
+ // Set the String function and constructor.
36
+ %SetCode($String, function(x) {
37
+ var value = %_ArgumentsLength() == 0 ? '' : TO_STRING_INLINE(x);
38
+ if (%_IsConstructCall()) {
39
+ %_SetValueOf(this, value);
40
+ } else {
41
+ return value;
42
+ }
43
+ });
44
+
45
+ %FunctionSetPrototype($String, new $String());
46
+
47
+ // ECMA-262 section 15.5.4.2
48
+ function StringToString() {
49
+ if (!IS_STRING(this) && !IS_STRING_WRAPPER(this))
50
+ throw new $TypeError('String.prototype.toString is not generic');
51
+ return %_ValueOf(this);
52
+ }
53
+
54
+
55
+ // ECMA-262 section 15.5.4.3
56
+ function StringValueOf() {
57
+ if (!IS_STRING(this) && !IS_STRING_WRAPPER(this))
58
+ throw new $TypeError('String.prototype.valueOf is not generic');
59
+ return %_ValueOf(this);
60
+ }
61
+
62
+
63
+ // ECMA-262, section 15.5.4.4
64
+ function StringCharAt(pos) {
65
+ if (IS_NULL_OR_UNDEFINED(this) && !IS_UNDETECTABLE(this)) {
66
+ throw MakeTypeError("called_on_null_or_undefined",
67
+ ["String.prototype.charAt"]);
68
+ }
69
+ var result = %_StringCharAt(this, pos);
70
+ if (%_IsSmi(result)) {
71
+ result = %_StringCharAt(TO_STRING_INLINE(this), TO_INTEGER(pos));
72
+ }
73
+ return result;
74
+ }
75
+
76
+
77
+ // ECMA-262 section 15.5.4.5
78
+ function StringCharCodeAt(pos) {
79
+ if (IS_NULL_OR_UNDEFINED(this) && !IS_UNDETECTABLE(this)) {
80
+ throw MakeTypeError("called_on_null_or_undefined",
81
+ ["String.prototype.charCodeAt"]);
82
+ }
83
+ var result = %_StringCharCodeAt(this, pos);
84
+ if (!%_IsSmi(result)) {
85
+ result = %_StringCharCodeAt(TO_STRING_INLINE(this), TO_INTEGER(pos));
86
+ }
87
+ return result;
88
+ }
89
+
90
+
91
+ // ECMA-262, section 15.5.4.6
92
+ function StringConcat() {
93
+ if (IS_NULL_OR_UNDEFINED(this) && !IS_UNDETECTABLE(this)) {
94
+ throw MakeTypeError("called_on_null_or_undefined", ["String.prototype.concat"]);
95
+ }
96
+ var len = %_ArgumentsLength();
97
+ var this_as_string = TO_STRING_INLINE(this);
98
+ if (len === 1) {
99
+ return this_as_string + %_Arguments(0);
100
+ }
101
+ var parts = new InternalArray(len + 1);
102
+ parts[0] = this_as_string;
103
+ for (var i = 0; i < len; i++) {
104
+ var part = %_Arguments(i);
105
+ parts[i + 1] = TO_STRING_INLINE(part);
106
+ }
107
+ return %StringBuilderConcat(parts, len + 1, "");
108
+ }
109
+
110
+ // Match ES3 and Safari
111
+ %FunctionSetLength(StringConcat, 1);
112
+
113
+
114
+ // ECMA-262 section 15.5.4.7
115
+ function StringIndexOf(pattern /* position */) { // length == 1
116
+ if (IS_NULL_OR_UNDEFINED(this) && !IS_UNDETECTABLE(this)) {
117
+ throw MakeTypeError("called_on_null_or_undefined",
118
+ ["String.prototype.indexOf"]);
119
+ }
120
+ var subject = TO_STRING_INLINE(this);
121
+ pattern = TO_STRING_INLINE(pattern);
122
+ var index = 0;
123
+ if (%_ArgumentsLength() > 1) {
124
+ index = %_Arguments(1); // position
125
+ index = TO_INTEGER(index);
126
+ if (index < 0) index = 0;
127
+ if (index > subject.length) index = subject.length;
128
+ }
129
+ return %StringIndexOf(subject, pattern, index);
130
+ }
131
+
132
+
133
+ // ECMA-262 section 15.5.4.8
134
+ function StringLastIndexOf(pat /* position */) { // length == 1
135
+ if (IS_NULL_OR_UNDEFINED(this) && !IS_UNDETECTABLE(this)) {
136
+ throw MakeTypeError("called_on_null_or_undefined",
137
+ ["String.prototype.lastIndexOf"]);
138
+ }
139
+ var sub = TO_STRING_INLINE(this);
140
+ var subLength = sub.length;
141
+ var pat = TO_STRING_INLINE(pat);
142
+ var patLength = pat.length;
143
+ var index = subLength - patLength;
144
+ if (%_ArgumentsLength() > 1) {
145
+ var position = ToNumber(%_Arguments(1));
146
+ if (!NUMBER_IS_NAN(position)) {
147
+ position = TO_INTEGER(position);
148
+ if (position < 0) {
149
+ position = 0;
150
+ }
151
+ if (position + patLength < subLength) {
152
+ index = position
153
+ }
154
+ }
155
+ }
156
+ if (index < 0) {
157
+ return -1;
158
+ }
159
+ return %StringLastIndexOf(sub, pat, index);
160
+ }
161
+
162
+
163
+ // ECMA-262 section 15.5.4.9
164
+ //
165
+ // This function is implementation specific. For now, we do not
166
+ // do anything locale specific.
167
+ function StringLocaleCompare(other) {
168
+ if (IS_NULL_OR_UNDEFINED(this) && !IS_UNDETECTABLE(this)) {
169
+ throw MakeTypeError("called_on_null_or_undefined",
170
+ ["String.prototype.localeCompare"]);
171
+ }
172
+ if (%_ArgumentsLength() === 0) return 0;
173
+ return %StringLocaleCompare(TO_STRING_INLINE(this),
174
+ TO_STRING_INLINE(other));
175
+ }
176
+
177
+
178
+ // ECMA-262 section 15.5.4.10
179
+ function StringMatch(regexp) {
180
+ if (IS_NULL_OR_UNDEFINED(this) && !IS_UNDETECTABLE(this)) {
181
+ throw MakeTypeError("called_on_null_or_undefined",
182
+ ["String.prototype.match"]);
183
+ }
184
+ var subject = TO_STRING_INLINE(this);
185
+ if (IS_REGEXP(regexp)) {
186
+ if (!regexp.global) return RegExpExecNoTests(regexp, subject, 0);
187
+ %_Log('regexp', 'regexp-match,%0S,%1r', [subject, regexp]);
188
+ // lastMatchInfo is defined in regexp.js.
189
+ return %StringMatch(subject, regexp, lastMatchInfo);
190
+ }
191
+ // Non-regexp argument.
192
+ regexp = new $RegExp(regexp);
193
+ return RegExpExecNoTests(regexp, subject, 0);
194
+ }
195
+
196
+
197
+ // SubString is an internal function that returns the sub string of 'string'.
198
+ // If resulting string is of length 1, we use the one character cache
199
+ // otherwise we call the runtime system.
200
+ function SubString(string, start, end) {
201
+ // Use the one character string cache.
202
+ if (start + 1 == end) return %_StringCharAt(string, start);
203
+ return %_SubString(string, start, end);
204
+ }
205
+
206
+
207
+ // This has the same size as the lastMatchInfo array, and can be used for
208
+ // functions that expect that structure to be returned. It is used when the
209
+ // needle is a string rather than a regexp. In this case we can't update
210
+ // lastMatchArray without erroneously affecting the properties on the global
211
+ // RegExp object.
212
+ var reusableMatchInfo = [2, "", "", -1, -1];
213
+
214
+
215
+ // ECMA-262, section 15.5.4.11
216
+ function StringReplace(search, replace) {
217
+ if (IS_NULL_OR_UNDEFINED(this) && !IS_UNDETECTABLE(this)) {
218
+ throw MakeTypeError("called_on_null_or_undefined",
219
+ ["String.prototype.replace"]);
220
+ }
221
+ var subject = TO_STRING_INLINE(this);
222
+
223
+ // Delegate to one of the regular expression variants if necessary.
224
+ if (IS_REGEXP(search)) {
225
+ %_Log('regexp', 'regexp-replace,%0r,%1S', [search, subject]);
226
+ if (IS_FUNCTION(replace)) {
227
+ if (search.global) {
228
+ return StringReplaceGlobalRegExpWithFunction(subject, search, replace);
229
+ } else {
230
+ return StringReplaceNonGlobalRegExpWithFunction(subject,
231
+ search,
232
+ replace);
233
+ }
234
+ } else {
235
+ return %StringReplaceRegExpWithString(subject,
236
+ search,
237
+ TO_STRING_INLINE(replace),
238
+ lastMatchInfo);
239
+ }
240
+ }
241
+
242
+ // Convert the search argument to a string and search for it.
243
+ search = TO_STRING_INLINE(search);
244
+ var start = %StringIndexOf(subject, search, 0);
245
+ if (start < 0) return subject;
246
+ var end = start + search.length;
247
+
248
+ var builder = new ReplaceResultBuilder(subject);
249
+ // prefix
250
+ builder.addSpecialSlice(0, start);
251
+
252
+ // Compute the string to replace with.
253
+ if (IS_FUNCTION(replace)) {
254
+ builder.add(%_CallFunction(%GetGlobalReceiver(),
255
+ search,
256
+ start,
257
+ subject,
258
+ replace));
259
+ } else {
260
+ reusableMatchInfo[CAPTURE0] = start;
261
+ reusableMatchInfo[CAPTURE1] = end;
262
+ replace = TO_STRING_INLINE(replace);
263
+ ExpandReplacement(replace, subject, reusableMatchInfo, builder);
264
+ }
265
+
266
+ // suffix
267
+ builder.addSpecialSlice(end, subject.length);
268
+
269
+ return builder.generate();
270
+ }
271
+
272
+
273
+ // Expand the $-expressions in the string and return a new string with
274
+ // the result.
275
+ function ExpandReplacement(string, subject, matchInfo, builder) {
276
+ var length = string.length;
277
+ var builder_elements = builder.elements;
278
+ var next = %StringIndexOf(string, '$', 0);
279
+ if (next < 0) {
280
+ if (length > 0) builder_elements.push(string);
281
+ return;
282
+ }
283
+
284
+ // Compute the number of captures; see ECMA-262, 15.5.4.11, p. 102.
285
+ var m = NUMBER_OF_CAPTURES(matchInfo) >> 1; // Includes the match.
286
+
287
+ if (next > 0) builder_elements.push(SubString(string, 0, next));
288
+
289
+ while (true) {
290
+ var expansion = '$';
291
+ var position = next + 1;
292
+ if (position < length) {
293
+ var peek = %_StringCharCodeAt(string, position);
294
+ if (peek == 36) { // $$
295
+ ++position;
296
+ builder_elements.push('$');
297
+ } else if (peek == 38) { // $& - match
298
+ ++position;
299
+ builder.addSpecialSlice(matchInfo[CAPTURE0],
300
+ matchInfo[CAPTURE1]);
301
+ } else if (peek == 96) { // $` - prefix
302
+ ++position;
303
+ builder.addSpecialSlice(0, matchInfo[CAPTURE0]);
304
+ } else if (peek == 39) { // $' - suffix
305
+ ++position;
306
+ builder.addSpecialSlice(matchInfo[CAPTURE1], subject.length);
307
+ } else if (peek >= 48 && peek <= 57) { // $n, 0 <= n <= 9
308
+ ++position;
309
+ var n = peek - 48;
310
+ if (position < length) {
311
+ peek = %_StringCharCodeAt(string, position);
312
+ // $nn, 01 <= nn <= 99
313
+ if (n != 0 && peek == 48 || peek >= 49 && peek <= 57) {
314
+ var nn = n * 10 + (peek - 48);
315
+ if (nn < m) {
316
+ // If the two digit capture reference is within range of
317
+ // the captures, we use it instead of the single digit
318
+ // one. Otherwise, we fall back to using the single
319
+ // digit reference. This matches the behavior of
320
+ // SpiderMonkey.
321
+ ++position;
322
+ n = nn;
323
+ }
324
+ }
325
+ }
326
+ if (0 < n && n < m) {
327
+ addCaptureString(builder, matchInfo, n);
328
+ } else {
329
+ // Because of the captures range check in the parsing of two
330
+ // digit capture references, we can only enter here when a
331
+ // single digit capture reference is outside the range of
332
+ // captures.
333
+ builder_elements.push('$');
334
+ --position;
335
+ }
336
+ } else {
337
+ builder_elements.push('$');
338
+ }
339
+ } else {
340
+ builder_elements.push('$');
341
+ }
342
+
343
+ // Go the the next $ in the string.
344
+ next = %StringIndexOf(string, '$', position);
345
+
346
+ // Return if there are no more $ characters in the string. If we
347
+ // haven't reached the end, we need to append the suffix.
348
+ if (next < 0) {
349
+ if (position < length) {
350
+ builder_elements.push(SubString(string, position, length));
351
+ }
352
+ return;
353
+ }
354
+
355
+ // Append substring between the previous and the next $ character.
356
+ if (next > position) {
357
+ builder_elements.push(SubString(string, position, next));
358
+ }
359
+ }
360
+ };
361
+
362
+
363
+ // Compute the string of a given regular expression capture.
364
+ function CaptureString(string, lastCaptureInfo, index) {
365
+ // Scale the index.
366
+ var scaled = index << 1;
367
+ // Compute start and end.
368
+ var start = lastCaptureInfo[CAPTURE(scaled)];
369
+ // If start isn't valid, return undefined.
370
+ if (start < 0) return;
371
+ var end = lastCaptureInfo[CAPTURE(scaled + 1)];
372
+ return SubString(string, start, end);
373
+ };
374
+
375
+
376
+ // Add the string of a given regular expression capture to the
377
+ // ReplaceResultBuilder
378
+ function addCaptureString(builder, matchInfo, index) {
379
+ // Scale the index.
380
+ var scaled = index << 1;
381
+ // Compute start and end.
382
+ var start = matchInfo[CAPTURE(scaled)];
383
+ if (start < 0) return;
384
+ var end = matchInfo[CAPTURE(scaled + 1)];
385
+ builder.addSpecialSlice(start, end);
386
+ };
387
+
388
+ // TODO(lrn): This array will survive indefinitely if replace is never
389
+ // called again. However, it will be empty, since the contents are cleared
390
+ // in the finally block.
391
+ var reusableReplaceArray = new InternalArray(16);
392
+
393
+ // Helper function for replacing regular expressions with the result of a
394
+ // function application in String.prototype.replace.
395
+ function StringReplaceGlobalRegExpWithFunction(subject, regexp, replace) {
396
+ var resultArray = reusableReplaceArray;
397
+ if (resultArray) {
398
+ reusableReplaceArray = null;
399
+ } else {
400
+ // Inside a nested replace (replace called from the replacement function
401
+ // of another replace) or we have failed to set the reusable array
402
+ // back due to an exception in a replacement function. Create a new
403
+ // array to use in the future, or until the original is written back.
404
+ resultArray = new InternalArray(16);
405
+ }
406
+ var res = %RegExpExecMultiple(regexp,
407
+ subject,
408
+ lastMatchInfo,
409
+ resultArray);
410
+ regexp.lastIndex = 0;
411
+ if (IS_NULL(res)) {
412
+ // No matches at all.
413
+ reusableReplaceArray = resultArray;
414
+ return subject;
415
+ }
416
+ var len = res.length;
417
+ var i = 0;
418
+ if (NUMBER_OF_CAPTURES(lastMatchInfo) == 2) {
419
+ var match_start = 0;
420
+ var override = new InternalArray(null, 0, subject);
421
+ var receiver = %GetGlobalReceiver();
422
+ while (i < len) {
423
+ var elem = res[i];
424
+ if (%_IsSmi(elem)) {
425
+ if (elem > 0) {
426
+ match_start = (elem >> 11) + (elem & 0x7ff);
427
+ } else {
428
+ match_start = res[++i] - elem;
429
+ }
430
+ } else {
431
+ override[0] = elem;
432
+ override[1] = match_start;
433
+ lastMatchInfoOverride = override;
434
+ var func_result =
435
+ %_CallFunction(receiver, elem, match_start, subject, replace);
436
+ res[i] = TO_STRING_INLINE(func_result);
437
+ match_start += elem.length;
438
+ }
439
+ i++;
440
+ }
441
+ } else {
442
+ while (i < len) {
443
+ var elem = res[i];
444
+ if (!%_IsSmi(elem)) {
445
+ // elem must be an Array.
446
+ // Use the apply argument as backing for global RegExp properties.
447
+ lastMatchInfoOverride = elem;
448
+ var func_result = replace.apply(null, elem);
449
+ res[i] = TO_STRING_INLINE(func_result);
450
+ }
451
+ i++;
452
+ }
453
+ }
454
+ var resultBuilder = new ReplaceResultBuilder(subject, res);
455
+ var result = resultBuilder.generate();
456
+ resultArray.length = 0;
457
+ reusableReplaceArray = resultArray;
458
+ return result;
459
+ }
460
+
461
+
462
+ function StringReplaceNonGlobalRegExpWithFunction(subject, regexp, replace) {
463
+ var matchInfo = DoRegExpExec(regexp, subject, 0);
464
+ if (IS_NULL(matchInfo)) return subject;
465
+ var result = new ReplaceResultBuilder(subject);
466
+ var index = matchInfo[CAPTURE0];
467
+ result.addSpecialSlice(0, index);
468
+ var endOfMatch = matchInfo[CAPTURE1];
469
+ // Compute the parameter list consisting of the match, captures, index,
470
+ // and subject for the replace function invocation.
471
+ // The number of captures plus one for the match.
472
+ var m = NUMBER_OF_CAPTURES(matchInfo) >> 1;
473
+ var replacement;
474
+ if (m == 1) {
475
+ // No captures, only the match, which is always valid.
476
+ var s = SubString(subject, index, endOfMatch);
477
+ // Don't call directly to avoid exposing the built-in global object.
478
+ replacement =
479
+ %_CallFunction(%GetGlobalReceiver(), s, index, subject, replace);
480
+ } else {
481
+ var parameters = new InternalArray(m + 2);
482
+ for (var j = 0; j < m; j++) {
483
+ parameters[j] = CaptureString(subject, matchInfo, j);
484
+ }
485
+ parameters[j] = index;
486
+ parameters[j + 1] = subject;
487
+
488
+ replacement = replace.apply(null, parameters);
489
+ }
490
+
491
+ result.add(replacement); // The add method converts to string if necessary.
492
+ // Can't use matchInfo any more from here, since the function could
493
+ // overwrite it.
494
+ result.addSpecialSlice(endOfMatch, subject.length);
495
+ return result.generate();
496
+ }
497
+
498
+
499
+ // ECMA-262 section 15.5.4.12
500
+ function StringSearch(re) {
501
+ if (IS_NULL_OR_UNDEFINED(this) && !IS_UNDETECTABLE(this)) {
502
+ throw MakeTypeError("called_on_null_or_undefined",
503
+ ["String.prototype.search"]);
504
+ }
505
+ var regexp;
506
+ if (IS_STRING(re)) {
507
+ regexp = %_GetFromCache(STRING_TO_REGEXP_CACHE_ID, re);
508
+ } else if (IS_REGEXP(re)) {
509
+ regexp = re;
510
+ } else {
511
+ regexp = new $RegExp(re);
512
+ }
513
+ var match = DoRegExpExec(regexp, TO_STRING_INLINE(this), 0);
514
+ if (match) {
515
+ return match[CAPTURE0];
516
+ }
517
+ return -1;
518
+ }
519
+
520
+
521
+ // ECMA-262 section 15.5.4.13
522
+ function StringSlice(start, end) {
523
+ if (IS_NULL_OR_UNDEFINED(this) && !IS_UNDETECTABLE(this)) {
524
+ throw MakeTypeError("called_on_null_or_undefined",
525
+ ["String.prototype.slice"]);
526
+ }
527
+ var s = TO_STRING_INLINE(this);
528
+ var s_len = s.length;
529
+ var start_i = TO_INTEGER(start);
530
+ var end_i = s_len;
531
+ if (end !== void 0)
532
+ end_i = TO_INTEGER(end);
533
+
534
+ if (start_i < 0) {
535
+ start_i += s_len;
536
+ if (start_i < 0)
537
+ start_i = 0;
538
+ } else {
539
+ if (start_i > s_len)
540
+ start_i = s_len;
541
+ }
542
+
543
+ if (end_i < 0) {
544
+ end_i += s_len;
545
+ if (end_i < 0)
546
+ end_i = 0;
547
+ } else {
548
+ if (end_i > s_len)
549
+ end_i = s_len;
550
+ }
551
+
552
+ var num_c = end_i - start_i;
553
+ if (num_c < 0)
554
+ num_c = 0;
555
+
556
+ return SubString(s, start_i, start_i + num_c);
557
+ }
558
+
559
+
560
+ // ECMA-262 section 15.5.4.14
561
+ function StringSplit(separator, limit) {
562
+ if (IS_NULL_OR_UNDEFINED(this) && !IS_UNDETECTABLE(this)) {
563
+ throw MakeTypeError("called_on_null_or_undefined",
564
+ ["String.prototype.split"]);
565
+ }
566
+ var subject = TO_STRING_INLINE(this);
567
+ limit = (IS_UNDEFINED(limit)) ? 0xffffffff : TO_UINT32(limit);
568
+ if (limit === 0) return [];
569
+
570
+ // ECMA-262 says that if separator is undefined, the result should
571
+ // be an array of size 1 containing the entire string. SpiderMonkey
572
+ // and KJS have this behavior only when no separator is given. If
573
+ // undefined is explicitly given, they convert it to a string and
574
+ // use that. We do as SpiderMonkey and KJS.
575
+ if (%_ArgumentsLength() === 0) {
576
+ return [subject];
577
+ }
578
+
579
+ var length = subject.length;
580
+ if (!IS_REGEXP(separator)) {
581
+ separator = TO_STRING_INLINE(separator);
582
+ var separator_length = separator.length;
583
+
584
+ // If the separator string is empty then return the elements in the subject.
585
+ if (separator_length === 0) return %StringToArray(subject, limit);
586
+
587
+ var result = %StringSplit(subject, separator, limit);
588
+
589
+ return result;
590
+ }
591
+
592
+ %_Log('regexp', 'regexp-split,%0S,%1r', [subject, separator]);
593
+
594
+ if (length === 0) {
595
+ if (DoRegExpExec(separator, subject, 0, 0) != null) {
596
+ return [];
597
+ }
598
+ return [subject];
599
+ }
600
+
601
+ var currentIndex = 0;
602
+ var startIndex = 0;
603
+ var startMatch = 0;
604
+ var result = [];
605
+
606
+ outer_loop:
607
+ while (true) {
608
+
609
+ if (startIndex === length) {
610
+ result.push(SubString(subject, currentIndex, length));
611
+ break;
612
+ }
613
+
614
+ var matchInfo = DoRegExpExec(separator, subject, startIndex);
615
+ if (matchInfo == null || length === (startMatch = matchInfo[CAPTURE0])) {
616
+ result.push(SubString(subject, currentIndex, length));
617
+ break;
618
+ }
619
+ var endIndex = matchInfo[CAPTURE1];
620
+
621
+ // We ignore a zero-length match at the currentIndex.
622
+ if (startIndex === endIndex && endIndex === currentIndex) {
623
+ startIndex++;
624
+ continue;
625
+ }
626
+
627
+ if (currentIndex + 1 == startMatch) {
628
+ result.push(%_StringCharAt(subject, currentIndex));
629
+ } else {
630
+ result.push(%_SubString(subject, currentIndex, startMatch));
631
+ }
632
+
633
+ if (result.length === limit) break;
634
+
635
+ var matchinfo_len = NUMBER_OF_CAPTURES(matchInfo) + REGEXP_FIRST_CAPTURE;
636
+ for (var i = REGEXP_FIRST_CAPTURE + 2; i < matchinfo_len; ) {
637
+ var start = matchInfo[i++];
638
+ var end = matchInfo[i++];
639
+ if (end != -1) {
640
+ if (start + 1 == end) {
641
+ result.push(%_StringCharAt(subject, start));
642
+ } else {
643
+ result.push(%_SubString(subject, start, end));
644
+ }
645
+ } else {
646
+ result.push(void 0);
647
+ }
648
+ if (result.length === limit) break outer_loop;
649
+ }
650
+
651
+ startIndex = currentIndex = endIndex;
652
+ }
653
+ return result;
654
+ }
655
+
656
+
657
+ // ECMA-262 section 15.5.4.15
658
+ function StringSubstring(start, end) {
659
+ if (IS_NULL_OR_UNDEFINED(this) && !IS_UNDETECTABLE(this)) {
660
+ throw MakeTypeError("called_on_null_or_undefined",
661
+ ["String.prototype.subString"]);
662
+ }
663
+ var s = TO_STRING_INLINE(this);
664
+ var s_len = s.length;
665
+
666
+ var start_i = TO_INTEGER(start);
667
+ if (start_i < 0) {
668
+ start_i = 0;
669
+ } else if (start_i > s_len) {
670
+ start_i = s_len;
671
+ }
672
+
673
+ var end_i = s_len;
674
+ if (!IS_UNDEFINED(end)) {
675
+ end_i = TO_INTEGER(end);
676
+ if (end_i > s_len) {
677
+ end_i = s_len;
678
+ } else {
679
+ if (end_i < 0) end_i = 0;
680
+ if (start_i > end_i) {
681
+ var tmp = end_i;
682
+ end_i = start_i;
683
+ start_i = tmp;
684
+ }
685
+ }
686
+ }
687
+
688
+ return (start_i + 1 == end_i
689
+ ? %_StringCharAt(s, start_i)
690
+ : %_SubString(s, start_i, end_i));
691
+ }
692
+
693
+
694
+ // This is not a part of ECMA-262.
695
+ function StringSubstr(start, n) {
696
+ if (IS_NULL_OR_UNDEFINED(this) && !IS_UNDETECTABLE(this)) {
697
+ throw MakeTypeError("called_on_null_or_undefined",
698
+ ["String.prototype.substr"]);
699
+ }
700
+ var s = TO_STRING_INLINE(this);
701
+ var len;
702
+
703
+ // Correct n: If not given, set to string length; if explicitly
704
+ // set to undefined, zero, or negative, returns empty string.
705
+ if (n === void 0) {
706
+ len = s.length;
707
+ } else {
708
+ len = TO_INTEGER(n);
709
+ if (len <= 0) return '';
710
+ }
711
+
712
+ // Correct start: If not given (or undefined), set to zero; otherwise
713
+ // convert to integer and handle negative case.
714
+ if (start === void 0) {
715
+ start = 0;
716
+ } else {
717
+ start = TO_INTEGER(start);
718
+ // If positive, and greater than or equal to the string length,
719
+ // return empty string.
720
+ if (start >= s.length) return '';
721
+ // If negative and absolute value is larger than the string length,
722
+ // use zero.
723
+ if (start < 0) {
724
+ start += s.length;
725
+ if (start < 0) start = 0;
726
+ }
727
+ }
728
+
729
+ var end = start + len;
730
+ if (end > s.length) end = s.length;
731
+
732
+ return (start + 1 == end
733
+ ? %_StringCharAt(s, start)
734
+ : %_SubString(s, start, end));
735
+ }
736
+
737
+
738
+ // ECMA-262, 15.5.4.16
739
+ function StringToLowerCase() {
740
+ if (IS_NULL_OR_UNDEFINED(this) && !IS_UNDETECTABLE(this)) {
741
+ throw MakeTypeError("called_on_null_or_undefined",
742
+ ["String.prototype.toLowerCase"]);
743
+ }
744
+ return %StringToLowerCase(TO_STRING_INLINE(this));
745
+ }
746
+
747
+
748
+ // ECMA-262, 15.5.4.17
749
+ function StringToLocaleLowerCase() {
750
+ if (IS_NULL_OR_UNDEFINED(this) && !IS_UNDETECTABLE(this)) {
751
+ throw MakeTypeError("called_on_null_or_undefined",
752
+ ["String.prototype.toLocaleLowerCase"]);
753
+ }
754
+ return %StringToLowerCase(TO_STRING_INLINE(this));
755
+ }
756
+
757
+
758
+ // ECMA-262, 15.5.4.18
759
+ function StringToUpperCase() {
760
+ if (IS_NULL_OR_UNDEFINED(this) && !IS_UNDETECTABLE(this)) {
761
+ throw MakeTypeError("called_on_null_or_undefined",
762
+ ["String.prototype.toUpperCase"]);
763
+ }
764
+ return %StringToUpperCase(TO_STRING_INLINE(this));
765
+ }
766
+
767
+
768
+ // ECMA-262, 15.5.4.19
769
+ function StringToLocaleUpperCase() {
770
+ if (IS_NULL_OR_UNDEFINED(this) && !IS_UNDETECTABLE(this)) {
771
+ throw MakeTypeError("called_on_null_or_undefined",
772
+ ["String.prototype.toLocaleUpperCase"]);
773
+ }
774
+ return %StringToUpperCase(TO_STRING_INLINE(this));
775
+ }
776
+
777
+ // ES5, 15.5.4.20
778
+ function StringTrim() {
779
+ if (IS_NULL_OR_UNDEFINED(this) && !IS_UNDETECTABLE(this)) {
780
+ throw MakeTypeError("called_on_null_or_undefined",
781
+ ["String.prototype.trim"]);
782
+ }
783
+ return %StringTrim(TO_STRING_INLINE(this), true, true);
784
+ }
785
+
786
+ function StringTrimLeft() {
787
+ if (IS_NULL_OR_UNDEFINED(this) && !IS_UNDETECTABLE(this)) {
788
+ throw MakeTypeError("called_on_null_or_undefined",
789
+ ["String.prototype.trimLeft"]);
790
+ }
791
+ return %StringTrim(TO_STRING_INLINE(this), true, false);
792
+ }
793
+
794
+ function StringTrimRight() {
795
+ if (IS_NULL_OR_UNDEFINED(this) && !IS_UNDETECTABLE(this)) {
796
+ throw MakeTypeError("called_on_null_or_undefined",
797
+ ["String.prototype.trimRight"]);
798
+ }
799
+ return %StringTrim(TO_STRING_INLINE(this), false, true);
800
+ }
801
+
802
+ var static_charcode_array = new InternalArray(4);
803
+
804
+ // ECMA-262, section 15.5.3.2
805
+ function StringFromCharCode(code) {
806
+ var n = %_ArgumentsLength();
807
+ if (n == 1) {
808
+ if (!%_IsSmi(code)) code = ToNumber(code);
809
+ return %_StringCharFromCode(code & 0xffff);
810
+ }
811
+
812
+ // NOTE: This is not super-efficient, but it is necessary because we
813
+ // want to avoid converting to numbers from within the virtual
814
+ // machine. Maybe we can find another way of doing this?
815
+ var codes = static_charcode_array;
816
+ for (var i = 0; i < n; i++) {
817
+ var code = %_Arguments(i);
818
+ if (!%_IsSmi(code)) code = ToNumber(code);
819
+ codes[i] = code;
820
+ }
821
+ codes.length = n;
822
+ return %StringFromCharCodeArray(codes);
823
+ }
824
+
825
+
826
+ // Helper function for very basic XSS protection.
827
+ function HtmlEscape(str) {
828
+ return TO_STRING_INLINE(str).replace(/</g, "&lt;")
829
+ .replace(/>/g, "&gt;")
830
+ .replace(/"/g, "&quot;")
831
+ .replace(/'/g, "&#039;");
832
+ };
833
+
834
+
835
+ // Compatibility support for KJS.
836
+ // Tested by mozilla/js/tests/js1_5/Regress/regress-276103.js.
837
+ function StringLink(s) {
838
+ return "<a href=\"" + HtmlEscape(s) + "\">" + this + "</a>";
839
+ }
840
+
841
+
842
+ function StringAnchor(name) {
843
+ return "<a name=\"" + HtmlEscape(name) + "\">" + this + "</a>";
844
+ }
845
+
846
+
847
+ function StringFontcolor(color) {
848
+ return "<font color=\"" + HtmlEscape(color) + "\">" + this + "</font>";
849
+ }
850
+
851
+
852
+ function StringFontsize(size) {
853
+ return "<font size=\"" + HtmlEscape(size) + "\">" + this + "</font>";
854
+ }
855
+
856
+
857
+ function StringBig() {
858
+ return "<big>" + this + "</big>";
859
+ }
860
+
861
+
862
+ function StringBlink() {
863
+ return "<blink>" + this + "</blink>";
864
+ }
865
+
866
+
867
+ function StringBold() {
868
+ return "<b>" + this + "</b>";
869
+ }
870
+
871
+
872
+ function StringFixed() {
873
+ return "<tt>" + this + "</tt>";
874
+ }
875
+
876
+
877
+ function StringItalics() {
878
+ return "<i>" + this + "</i>";
879
+ }
880
+
881
+
882
+ function StringSmall() {
883
+ return "<small>" + this + "</small>";
884
+ }
885
+
886
+
887
+ function StringStrike() {
888
+ return "<strike>" + this + "</strike>";
889
+ }
890
+
891
+
892
+ function StringSub() {
893
+ return "<sub>" + this + "</sub>";
894
+ }
895
+
896
+
897
+ function StringSup() {
898
+ return "<sup>" + this + "</sup>";
899
+ }
900
+
901
+
902
+ // ReplaceResultBuilder support.
903
+ function ReplaceResultBuilder(str) {
904
+ if (%_ArgumentsLength() > 1) {
905
+ this.elements = %_Arguments(1);
906
+ } else {
907
+ this.elements = new InternalArray();
908
+ }
909
+ this.special_string = str;
910
+ }
911
+
912
+
913
+ ReplaceResultBuilder.prototype.add = function(str) {
914
+ str = TO_STRING_INLINE(str);
915
+ if (str.length > 0) this.elements.push(str);
916
+ }
917
+
918
+
919
+ ReplaceResultBuilder.prototype.addSpecialSlice = function(start, end) {
920
+ var len = end - start;
921
+ if (start < 0 || len <= 0) return;
922
+ if (start < 0x80000 && len < 0x800) {
923
+ this.elements.push((start << 11) | len);
924
+ } else {
925
+ // 0 < len <= String::kMaxLength and Smi::kMaxValue >= String::kMaxLength,
926
+ // so -len is a smi.
927
+ var elements = this.elements;
928
+ elements.push(-len);
929
+ elements.push(start);
930
+ }
931
+ }
932
+
933
+
934
+ ReplaceResultBuilder.prototype.generate = function() {
935
+ var elements = this.elements;
936
+ return %StringBuilderConcat(elements, elements.length, this.special_string);
937
+ }
938
+
939
+
940
+ // -------------------------------------------------------------------
941
+
942
+ function SetupString() {
943
+ // Setup the constructor property on the String prototype object.
944
+ %SetProperty($String.prototype, "constructor", $String, DONT_ENUM);
945
+
946
+
947
+ // Setup the non-enumerable functions on the String object.
948
+ InstallFunctions($String, DONT_ENUM, $Array(
949
+ "fromCharCode", StringFromCharCode
950
+ ));
951
+
952
+
953
+ // Setup the non-enumerable functions on the String prototype object.
954
+ InstallFunctionsOnHiddenPrototype($String.prototype, DONT_ENUM, $Array(
955
+ "valueOf", StringValueOf,
956
+ "toString", StringToString,
957
+ "charAt", StringCharAt,
958
+ "charCodeAt", StringCharCodeAt,
959
+ "concat", StringConcat,
960
+ "indexOf", StringIndexOf,
961
+ "lastIndexOf", StringLastIndexOf,
962
+ "localeCompare", StringLocaleCompare,
963
+ "match", StringMatch,
964
+ "replace", StringReplace,
965
+ "search", StringSearch,
966
+ "slice", StringSlice,
967
+ "split", StringSplit,
968
+ "substring", StringSubstring,
969
+ "substr", StringSubstr,
970
+ "toLowerCase", StringToLowerCase,
971
+ "toLocaleLowerCase", StringToLocaleLowerCase,
972
+ "toUpperCase", StringToUpperCase,
973
+ "toLocaleUpperCase", StringToLocaleUpperCase,
974
+ "trim", StringTrim,
975
+ "trimLeft", StringTrimLeft,
976
+ "trimRight", StringTrimRight,
977
+ "link", StringLink,
978
+ "anchor", StringAnchor,
979
+ "fontcolor", StringFontcolor,
980
+ "fontsize", StringFontsize,
981
+ "big", StringBig,
982
+ "blink", StringBlink,
983
+ "bold", StringBold,
984
+ "fixed", StringFixed,
985
+ "italics", StringItalics,
986
+ "small", StringSmall,
987
+ "strike", StringStrike,
988
+ "sub", StringSub,
989
+ "sup", StringSup
990
+ ));
991
+ }
992
+
993
+
994
+ SetupString();