libv8 3.3.10.4 → 3.5.10.beta1

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 (538) hide show
  1. data/lib/libv8/scons/CHANGES.txt +24 -231
  2. data/lib/libv8/scons/LICENSE.txt +1 -1
  3. data/lib/libv8/scons/MANIFEST +0 -1
  4. data/lib/libv8/scons/PKG-INFO +1 -1
  5. data/lib/libv8/scons/README.txt +9 -9
  6. data/lib/libv8/scons/RELEASE.txt +75 -77
  7. data/lib/libv8/scons/engine/SCons/Action.py +6 -22
  8. data/lib/libv8/scons/engine/SCons/Builder.py +2 -2
  9. data/lib/libv8/scons/engine/SCons/CacheDir.py +2 -2
  10. data/lib/libv8/scons/engine/SCons/Debug.py +2 -2
  11. data/lib/libv8/scons/engine/SCons/Defaults.py +10 -24
  12. data/lib/libv8/scons/engine/SCons/Environment.py +19 -118
  13. data/lib/libv8/scons/engine/SCons/Errors.py +2 -2
  14. data/lib/libv8/scons/engine/SCons/Executor.py +2 -2
  15. data/lib/libv8/scons/engine/SCons/Job.py +2 -2
  16. data/lib/libv8/scons/engine/SCons/Memoize.py +2 -2
  17. data/lib/libv8/scons/engine/SCons/Node/Alias.py +2 -2
  18. data/lib/libv8/scons/engine/SCons/Node/FS.py +121 -281
  19. data/lib/libv8/scons/engine/SCons/Node/Python.py +2 -2
  20. data/lib/libv8/scons/engine/SCons/Node/__init__.py +5 -6
  21. data/lib/libv8/scons/engine/SCons/Options/BoolOption.py +2 -2
  22. data/lib/libv8/scons/engine/SCons/Options/EnumOption.py +2 -2
  23. data/lib/libv8/scons/engine/SCons/Options/ListOption.py +2 -2
  24. data/lib/libv8/scons/engine/SCons/Options/PackageOption.py +2 -2
  25. data/lib/libv8/scons/engine/SCons/Options/PathOption.py +2 -2
  26. data/lib/libv8/scons/engine/SCons/Options/__init__.py +2 -2
  27. data/lib/libv8/scons/engine/SCons/PathList.py +2 -2
  28. data/lib/libv8/scons/engine/SCons/Platform/__init__.py +2 -2
  29. data/lib/libv8/scons/engine/SCons/Platform/aix.py +2 -2
  30. data/lib/libv8/scons/engine/SCons/Platform/cygwin.py +2 -2
  31. data/lib/libv8/scons/engine/SCons/Platform/darwin.py +3 -27
  32. data/lib/libv8/scons/engine/SCons/Platform/hpux.py +2 -2
  33. data/lib/libv8/scons/engine/SCons/Platform/irix.py +2 -2
  34. data/lib/libv8/scons/engine/SCons/Platform/os2.py +2 -2
  35. data/lib/libv8/scons/engine/SCons/Platform/posix.py +2 -2
  36. data/lib/libv8/scons/engine/SCons/Platform/sunos.py +2 -2
  37. data/lib/libv8/scons/engine/SCons/Platform/win32.py +2 -2
  38. data/lib/libv8/scons/engine/SCons/SConf.py +2 -2
  39. data/lib/libv8/scons/engine/SCons/SConsign.py +3 -9
  40. data/lib/libv8/scons/engine/SCons/Scanner/C.py +2 -2
  41. data/lib/libv8/scons/engine/SCons/Scanner/D.py +2 -2
  42. data/lib/libv8/scons/engine/SCons/Scanner/Dir.py +2 -2
  43. data/lib/libv8/scons/engine/SCons/Scanner/Fortran.py +2 -2
  44. data/lib/libv8/scons/engine/SCons/Scanner/IDL.py +2 -2
  45. data/lib/libv8/scons/engine/SCons/Scanner/LaTeX.py +2 -5
  46. data/lib/libv8/scons/engine/SCons/Scanner/Prog.py +2 -2
  47. data/lib/libv8/scons/engine/SCons/Scanner/RC.py +3 -3
  48. data/lib/libv8/scons/engine/SCons/Scanner/__init__.py +2 -2
  49. data/lib/libv8/scons/engine/SCons/Script/Interactive.py +2 -2
  50. data/lib/libv8/scons/engine/SCons/Script/Main.py +11 -82
  51. data/lib/libv8/scons/engine/SCons/Script/SConsOptions.py +5 -5
  52. data/lib/libv8/scons/engine/SCons/Script/SConscript.py +2 -2
  53. data/lib/libv8/scons/engine/SCons/Script/__init__.py +2 -2
  54. data/lib/libv8/scons/engine/SCons/Sig.py +2 -2
  55. data/lib/libv8/scons/engine/SCons/Subst.py +2 -2
  56. data/lib/libv8/scons/engine/SCons/Taskmaster.py +2 -10
  57. data/lib/libv8/scons/engine/SCons/Tool/386asm.py +2 -2
  58. data/lib/libv8/scons/engine/SCons/Tool/BitKeeper.py +2 -2
  59. data/lib/libv8/scons/engine/SCons/Tool/CVS.py +2 -2
  60. data/lib/libv8/scons/engine/SCons/Tool/FortranCommon.py +2 -19
  61. data/lib/libv8/scons/engine/SCons/Tool/JavaCommon.py +2 -2
  62. data/lib/libv8/scons/engine/SCons/Tool/MSCommon/__init__.py +2 -2
  63. data/lib/libv8/scons/engine/SCons/Tool/MSCommon/arch.py +2 -2
  64. data/lib/libv8/scons/engine/SCons/Tool/MSCommon/common.py +2 -2
  65. data/lib/libv8/scons/engine/SCons/Tool/MSCommon/netframework.py +2 -2
  66. data/lib/libv8/scons/engine/SCons/Tool/MSCommon/sdk.py +2 -2
  67. data/lib/libv8/scons/engine/SCons/Tool/MSCommon/vc.py +6 -9
  68. data/lib/libv8/scons/engine/SCons/Tool/MSCommon/vs.py +2 -29
  69. data/lib/libv8/scons/engine/SCons/Tool/Perforce.py +2 -2
  70. data/lib/libv8/scons/engine/SCons/Tool/PharLapCommon.py +2 -2
  71. data/lib/libv8/scons/engine/SCons/Tool/RCS.py +2 -2
  72. data/lib/libv8/scons/engine/SCons/Tool/SCCS.py +2 -2
  73. data/lib/libv8/scons/engine/SCons/Tool/Subversion.py +2 -2
  74. data/lib/libv8/scons/engine/SCons/Tool/__init__.py +3 -3
  75. data/lib/libv8/scons/engine/SCons/Tool/aixc++.py +2 -2
  76. data/lib/libv8/scons/engine/SCons/Tool/aixcc.py +2 -2
  77. data/lib/libv8/scons/engine/SCons/Tool/aixf77.py +2 -2
  78. data/lib/libv8/scons/engine/SCons/Tool/aixlink.py +2 -2
  79. data/lib/libv8/scons/engine/SCons/Tool/applelink.py +2 -2
  80. data/lib/libv8/scons/engine/SCons/Tool/ar.py +2 -2
  81. data/lib/libv8/scons/engine/SCons/Tool/as.py +2 -2
  82. data/lib/libv8/scons/engine/SCons/Tool/bcc32.py +2 -2
  83. data/lib/libv8/scons/engine/SCons/Tool/c++.py +2 -2
  84. data/lib/libv8/scons/engine/SCons/Tool/cc.py +2 -2
  85. data/lib/libv8/scons/engine/SCons/Tool/cvf.py +2 -2
  86. data/lib/libv8/scons/engine/SCons/Tool/default.py +2 -2
  87. data/lib/libv8/scons/engine/SCons/Tool/dmd.py +7 -24
  88. data/lib/libv8/scons/engine/SCons/Tool/dvi.py +2 -2
  89. data/lib/libv8/scons/engine/SCons/Tool/dvipdf.py +2 -3
  90. data/lib/libv8/scons/engine/SCons/Tool/dvips.py +2 -3
  91. data/lib/libv8/scons/engine/SCons/Tool/f77.py +2 -2
  92. data/lib/libv8/scons/engine/SCons/Tool/f90.py +2 -2
  93. data/lib/libv8/scons/engine/SCons/Tool/f95.py +2 -2
  94. data/lib/libv8/scons/engine/SCons/Tool/filesystem.py +2 -2
  95. data/lib/libv8/scons/engine/SCons/Tool/fortran.py +2 -2
  96. data/lib/libv8/scons/engine/SCons/Tool/g++.py +2 -2
  97. data/lib/libv8/scons/engine/SCons/Tool/g77.py +2 -2
  98. data/lib/libv8/scons/engine/SCons/Tool/gas.py +2 -2
  99. data/lib/libv8/scons/engine/SCons/Tool/gcc.py +2 -2
  100. data/lib/libv8/scons/engine/SCons/Tool/gfortran.py +3 -3
  101. data/lib/libv8/scons/engine/SCons/Tool/gnulink.py +3 -2
  102. data/lib/libv8/scons/engine/SCons/Tool/gs.py +2 -2
  103. data/lib/libv8/scons/engine/SCons/Tool/hpc++.py +2 -2
  104. data/lib/libv8/scons/engine/SCons/Tool/hpcc.py +2 -2
  105. data/lib/libv8/scons/engine/SCons/Tool/hplink.py +2 -2
  106. data/lib/libv8/scons/engine/SCons/Tool/icc.py +2 -2
  107. data/lib/libv8/scons/engine/SCons/Tool/icl.py +2 -2
  108. data/lib/libv8/scons/engine/SCons/Tool/ifl.py +2 -2
  109. data/lib/libv8/scons/engine/SCons/Tool/ifort.py +2 -2
  110. data/lib/libv8/scons/engine/SCons/Tool/ilink.py +2 -2
  111. data/lib/libv8/scons/engine/SCons/Tool/ilink32.py +2 -2
  112. data/lib/libv8/scons/engine/SCons/Tool/install.py +3 -57
  113. data/lib/libv8/scons/engine/SCons/Tool/intelc.py +25 -65
  114. data/lib/libv8/scons/engine/SCons/Tool/ipkg.py +2 -2
  115. data/lib/libv8/scons/engine/SCons/Tool/jar.py +3 -9
  116. data/lib/libv8/scons/engine/SCons/Tool/javac.py +2 -2
  117. data/lib/libv8/scons/engine/SCons/Tool/javah.py +2 -2
  118. data/lib/libv8/scons/engine/SCons/Tool/latex.py +2 -3
  119. data/lib/libv8/scons/engine/SCons/Tool/lex.py +2 -2
  120. data/lib/libv8/scons/engine/SCons/Tool/link.py +5 -6
  121. data/lib/libv8/scons/engine/SCons/Tool/linkloc.py +2 -2
  122. data/lib/libv8/scons/engine/SCons/Tool/m4.py +2 -2
  123. data/lib/libv8/scons/engine/SCons/Tool/masm.py +2 -2
  124. data/lib/libv8/scons/engine/SCons/Tool/midl.py +2 -2
  125. data/lib/libv8/scons/engine/SCons/Tool/mingw.py +10 -31
  126. data/lib/libv8/scons/engine/SCons/Tool/mslib.py +2 -2
  127. data/lib/libv8/scons/engine/SCons/Tool/mslink.py +9 -61
  128. data/lib/libv8/scons/engine/SCons/Tool/mssdk.py +2 -2
  129. data/lib/libv8/scons/engine/SCons/Tool/msvc.py +11 -21
  130. data/lib/libv8/scons/engine/SCons/Tool/msvs.py +59 -477
  131. data/lib/libv8/scons/engine/SCons/Tool/mwcc.py +2 -2
  132. data/lib/libv8/scons/engine/SCons/Tool/mwld.py +2 -2
  133. data/lib/libv8/scons/engine/SCons/Tool/nasm.py +2 -2
  134. data/lib/libv8/scons/engine/SCons/Tool/packaging/__init__.py +2 -2
  135. data/lib/libv8/scons/engine/SCons/Tool/packaging/ipk.py +2 -2
  136. data/lib/libv8/scons/engine/SCons/Tool/packaging/msi.py +2 -2
  137. data/lib/libv8/scons/engine/SCons/Tool/packaging/rpm.py +2 -2
  138. data/lib/libv8/scons/engine/SCons/Tool/packaging/src_tarbz2.py +2 -2
  139. data/lib/libv8/scons/engine/SCons/Tool/packaging/src_targz.py +2 -2
  140. data/lib/libv8/scons/engine/SCons/Tool/packaging/src_zip.py +2 -2
  141. data/lib/libv8/scons/engine/SCons/Tool/packaging/tarbz2.py +2 -2
  142. data/lib/libv8/scons/engine/SCons/Tool/packaging/targz.py +2 -2
  143. data/lib/libv8/scons/engine/SCons/Tool/packaging/zip.py +2 -2
  144. data/lib/libv8/scons/engine/SCons/Tool/pdf.py +2 -2
  145. data/lib/libv8/scons/engine/SCons/Tool/pdflatex.py +2 -3
  146. data/lib/libv8/scons/engine/SCons/Tool/pdftex.py +2 -3
  147. data/lib/libv8/scons/engine/SCons/Tool/qt.py +2 -2
  148. data/lib/libv8/scons/engine/SCons/Tool/rmic.py +3 -9
  149. data/lib/libv8/scons/engine/SCons/Tool/rpcgen.py +2 -2
  150. data/lib/libv8/scons/engine/SCons/Tool/rpm.py +2 -2
  151. data/lib/libv8/scons/engine/SCons/Tool/sgiar.py +2 -2
  152. data/lib/libv8/scons/engine/SCons/Tool/sgic++.py +2 -2
  153. data/lib/libv8/scons/engine/SCons/Tool/sgicc.py +2 -2
  154. data/lib/libv8/scons/engine/SCons/Tool/sgilink.py +3 -2
  155. data/lib/libv8/scons/engine/SCons/Tool/sunar.py +2 -2
  156. data/lib/libv8/scons/engine/SCons/Tool/sunc++.py +2 -2
  157. data/lib/libv8/scons/engine/SCons/Tool/suncc.py +2 -2
  158. data/lib/libv8/scons/engine/SCons/Tool/sunf77.py +2 -2
  159. data/lib/libv8/scons/engine/SCons/Tool/sunf90.py +2 -2
  160. data/lib/libv8/scons/engine/SCons/Tool/sunf95.py +2 -2
  161. data/lib/libv8/scons/engine/SCons/Tool/sunlink.py +3 -2
  162. data/lib/libv8/scons/engine/SCons/Tool/swig.py +5 -6
  163. data/lib/libv8/scons/engine/SCons/Tool/tar.py +2 -2
  164. data/lib/libv8/scons/engine/SCons/Tool/tex.py +43 -96
  165. data/lib/libv8/scons/engine/SCons/Tool/textfile.py +2 -2
  166. data/lib/libv8/scons/engine/SCons/Tool/tlib.py +2 -2
  167. data/lib/libv8/scons/engine/SCons/Tool/wix.py +2 -2
  168. data/lib/libv8/scons/engine/SCons/Tool/yacc.py +2 -12
  169. data/lib/libv8/scons/engine/SCons/Tool/zip.py +2 -2
  170. data/lib/libv8/scons/engine/SCons/Util.py +3 -3
  171. data/lib/libv8/scons/engine/SCons/Variables/BoolVariable.py +2 -2
  172. data/lib/libv8/scons/engine/SCons/Variables/EnumVariable.py +3 -3
  173. data/lib/libv8/scons/engine/SCons/Variables/ListVariable.py +2 -2
  174. data/lib/libv8/scons/engine/SCons/Variables/PackageVariable.py +2 -2
  175. data/lib/libv8/scons/engine/SCons/Variables/PathVariable.py +2 -2
  176. data/lib/libv8/scons/engine/SCons/Variables/__init__.py +2 -2
  177. data/lib/libv8/scons/engine/SCons/Warnings.py +2 -2
  178. data/lib/libv8/scons/engine/SCons/__init__.py +6 -6
  179. data/lib/libv8/scons/engine/SCons/compat/__init__.py +2 -2
  180. data/lib/libv8/scons/engine/SCons/compat/_scons_builtins.py +2 -2
  181. data/lib/libv8/scons/engine/SCons/compat/_scons_collections.py +2 -2
  182. data/lib/libv8/scons/engine/SCons/compat/_scons_dbm.py +2 -2
  183. data/lib/libv8/scons/engine/SCons/compat/_scons_hashlib.py +2 -2
  184. data/lib/libv8/scons/engine/SCons/compat/_scons_io.py +2 -2
  185. data/lib/libv8/scons/engine/SCons/cpp.py +2 -2
  186. data/lib/libv8/scons/engine/SCons/dblite.py +1 -4
  187. data/lib/libv8/scons/engine/SCons/exitfuncs.py +2 -2
  188. data/lib/libv8/scons/scons-time.1 +3 -3
  189. data/lib/libv8/scons/scons.1 +1164 -1170
  190. data/lib/libv8/scons/sconsign.1 +3 -3
  191. data/lib/libv8/scons/script/scons +22 -22
  192. data/lib/libv8/scons/script/scons-time +2 -2
  193. data/lib/libv8/scons/script/scons.bat +4 -7
  194. data/lib/libv8/scons/script/sconsign +20 -21
  195. data/lib/libv8/scons/setup.cfg +1 -0
  196. data/lib/libv8/scons/setup.py +40 -38
  197. data/lib/libv8/v8/.gitignore +1 -1
  198. data/lib/libv8/v8/AUTHORS +2 -0
  199. data/lib/libv8/v8/ChangeLog +387 -0
  200. data/lib/libv8/v8/Makefile +171 -0
  201. data/lib/libv8/v8/SConstruct +124 -51
  202. data/lib/libv8/v8/build/README.txt +31 -14
  203. data/lib/libv8/v8/build/all.gyp +11 -4
  204. data/lib/libv8/v8/build/armu.gypi +6 -2
  205. data/lib/libv8/v8/build/common.gypi +240 -94
  206. data/lib/libv8/v8/build/gyp_v8 +32 -4
  207. data/lib/libv8/v8/build/standalone.gypi +200 -0
  208. data/lib/libv8/v8/include/v8-debug.h +0 -0
  209. data/lib/libv8/v8/include/v8-profiler.h +8 -11
  210. data/lib/libv8/v8/include/v8.h +191 -108
  211. data/lib/libv8/v8/preparser/SConscript +2 -2
  212. data/lib/libv8/v8/preparser/preparser-process.cc +3 -3
  213. data/lib/libv8/v8/preparser/preparser.gyp +42 -0
  214. data/lib/libv8/v8/src/SConscript +33 -8
  215. data/lib/libv8/v8/src/accessors.cc +77 -43
  216. data/lib/libv8/v8/src/api.cc +393 -191
  217. data/lib/libv8/v8/src/api.h +4 -8
  218. data/lib/libv8/v8/src/apinatives.js +15 -3
  219. data/lib/libv8/v8/src/arguments.h +8 -0
  220. data/lib/libv8/v8/src/arm/assembler-arm.cc +120 -120
  221. data/lib/libv8/v8/src/arm/assembler-arm.h +92 -43
  222. data/lib/libv8/v8/src/arm/builtins-arm.cc +32 -39
  223. data/lib/libv8/v8/src/arm/code-stubs-arm.cc +572 -351
  224. data/lib/libv8/v8/src/arm/code-stubs-arm.h +8 -77
  225. data/lib/libv8/v8/src/arm/codegen-arm.h +0 -2
  226. data/lib/libv8/v8/src/arm/deoptimizer-arm.cc +50 -30
  227. data/lib/libv8/v8/src/arm/disasm-arm.cc +1 -1
  228. data/lib/libv8/v8/src/arm/frames-arm.h +9 -5
  229. data/lib/libv8/v8/src/arm/full-codegen-arm.cc +331 -432
  230. data/lib/libv8/v8/src/arm/ic-arm.cc +192 -124
  231. data/lib/libv8/v8/src/arm/lithium-arm.cc +216 -232
  232. data/lib/libv8/v8/src/arm/lithium-arm.h +106 -259
  233. data/lib/libv8/v8/src/arm/lithium-codegen-arm.cc +633 -642
  234. data/lib/libv8/v8/src/arm/lithium-codegen-arm.h +4 -4
  235. data/lib/libv8/v8/src/arm/lithium-gap-resolver-arm.cc +1 -3
  236. data/lib/libv8/v8/src/arm/macro-assembler-arm.cc +260 -185
  237. data/lib/libv8/v8/src/arm/macro-assembler-arm.h +45 -25
  238. data/lib/libv8/v8/src/arm/regexp-macro-assembler-arm.cc +25 -13
  239. data/lib/libv8/v8/src/arm/regexp-macro-assembler-arm.h +3 -0
  240. data/lib/libv8/v8/src/arm/stub-cache-arm.cc +413 -226
  241. data/lib/libv8/v8/src/array.js +38 -18
  242. data/lib/libv8/v8/src/assembler.cc +12 -5
  243. data/lib/libv8/v8/src/assembler.h +15 -9
  244. data/lib/libv8/v8/src/ast-inl.h +34 -25
  245. data/lib/libv8/v8/src/ast.cc +141 -72
  246. data/lib/libv8/v8/src/ast.h +255 -181
  247. data/lib/libv8/v8/src/bignum.cc +3 -4
  248. data/lib/libv8/v8/src/bootstrapper.cc +55 -11
  249. data/lib/libv8/v8/src/bootstrapper.h +3 -2
  250. data/lib/libv8/v8/src/builtins.cc +8 -2
  251. data/lib/libv8/v8/src/builtins.h +4 -0
  252. data/lib/libv8/v8/src/cached-powers.cc +8 -4
  253. data/lib/libv8/v8/src/checks.h +3 -3
  254. data/lib/libv8/v8/src/code-stubs.cc +173 -28
  255. data/lib/libv8/v8/src/code-stubs.h +104 -148
  256. data/lib/libv8/v8/src/codegen.cc +8 -8
  257. data/lib/libv8/v8/src/compilation-cache.cc +2 -47
  258. data/lib/libv8/v8/src/compilation-cache.h +0 -10
  259. data/lib/libv8/v8/src/compiler.cc +27 -16
  260. data/lib/libv8/v8/src/compiler.h +13 -18
  261. data/lib/libv8/v8/src/contexts.cc +107 -72
  262. data/lib/libv8/v8/src/contexts.h +70 -34
  263. data/lib/libv8/v8/src/conversions-inl.h +572 -14
  264. data/lib/libv8/v8/src/conversions.cc +9 -707
  265. data/lib/libv8/v8/src/conversions.h +23 -12
  266. data/lib/libv8/v8/src/cpu-profiler-inl.h +2 -19
  267. data/lib/libv8/v8/src/cpu-profiler.cc +4 -21
  268. data/lib/libv8/v8/src/cpu-profiler.h +8 -17
  269. data/lib/libv8/v8/src/d8-debug.cc +5 -3
  270. data/lib/libv8/v8/src/d8-debug.h +6 -7
  271. data/lib/libv8/v8/src/d8-posix.cc +1 -10
  272. data/lib/libv8/v8/src/d8.cc +721 -219
  273. data/lib/libv8/v8/src/d8.gyp +37 -12
  274. data/lib/libv8/v8/src/d8.h +141 -19
  275. data/lib/libv8/v8/src/d8.js +17 -8
  276. data/lib/libv8/v8/src/date.js +16 -5
  277. data/lib/libv8/v8/src/dateparser-inl.h +242 -39
  278. data/lib/libv8/v8/src/dateparser.cc +38 -4
  279. data/lib/libv8/v8/src/dateparser.h +170 -28
  280. data/lib/libv8/v8/src/debug-agent.cc +5 -3
  281. data/lib/libv8/v8/src/debug-agent.h +11 -7
  282. data/lib/libv8/v8/src/debug-debugger.js +65 -34
  283. data/lib/libv8/v8/src/debug.cc +30 -60
  284. data/lib/libv8/v8/src/debug.h +5 -3
  285. data/lib/libv8/v8/src/deoptimizer.cc +227 -10
  286. data/lib/libv8/v8/src/deoptimizer.h +133 -9
  287. data/lib/libv8/v8/src/disassembler.cc +22 -14
  288. data/lib/libv8/v8/src/diy-fp.cc +4 -3
  289. data/lib/libv8/v8/src/diy-fp.h +3 -3
  290. data/lib/libv8/v8/src/elements.cc +634 -0
  291. data/lib/libv8/v8/src/elements.h +95 -0
  292. data/lib/libv8/v8/src/execution.cc +5 -21
  293. data/lib/libv8/v8/src/extensions/experimental/break-iterator.cc +3 -1
  294. data/lib/libv8/v8/src/extensions/experimental/break-iterator.h +1 -1
  295. data/lib/libv8/v8/src/extensions/experimental/collator.cc +6 -2
  296. data/lib/libv8/v8/src/extensions/experimental/collator.h +1 -2
  297. data/lib/libv8/v8/src/extensions/experimental/datetime-format.cc +384 -0
  298. data/lib/libv8/v8/src/extensions/experimental/datetime-format.h +83 -0
  299. data/lib/libv8/v8/src/extensions/experimental/experimental.gyp +18 -7
  300. data/lib/libv8/v8/src/extensions/experimental/i18n-extension.cc +12 -16
  301. data/lib/libv8/v8/src/extensions/experimental/i18n-extension.h +1 -1
  302. data/lib/libv8/v8/src/extensions/experimental/i18n-js2c.py +126 -0
  303. data/lib/libv8/v8/src/extensions/experimental/i18n-locale.cc +3 -4
  304. data/lib/libv8/v8/src/extensions/experimental/i18n-locale.h +1 -1
  305. data/lib/libv8/v8/src/{shell.h → extensions/experimental/i18n-natives.h} +8 -20
  306. data/lib/libv8/v8/src/extensions/experimental/i18n-utils.cc +45 -1
  307. data/lib/libv8/v8/src/extensions/experimental/i18n-utils.h +21 -1
  308. data/lib/libv8/v8/src/extensions/experimental/i18n.js +211 -11
  309. data/lib/libv8/v8/src/extensions/experimental/language-matcher.cc +4 -3
  310. data/lib/libv8/v8/src/extensions/experimental/language-matcher.h +1 -1
  311. data/lib/libv8/v8/src/extensions/experimental/number-format.cc +374 -0
  312. data/lib/libv8/v8/src/extensions/experimental/number-format.h +71 -0
  313. data/lib/libv8/v8/src/factory.cc +89 -18
  314. data/lib/libv8/v8/src/factory.h +36 -8
  315. data/lib/libv8/v8/src/flag-definitions.h +11 -44
  316. data/lib/libv8/v8/src/frames-inl.h +8 -1
  317. data/lib/libv8/v8/src/frames.cc +39 -3
  318. data/lib/libv8/v8/src/frames.h +10 -3
  319. data/lib/libv8/v8/src/full-codegen.cc +311 -293
  320. data/lib/libv8/v8/src/full-codegen.h +183 -143
  321. data/lib/libv8/v8/src/func-name-inferrer.cc +29 -15
  322. data/lib/libv8/v8/src/func-name-inferrer.h +19 -9
  323. data/lib/libv8/v8/src/gdb-jit.cc +658 -55
  324. data/lib/libv8/v8/src/gdb-jit.h +6 -2
  325. data/lib/libv8/v8/src/global-handles.cc +368 -312
  326. data/lib/libv8/v8/src/global-handles.h +29 -36
  327. data/lib/libv8/v8/src/globals.h +3 -1
  328. data/lib/libv8/v8/src/handles.cc +43 -69
  329. data/lib/libv8/v8/src/handles.h +21 -16
  330. data/lib/libv8/v8/src/heap-inl.h +11 -13
  331. data/lib/libv8/v8/src/heap-profiler.cc +0 -999
  332. data/lib/libv8/v8/src/heap-profiler.h +0 -303
  333. data/lib/libv8/v8/src/heap.cc +366 -141
  334. data/lib/libv8/v8/src/heap.h +87 -26
  335. data/lib/libv8/v8/src/hydrogen-instructions.cc +192 -81
  336. data/lib/libv8/v8/src/hydrogen-instructions.h +711 -482
  337. data/lib/libv8/v8/src/hydrogen.cc +1146 -629
  338. data/lib/libv8/v8/src/hydrogen.h +100 -64
  339. data/lib/libv8/v8/src/ia32/assembler-ia32.cc +19 -0
  340. data/lib/libv8/v8/src/ia32/assembler-ia32.h +15 -2
  341. data/lib/libv8/v8/src/ia32/builtins-ia32.cc +34 -39
  342. data/lib/libv8/v8/src/ia32/code-stubs-ia32.cc +675 -377
  343. data/lib/libv8/v8/src/ia32/code-stubs-ia32.h +8 -69
  344. data/lib/libv8/v8/src/ia32/codegen-ia32.cc +1 -0
  345. data/lib/libv8/v8/src/ia32/codegen-ia32.h +0 -2
  346. data/lib/libv8/v8/src/ia32/cpu-ia32.cc +3 -2
  347. data/lib/libv8/v8/src/ia32/deoptimizer-ia32.cc +28 -3
  348. data/lib/libv8/v8/src/ia32/disasm-ia32.cc +21 -10
  349. data/lib/libv8/v8/src/ia32/frames-ia32.h +6 -5
  350. data/lib/libv8/v8/src/ia32/full-codegen-ia32.cc +459 -465
  351. data/lib/libv8/v8/src/ia32/ic-ia32.cc +196 -147
  352. data/lib/libv8/v8/src/ia32/lithium-codegen-ia32.cc +575 -650
  353. data/lib/libv8/v8/src/ia32/lithium-codegen-ia32.h +19 -21
  354. data/lib/libv8/v8/src/ia32/lithium-gap-resolver-ia32.cc +7 -2
  355. data/lib/libv8/v8/src/ia32/lithium-ia32.cc +261 -256
  356. data/lib/libv8/v8/src/ia32/lithium-ia32.h +234 -335
  357. data/lib/libv8/v8/src/ia32/macro-assembler-ia32.cc +224 -67
  358. data/lib/libv8/v8/src/ia32/macro-assembler-ia32.h +63 -19
  359. data/lib/libv8/v8/src/ia32/regexp-macro-assembler-ia32.cc +22 -8
  360. data/lib/libv8/v8/src/ia32/regexp-macro-assembler-ia32.h +3 -0
  361. data/lib/libv8/v8/src/ia32/stub-cache-ia32.cc +380 -239
  362. data/lib/libv8/v8/src/ic.cc +198 -234
  363. data/lib/libv8/v8/src/ic.h +32 -30
  364. data/lib/libv8/v8/src/interpreter-irregexp.cc +6 -4
  365. data/lib/libv8/v8/src/isolate.cc +112 -95
  366. data/lib/libv8/v8/src/isolate.h +55 -71
  367. data/lib/libv8/v8/src/json-parser.h +486 -48
  368. data/lib/libv8/v8/src/json.js +28 -23
  369. data/lib/libv8/v8/src/jsregexp.cc +163 -208
  370. data/lib/libv8/v8/src/jsregexp.h +0 -1
  371. data/lib/libv8/v8/src/lithium-allocator-inl.h +29 -27
  372. data/lib/libv8/v8/src/lithium-allocator.cc +22 -17
  373. data/lib/libv8/v8/src/lithium-allocator.h +8 -8
  374. data/lib/libv8/v8/src/lithium.cc +16 -11
  375. data/lib/libv8/v8/src/lithium.h +31 -34
  376. data/lib/libv8/v8/src/liveedit.cc +111 -15
  377. data/lib/libv8/v8/src/liveedit.h +3 -4
  378. data/lib/libv8/v8/src/liveobjectlist.cc +116 -80
  379. data/lib/libv8/v8/src/liveobjectlist.h +2 -2
  380. data/lib/libv8/v8/src/log-inl.h +0 -4
  381. data/lib/libv8/v8/src/log-utils.cc +25 -143
  382. data/lib/libv8/v8/src/log-utils.h +13 -92
  383. data/lib/libv8/v8/src/log.cc +26 -249
  384. data/lib/libv8/v8/src/log.h +6 -17
  385. data/lib/libv8/v8/src/macros.py +9 -6
  386. data/lib/libv8/v8/src/mark-compact.cc +276 -56
  387. data/lib/libv8/v8/src/mark-compact.h +20 -0
  388. data/lib/libv8/v8/src/messages.js +93 -39
  389. data/lib/libv8/v8/src/mips/assembler-mips-inl.h +9 -3
  390. data/lib/libv8/v8/src/mips/assembler-mips.cc +297 -189
  391. data/lib/libv8/v8/src/mips/assembler-mips.h +121 -54
  392. data/lib/libv8/v8/src/mips/builtins-mips.cc +23 -24
  393. data/lib/libv8/v8/src/mips/code-stubs-mips.cc +484 -263
  394. data/lib/libv8/v8/src/mips/code-stubs-mips.h +8 -83
  395. data/lib/libv8/v8/src/mips/codegen-mips.h +0 -2
  396. data/lib/libv8/v8/src/mips/constants-mips.h +37 -11
  397. data/lib/libv8/v8/src/mips/deoptimizer-mips.cc +6 -1
  398. data/lib/libv8/v8/src/mips/frames-mips.h +8 -7
  399. data/lib/libv8/v8/src/mips/full-codegen-mips.cc +258 -419
  400. data/lib/libv8/v8/src/mips/ic-mips.cc +181 -121
  401. data/lib/libv8/v8/src/mips/macro-assembler-mips.cc +640 -382
  402. data/lib/libv8/v8/src/mips/macro-assembler-mips.h +94 -89
  403. data/lib/libv8/v8/src/mips/regexp-macro-assembler-mips.cc +23 -10
  404. data/lib/libv8/v8/src/mips/regexp-macro-assembler-mips.h +6 -1
  405. data/lib/libv8/v8/src/mips/simulator-mips.cc +249 -49
  406. data/lib/libv8/v8/src/mips/simulator-mips.h +25 -1
  407. data/lib/libv8/v8/src/mips/stub-cache-mips.cc +373 -161
  408. data/lib/libv8/v8/src/mirror-debugger.js +55 -8
  409. data/lib/libv8/v8/src/misc-intrinsics.h +89 -0
  410. data/lib/libv8/v8/src/mksnapshot.cc +36 -4
  411. data/lib/libv8/v8/src/natives.h +5 -2
  412. data/lib/libv8/v8/src/objects-debug.cc +73 -6
  413. data/lib/libv8/v8/src/objects-inl.h +529 -164
  414. data/lib/libv8/v8/src/objects-printer.cc +67 -12
  415. data/lib/libv8/v8/src/objects-visiting.cc +13 -2
  416. data/lib/libv8/v8/src/objects-visiting.h +41 -1
  417. data/lib/libv8/v8/src/objects.cc +2200 -1177
  418. data/lib/libv8/v8/src/objects.h +912 -283
  419. data/lib/libv8/v8/src/parser.cc +566 -371
  420. data/lib/libv8/v8/src/parser.h +35 -33
  421. data/lib/libv8/v8/src/platform-cygwin.cc +10 -25
  422. data/lib/libv8/v8/src/platform-freebsd.cc +4 -29
  423. data/lib/libv8/v8/src/platform-linux.cc +60 -57
  424. data/lib/libv8/v8/src/platform-macos.cc +4 -27
  425. data/lib/libv8/v8/src/platform-nullos.cc +3 -16
  426. data/lib/libv8/v8/src/platform-openbsd.cc +247 -85
  427. data/lib/libv8/v8/src/platform-posix.cc +43 -1
  428. data/lib/libv8/v8/src/platform-solaris.cc +151 -112
  429. data/lib/libv8/v8/src/platform-tls.h +1 -1
  430. data/lib/libv8/v8/src/platform-win32.cc +65 -39
  431. data/lib/libv8/v8/src/platform.h +17 -14
  432. data/lib/libv8/v8/src/preparse-data-format.h +2 -2
  433. data/lib/libv8/v8/src/preparse-data.h +8 -2
  434. data/lib/libv8/v8/src/preparser-api.cc +2 -18
  435. data/lib/libv8/v8/src/preparser.cc +106 -65
  436. data/lib/libv8/v8/src/preparser.h +26 -5
  437. data/lib/libv8/v8/src/prettyprinter.cc +25 -43
  438. data/lib/libv8/v8/src/profile-generator-inl.h +0 -4
  439. data/lib/libv8/v8/src/profile-generator.cc +213 -34
  440. data/lib/libv8/v8/src/profile-generator.h +9 -9
  441. data/lib/libv8/v8/src/property.h +1 -0
  442. data/lib/libv8/v8/src/proxy.js +74 -4
  443. data/lib/libv8/v8/src/regexp-macro-assembler.cc +10 -6
  444. data/lib/libv8/v8/src/regexp.js +16 -11
  445. data/lib/libv8/v8/src/rewriter.cc +24 -133
  446. data/lib/libv8/v8/src/runtime-profiler.cc +27 -151
  447. data/lib/libv8/v8/src/runtime-profiler.h +5 -31
  448. data/lib/libv8/v8/src/runtime.cc +1450 -681
  449. data/lib/libv8/v8/src/runtime.h +47 -31
  450. data/lib/libv8/v8/src/runtime.js +2 -1
  451. data/lib/libv8/v8/src/scanner-base.cc +358 -220
  452. data/lib/libv8/v8/src/scanner-base.h +30 -138
  453. data/lib/libv8/v8/src/scanner.cc +0 -18
  454. data/lib/libv8/v8/src/scanner.h +0 -15
  455. data/lib/libv8/v8/src/scopeinfo.cc +3 -1
  456. data/lib/libv8/v8/src/scopeinfo.h +1 -6
  457. data/lib/libv8/v8/src/scopes.cc +243 -253
  458. data/lib/libv8/v8/src/scopes.h +58 -109
  459. data/lib/libv8/v8/src/serialize.cc +12 -54
  460. data/lib/libv8/v8/src/serialize.h +47 -0
  461. data/lib/libv8/v8/src/small-pointer-list.h +25 -0
  462. data/lib/libv8/v8/src/spaces-inl.h +4 -50
  463. data/lib/libv8/v8/src/spaces.cc +64 -131
  464. data/lib/libv8/v8/src/spaces.h +19 -70
  465. data/lib/libv8/v8/src/string-stream.cc +3 -1
  466. data/lib/libv8/v8/src/string.js +10 -6
  467. data/lib/libv8/v8/src/strtod.cc +7 -3
  468. data/lib/libv8/v8/src/stub-cache.cc +59 -129
  469. data/lib/libv8/v8/src/stub-cache.h +42 -54
  470. data/lib/libv8/v8/src/third_party/valgrind/valgrind.h +1447 -1339
  471. data/lib/libv8/v8/src/token.cc +4 -4
  472. data/lib/libv8/v8/src/token.h +6 -5
  473. data/lib/libv8/v8/src/type-info.cc +173 -129
  474. data/lib/libv8/v8/src/type-info.h +40 -22
  475. data/lib/libv8/v8/src/utils.cc +25 -304
  476. data/lib/libv8/v8/src/utils.h +118 -3
  477. data/lib/libv8/v8/src/v8-counters.h +3 -6
  478. data/lib/libv8/v8/src/v8.cc +34 -27
  479. data/lib/libv8/v8/src/v8.h +7 -7
  480. data/lib/libv8/v8/src/v8conversions.cc +129 -0
  481. data/lib/libv8/v8/src/v8conversions.h +60 -0
  482. data/lib/libv8/v8/src/v8globals.h +15 -6
  483. data/lib/libv8/v8/src/v8natives.js +300 -78
  484. data/lib/libv8/v8/src/v8threads.cc +14 -6
  485. data/lib/libv8/v8/src/v8threads.h +4 -1
  486. data/lib/libv8/v8/src/v8utils.cc +360 -0
  487. data/lib/libv8/v8/src/v8utils.h +17 -66
  488. data/lib/libv8/v8/src/variables.cc +7 -12
  489. data/lib/libv8/v8/src/variables.h +12 -10
  490. data/lib/libv8/v8/src/version.cc +2 -2
  491. data/lib/libv8/v8/src/vm-state-inl.h +0 -41
  492. data/lib/libv8/v8/src/vm-state.h +0 -11
  493. data/lib/libv8/v8/src/weakmap.js +103 -0
  494. data/lib/libv8/v8/src/x64/assembler-x64.h +6 -3
  495. data/lib/libv8/v8/src/x64/builtins-x64.cc +25 -22
  496. data/lib/libv8/v8/src/x64/code-stubs-x64.cc +523 -250
  497. data/lib/libv8/v8/src/x64/code-stubs-x64.h +8 -71
  498. data/lib/libv8/v8/src/x64/codegen-x64.cc +1 -0
  499. data/lib/libv8/v8/src/x64/codegen-x64.h +0 -2
  500. data/lib/libv8/v8/src/x64/cpu-x64.cc +2 -1
  501. data/lib/libv8/v8/src/x64/deoptimizer-x64.cc +40 -8
  502. data/lib/libv8/v8/src/x64/disasm-x64.cc +12 -10
  503. data/lib/libv8/v8/src/x64/frames-x64.h +7 -6
  504. data/lib/libv8/v8/src/x64/full-codegen-x64.cc +310 -415
  505. data/lib/libv8/v8/src/x64/ic-x64.cc +180 -117
  506. data/lib/libv8/v8/src/x64/lithium-codegen-x64.cc +411 -523
  507. data/lib/libv8/v8/src/x64/lithium-codegen-x64.h +11 -6
  508. data/lib/libv8/v8/src/x64/lithium-x64.cc +191 -216
  509. data/lib/libv8/v8/src/x64/lithium-x64.h +112 -263
  510. data/lib/libv8/v8/src/x64/macro-assembler-x64.cc +177 -61
  511. data/lib/libv8/v8/src/x64/macro-assembler-x64.h +23 -7
  512. data/lib/libv8/v8/src/x64/regexp-macro-assembler-x64.cc +21 -9
  513. data/lib/libv8/v8/src/x64/regexp-macro-assembler-x64.h +6 -0
  514. data/lib/libv8/v8/src/x64/stub-cache-x64.cc +273 -107
  515. data/lib/libv8/v8/src/zone.cc +31 -22
  516. data/lib/libv8/v8/src/zone.h +12 -6
  517. data/lib/libv8/v8/tools/codemap.js +8 -0
  518. data/lib/libv8/v8/tools/gcmole/Makefile +43 -0
  519. data/lib/libv8/v8/tools/gcmole/gcmole.lua +0 -2
  520. data/lib/libv8/v8/tools/gdb-v8-support.py +154 -0
  521. data/lib/libv8/v8/tools/grokdump.py +44 -35
  522. data/lib/libv8/v8/tools/gyp/v8.gyp +94 -248
  523. data/lib/libv8/v8/tools/js2c.py +83 -52
  524. data/lib/libv8/v8/tools/linux-tick-processor +4 -6
  525. data/lib/libv8/v8/tools/ll_prof.py +3 -3
  526. data/lib/libv8/v8/tools/oom_dump/README +3 -1
  527. data/lib/libv8/v8/tools/presubmit.py +11 -4
  528. data/lib/libv8/v8/tools/profile.js +46 -2
  529. data/lib/libv8/v8/tools/splaytree.js +11 -0
  530. data/lib/libv8/v8/tools/stats-viewer.py +15 -11
  531. data/lib/libv8/v8/tools/test-wrapper-gypbuild.py +227 -0
  532. data/lib/libv8/v8/tools/test.py +28 -8
  533. data/lib/libv8/v8/tools/tickprocessor.js +0 -16
  534. data/lib/libv8/version.rb +1 -1
  535. data/libv8.gemspec +2 -2
  536. metadata +31 -19
  537. data/lib/libv8/scons/engine/SCons/Tool/f03.py +0 -63
  538. data/lib/libv8/v8/src/json-parser.cc +0 -504
