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.
- data/lib/libv8/scons/CHANGES.txt +24 -231
- data/lib/libv8/scons/LICENSE.txt +1 -1
- data/lib/libv8/scons/MANIFEST +0 -1
- data/lib/libv8/scons/PKG-INFO +1 -1
- data/lib/libv8/scons/README.txt +9 -9
- data/lib/libv8/scons/RELEASE.txt +75 -77
- data/lib/libv8/scons/engine/SCons/Action.py +6 -22
- data/lib/libv8/scons/engine/SCons/Builder.py +2 -2
- data/lib/libv8/scons/engine/SCons/CacheDir.py +2 -2
- data/lib/libv8/scons/engine/SCons/Debug.py +2 -2
- data/lib/libv8/scons/engine/SCons/Defaults.py +10 -24
- data/lib/libv8/scons/engine/SCons/Environment.py +19 -118
- data/lib/libv8/scons/engine/SCons/Errors.py +2 -2
- data/lib/libv8/scons/engine/SCons/Executor.py +2 -2
- data/lib/libv8/scons/engine/SCons/Job.py +2 -2
- data/lib/libv8/scons/engine/SCons/Memoize.py +2 -2
- data/lib/libv8/scons/engine/SCons/Node/Alias.py +2 -2
- data/lib/libv8/scons/engine/SCons/Node/FS.py +121 -281
- data/lib/libv8/scons/engine/SCons/Node/Python.py +2 -2
- data/lib/libv8/scons/engine/SCons/Node/__init__.py +5 -6
- data/lib/libv8/scons/engine/SCons/Options/BoolOption.py +2 -2
- data/lib/libv8/scons/engine/SCons/Options/EnumOption.py +2 -2
- data/lib/libv8/scons/engine/SCons/Options/ListOption.py +2 -2
- data/lib/libv8/scons/engine/SCons/Options/PackageOption.py +2 -2
- data/lib/libv8/scons/engine/SCons/Options/PathOption.py +2 -2
- data/lib/libv8/scons/engine/SCons/Options/__init__.py +2 -2
- data/lib/libv8/scons/engine/SCons/PathList.py +2 -2
- data/lib/libv8/scons/engine/SCons/Platform/__init__.py +2 -2
- data/lib/libv8/scons/engine/SCons/Platform/aix.py +2 -2
- data/lib/libv8/scons/engine/SCons/Platform/cygwin.py +2 -2
- data/lib/libv8/scons/engine/SCons/Platform/darwin.py +3 -27
- data/lib/libv8/scons/engine/SCons/Platform/hpux.py +2 -2
- data/lib/libv8/scons/engine/SCons/Platform/irix.py +2 -2
- data/lib/libv8/scons/engine/SCons/Platform/os2.py +2 -2
- data/lib/libv8/scons/engine/SCons/Platform/posix.py +2 -2
- data/lib/libv8/scons/engine/SCons/Platform/sunos.py +2 -2
- data/lib/libv8/scons/engine/SCons/Platform/win32.py +2 -2
- data/lib/libv8/scons/engine/SCons/SConf.py +2 -2
- data/lib/libv8/scons/engine/SCons/SConsign.py +3 -9
- data/lib/libv8/scons/engine/SCons/Scanner/C.py +2 -2
- data/lib/libv8/scons/engine/SCons/Scanner/D.py +2 -2
- data/lib/libv8/scons/engine/SCons/Scanner/Dir.py +2 -2
- data/lib/libv8/scons/engine/SCons/Scanner/Fortran.py +2 -2
- data/lib/libv8/scons/engine/SCons/Scanner/IDL.py +2 -2
- data/lib/libv8/scons/engine/SCons/Scanner/LaTeX.py +2 -5
- data/lib/libv8/scons/engine/SCons/Scanner/Prog.py +2 -2
- data/lib/libv8/scons/engine/SCons/Scanner/RC.py +3 -3
- data/lib/libv8/scons/engine/SCons/Scanner/__init__.py +2 -2
- data/lib/libv8/scons/engine/SCons/Script/Interactive.py +2 -2
- data/lib/libv8/scons/engine/SCons/Script/Main.py +11 -82
- data/lib/libv8/scons/engine/SCons/Script/SConsOptions.py +5 -5
- data/lib/libv8/scons/engine/SCons/Script/SConscript.py +2 -2
- data/lib/libv8/scons/engine/SCons/Script/__init__.py +2 -2
- data/lib/libv8/scons/engine/SCons/Sig.py +2 -2
- data/lib/libv8/scons/engine/SCons/Subst.py +2 -2
- data/lib/libv8/scons/engine/SCons/Taskmaster.py +2 -10
- data/lib/libv8/scons/engine/SCons/Tool/386asm.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/BitKeeper.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/CVS.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/FortranCommon.py +2 -19
- data/lib/libv8/scons/engine/SCons/Tool/JavaCommon.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/MSCommon/__init__.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/MSCommon/arch.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/MSCommon/common.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/MSCommon/netframework.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/MSCommon/sdk.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/MSCommon/vc.py +6 -9
- data/lib/libv8/scons/engine/SCons/Tool/MSCommon/vs.py +2 -29
- data/lib/libv8/scons/engine/SCons/Tool/Perforce.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/PharLapCommon.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/RCS.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/SCCS.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/Subversion.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/__init__.py +3 -3
- data/lib/libv8/scons/engine/SCons/Tool/aixc++.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/aixcc.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/aixf77.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/aixlink.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/applelink.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/ar.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/as.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/bcc32.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/c++.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/cc.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/cvf.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/default.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/dmd.py +7 -24
- data/lib/libv8/scons/engine/SCons/Tool/dvi.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/dvipdf.py +2 -3
- data/lib/libv8/scons/engine/SCons/Tool/dvips.py +2 -3
- data/lib/libv8/scons/engine/SCons/Tool/f77.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/f90.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/f95.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/filesystem.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/fortran.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/g++.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/g77.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/gas.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/gcc.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/gfortran.py +3 -3
- data/lib/libv8/scons/engine/SCons/Tool/gnulink.py +3 -2
- data/lib/libv8/scons/engine/SCons/Tool/gs.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/hpc++.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/hpcc.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/hplink.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/icc.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/icl.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/ifl.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/ifort.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/ilink.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/ilink32.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/install.py +3 -57
- data/lib/libv8/scons/engine/SCons/Tool/intelc.py +25 -65
- data/lib/libv8/scons/engine/SCons/Tool/ipkg.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/jar.py +3 -9
- data/lib/libv8/scons/engine/SCons/Tool/javac.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/javah.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/latex.py +2 -3
- data/lib/libv8/scons/engine/SCons/Tool/lex.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/link.py +5 -6
- data/lib/libv8/scons/engine/SCons/Tool/linkloc.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/m4.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/masm.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/midl.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/mingw.py +10 -31
- data/lib/libv8/scons/engine/SCons/Tool/mslib.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/mslink.py +9 -61
- data/lib/libv8/scons/engine/SCons/Tool/mssdk.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/msvc.py +11 -21
- data/lib/libv8/scons/engine/SCons/Tool/msvs.py +59 -477
- data/lib/libv8/scons/engine/SCons/Tool/mwcc.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/mwld.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/nasm.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/packaging/__init__.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/packaging/ipk.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/packaging/msi.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/packaging/rpm.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/packaging/src_tarbz2.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/packaging/src_targz.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/packaging/src_zip.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/packaging/tarbz2.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/packaging/targz.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/packaging/zip.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/pdf.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/pdflatex.py +2 -3
- data/lib/libv8/scons/engine/SCons/Tool/pdftex.py +2 -3
- data/lib/libv8/scons/engine/SCons/Tool/qt.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/rmic.py +3 -9
- data/lib/libv8/scons/engine/SCons/Tool/rpcgen.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/rpm.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/sgiar.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/sgic++.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/sgicc.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/sgilink.py +3 -2
- data/lib/libv8/scons/engine/SCons/Tool/sunar.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/sunc++.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/suncc.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/sunf77.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/sunf90.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/sunf95.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/sunlink.py +3 -2
- data/lib/libv8/scons/engine/SCons/Tool/swig.py +5 -6
- data/lib/libv8/scons/engine/SCons/Tool/tar.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/tex.py +43 -96
- data/lib/libv8/scons/engine/SCons/Tool/textfile.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/tlib.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/wix.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/yacc.py +2 -12
- data/lib/libv8/scons/engine/SCons/Tool/zip.py +2 -2
- data/lib/libv8/scons/engine/SCons/Util.py +3 -3
- data/lib/libv8/scons/engine/SCons/Variables/BoolVariable.py +2 -2
- data/lib/libv8/scons/engine/SCons/Variables/EnumVariable.py +3 -3
- data/lib/libv8/scons/engine/SCons/Variables/ListVariable.py +2 -2
- data/lib/libv8/scons/engine/SCons/Variables/PackageVariable.py +2 -2
- data/lib/libv8/scons/engine/SCons/Variables/PathVariable.py +2 -2
- data/lib/libv8/scons/engine/SCons/Variables/__init__.py +2 -2
- data/lib/libv8/scons/engine/SCons/Warnings.py +2 -2
- data/lib/libv8/scons/engine/SCons/__init__.py +6 -6
- data/lib/libv8/scons/engine/SCons/compat/__init__.py +2 -2
- data/lib/libv8/scons/engine/SCons/compat/_scons_builtins.py +2 -2
- data/lib/libv8/scons/engine/SCons/compat/_scons_collections.py +2 -2
- data/lib/libv8/scons/engine/SCons/compat/_scons_dbm.py +2 -2
- data/lib/libv8/scons/engine/SCons/compat/_scons_hashlib.py +2 -2
- data/lib/libv8/scons/engine/SCons/compat/_scons_io.py +2 -2
- data/lib/libv8/scons/engine/SCons/cpp.py +2 -2
- data/lib/libv8/scons/engine/SCons/dblite.py +1 -4
- data/lib/libv8/scons/engine/SCons/exitfuncs.py +2 -2
- data/lib/libv8/scons/scons-time.1 +3 -3
- data/lib/libv8/scons/scons.1 +1164 -1170
- data/lib/libv8/scons/sconsign.1 +3 -3
- data/lib/libv8/scons/script/scons +22 -22
- data/lib/libv8/scons/script/scons-time +2 -2
- data/lib/libv8/scons/script/scons.bat +4 -7
- data/lib/libv8/scons/script/sconsign +20 -21
- data/lib/libv8/scons/setup.cfg +1 -0
- data/lib/libv8/scons/setup.py +40 -38
- data/lib/libv8/v8/.gitignore +1 -1
- data/lib/libv8/v8/AUTHORS +2 -0
- data/lib/libv8/v8/ChangeLog +387 -0
- data/lib/libv8/v8/Makefile +171 -0
- data/lib/libv8/v8/SConstruct +124 -51
- data/lib/libv8/v8/build/README.txt +31 -14
- data/lib/libv8/v8/build/all.gyp +11 -4
- data/lib/libv8/v8/build/armu.gypi +6 -2
- data/lib/libv8/v8/build/common.gypi +240 -94
- data/lib/libv8/v8/build/gyp_v8 +32 -4
- data/lib/libv8/v8/build/standalone.gypi +200 -0
- data/lib/libv8/v8/include/v8-debug.h +0 -0
- data/lib/libv8/v8/include/v8-profiler.h +8 -11
- data/lib/libv8/v8/include/v8.h +191 -108
- data/lib/libv8/v8/preparser/SConscript +2 -2
- data/lib/libv8/v8/preparser/preparser-process.cc +3 -3
- data/lib/libv8/v8/preparser/preparser.gyp +42 -0
- data/lib/libv8/v8/src/SConscript +33 -8
- data/lib/libv8/v8/src/accessors.cc +77 -43
- data/lib/libv8/v8/src/api.cc +393 -191
- data/lib/libv8/v8/src/api.h +4 -8
- data/lib/libv8/v8/src/apinatives.js +15 -3
- data/lib/libv8/v8/src/arguments.h +8 -0
- data/lib/libv8/v8/src/arm/assembler-arm.cc +120 -120
- data/lib/libv8/v8/src/arm/assembler-arm.h +92 -43
- data/lib/libv8/v8/src/arm/builtins-arm.cc +32 -39
- data/lib/libv8/v8/src/arm/code-stubs-arm.cc +572 -351
- data/lib/libv8/v8/src/arm/code-stubs-arm.h +8 -77
- data/lib/libv8/v8/src/arm/codegen-arm.h +0 -2
- data/lib/libv8/v8/src/arm/deoptimizer-arm.cc +50 -30
- data/lib/libv8/v8/src/arm/disasm-arm.cc +1 -1
- data/lib/libv8/v8/src/arm/frames-arm.h +9 -5
- data/lib/libv8/v8/src/arm/full-codegen-arm.cc +331 -432
- data/lib/libv8/v8/src/arm/ic-arm.cc +192 -124
- data/lib/libv8/v8/src/arm/lithium-arm.cc +216 -232
- data/lib/libv8/v8/src/arm/lithium-arm.h +106 -259
- data/lib/libv8/v8/src/arm/lithium-codegen-arm.cc +633 -642
- data/lib/libv8/v8/src/arm/lithium-codegen-arm.h +4 -4
- data/lib/libv8/v8/src/arm/lithium-gap-resolver-arm.cc +1 -3
- data/lib/libv8/v8/src/arm/macro-assembler-arm.cc +260 -185
- data/lib/libv8/v8/src/arm/macro-assembler-arm.h +45 -25
- data/lib/libv8/v8/src/arm/regexp-macro-assembler-arm.cc +25 -13
- data/lib/libv8/v8/src/arm/regexp-macro-assembler-arm.h +3 -0
- data/lib/libv8/v8/src/arm/stub-cache-arm.cc +413 -226
- data/lib/libv8/v8/src/array.js +38 -18
- data/lib/libv8/v8/src/assembler.cc +12 -5
- data/lib/libv8/v8/src/assembler.h +15 -9
- data/lib/libv8/v8/src/ast-inl.h +34 -25
- data/lib/libv8/v8/src/ast.cc +141 -72
- data/lib/libv8/v8/src/ast.h +255 -181
- data/lib/libv8/v8/src/bignum.cc +3 -4
- data/lib/libv8/v8/src/bootstrapper.cc +55 -11
- data/lib/libv8/v8/src/bootstrapper.h +3 -2
- data/lib/libv8/v8/src/builtins.cc +8 -2
- data/lib/libv8/v8/src/builtins.h +4 -0
- data/lib/libv8/v8/src/cached-powers.cc +8 -4
- data/lib/libv8/v8/src/checks.h +3 -3
- data/lib/libv8/v8/src/code-stubs.cc +173 -28
- data/lib/libv8/v8/src/code-stubs.h +104 -148
- data/lib/libv8/v8/src/codegen.cc +8 -8
- data/lib/libv8/v8/src/compilation-cache.cc +2 -47
- data/lib/libv8/v8/src/compilation-cache.h +0 -10
- data/lib/libv8/v8/src/compiler.cc +27 -16
- data/lib/libv8/v8/src/compiler.h +13 -18
- data/lib/libv8/v8/src/contexts.cc +107 -72
- data/lib/libv8/v8/src/contexts.h +70 -34
- data/lib/libv8/v8/src/conversions-inl.h +572 -14
- data/lib/libv8/v8/src/conversions.cc +9 -707
- data/lib/libv8/v8/src/conversions.h +23 -12
- data/lib/libv8/v8/src/cpu-profiler-inl.h +2 -19
- data/lib/libv8/v8/src/cpu-profiler.cc +4 -21
- data/lib/libv8/v8/src/cpu-profiler.h +8 -17
- data/lib/libv8/v8/src/d8-debug.cc +5 -3
- data/lib/libv8/v8/src/d8-debug.h +6 -7
- data/lib/libv8/v8/src/d8-posix.cc +1 -10
- data/lib/libv8/v8/src/d8.cc +721 -219
- data/lib/libv8/v8/src/d8.gyp +37 -12
- data/lib/libv8/v8/src/d8.h +141 -19
- data/lib/libv8/v8/src/d8.js +17 -8
- data/lib/libv8/v8/src/date.js +16 -5
- data/lib/libv8/v8/src/dateparser-inl.h +242 -39
- data/lib/libv8/v8/src/dateparser.cc +38 -4
- data/lib/libv8/v8/src/dateparser.h +170 -28
- data/lib/libv8/v8/src/debug-agent.cc +5 -3
- data/lib/libv8/v8/src/debug-agent.h +11 -7
- data/lib/libv8/v8/src/debug-debugger.js +65 -34
- data/lib/libv8/v8/src/debug.cc +30 -60
- data/lib/libv8/v8/src/debug.h +5 -3
- data/lib/libv8/v8/src/deoptimizer.cc +227 -10
- data/lib/libv8/v8/src/deoptimizer.h +133 -9
- data/lib/libv8/v8/src/disassembler.cc +22 -14
- data/lib/libv8/v8/src/diy-fp.cc +4 -3
- data/lib/libv8/v8/src/diy-fp.h +3 -3
- data/lib/libv8/v8/src/elements.cc +634 -0
- data/lib/libv8/v8/src/elements.h +95 -0
- data/lib/libv8/v8/src/execution.cc +5 -21
- data/lib/libv8/v8/src/extensions/experimental/break-iterator.cc +3 -1
- data/lib/libv8/v8/src/extensions/experimental/break-iterator.h +1 -1
- data/lib/libv8/v8/src/extensions/experimental/collator.cc +6 -2
- data/lib/libv8/v8/src/extensions/experimental/collator.h +1 -2
- data/lib/libv8/v8/src/extensions/experimental/datetime-format.cc +384 -0
- data/lib/libv8/v8/src/extensions/experimental/datetime-format.h +83 -0
- data/lib/libv8/v8/src/extensions/experimental/experimental.gyp +18 -7
- data/lib/libv8/v8/src/extensions/experimental/i18n-extension.cc +12 -16
- data/lib/libv8/v8/src/extensions/experimental/i18n-extension.h +1 -1
- data/lib/libv8/v8/src/extensions/experimental/i18n-js2c.py +126 -0
- data/lib/libv8/v8/src/extensions/experimental/i18n-locale.cc +3 -4
- data/lib/libv8/v8/src/extensions/experimental/i18n-locale.h +1 -1
- data/lib/libv8/v8/src/{shell.h → extensions/experimental/i18n-natives.h} +8 -20
- data/lib/libv8/v8/src/extensions/experimental/i18n-utils.cc +45 -1
- data/lib/libv8/v8/src/extensions/experimental/i18n-utils.h +21 -1
- data/lib/libv8/v8/src/extensions/experimental/i18n.js +211 -11
- data/lib/libv8/v8/src/extensions/experimental/language-matcher.cc +4 -3
- data/lib/libv8/v8/src/extensions/experimental/language-matcher.h +1 -1
- data/lib/libv8/v8/src/extensions/experimental/number-format.cc +374 -0
- data/lib/libv8/v8/src/extensions/experimental/number-format.h +71 -0
- data/lib/libv8/v8/src/factory.cc +89 -18
- data/lib/libv8/v8/src/factory.h +36 -8
- data/lib/libv8/v8/src/flag-definitions.h +11 -44
- data/lib/libv8/v8/src/frames-inl.h +8 -1
- data/lib/libv8/v8/src/frames.cc +39 -3
- data/lib/libv8/v8/src/frames.h +10 -3
- data/lib/libv8/v8/src/full-codegen.cc +311 -293
- data/lib/libv8/v8/src/full-codegen.h +183 -143
- data/lib/libv8/v8/src/func-name-inferrer.cc +29 -15
- data/lib/libv8/v8/src/func-name-inferrer.h +19 -9
- data/lib/libv8/v8/src/gdb-jit.cc +658 -55
- data/lib/libv8/v8/src/gdb-jit.h +6 -2
- data/lib/libv8/v8/src/global-handles.cc +368 -312
- data/lib/libv8/v8/src/global-handles.h +29 -36
- data/lib/libv8/v8/src/globals.h +3 -1
- data/lib/libv8/v8/src/handles.cc +43 -69
- data/lib/libv8/v8/src/handles.h +21 -16
- data/lib/libv8/v8/src/heap-inl.h +11 -13
- data/lib/libv8/v8/src/heap-profiler.cc +0 -999
- data/lib/libv8/v8/src/heap-profiler.h +0 -303
- data/lib/libv8/v8/src/heap.cc +366 -141
- data/lib/libv8/v8/src/heap.h +87 -26
- data/lib/libv8/v8/src/hydrogen-instructions.cc +192 -81
- data/lib/libv8/v8/src/hydrogen-instructions.h +711 -482
- data/lib/libv8/v8/src/hydrogen.cc +1146 -629
- data/lib/libv8/v8/src/hydrogen.h +100 -64
- data/lib/libv8/v8/src/ia32/assembler-ia32.cc +19 -0
- data/lib/libv8/v8/src/ia32/assembler-ia32.h +15 -2
- data/lib/libv8/v8/src/ia32/builtins-ia32.cc +34 -39
- data/lib/libv8/v8/src/ia32/code-stubs-ia32.cc +675 -377
- data/lib/libv8/v8/src/ia32/code-stubs-ia32.h +8 -69
- data/lib/libv8/v8/src/ia32/codegen-ia32.cc +1 -0
- data/lib/libv8/v8/src/ia32/codegen-ia32.h +0 -2
- data/lib/libv8/v8/src/ia32/cpu-ia32.cc +3 -2
- data/lib/libv8/v8/src/ia32/deoptimizer-ia32.cc +28 -3
- data/lib/libv8/v8/src/ia32/disasm-ia32.cc +21 -10
- data/lib/libv8/v8/src/ia32/frames-ia32.h +6 -5
- data/lib/libv8/v8/src/ia32/full-codegen-ia32.cc +459 -465
- data/lib/libv8/v8/src/ia32/ic-ia32.cc +196 -147
- data/lib/libv8/v8/src/ia32/lithium-codegen-ia32.cc +575 -650
- data/lib/libv8/v8/src/ia32/lithium-codegen-ia32.h +19 -21
- data/lib/libv8/v8/src/ia32/lithium-gap-resolver-ia32.cc +7 -2
- data/lib/libv8/v8/src/ia32/lithium-ia32.cc +261 -256
- data/lib/libv8/v8/src/ia32/lithium-ia32.h +234 -335
- data/lib/libv8/v8/src/ia32/macro-assembler-ia32.cc +224 -67
- data/lib/libv8/v8/src/ia32/macro-assembler-ia32.h +63 -19
- data/lib/libv8/v8/src/ia32/regexp-macro-assembler-ia32.cc +22 -8
- data/lib/libv8/v8/src/ia32/regexp-macro-assembler-ia32.h +3 -0
- data/lib/libv8/v8/src/ia32/stub-cache-ia32.cc +380 -239
- data/lib/libv8/v8/src/ic.cc +198 -234
- data/lib/libv8/v8/src/ic.h +32 -30
- data/lib/libv8/v8/src/interpreter-irregexp.cc +6 -4
- data/lib/libv8/v8/src/isolate.cc +112 -95
- data/lib/libv8/v8/src/isolate.h +55 -71
- data/lib/libv8/v8/src/json-parser.h +486 -48
- data/lib/libv8/v8/src/json.js +28 -23
- data/lib/libv8/v8/src/jsregexp.cc +163 -208
- data/lib/libv8/v8/src/jsregexp.h +0 -1
- data/lib/libv8/v8/src/lithium-allocator-inl.h +29 -27
- data/lib/libv8/v8/src/lithium-allocator.cc +22 -17
- data/lib/libv8/v8/src/lithium-allocator.h +8 -8
- data/lib/libv8/v8/src/lithium.cc +16 -11
- data/lib/libv8/v8/src/lithium.h +31 -34
- data/lib/libv8/v8/src/liveedit.cc +111 -15
- data/lib/libv8/v8/src/liveedit.h +3 -4
- data/lib/libv8/v8/src/liveobjectlist.cc +116 -80
- data/lib/libv8/v8/src/liveobjectlist.h +2 -2
- data/lib/libv8/v8/src/log-inl.h +0 -4
- data/lib/libv8/v8/src/log-utils.cc +25 -143
- data/lib/libv8/v8/src/log-utils.h +13 -92
- data/lib/libv8/v8/src/log.cc +26 -249
- data/lib/libv8/v8/src/log.h +6 -17
- data/lib/libv8/v8/src/macros.py +9 -6
- data/lib/libv8/v8/src/mark-compact.cc +276 -56
- data/lib/libv8/v8/src/mark-compact.h +20 -0
- data/lib/libv8/v8/src/messages.js +93 -39
- data/lib/libv8/v8/src/mips/assembler-mips-inl.h +9 -3
- data/lib/libv8/v8/src/mips/assembler-mips.cc +297 -189
- data/lib/libv8/v8/src/mips/assembler-mips.h +121 -54
- data/lib/libv8/v8/src/mips/builtins-mips.cc +23 -24
- data/lib/libv8/v8/src/mips/code-stubs-mips.cc +484 -263
- data/lib/libv8/v8/src/mips/code-stubs-mips.h +8 -83
- data/lib/libv8/v8/src/mips/codegen-mips.h +0 -2
- data/lib/libv8/v8/src/mips/constants-mips.h +37 -11
- data/lib/libv8/v8/src/mips/deoptimizer-mips.cc +6 -1
- data/lib/libv8/v8/src/mips/frames-mips.h +8 -7
- data/lib/libv8/v8/src/mips/full-codegen-mips.cc +258 -419
- data/lib/libv8/v8/src/mips/ic-mips.cc +181 -121
- data/lib/libv8/v8/src/mips/macro-assembler-mips.cc +640 -382
- data/lib/libv8/v8/src/mips/macro-assembler-mips.h +94 -89
- data/lib/libv8/v8/src/mips/regexp-macro-assembler-mips.cc +23 -10
- data/lib/libv8/v8/src/mips/regexp-macro-assembler-mips.h +6 -1
- data/lib/libv8/v8/src/mips/simulator-mips.cc +249 -49
- data/lib/libv8/v8/src/mips/simulator-mips.h +25 -1
- data/lib/libv8/v8/src/mips/stub-cache-mips.cc +373 -161
- data/lib/libv8/v8/src/mirror-debugger.js +55 -8
- data/lib/libv8/v8/src/misc-intrinsics.h +89 -0
- data/lib/libv8/v8/src/mksnapshot.cc +36 -4
- data/lib/libv8/v8/src/natives.h +5 -2
- data/lib/libv8/v8/src/objects-debug.cc +73 -6
- data/lib/libv8/v8/src/objects-inl.h +529 -164
- data/lib/libv8/v8/src/objects-printer.cc +67 -12
- data/lib/libv8/v8/src/objects-visiting.cc +13 -2
- data/lib/libv8/v8/src/objects-visiting.h +41 -1
- data/lib/libv8/v8/src/objects.cc +2200 -1177
- data/lib/libv8/v8/src/objects.h +912 -283
- data/lib/libv8/v8/src/parser.cc +566 -371
- data/lib/libv8/v8/src/parser.h +35 -33
- data/lib/libv8/v8/src/platform-cygwin.cc +10 -25
- data/lib/libv8/v8/src/platform-freebsd.cc +4 -29
- data/lib/libv8/v8/src/platform-linux.cc +60 -57
- data/lib/libv8/v8/src/platform-macos.cc +4 -27
- data/lib/libv8/v8/src/platform-nullos.cc +3 -16
- data/lib/libv8/v8/src/platform-openbsd.cc +247 -85
- data/lib/libv8/v8/src/platform-posix.cc +43 -1
- data/lib/libv8/v8/src/platform-solaris.cc +151 -112
- data/lib/libv8/v8/src/platform-tls.h +1 -1
- data/lib/libv8/v8/src/platform-win32.cc +65 -39
- data/lib/libv8/v8/src/platform.h +17 -14
- data/lib/libv8/v8/src/preparse-data-format.h +2 -2
- data/lib/libv8/v8/src/preparse-data.h +8 -2
- data/lib/libv8/v8/src/preparser-api.cc +2 -18
- data/lib/libv8/v8/src/preparser.cc +106 -65
- data/lib/libv8/v8/src/preparser.h +26 -5
- data/lib/libv8/v8/src/prettyprinter.cc +25 -43
- data/lib/libv8/v8/src/profile-generator-inl.h +0 -4
- data/lib/libv8/v8/src/profile-generator.cc +213 -34
- data/lib/libv8/v8/src/profile-generator.h +9 -9
- data/lib/libv8/v8/src/property.h +1 -0
- data/lib/libv8/v8/src/proxy.js +74 -4
- data/lib/libv8/v8/src/regexp-macro-assembler.cc +10 -6
- data/lib/libv8/v8/src/regexp.js +16 -11
- data/lib/libv8/v8/src/rewriter.cc +24 -133
- data/lib/libv8/v8/src/runtime-profiler.cc +27 -151
- data/lib/libv8/v8/src/runtime-profiler.h +5 -31
- data/lib/libv8/v8/src/runtime.cc +1450 -681
- data/lib/libv8/v8/src/runtime.h +47 -31
- data/lib/libv8/v8/src/runtime.js +2 -1
- data/lib/libv8/v8/src/scanner-base.cc +358 -220
- data/lib/libv8/v8/src/scanner-base.h +30 -138
- data/lib/libv8/v8/src/scanner.cc +0 -18
- data/lib/libv8/v8/src/scanner.h +0 -15
- data/lib/libv8/v8/src/scopeinfo.cc +3 -1
- data/lib/libv8/v8/src/scopeinfo.h +1 -6
- data/lib/libv8/v8/src/scopes.cc +243 -253
- data/lib/libv8/v8/src/scopes.h +58 -109
- data/lib/libv8/v8/src/serialize.cc +12 -54
- data/lib/libv8/v8/src/serialize.h +47 -0
- data/lib/libv8/v8/src/small-pointer-list.h +25 -0
- data/lib/libv8/v8/src/spaces-inl.h +4 -50
- data/lib/libv8/v8/src/spaces.cc +64 -131
- data/lib/libv8/v8/src/spaces.h +19 -70
- data/lib/libv8/v8/src/string-stream.cc +3 -1
- data/lib/libv8/v8/src/string.js +10 -6
- data/lib/libv8/v8/src/strtod.cc +7 -3
- data/lib/libv8/v8/src/stub-cache.cc +59 -129
- data/lib/libv8/v8/src/stub-cache.h +42 -54
- data/lib/libv8/v8/src/third_party/valgrind/valgrind.h +1447 -1339
- data/lib/libv8/v8/src/token.cc +4 -4
- data/lib/libv8/v8/src/token.h +6 -5
- data/lib/libv8/v8/src/type-info.cc +173 -129
- data/lib/libv8/v8/src/type-info.h +40 -22
- data/lib/libv8/v8/src/utils.cc +25 -304
- data/lib/libv8/v8/src/utils.h +118 -3
- data/lib/libv8/v8/src/v8-counters.h +3 -6
- data/lib/libv8/v8/src/v8.cc +34 -27
- data/lib/libv8/v8/src/v8.h +7 -7
- data/lib/libv8/v8/src/v8conversions.cc +129 -0
- data/lib/libv8/v8/src/v8conversions.h +60 -0
- data/lib/libv8/v8/src/v8globals.h +15 -6
- data/lib/libv8/v8/src/v8natives.js +300 -78
- data/lib/libv8/v8/src/v8threads.cc +14 -6
- data/lib/libv8/v8/src/v8threads.h +4 -1
- data/lib/libv8/v8/src/v8utils.cc +360 -0
- data/lib/libv8/v8/src/v8utils.h +17 -66
- data/lib/libv8/v8/src/variables.cc +7 -12
- data/lib/libv8/v8/src/variables.h +12 -10
- data/lib/libv8/v8/src/version.cc +2 -2
- data/lib/libv8/v8/src/vm-state-inl.h +0 -41
- data/lib/libv8/v8/src/vm-state.h +0 -11
- data/lib/libv8/v8/src/weakmap.js +103 -0
- data/lib/libv8/v8/src/x64/assembler-x64.h +6 -3
- data/lib/libv8/v8/src/x64/builtins-x64.cc +25 -22
- data/lib/libv8/v8/src/x64/code-stubs-x64.cc +523 -250
- data/lib/libv8/v8/src/x64/code-stubs-x64.h +8 -71
- data/lib/libv8/v8/src/x64/codegen-x64.cc +1 -0
- data/lib/libv8/v8/src/x64/codegen-x64.h +0 -2
- data/lib/libv8/v8/src/x64/cpu-x64.cc +2 -1
- data/lib/libv8/v8/src/x64/deoptimizer-x64.cc +40 -8
- data/lib/libv8/v8/src/x64/disasm-x64.cc +12 -10
- data/lib/libv8/v8/src/x64/frames-x64.h +7 -6
- data/lib/libv8/v8/src/x64/full-codegen-x64.cc +310 -415
- data/lib/libv8/v8/src/x64/ic-x64.cc +180 -117
- data/lib/libv8/v8/src/x64/lithium-codegen-x64.cc +411 -523
- data/lib/libv8/v8/src/x64/lithium-codegen-x64.h +11 -6
- data/lib/libv8/v8/src/x64/lithium-x64.cc +191 -216
- data/lib/libv8/v8/src/x64/lithium-x64.h +112 -263
- data/lib/libv8/v8/src/x64/macro-assembler-x64.cc +177 -61
- data/lib/libv8/v8/src/x64/macro-assembler-x64.h +23 -7
- data/lib/libv8/v8/src/x64/regexp-macro-assembler-x64.cc +21 -9
- data/lib/libv8/v8/src/x64/regexp-macro-assembler-x64.h +6 -0
- data/lib/libv8/v8/src/x64/stub-cache-x64.cc +273 -107
- data/lib/libv8/v8/src/zone.cc +31 -22
- data/lib/libv8/v8/src/zone.h +12 -6
- data/lib/libv8/v8/tools/codemap.js +8 -0
- data/lib/libv8/v8/tools/gcmole/Makefile +43 -0
- data/lib/libv8/v8/tools/gcmole/gcmole.lua +0 -2
- data/lib/libv8/v8/tools/gdb-v8-support.py +154 -0
- data/lib/libv8/v8/tools/grokdump.py +44 -35
- data/lib/libv8/v8/tools/gyp/v8.gyp +94 -248
- data/lib/libv8/v8/tools/js2c.py +83 -52
- data/lib/libv8/v8/tools/linux-tick-processor +4 -6
- data/lib/libv8/v8/tools/ll_prof.py +3 -3
- data/lib/libv8/v8/tools/oom_dump/README +3 -1
- data/lib/libv8/v8/tools/presubmit.py +11 -4
- data/lib/libv8/v8/tools/profile.js +46 -2
- data/lib/libv8/v8/tools/splaytree.js +11 -0
- data/lib/libv8/v8/tools/stats-viewer.py +15 -11
- data/lib/libv8/v8/tools/test-wrapper-gypbuild.py +227 -0
- data/lib/libv8/v8/tools/test.py +28 -8
- data/lib/libv8/v8/tools/tickprocessor.js +0 -16
- data/lib/libv8/version.rb +1 -1
- data/libv8.gemspec +2 -2
- metadata +31 -19
- data/lib/libv8/scons/engine/SCons/Tool/f03.py +0 -63
- data/lib/libv8/v8/src/json-parser.cc +0 -504
data/lib/libv8/v8/src/d8.gyp
CHANGED
|
@@ -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
|
-
[ '
|
|
53
|
-
'sources': [ 'd8-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
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
|
},
|
data/lib/libv8/v8/src/d8.h
CHANGED
|
@@ -28,20 +28,19 @@
|
|
|
28
28
|
#ifndef V8_D8_H_
|
|
29
29
|
#define V8_D8_H_
|
|
30
30
|
|
|
31
|
-
|
|
31
|
+
|
|
32
|
+
#ifndef V8_SHARED
|
|
32
33
|
#include "v8.h"
|
|
34
|
+
#include "allocation.h"
|
|
33
35
|
#include "hashmap.h"
|
|
34
|
-
|
|
35
|
-
#
|
|
36
|
-
#
|
|
37
|
-
#endif
|
|
36
|
+
#else
|
|
37
|
+
#include "../include/v8.h"
|
|
38
|
+
#endif // V8_SHARED
|
|
38
39
|
|
|
39
40
|
namespace v8 {
|
|
40
41
|
|
|
41
42
|
|
|
42
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
136
|
-
|
|
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
|
data/lib/libv8/v8/src/d8.js
CHANGED
|
@@ -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;
|
data/lib/libv8/v8/src/date.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
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
|
-
|
|
114
|
+
if (scanner.Peek().IsSymbol('.')) scanner.Next();
|
|
60
115
|
}
|
|
61
|
-
} else if (
|
|
116
|
+
} else if (scanner.SkipSymbol('.') && time.IsExpecting(n)) {
|
|
62
117
|
time.Add(n);
|
|
63
|
-
if (!
|
|
64
|
-
int n =
|
|
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
|
-
|
|
73
|
-
|
|
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
|
-
|
|
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 (
|
|
137
|
+
} else if (token.IsKeyword()) {
|
|
82
138
|
// Parse a "word" (sequence of chars. >= 'A').
|
|
83
|
-
|
|
84
|
-
int
|
|
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(
|
|
142
|
+
time.SetHourOffset(value);
|
|
90
143
|
} else if (type == MONTH_NAME) {
|
|
91
|
-
day.SetNamedMonth(
|
|
92
|
-
|
|
93
|
-
} else if (type == TIME_ZONE_NAME &&
|
|
94
|
-
tz.Set(
|
|
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 (
|
|
150
|
+
if (has_read_number) return false;
|
|
98
151
|
}
|
|
99
|
-
} else if (
|
|
152
|
+
} else if (token.IsAsciiSign() && (tz.IsUTC() || !time.IsEmpty())) {
|
|
100
153
|
// Parse UTC offset (only after UTC or time).
|
|
101
|
-
tz.SetSign(
|
|
102
|
-
|
|
103
|
-
int n =
|
|
104
|
-
if (
|
|
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 (
|
|
112
|
-
|
|
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_
|