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
@@ -26,47 +26,71 @@
26
26
  # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
27
 
28
28
  {
29
+ 'includes': ['../build/common.gypi'],
30
+ 'variables': {
31
+ 'console%': '',
32
+ },
29
33
  'targets': [
30
34
  {
31
35
  'target_name': 'd8',
32
36
  'type': 'executable',
33
37
  'dependencies': [
34
- 'd8_js2c#host',
35
38
  '../tools/gyp/v8.gyp:v8',
36
39
  ],
40
+ # Generated source files need this explicitly:
37
41
  'include_dirs+': [
38
42
  '../src',
39
43
  ],
40
44
  'defines': [
41
- 'ENABLE_LOGGING_AND_PROFILING',
42
45
  'ENABLE_DEBUGGER_SUPPORT',
43
- 'ENABLE_VMSTATE_TRACKING',
44
- 'V8_FAST_TLS',
45
46
  ],
46
47
  'sources': [
47
48
  'd8.cc',
48
- 'd8-debug.cc',
49
- '<(SHARED_INTERMEDIATE_DIR)/d8-js.cc',
50
49
  ],
51
50
  'conditions': [
52
- [ 'OS=="linux" or OS=="mac" or OS=="freebsd" or OS=="openbsd" or OS=="solaris"', {
53
- 'sources': [ 'd8-posix.cc', ]
54
- }],
55
- [ 'OS=="win"', {
56
- 'sources': [ 'd8-windows.cc', ]
51
+ [ 'component!="shared_library"', {
52
+ 'sources': [ 'd8-debug.cc', '<(SHARED_INTERMEDIATE_DIR)/d8-js.cc', ],
53
+ 'conditions': [
54
+ [ 'want_separate_host_toolset==1', {
55
+ 'dependencies': [
56
+ 'd8_js2c#host',
57
+ ],
58
+ }, {
59
+ 'dependencies': [
60
+ 'd8_js2c',
61
+ ],
62
+ }],
63
+ [ 'console=="readline"', {
64
+ 'libraries': [ '-lreadline', ],
65
+ 'sources': [ 'd8-readline.cc' ],
66
+ }],
67
+ [ '(OS=="linux" or OS=="mac" or OS=="freebsd" \
68
+ or OS=="openbsd" or OS=="solaris")', {
69
+ 'sources': [ 'd8-posix.cc', ]
70
+ }],
71
+ [ 'OS=="win"', {
72
+ 'sources': [ 'd8-windows.cc', ]
73
+ }],
74
+ ],
57
75
  }],
58
76
  ],
59
77
  },
60
78
  {
61
79
  'target_name': 'd8_js2c',
62
80
  'type': 'none',
63
- 'toolsets': ['host'],
64
81
  'variables': {
65
82
  'js_files': [
66
83
  'd8.js',
67
84
  'macros.py',
68
85
  ],
69
86
  },
87
+ 'conditions': [
88
+ [ 'want_separate_host_toolset==1', {
89
+ 'toolsets': ['host'],
90
+ }, {
91
+ 'toolsets': ['target'],
92
+ }]
93
+ ],
70
94
  'actions': [
71
95
  {
72
96
  'action_name': 'd8_js2c',
@@ -82,6 +106,7 @@
82
106
  '../tools/js2c.py',
83
107
  '<@(_outputs)',
84
108
  'D8',
109
+ 'off', # compress startup data
85
110
  '<@(js_files)'
86
111
  ],
87
112
  },
@@ -28,20 +28,19 @@
28
28
  #ifndef V8_D8_H_
29
29
  #define V8_D8_H_
30
30
 
31
- #include "allocation.h"
31
+
32
+ #ifndef V8_SHARED
32
33
  #include "v8.h"
34
+ #include "allocation.h"
33
35
  #include "hashmap.h"
34
-
35
- #ifdef COMPRESS_STARTUP_DATA_BZ2
36
- #error Using compressed startup data is not supported for D8
37
- #endif
36
+ #else
37
+ #include "../include/v8.h"
38
+ #endif // V8_SHARED
38
39
 
39
40
  namespace v8 {
40
41
 
41
42
 
42
- namespace i = v8::internal;
43
-
44
-
43
+ #ifndef V8_SHARED
45
44
  // A single counter in a counter collection.
46
45
  class Counter {
47
46
  public:
@@ -108,14 +107,108 @@ class CounterMap {
108
107
  i::HashMap* map_;
109
108
  i::HashMap::Entry* entry_;
110
109
  };
110
+
111
111
  private:
112
112
  static int Hash(const char* name);
113
113
  static bool Match(void* key1, void* key2);
114
114
  i::HashMap hash_map_;
115
115
  };
116
+ #endif // V8_SHARED
117
+
118
+
119
+ class SourceGroup {
120
+ public:
121
+ SourceGroup() :
122
+ #ifndef V8_SHARED
123
+ next_semaphore_(v8::internal::OS::CreateSemaphore(0)),
124
+ done_semaphore_(v8::internal::OS::CreateSemaphore(0)),
125
+ thread_(NULL),
126
+ #endif // V8_SHARED
127
+ argv_(NULL),
128
+ begin_offset_(0),
129
+ end_offset_(0) { }
130
+
131
+ void Begin(char** argv, int offset) {
132
+ argv_ = const_cast<const char**>(argv);
133
+ begin_offset_ = offset;
134
+ }
135
+
136
+ void End(int offset) { end_offset_ = offset; }
137
+
138
+ void Execute();
139
+
140
+ #ifndef V8_SHARED
141
+ void StartExecuteInThread();
142
+ void WaitForThread();
143
+
144
+ private:
145
+ class IsolateThread : public i::Thread {
146
+ public:
147
+ explicit IsolateThread(SourceGroup* group)
148
+ : i::Thread(GetThreadOptions()), group_(group) {}
149
+
150
+ virtual void Run() {
151
+ group_->ExecuteInThread();
152
+ }
153
+
154
+ private:
155
+ SourceGroup* group_;
156
+ };
157
+
158
+ static i::Thread::Options GetThreadOptions();
159
+ void ExecuteInThread();
160
+
161
+ i::Semaphore* next_semaphore_;
162
+ i::Semaphore* done_semaphore_;
163
+ i::Thread* thread_;
164
+ #endif // V8_SHARED
165
+
166
+ void ExitShell(int exit_code);
167
+ Handle<String> ReadFile(const char* name);
168
+
169
+ const char** argv_;
170
+ int begin_offset_;
171
+ int end_offset_;
172
+ };
116
173
 
117
174
 
118
- class Shell: public i::AllStatic {
175
+ class ShellOptions {
176
+ public:
177
+ ShellOptions() :
178
+ #ifndef V8_SHARED
179
+ use_preemption(true),
180
+ preemption_interval(10),
181
+ parallel_files(NULL),
182
+ #endif // V8_SHARED
183
+ script_executed(false),
184
+ last_run(true),
185
+ stress_opt(false),
186
+ stress_deopt(false),
187
+ interactive_shell(false),
188
+ test_shell(false),
189
+ num_isolates(1),
190
+ isolate_sources(NULL) { }
191
+
192
+ #ifndef V8_SHARED
193
+ bool use_preemption;
194
+ int preemption_interval;
195
+ i::List< i::Vector<const char> >* parallel_files;
196
+ #endif // V8_SHARED
197
+ bool script_executed;
198
+ bool last_run;
199
+ bool stress_opt;
200
+ bool stress_deopt;
201
+ bool interactive_shell;
202
+ bool test_shell;
203
+ int num_isolates;
204
+ SourceGroup* isolate_sources;
205
+ };
206
+
207
+ #ifdef V8_SHARED
208
+ class Shell {
209
+ #else
210
+ class Shell : public i::AllStatic {
211
+ #endif // V8_SHARED
119
212
  public:
120
213
  static bool ExecuteString(Handle<String> source,
121
214
  Handle<Value> name,
@@ -123,7 +216,14 @@ class Shell: public i::AllStatic {
123
216
  bool report_exceptions);
124
217
  static const char* ToCString(const v8::String::Utf8Value& value);
125
218
  static void ReportException(TryCatch* try_catch);
126
- static void Initialize();
219
+ static Handle<String> ReadFile(const char* name);
220
+ static Persistent<Context> CreateEvaluationContext();
221
+ static int RunMain(int argc, char* argv[]);
222
+ static int Main(int argc, char* argv[]);
223
+
224
+ #ifndef V8_SHARED
225
+ static Handle<Array> GetCompletions(Handle<String> text,
226
+ Handle<String> full);
127
227
  static void OnExit();
128
228
  static int* LookupCounter(const char* name);
129
229
  static void* CreateHistogram(const char* name,
@@ -132,11 +232,8 @@ class Shell: public i::AllStatic {
132
232
  size_t buckets);
133
233
  static void AddHistogramSample(void* histogram, int sample);
134
234
  static void MapCounters(const char* name);
135
- static Handle<String> ReadFile(const char* name);
136
- static void RunShell();
137
- static int Main(int argc, char* argv[]);
138
- static Handle<Array> GetCompletions(Handle<String> text,
139
- Handle<String> full);
235
+ #endif // V8_SHARED
236
+
140
237
  #ifdef ENABLE_DEBUGGER_SUPPORT
141
238
  static Handle<Object> DebugMessageDetails(Handle<String> message);
142
239
  static Handle<Value> DebugCommandToJSONRequest(Handle<String> command);
@@ -154,6 +251,15 @@ class Shell: public i::AllStatic {
154
251
  static Handle<Value> Read(const Arguments& args);
155
252
  static Handle<Value> ReadLine(const Arguments& args);
156
253
  static Handle<Value> Load(const Arguments& args);
254
+ static Handle<Value> Int8Array(const Arguments& args);
255
+ static Handle<Value> Uint8Array(const Arguments& args);
256
+ static Handle<Value> Int16Array(const Arguments& args);
257
+ static Handle<Value> Uint16Array(const Arguments& args);
258
+ static Handle<Value> Int32Array(const Arguments& args);
259
+ static Handle<Value> Uint32Array(const Arguments& args);
260
+ static Handle<Value> Float32Array(const Arguments& args);
261
+ static Handle<Value> Float64Array(const Arguments& args);
262
+ static Handle<Value> PixelArray(const Arguments& args);
157
263
  // The OS object on the global object contains methods for performing
158
264
  // operating system calls:
159
265
  //
@@ -190,24 +296,39 @@ class Shell: public i::AllStatic {
190
296
  static Handle<Value> RemoveDirectory(const Arguments& args);
191
297
 
192
298
  static void AddOSMethods(Handle<ObjectTemplate> os_template);
193
-
194
- static Handle<Context> utility_context() { return utility_context_; }
195
-
299
+ #ifndef V8_SHARED
196
300
  static const char* kHistoryFileName;
301
+ #endif // V8_SHARED
197
302
  static const char* kPrompt;
303
+ static ShellOptions options;
304
+
198
305
  private:
199
- static Persistent<Context> utility_context_;
200
306
  static Persistent<Context> evaluation_context_;
307
+ #ifndef V8_SHARED
308
+ static Persistent<Context> utility_context_;
201
309
  static CounterMap* counter_map_;
202
310
  // We statically allocate a set of local counters to be used if we
203
311
  // don't want to store the stats in a memory-mapped file
204
312
  static CounterCollection local_counters_;
205
313
  static CounterCollection* counters_;
206
314
  static i::OS::MemoryMappedFile* counters_file_;
315
+ static i::Mutex* context_mutex_;
316
+
207
317
  static Counter* GetCounter(const char* name, bool is_histogram);
318
+ static void InstallUtilityScript();
319
+ #endif // V8_SHARED
320
+ static void Initialize();
321
+ static void RunShell();
322
+ static bool SetOptions(int argc, char* argv[]);
323
+ static Handle<ObjectTemplate> CreateGlobalTemplate();
324
+ static Handle<Value> CreateExternalArray(const Arguments& args,
325
+ ExternalArrayType type,
326
+ size_t element_size);
327
+ static void ExternalArrayWeakCallback(Persistent<Value> object, void* data);
208
328
  };
209
329
 
210
330
 
331
+ #ifndef V8_SHARED
211
332
  class LineEditor {
212
333
  public:
213
334
  enum Type { DUMB = 0, READLINE = 1 };
@@ -227,6 +348,7 @@ class LineEditor {
227
348
  LineEditor* next_;
228
349
  static LineEditor* first_;
229
350
  };
351
+ #endif // V8_SHARED
230
352
 
231
353
 
232
354
  } // namespace v8
@@ -103,7 +103,8 @@ Debug.ScopeType = { Global: 0,
103
103
  Local: 1,
104
104
  With: 2,
105
105
  Closure: 3,
106
- Catch: 4 };
106
+ Catch: 4,
107
+ Block: 5 };
107
108
 
108
109
 
109
110
  // Current debug state.
@@ -391,14 +392,14 @@ function DebugRequest(cmd_line) {
391
392
  this.frameCommandToJSONRequest_('' +
392
393
  (Debug.State.currentFrame + 1));
393
394
  break;
394
-
395
+
395
396
  case 'down':
396
397
  case 'do':
397
398
  this.request_ =
398
399
  this.frameCommandToJSONRequest_('' +
399
400
  (Debug.State.currentFrame - 1));
400
401
  break;
401
-
402
+
402
403
  case 'set':
403
404
  case 'print':
404
405
  case 'p':
@@ -977,9 +978,14 @@ DebugRequest.prototype.breakCommandToJSONRequest_ = function(args) {
977
978
  // specification it is considered a function break point.
978
979
  pos = target.indexOf(':');
979
980
  if (pos > 0) {
980
- type = 'script';
981
981
  var tmp = target.substring(pos + 1, target.length);
982
982
  target = target.substring(0, pos);
983
+ if (target[0] == '/' && target[target.length - 1] == '/') {
984
+ type = 'scriptRegExp';
985
+ target = target.substring(1, target.length - 1);
986
+ } else {
987
+ type = 'script';
988
+ }
983
989
 
984
990
  // Check for both line and column.
985
991
  pos = tmp.indexOf(':');
@@ -1066,7 +1072,7 @@ DebugRequest.prototype.changeBreakpointCommandToJSONRequest_ =
1066
1072
  arg2 = 'uncaught';
1067
1073
  }
1068
1074
  excType = arg2;
1069
-
1075
+
1070
1076
  // Check for:
1071
1077
  // en[able] [all|unc[aught]] exc[eptions]
1072
1078
  // dis[able] [all|unc[aught]] exc[eptions]
@@ -1125,7 +1131,7 @@ DebugRequest.prototype.changeBreakpointCommandToJSONRequest_ =
1125
1131
  request.arguments.ignoreCount = parseInt(otherArgs);
1126
1132
  break;
1127
1133
  default:
1128
- throw new Error('Invalid arguments.');
1134
+ throw new Error('Invalid arguments.');
1129
1135
  }
1130
1136
  } else {
1131
1137
  throw new Error('Invalid arguments.');
@@ -1246,7 +1252,7 @@ DebugRequest.prototype.lolMakeListRequest =
1246
1252
  start_index = parseInt(args[i]);
1247
1253
  // The user input start index starts at 1:
1248
1254
  if (start_index <= 0) {
1249
- throw new Error('Invalid index ' + args[i] + '.');
1255
+ throw new Error('Invalid index ' + args[i] + '.');
1250
1256
  }
1251
1257
  start_index -= 1;
1252
1258
  is_verbose = true;
@@ -1984,6 +1990,9 @@ function DebugResponseDetails(response) {
1984
1990
  if (breakpoint.script_name) {
1985
1991
  result += ' script_name=' + breakpoint.script_name;
1986
1992
  }
1993
+ if (breakpoint.script_regexp) {
1994
+ result += ' script_regexp=' + breakpoint.script_regexp;
1995
+ }
1987
1996
  result += ' line=' + (breakpoint.line + 1);
1988
1997
  if (breakpoint.column != null) {
1989
1998
  result += ' column=' + (breakpoint.column + 1);
@@ -2012,7 +2021,7 @@ function DebugResponseDetails(response) {
2012
2021
  } else if (body.breakOnUncaughtExceptions) {
2013
2022
  result += '* breaking on UNCAUGHT exceptions is enabled\n';
2014
2023
  } else {
2015
- result += '* all exception breakpoints are disabled\n';
2024
+ result += '* all exception breakpoints are disabled\n';
2016
2025
  }
2017
2026
  details.text = result;
2018
2027
  break;
@@ -981,11 +981,22 @@ function PadInt(n, digits) {
981
981
  function DateToISOString() {
982
982
  var t = DATE_VALUE(this);
983
983
  if (NUMBER_IS_NAN(t)) return kInvalidDate;
984
- return this.getUTCFullYear() +
984
+ var year = this.getUTCFullYear();
985
+ var year_string;
986
+ if (year >= 0 && year <= 9999) {
987
+ year_string = PadInt(year, 4);
988
+ } else {
989
+ if (year < 0) {
990
+ year_string = "-" + PadInt(-year, 6);
991
+ } else {
992
+ year_string = "+" + PadInt(year, 6);
993
+ }
994
+ }
995
+ return year_string +
985
996
  '-' + PadInt(this.getUTCMonth() + 1, 2) +
986
- '-' + PadInt(this.getUTCDate(), 2) +
997
+ '-' + PadInt(this.getUTCDate(), 2) +
987
998
  'T' + PadInt(this.getUTCHours(), 2) +
988
- ':' + PadInt(this.getUTCMinutes(), 2) +
999
+ ':' + PadInt(this.getUTCMinutes(), 2) +
989
1000
  ':' + PadInt(this.getUTCSeconds(), 2) +
990
1001
  '.' + PadInt(this.getUTCMilliseconds(), 3) +
991
1002
  'Z';
@@ -995,8 +1006,8 @@ function DateToISOString() {
995
1006
  function DateToJSON(key) {
996
1007
  var o = ToObject(this);
997
1008
  var tv = DefaultNumber(o);
998
- if (IS_NUMBER(tv) && !NUMBER_IS_FINITE(tv)) {
999
- return null;
1009
+ if (IS_NUMBER(tv) && !NUMBER_IS_FINITE(tv)) {
1010
+ return null;
1000
1011
  }
1001
1012
  return o.toISOString();
1002
1013
  }
@@ -39,16 +39,71 @@ bool DateParser::Parse(Vector<Char> str,
39
39
  UnicodeCache* unicode_cache) {
40
40
  ASSERT(out->length() >= OUTPUT_SIZE);
41
41
  InputReader<Char> in(unicode_cache, str);
42
+ DateStringTokenizer<Char> scanner(&in);
42
43
  TimeZoneComposer tz;
43
44
  TimeComposer time;
44
45
  DayComposer day;
45
46
 
46
- while (!in.IsEnd()) {
47
- if (in.IsAsciiDigit()) {
48
- // Parse a number (possibly with 1 or 2 trailing colons).
49
- int n = in.ReadUnsignedNumber();
50
- if (in.Skip(':')) {
51
- if (in.Skip(':')) {
47
+ // Specification:
48
+ // Accept ES5 ISO 8601 date-time-strings or legacy dates compatible
49
+ // with Safari.
50
+ // ES5 ISO 8601 dates:
51
+ // [('-'|'+')yy]yyyy[-MM[-DD]][THH:mm[:ss[.sss]][Z|(+|-)hh:mm]]
52
+ // where yyyy is in the range 0000..9999 and
53
+ // +/-yyyyyy is in the range -999999..+999999 -
54
+ // but -000000 is invalid (year zero must be positive),
55
+ // MM is in the range 01..12,
56
+ // DD is in the range 01..31,
57
+ // MM and DD defaults to 01 if missing,,
58
+ // HH is generally in the range 00..23, but can be 24 if mm, ss
59
+ // and sss are zero (or missing), representing midnight at the
60
+ // end of a day,
61
+ // mm and ss are in the range 00..59,
62
+ // sss is in the range 000..999,
63
+ // hh is in the range 00..23,
64
+ // mm, ss, and sss default to 00 if missing, and
65
+ // timezone defaults to Z if missing.
66
+ // Extensions:
67
+ // We also allow sss to have more or less than three digits (but at
68
+ // least one).
69
+ // We allow hh:mm to be specified as hhmm.
70
+ // Legacy dates:
71
+ // Any unrecognized word before the first number is ignored.
72
+ // Parenthesized text is ignored.
73
+ // An unsigned number followed by ':' is a time value, and is
74
+ // added to the TimeComposer. A number followed by '::' adds a second
75
+ // zero as well. A number followed by '.' is also a time and must be
76
+ // followed by milliseconds.
77
+ // Any other number is a date component and is added to DayComposer.
78
+ // A month name (or really: any word having the same first three letters
79
+ // as a month name) is recorded as a named month in the Day composer.
80
+ // A word recognizable as a time-zone is recorded as such, as is
81
+ // '(+|-)(hhmm|hh:)'.
82
+ // Legacy dates don't allow extra signs ('+' or '-') or umatched ')'
83
+ // after a number has been read (before the first number, any garbage
84
+ // is allowed).
85
+ // Intersection of the two:
86
+ // A string that matches both formats (e.g. 1970-01-01) will be
87
+ // parsed as an ES5 date-time string - which means it will default
88
+ // to UTC time-zone. That's unavoidable if following the ES5
89
+ // specification.
90
+ // After a valid "T" has been read while scanning an ES5 datetime string,
91
+ // the input can no longer be a valid legacy date, since the "T" is a
92
+ // garbage string after a number has been read.
93
+
94
+ // First try getting as far as possible with as ES5 Date Time String.
95
+ DateToken next_unhandled_token = ParseES5DateTime(&scanner, &day, &time, &tz);
96
+ if (next_unhandled_token.IsInvalid()) return false;
97
+ bool has_read_number = !day.IsEmpty();
98
+ // If there's anything left, continue with the legacy parser.
99
+ for (DateToken token = next_unhandled_token;
100
+ !token.IsEndOfInput();
101
+ token = scanner.Next()) {
102
+ if (token.IsNumber()) {
103
+ has_read_number = true;
104
+ int n = token.number();
105
+ if (scanner.SkipSymbol(':')) {
106
+ if (scanner.SkipSymbol(':')) {
52
107
  // n + "::"
53
108
  if (!time.IsEmpty()) return false;
54
109
  time.Add(n);
@@ -56,12 +111,13 @@ bool DateParser::Parse(Vector<Char> str,
56
111
  } else {
57
112
  // n + ":"
58
113
  if (!time.Add(n)) return false;
59
- in.Skip('.');
114
+ if (scanner.Peek().IsSymbol('.')) scanner.Next();
60
115
  }
61
- } else if (in.Skip('.') && time.IsExpecting(n)) {
116
+ } else if (scanner.SkipSymbol('.') && time.IsExpecting(n)) {
62
117
  time.Add(n);
63
- if (!in.IsAsciiDigit()) return false;
64
- int n = in.ReadMilliseconds();
118
+ if (!scanner.Peek().IsNumber()) return false;
119
+ int n = ReadMilliseconds(scanner.Next());
120
+ if (n < 0) return false;
65
121
  time.AddFinal(n);
66
122
  } else if (tz.IsExpecting(n)) {
67
123
  tz.SetAbsoluteMinute(n);
@@ -69,59 +125,206 @@ bool DateParser::Parse(Vector<Char> str,
69
125
  time.AddFinal(n);
70
126
  // Require end, white space, "Z", "+" or "-" immediately after
71
127
  // finalizing time.
72
- if (!in.IsEnd() && !in.SkipWhiteSpace() && !in.Is('Z') &&
73
- !in.IsAsciiSign()) return false;
128
+ DateToken peek = scanner.Peek();
129
+ if (!peek.IsEndOfInput() &&
130
+ !peek.IsWhiteSpace() &&
131
+ !peek.IsKeywordZ() &&
132
+ !peek.IsAsciiSign()) return false;
74
133
  } else {
75
134
  if (!day.Add(n)) return false;
76
- in.Skip('-'); // Ignore suffix '-' for year, month, or day.
77
- // Skip trailing 'T' for ECMAScript 5 date string format but make
78
- // sure that it is followed by a digit (for the time).
79
- if (in.Skip('T') && !in.IsAsciiDigit()) return false;
135
+ scanner.SkipSymbol('-');
80
136
  }
81
- } else if (in.IsAsciiAlphaOrAbove()) {
137
+ } else if (token.IsKeyword()) {
82
138
  // Parse a "word" (sequence of chars. >= 'A').
83
- uint32_t pre[KeywordTable::kPrefixLength];
84
- int len = in.ReadWord(pre, KeywordTable::kPrefixLength);
85
- int index = KeywordTable::Lookup(pre, len);
86
- KeywordType type = KeywordTable::GetType(index);
87
-
139
+ KeywordType type = token.keyword_type();
140
+ int value = token.keyword_value();
88
141
  if (type == AM_PM && !time.IsEmpty()) {
89
- time.SetHourOffset(KeywordTable::GetValue(index));
142
+ time.SetHourOffset(value);
90
143
  } else if (type == MONTH_NAME) {
91
- day.SetNamedMonth(KeywordTable::GetValue(index));
92
- in.Skip('-'); // Ignore suffix '-' for month names
93
- } else if (type == TIME_ZONE_NAME && in.HasReadNumber()) {
94
- tz.Set(KeywordTable::GetValue(index));
144
+ day.SetNamedMonth(value);
145
+ scanner.SkipSymbol('-');
146
+ } else if (type == TIME_ZONE_NAME && has_read_number) {
147
+ tz.Set(value);
95
148
  } else {
96
149
  // Garbage words are illegal if a number has been read.
97
- if (in.HasReadNumber()) return false;
150
+ if (has_read_number) return false;
98
151
  }
99
- } else if (in.IsAsciiSign() && (tz.IsUTC() || !time.IsEmpty())) {
152
+ } else if (token.IsAsciiSign() && (tz.IsUTC() || !time.IsEmpty())) {
100
153
  // Parse UTC offset (only after UTC or time).
101
- tz.SetSign(in.GetAsciiSignValue());
102
- in.Next();
103
- int n = in.ReadUnsignedNumber();
104
- if (in.Skip(':')) {
154
+ tz.SetSign(token.ascii_sign());
155
+ // The following number may be empty.
156
+ int n = 0;
157
+ if (scanner.Peek().IsNumber()) {
158
+ n = scanner.Next().number();
159
+ }
160
+ has_read_number = true;
161
+
162
+ if (scanner.Peek().IsSymbol(':')) {
105
163
  tz.SetAbsoluteHour(n);
106
164
  tz.SetAbsoluteMinute(kNone);
107
165
  } else {
108
166
  tz.SetAbsoluteHour(n / 100);
109
167
  tz.SetAbsoluteMinute(n % 100);
110
168
  }
111
- } else if (in.Is('(')) {
112
- // Ignore anything from '(' to a matching ')' or end of string.
113
- in.SkipParentheses();
114
- } else if ((in.IsAsciiSign() || in.Is(')')) && in.HasReadNumber()) {
169
+ } else if ((token.IsAsciiSign() || token.IsSymbol(')')) &&
170
+ has_read_number) {
115
171
  // Extra sign or ')' is illegal if a number has been read.
116
172
  return false;
117
173
  } else {
118
- // Ignore other characters.
119
- in.Next();
174
+ // Ignore other characters and whitespace.
120
175
  }
121
176
  }
177
+
122
178
  return day.Write(out) && time.Write(out) && tz.Write(out);
123
179
  }
124
180
 
181
+
182
+ template<typename CharType>
183
+ DateParser::DateToken DateParser::DateStringTokenizer<CharType>::Scan() {
184
+ int pre_pos = in_->position();
185
+ if (in_->IsEnd()) return DateToken::EndOfInput();
186
+ if (in_->IsAsciiDigit()) {
187
+ int n = in_->ReadUnsignedNumeral();
188
+ int length = in_->position() - pre_pos;
189
+ return DateToken::Number(n, length);
190
+ }
191
+ if (in_->Skip(':')) return DateToken::Symbol(':');
192
+ if (in_->Skip('-')) return DateToken::Symbol('-');
193
+ if (in_->Skip('+')) return DateToken::Symbol('+');
194
+ if (in_->Skip('.')) return DateToken::Symbol('.');
195
+ if (in_->Skip(')')) return DateToken::Symbol(')');
196
+ if (in_->IsAsciiAlphaOrAbove()) {
197
+ ASSERT(KeywordTable::kPrefixLength == 3);
198
+ uint32_t buffer[3] = {0, 0, 0};
199
+ int length = in_->ReadWord(buffer, 3);
200
+ int index = KeywordTable::Lookup(buffer, length);
201
+ return DateToken::Keyword(KeywordTable::GetType(index),
202
+ KeywordTable::GetValue(index),
203
+ length);
204
+ }
205
+ if (in_->SkipWhiteSpace()) {
206
+ return DateToken::WhiteSpace(in_->position() - pre_pos);
207
+ }
208
+ if (in_->SkipParentheses()) {
209
+ return DateToken::Unknown();
210
+ }
211
+ in_->Next();
212
+ return DateToken::Unknown();
213
+ }
214
+
215
+
216
+ template <typename Char>
217
+ DateParser::DateToken DateParser::ParseES5DateTime(
218
+ DateStringTokenizer<Char>* scanner,
219
+ DayComposer* day,
220
+ TimeComposer* time,
221
+ TimeZoneComposer* tz) {
222
+ ASSERT(day->IsEmpty());
223
+ ASSERT(time->IsEmpty());
224
+ ASSERT(tz->IsEmpty());
225
+
226
+ // Parse mandatory date string: [('-'|'+')yy]yyyy[':'MM[':'DD]]
227
+ if (scanner->Peek().IsAsciiSign()) {
228
+ // Keep the sign token, so we can pass it back to the legacy
229
+ // parser if we don't use it.
230
+ DateToken sign_token = scanner->Next();
231
+ if (!scanner->Peek().IsFixedLengthNumber(6)) return sign_token;
232
+ int sign = sign_token.ascii_sign();
233
+ int year = scanner->Next().number();
234
+ if (sign < 0 && year == 0) return sign_token;
235
+ day->Add(sign * year);
236
+ } else if (scanner->Peek().IsFixedLengthNumber(4)) {
237
+ day->Add(scanner->Next().number());
238
+ } else {
239
+ return scanner->Next();
240
+ }
241
+ if (scanner->SkipSymbol('-')) {
242
+ if (!scanner->Peek().IsFixedLengthNumber(2) ||
243
+ !DayComposer::IsMonth(scanner->Peek().number())) return scanner->Next();
244
+ day->Add(scanner->Next().number());
245
+ if (scanner->SkipSymbol('-')) {
246
+ if (!scanner->Peek().IsFixedLengthNumber(2) ||
247
+ !DayComposer::IsDay(scanner->Peek().number())) return scanner->Next();
248
+ day->Add(scanner->Next().number());
249
+ }
250
+ }
251
+ // Check for optional time string: 'T'HH':'mm[':'ss['.'sss]]Z
252
+ if (!scanner->Peek().IsKeywordType(TIME_SEPARATOR)) {
253
+ if (!scanner->Peek().IsEndOfInput()) return scanner->Next();
254
+ } else {
255
+ // ES5 Date Time String time part is present.
256
+ scanner->Next();
257
+ if (!scanner->Peek().IsFixedLengthNumber(2) ||
258
+ !Between(scanner->Peek().number(), 0, 24)) {
259
+ return DateToken::Invalid();
260
+ }
261
+ // Allow 24:00[:00[.000]], but no other time starting with 24.
262
+ bool hour_is_24 = (scanner->Peek().number() == 24);
263
+ time->Add(scanner->Next().number());
264
+ if (!scanner->SkipSymbol(':')) return DateToken::Invalid();
265
+ if (!scanner->Peek().IsFixedLengthNumber(2) ||
266
+ !TimeComposer::IsMinute(scanner->Peek().number()) ||
267
+ (hour_is_24 && scanner->Peek().number() > 0)) {
268
+ return DateToken::Invalid();
269
+ }
270
+ time->Add(scanner->Next().number());
271
+ if (scanner->SkipSymbol(':')) {
272
+ if (!scanner->Peek().IsFixedLengthNumber(2) ||
273
+ !TimeComposer::IsSecond(scanner->Peek().number()) ||
274
+ (hour_is_24 && scanner->Peek().number() > 0)) {
275
+ return DateToken::Invalid();
276
+ }
277
+ time->Add(scanner->Next().number());
278
+ if (scanner->SkipSymbol('.')) {
279
+ if (!scanner->Peek().IsNumber() ||
280
+ (hour_is_24 && scanner->Peek().number() > 0)) {
281
+ return DateToken::Invalid();
282
+ }
283
+ // Allow more or less than the mandated three digits.
284
+ time->Add(ReadMilliseconds(scanner->Next()));
285
+ }
286
+ }
287
+ // Check for optional timezone designation: 'Z' | ('+'|'-')hh':'mm
288
+ if (scanner->Peek().IsKeywordZ()) {
289
+ scanner->Next();
290
+ tz->Set(0);
291
+ } else if (scanner->Peek().IsSymbol('+') ||
292
+ scanner->Peek().IsSymbol('-')) {
293
+ tz->SetSign(scanner->Next().symbol() == '+' ? 1 : -1);
294
+ if (scanner->Peek().IsFixedLengthNumber(4)) {
295
+ // hhmm extension syntax.
296
+ int hourmin = scanner->Next().number();
297
+ int hour = hourmin / 100;
298
+ int min = hourmin % 100;
299
+ if (!TimeComposer::IsHour(hour) || !TimeComposer::IsMinute(min)) {
300
+ return DateToken::Invalid();
301
+ }
302
+ tz->SetAbsoluteHour(hour);
303
+ tz->SetAbsoluteMinute(min);
304
+ } else {
305
+ // hh:mm standard syntax.
306
+ if (!scanner->Peek().IsFixedLengthNumber(2) ||
307
+ !TimeComposer::IsHour(scanner->Peek().number())) {
308
+ return DateToken::Invalid();
309
+ }
310
+ tz->SetAbsoluteHour(scanner->Next().number());
311
+ if (!scanner->SkipSymbol(':')) return DateToken::Invalid();
312
+ if (!scanner->Peek().IsFixedLengthNumber(2) ||
313
+ !TimeComposer::IsMinute(scanner->Peek().number())) {
314
+ return DateToken::Invalid();
315
+ }
316
+ tz->SetAbsoluteMinute(scanner->Next().number());
317
+ }
318
+ }
319
+ if (!scanner->Peek().IsEndOfInput()) return DateToken::Invalid();
320
+ }
321
+ // Successfully parsed ES5 Date Time String. Default to UTC if no TZ given.
322
+ if (tz->IsEmpty()) tz->Set(0);
323
+ day->set_iso_date();
324
+ return DateToken::EndOfInput();
325
+ }
326
+
327
+
125
328
  } } // namespace v8::internal
126
329
 
127
330
  #endif // V8_DATEPARSER_INL_H_