@@ -0,0 +1,95 @@
1
+ // Copyright 2011 the V8 project authors. All rights reserved.
2
+ // Redistribution and use in source and binary forms, with or without
3
+ // modification, are permitted provided that the following conditions are
4
+ // met:
5
+ //
6
+ // * Redistributions of source code must retain the above copyright
7
+ // notice, this list of conditions and the following disclaimer.
8
+ // * Redistributions in binary form must reproduce the above
9
+ // copyright notice, this list of conditions and the following
10
+ // disclaimer in the documentation and/or other materials provided
11
+ // with the distribution.
12
+ // * Neither the name of Google Inc. nor the names of its
13
+ // contributors may be used to endorse or promote products derived
14
+ // from this software without specific prior written permission.
15
+ //
16
+ // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17
+ // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18
+ // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19
+ // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20
+ // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21
+ // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22
+ // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
+ // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
+ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
+ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26
+ // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
+
28
+ #ifndef V8_ELEMENTS_H_
29
+ #define V8_ELEMENTS_H_
30
+
31
+ #include "objects.h"
32
+
33
+ namespace v8 {
34
+ namespace internal {
35
+
36
+ // Abstract base class for handles that can operate on objects with differing
37
+ // ElementsKinds.
38
+ class ElementsAccessor {
39
+ public:
40
+ ElementsAccessor() { }
41
+ virtual ~ElementsAccessor() { }
42
+ virtual MaybeObject* Get(FixedArrayBase* backing_store,
43
+ uint32_t key,
44
+ JSObject* holder,
45
+ Object* receiver) = 0;
46
+
47
+ virtual MaybeObject* Delete(JSObject* holder,
48
+ uint32_t key,
49
+ JSReceiver::DeleteMode mode) = 0;
50
+
51
+ virtual MaybeObject* AddElementsToFixedArray(FixedArrayBase* from,
52
+ FixedArray* to,
53
+ JSObject* holder,
54
+ Object* receiver) = 0;
55
+
56
+ // Returns a shared ElementsAccessor for the specified ElementsKind.
57
+ static ElementsAccessor* ForKind(JSObject::ElementsKind elements_kind) {
58
+ ASSERT(elements_kind < JSObject::kElementsKindCount);
59
+ return elements_accessors_[elements_kind];
60
+ }
61
+
62
+ static ElementsAccessor* ForArray(FixedArrayBase* array);
63
+
64
+ static void InitializeOncePerProcess();
65
+
66
+ protected:
67
+ friend class NonStrictArgumentsElementsAccessor;
68
+
69
+ virtual uint32_t GetCapacity(FixedArrayBase* backing_store) = 0;
70
+
71
+ virtual bool HasElementAtIndex(FixedArrayBase* backing_store,
72
+ uint32_t index,
73
+ JSObject* holder,
74
+ Object* receiver) = 0;
75
+
76
+ // Element handlers distinguish between indexes and keys when the manipulate
77
+ // elements. Indexes refer to elements in terms of their location in the
78
+ // underlying storage's backing store representation, and are between 0
79
+ // GetCapacity. Keys refer to elements in terms of the value that would be
80
+ // specific in JavaScript to access the element. In most implementations, keys
81
+ // are equivalent to indexes, and GetKeyForIndex returns the same value it is
82
+ // passed. In the NumberDictionary ElementsAccessor, GetKeyForIndex maps the
83
+ // index to a key using the KeyAt method on the NumberDictionary.
84
+ virtual uint32_t GetKeyForIndex(FixedArrayBase* backing_store,
85
+ uint32_t index) = 0;
86
+
87
+ private:
88
+ static ElementsAccessor** elements_accessors_;
89
+
90
+ DISALLOW_COPY_AND_ASSIGN(ElementsAccessor);
91
+ };
92
+
93
+ } } // namespace v8::internal
94
+
95
+ #endif // V8_ELEMENTS_H_
@@ -132,7 +132,7 @@ static Handle<Object> Invoke(bool construct,
132
132
  if (*has_pending_exception) {
133
133
  isolate->ReportPendingMessages();
134
134
  if (isolate->pending_exception() == Failure::OutOfMemoryException()) {
135
- if (!isolate->handle_scope_implementer()->ignore_out_of_memory()) {
135
+ if (!isolate->ignore_out_of_memory()) {
136
136
  V8::FatalProcessOutOfMemory("JS", true);
137
137
  }
138
138
  }
@@ -210,23 +210,6 @@ Handle<Object> Execution::GetFunctionDelegate(Handle<Object> object) {
210
210
  // If you return a function from here, it will be called when an
211
211
  // attempt is made to call the given object as a function.
212
212
 
213
- // Regular expressions can be called as functions in both Firefox
214
- // and Safari so we allow it too.
215
- if (object->IsJSRegExp()) {
216
- Handle<String> exec = factory->exec_symbol();
217
- // TODO(lrn): Bug 617. We should use the default function here, not the
218
- // one on the RegExp object.
219
- Object* exec_function;
220
- { MaybeObject* maybe_exec_function = object->GetProperty(*exec);
221
- // This can lose an exception, but the alternative is to put a failure
222
- // object in a handle, which is not GC safe.
223
- if (!maybe_exec_function->ToObject(&exec_function)) {
224
- return factory->undefined_value();
225
- }
226
- }
227
- return Handle<Object>(exec_function);
228
- }
229
-
230
213
  // Objects created through the API can have an instance-call handler
231
214
  // that should be used when calling the object as a function.
232
215
  if (object->IsHeapObject() &&
@@ -469,8 +452,9 @@ char* StackGuard::RestoreStackGuard(char* from) {
469
452
 
470
453
 
471
454
  void StackGuard::FreeThreadResources() {
472
- Isolate::CurrentPerIsolateThreadData()->set_stack_limit(
473
- thread_local_.real_climit_);
455
+ Isolate::PerIsolateThreadData* per_thread =
456
+ isolate_->FindOrAllocatePerThreadDataForThisThread();
457
+ per_thread->set_stack_limit(thread_local_.real_climit_);
474
458
  }
475
459
 
476
460
 
@@ -519,7 +503,7 @@ void StackGuard::InitThread(const ExecutionAccess& lock) {
519
503
  uintptr_t stored_limit = per_thread->stack_limit();
520
504
  // You should hold the ExecutionAccess lock when you call this.
521
505
  if (stored_limit != 0) {
522
- StackGuard::SetStackLimit(stored_limit);
506
+ SetStackLimit(stored_limit);
523
507
  }
524
508
  }
525
509
 
@@ -25,7 +25,9 @@
25
25
  // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26
26
  // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
27
 
28
- #include "break-iterator.h"
28
+ #include "src/extensions/experimental/break-iterator.h"
29
+
30
+ #include <string.h>
29
31
 
30
32
  #include "unicode/brkiter.h"
31
33
  #include "unicode/locid.h"
@@ -28,7 +28,7 @@
28
28
  #ifndef V8_EXTENSIONS_EXPERIMENTAL_BREAK_ITERATOR_H_
29
29
  #define V8_EXTENSIONS_EXPERIMENTAL_BREAK_ITERATOR_H_
30
30
 
31
- #include <v8.h>
31
+ #include "include/v8.h"
32
32
 
33
33
  #include "unicode/uversion.h"
34
34
 
@@ -25,7 +25,7 @@
25
25
  // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26
26
  // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
27
 
28
- #include "collator.h"
28
+ #include "src/extensions/experimental/collator.h"
29
29
 
30
30
  #include "unicode/coll.h"
31
31
  #include "unicode/locid.h"
@@ -153,6 +153,11 @@ v8::Handle<v8::Value> Collator::JSCollator(const v8::Arguments& args) {
153
153
  bool ignore_case, ignore_accents, numeric;
154
154
 
155
155
  if (ExtractBooleanOption(options, "ignoreCase", &ignore_case)) {
156
+ // We need to explicitly set the level to secondary to get case ignored.
157
+ // The default L3 ignores UCOL_CASE_LEVEL == UCOL_OFF !
158
+ if (ignore_case) {
159
+ collator->setStrength(icu::Collator::SECONDARY);
160
+ }
156
161
  collator->setAttribute(UCOL_CASE_LEVEL, ignore_case ? UCOL_OFF : UCOL_ON,
157
162
  status);
158
163
  if (U_FAILURE(status)) {
@@ -215,4 +220,3 @@ v8::Handle<v8::Value> Collator::JSCollator(const v8::Arguments& args) {
215
220
  }
216
221
 
217
222
  } } // namespace v8::internal
218
-
@@ -28,7 +28,7 @@
28
28
  #ifndef V8_EXTENSIONS_EXPERIMENTAL_COLLATOR_H
29
29
  #define V8_EXTENSIONS_EXPERIMENTAL_COLLATOR_H_
30
30
 
31
- #include <v8.h>
31
+ #include "include/v8.h"
32
32
 
33
33
  #include "unicode/uversion.h"
34
34
 
@@ -66,4 +66,3 @@ class Collator {
66
66
  } } // namespace v8::internal
67
67
 
68
68
  #endif // V8_EXTENSIONS_EXPERIMENTAL_COLLATOR
69
-
@@ -0,0 +1,384 @@
1
+ // Copyright 2011 the V8 project authors. All rights reserved.
2
+ // Redistribution and use in source and binary forms, with or without
3
+ // modification, are permitted provided that the following conditions are
4
+ // met:
5
+ //
6
+ // * Redistributions of source code must retain the above copyright
7
+ // notice, this list of conditions and the following disclaimer.
8
+ // * Redistributions in binary form must reproduce the above
9
+ // copyright notice, this list of conditions and the following
10
+ // disclaimer in the documentation and/or other materials provided
11
+ // with the distribution.
12
+ // * Neither the name of Google Inc. nor the names of its
13
+ // contributors may be used to endorse or promote products derived
14
+ // from this software without specific prior written permission.
15
+ //
16
+ // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17
+ // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18
+ // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19
+ // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20
+ // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21
+ // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22
+ // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
+ // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
+ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
+ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26
+ // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
+
28
+ #include "src/extensions/experimental/datetime-format.h"
29
+
30
+ #include <string.h>
31
+
32
+ #include "src/extensions/experimental/i18n-utils.h"
33
+ #include "unicode/dtfmtsym.h"
34
+ #include "unicode/dtptngen.h"
35
+ #include "unicode/locid.h"
36
+ #include "unicode/smpdtfmt.h"
37
+
38
+ namespace v8 {
39
+ namespace internal {
40
+
41
+ v8::Persistent<v8::FunctionTemplate> DateTimeFormat::datetime_format_template_;
42
+
43
+ static icu::DateFormat* CreateDateTimeFormat(v8::Handle<v8::String>,
44
+ v8::Handle<v8::Object>);
45
+ static v8::Handle<v8::Value> GetSymbols(
46
+ const v8::Arguments&,
47
+ const icu::UnicodeString*, int32_t,
48
+ const icu::UnicodeString*, int32_t,
49
+ const icu::UnicodeString*, int32_t);
50
+ static v8::Handle<v8::Value> ThrowUnexpectedObjectError();
51
+ static icu::DateFormat::EStyle GetDateTimeStyle(const icu::UnicodeString&);
52
+
53
+ icu::SimpleDateFormat* DateTimeFormat::UnpackDateTimeFormat(
54
+ v8::Handle<v8::Object> obj) {
55
+ if (datetime_format_template_->HasInstance(obj)) {
56
+ return static_cast<icu::SimpleDateFormat*>(
57
+ obj->GetPointerFromInternalField(0));
58
+ }
59
+
60
+ return NULL;
61
+ }
62
+
63
+ void DateTimeFormat::DeleteDateTimeFormat(v8::Persistent<v8::Value> object,
64
+ void* param) {
65
+ v8::Persistent<v8::Object> persistent_object =
66
+ v8::Persistent<v8::Object>::Cast(object);
67
+
68
+ // First delete the hidden C++ object.
69
+ // Unpacking should never return NULL here. That would only happen if
70
+ // this method is used as the weak callback for persistent handles not
71
+ // pointing to a date time formatter.
72
+ delete UnpackDateTimeFormat(persistent_object);
73
+
74
+ // Then dispose of the persistent handle to JS object.
75
+ persistent_object.Dispose();
76
+ }
77
+
78
+ v8::Handle<v8::Value> DateTimeFormat::Format(const v8::Arguments& args) {
79
+ v8::HandleScope handle_scope;
80
+
81
+ double millis = 0.0;
82
+ if (args.Length() != 1 || !args[0]->IsDate()) {
83
+ // Create a new date.
84
+ v8::TryCatch try_catch;
85
+ v8::Local<v8::Script> date_script =
86
+ v8::Script::Compile(v8::String::New("eval('new Date()')"));
87
+ millis = date_script->Run()->NumberValue();
88
+ if (try_catch.HasCaught()) {
89
+ return try_catch.ReThrow();
90
+ }
91
+ } else {
92
+ millis = v8::Date::Cast(*args[0])->NumberValue();
93
+ }
94
+
95
+ icu::SimpleDateFormat* date_format = UnpackDateTimeFormat(args.Holder());
96
+ if (!date_format) {
97
+ return ThrowUnexpectedObjectError();
98
+ }
99
+
100
+ icu::UnicodeString result;
101
+ date_format->format(millis, result);
102
+
103
+ return v8::String::New(
104
+ reinterpret_cast<const uint16_t*>(result.getBuffer()), result.length());
105
+ }
106
+
107
+ v8::Handle<v8::Value> DateTimeFormat::GetMonths(const v8::Arguments& args) {
108
+ icu::SimpleDateFormat* date_format = UnpackDateTimeFormat(args.Holder());
109
+ if (!date_format) {
110
+ return ThrowUnexpectedObjectError();
111
+ }
112
+
113
+ const icu::DateFormatSymbols* symbols = date_format->getDateFormatSymbols();
114
+
115
+ int32_t narrow_count;
116
+ const icu::UnicodeString* narrow = symbols->getMonths(
117
+ narrow_count,
118
+ icu::DateFormatSymbols::STANDALONE,
119
+ icu::DateFormatSymbols::NARROW);
120
+ int32_t abbrev_count;
121
+ const icu::UnicodeString* abbrev = symbols->getMonths(
122
+ abbrev_count,
123
+ icu::DateFormatSymbols::STANDALONE,
124
+ icu::DateFormatSymbols::ABBREVIATED);
125
+ int32_t wide_count;
126
+ const icu::UnicodeString* wide = symbols->getMonths(
127
+ wide_count,
128
+ icu::DateFormatSymbols::STANDALONE,
129
+ icu::DateFormatSymbols::WIDE);
130
+
131
+ return GetSymbols(
132
+ args, narrow, narrow_count, abbrev, abbrev_count, wide, wide_count);
133
+ }
134
+
135
+ v8::Handle<v8::Value> DateTimeFormat::GetWeekdays(const v8::Arguments& args) {
136
+ icu::SimpleDateFormat* date_format = UnpackDateTimeFormat(args.Holder());
137
+ if (!date_format) {
138
+ return ThrowUnexpectedObjectError();
139
+ }
140
+
141
+ const icu::DateFormatSymbols* symbols = date_format->getDateFormatSymbols();
142
+
143
+ int32_t narrow_count;
144
+ const icu::UnicodeString* narrow = symbols->getWeekdays(
145
+ narrow_count,
146
+ icu::DateFormatSymbols::STANDALONE,
147
+ icu::DateFormatSymbols::NARROW);
148
+ int32_t abbrev_count;
149
+ const icu::UnicodeString* abbrev = symbols->getWeekdays(
150
+ abbrev_count,
151
+ icu::DateFormatSymbols::STANDALONE,
152
+ icu::DateFormatSymbols::ABBREVIATED);
153
+ int32_t wide_count;
154
+ const icu::UnicodeString* wide = symbols->getWeekdays(
155
+ wide_count,
156
+ icu::DateFormatSymbols::STANDALONE,
157
+ icu::DateFormatSymbols::WIDE);
158
+
159
+ // getXXXWeekdays always returns 8 elements - ICU stable API.
160
+ // We can't use ASSERT_EQ(8, narrow_count) because ASSERT is internal to v8.
161
+ if (narrow_count != 8 || abbrev_count != 8 || wide_count != 8) {
162
+ return v8::ThrowException(v8::Exception::Error(
163
+ v8::String::New("Failed to get weekday information.")));
164
+ }
165
+
166
+ // ICU documentation says we should ignore element 0 of the returned array.
167
+ return GetSymbols(args, narrow + 1, narrow_count - 1, abbrev + 1,
168
+ abbrev_count -1 , wide + 1, wide_count - 1);
169
+ }
170
+
171
+ v8::Handle<v8::Value> DateTimeFormat::GetEras(const v8::Arguments& args) {
172
+ icu::SimpleDateFormat* date_format = UnpackDateTimeFormat(args.Holder());
173
+ if (!date_format) {
174
+ return ThrowUnexpectedObjectError();
175
+ }
176
+
177
+ const icu::DateFormatSymbols* symbols = date_format->getDateFormatSymbols();
178
+
179
+ int32_t narrow_count;
180
+ const icu::UnicodeString* narrow = symbols->getNarrowEras(narrow_count);
181
+ int32_t abbrev_count;
182
+ const icu::UnicodeString* abbrev = symbols->getEras(abbrev_count);
183
+ int32_t wide_count;
184
+ const icu::UnicodeString* wide = symbols->getEraNames(wide_count);
185
+
186
+ return GetSymbols(
187
+ args, narrow, narrow_count, abbrev, abbrev_count, wide, wide_count);
188
+ }
189
+
190
+ v8::Handle<v8::Value> DateTimeFormat::GetAmPm(const v8::Arguments& args) {
191
+ icu::SimpleDateFormat* date_format = UnpackDateTimeFormat(args.Holder());
192
+ if (!date_format) {
193
+ return ThrowUnexpectedObjectError();
194
+ }
195
+
196
+ const icu::DateFormatSymbols* symbols = date_format->getDateFormatSymbols();
197
+
198
+ // In this case narrow == abbreviated == wide
199
+ int32_t count;
200
+ const icu::UnicodeString* wide = symbols->getAmPmStrings(count);
201
+
202
+ return GetSymbols(args, wide, count, wide, count, wide, count);
203
+ }
204
+
205
+ v8::Handle<v8::Value> DateTimeFormat::JSDateTimeFormat(
206
+ const v8::Arguments& args) {
207
+ v8::HandleScope handle_scope;
208
+
209
+ if (args.Length() != 2 || !args[0]->IsString() || !args[1]->IsObject()) {
210
+ return v8::ThrowException(v8::Exception::SyntaxError(
211
+ v8::String::New("Locale and date/time options are required.")));
212
+ }
213
+
214
+ icu::SimpleDateFormat* date_format = static_cast<icu::SimpleDateFormat*>(
215
+ CreateDateTimeFormat(args[0]->ToString(), args[1]->ToObject()));
216
+
217
+ if (datetime_format_template_.IsEmpty()) {
218
+ v8::Local<v8::FunctionTemplate> raw_template(v8::FunctionTemplate::New());
219
+
220
+ raw_template->SetClassName(v8::String::New("v8Locale.DateTimeFormat"));
221
+
222
+ // Define internal field count on instance template.
223
+ v8::Local<v8::ObjectTemplate> object_template =
224
+ raw_template->InstanceTemplate();
225
+
226
+ // Set aside internal field for icu date time formatter.
227
+ object_template->SetInternalFieldCount(1);
228
+
229
+ // Define all of the prototype methods on prototype template.
230
+ v8::Local<v8::ObjectTemplate> proto = raw_template->PrototypeTemplate();
231
+ proto->Set(v8::String::New("format"),
232
+ v8::FunctionTemplate::New(Format));
233
+ proto->Set(v8::String::New("getMonths"),
234
+ v8::FunctionTemplate::New(GetMonths));
235
+ proto->Set(v8::String::New("getWeekdays"),
236
+ v8::FunctionTemplate::New(GetWeekdays));
237
+ proto->Set(v8::String::New("getEras"),
238
+ v8::FunctionTemplate::New(GetEras));
239
+ proto->Set(v8::String::New("getAmPm"),
240
+ v8::FunctionTemplate::New(GetAmPm));
241
+
242
+ datetime_format_template_ =
243
+ v8::Persistent<v8::FunctionTemplate>::New(raw_template);
244
+ }
245
+
246
+ // Create an empty object wrapper.
247
+ v8::Local<v8::Object> local_object =
248
+ datetime_format_template_->GetFunction()->NewInstance();
249
+ v8::Persistent<v8::Object> wrapper =
250
+ v8::Persistent<v8::Object>::New(local_object);
251
+
252
+ // Set date time formatter as internal field of the resulting JS object.
253
+ wrapper->SetPointerInInternalField(0, date_format);
254
+
255
+ // Set resolved pattern in options.pattern.
256
+ icu::UnicodeString pattern;
257
+ date_format->toPattern(pattern);
258
+ v8::Local<v8::Object> options = v8::Object::New();
259
+ options->Set(v8::String::New("pattern"),
260
+ v8::String::New(reinterpret_cast<const uint16_t*>(
261
+ pattern.getBuffer()), pattern.length()));
262
+ wrapper->Set(v8::String::New("options"), options);
263
+
264
+ // Make object handle weak so we can delete iterator once GC kicks in.
265
+ wrapper.MakeWeak(NULL, DeleteDateTimeFormat);
266
+
267
+ return wrapper;
268
+ }
269
+
270
+ // Returns SimpleDateFormat.
271
+ static icu::DateFormat* CreateDateTimeFormat(
272
+ v8::Handle<v8::String> locale, v8::Handle<v8::Object> settings) {
273
+ v8::HandleScope handle_scope;
274
+
275
+ v8::String::AsciiValue ascii_locale(locale);
276
+ icu::Locale icu_locale(*ascii_locale);
277
+
278
+ // Make formatter from skeleton.
279
+ icu::SimpleDateFormat* date_format = NULL;
280
+ UErrorCode status = U_ZERO_ERROR;
281
+ icu::UnicodeString skeleton;
282
+ if (I18NUtils::ExtractStringSetting(settings, "skeleton", &skeleton)) {
283
+ v8::Local<icu::DateTimePatternGenerator> generator(
284
+ icu::DateTimePatternGenerator::createInstance(icu_locale, status));
285
+ icu::UnicodeString pattern =
286
+ generator->getBestPattern(skeleton, status);
287
+
288
+ date_format = new icu::SimpleDateFormat(pattern, icu_locale, status);
289
+ if (U_SUCCESS(status)) {
290
+ return date_format;
291
+ } else {
292
+ delete date_format;
293
+ }
294
+ }
295
+
296
+ // Extract date style and time style from settings.
297
+ icu::UnicodeString date_style;
298
+ icu::DateFormat::EStyle icu_date_style = icu::DateFormat::kNone;
299
+ if (I18NUtils::ExtractStringSetting(settings, "dateStyle", &date_style)) {
300
+ icu_date_style = GetDateTimeStyle(date_style);
301
+ }
302
+
303
+ icu::UnicodeString time_style;
304
+ icu::DateFormat::EStyle icu_time_style = icu::DateFormat::kNone;
305
+ if (I18NUtils::ExtractStringSetting(settings, "timeStyle", &time_style)) {
306
+ icu_time_style = GetDateTimeStyle(time_style);
307
+ }
308
+
309
+ // Try all combinations of date/time styles.
310
+ if (icu_date_style == icu::DateFormat::kNone &&
311
+ icu_time_style == icu::DateFormat::kNone) {
312
+ // Return default short date, short
313
+ return icu::DateFormat::createDateTimeInstance(
314
+ icu::DateFormat::kShort, icu::DateFormat::kShort, icu_locale);
315
+ } else if (icu_date_style != icu::DateFormat::kNone &&
316
+ icu_time_style != icu::DateFormat::kNone) {
317
+ return icu::DateFormat::createDateTimeInstance(
318
+ icu_date_style, icu_time_style, icu_locale);
319
+ } else if (icu_date_style != icu::DateFormat::kNone) {
320
+ return icu::DateFormat::createDateInstance(icu_date_style, icu_locale);
321
+ } else {
322
+ // icu_time_style != icu::DateFormat::kNone
323
+ return icu::DateFormat::createTimeInstance(icu_time_style, icu_locale);
324
+ }
325
+ }
326
+
327
+ // Creates a v8::Array of narrow, abbrev or wide symbols.
328
+ static v8::Handle<v8::Value> GetSymbols(const v8::Arguments& args,
329
+ const icu::UnicodeString* narrow,
330
+ int32_t narrow_count,
331
+ const icu::UnicodeString* abbrev,
332
+ int32_t abbrev_count,
333
+ const icu::UnicodeString* wide,
334
+ int32_t wide_count) {
335
+ v8::HandleScope handle_scope;
336
+
337
+ // Make wide width default.
338
+ const icu::UnicodeString* result = wide;
339
+ int32_t count = wide_count;
340
+
341
+ if (args.Length() == 1 && args[0]->IsString()) {
342
+ v8::String::AsciiValue ascii_value(args[0]);
343
+ if (strcmp(*ascii_value, "abbreviated") == 0) {
344
+ result = abbrev;
345
+ count = abbrev_count;
346
+ } else if (strcmp(*ascii_value, "narrow") == 0) {
347
+ result = narrow;
348
+ count = narrow_count;
349
+ }
350
+ }
351
+
352
+ v8::Handle<v8::Array> symbols = v8::Array::New();
353
+ for (int32_t i = 0; i < count; ++i) {
354
+ symbols->Set(i, v8::String::New(
355
+ reinterpret_cast<const uint16_t*>(result[i].getBuffer()),
356
+ result[i].length()));
357
+ }
358
+
359
+ return handle_scope.Close(symbols);
360
+ }
361
+
362
+ // Throws a JavaScript exception.
363
+ static v8::Handle<v8::Value> ThrowUnexpectedObjectError() {
364
+ // Returns undefined, and schedules an exception to be thrown.
365
+ return v8::ThrowException(v8::Exception::Error(
366
+ v8::String::New("DateTimeFormat method called on an object "
367
+ "that is not a DateTimeFormat.")));
368
+ }
369
+
370
+ // Returns icu date/time style.
371
+ static icu::DateFormat::EStyle GetDateTimeStyle(
372
+ const icu::UnicodeString& type) {
373
+ if (type == UNICODE_STRING_SIMPLE("medium")) {
374
+ return icu::DateFormat::kMedium;
375
+ } else if (type == UNICODE_STRING_SIMPLE("long")) {
376
+ return icu::DateFormat::kLong;
377
+ } else if (type == UNICODE_STRING_SIMPLE("full")) {
378
+ return icu::DateFormat::kFull;
379
+ }
380
+
381
+ return icu::DateFormat::kShort;
382
+ }
383
+
384
+ } } // namespace v8::internal