libv8 3.3.10.4 → 3.5.10.beta1
Sign up to get free protection for your applications and to get access to all the features.
- 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
@@ -138,16 +138,39 @@ int fopen_s(FILE** pFile, const char* filename, const char* mode) {
|
|
138
138
|
}
|
139
139
|
|
140
140
|
|
141
|
+
#define _TRUNCATE 0
|
142
|
+
#define STRUNCATE 80
|
143
|
+
|
141
144
|
int _vsnprintf_s(char* buffer, size_t sizeOfBuffer, size_t count,
|
142
145
|
const char* format, va_list argptr) {
|
146
|
+
ASSERT(count == _TRUNCATE);
|
143
147
|
return _vsnprintf(buffer, sizeOfBuffer, format, argptr);
|
144
148
|
}
|
145
|
-
#define _TRUNCATE 0
|
146
149
|
|
147
150
|
|
148
|
-
int strncpy_s(char*
|
149
|
-
|
150
|
-
|
151
|
+
int strncpy_s(char* dest, size_t dest_size, const char* source, size_t count) {
|
152
|
+
CHECK(source != NULL);
|
153
|
+
CHECK(dest != NULL);
|
154
|
+
CHECK_GT(dest_size, 0);
|
155
|
+
|
156
|
+
if (count == _TRUNCATE) {
|
157
|
+
while (dest_size > 0 && *source != 0) {
|
158
|
+
*(dest++) = *(source++);
|
159
|
+
--dest_size;
|
160
|
+
}
|
161
|
+
if (dest_size == 0) {
|
162
|
+
*(dest - 1) = 0;
|
163
|
+
return STRUNCATE;
|
164
|
+
}
|
165
|
+
} else {
|
166
|
+
while (dest_size > 0 && count > 0 && *source != 0) {
|
167
|
+
*(dest++) = *(source++);
|
168
|
+
--dest_size;
|
169
|
+
--count;
|
170
|
+
}
|
171
|
+
}
|
172
|
+
CHECK_GT(dest_size, 0);
|
173
|
+
*dest = 0;
|
151
174
|
return 0;
|
152
175
|
}
|
153
176
|
|
@@ -169,6 +192,11 @@ int random() {
|
|
169
192
|
namespace v8 {
|
170
193
|
namespace internal {
|
171
194
|
|
195
|
+
intptr_t OS::MaxVirtualMemory() {
|
196
|
+
return 0;
|
197
|
+
}
|
198
|
+
|
199
|
+
|
172
200
|
double ceiling(double x) {
|
173
201
|
return ceil(x);
|
174
202
|
}
|
@@ -407,13 +435,11 @@ void Time::TzSet() {
|
|
407
435
|
}
|
408
436
|
|
409
437
|
// Make standard and DST timezone names.
|
410
|
-
|
411
|
-
|
412
|
-
tzinfo_.StandardName);
|
438
|
+
WideCharToMultiByte(CP_UTF8, 0, tzinfo_.StandardName, -1,
|
439
|
+
std_tz_name_, kTzNameSize, NULL, NULL);
|
413
440
|
std_tz_name_[kTzNameSize - 1] = '\0';
|
414
|
-
|
415
|
-
|
416
|
-
tzinfo_.DaylightName);
|
441
|
+
WideCharToMultiByte(CP_UTF8, 0, tzinfo_.DaylightName, -1,
|
442
|
+
dst_tz_name_, kTzNameSize, NULL, NULL);
|
417
443
|
dst_tz_name_[kTzNameSize - 1] = '\0';
|
418
444
|
|
419
445
|
// If OS returned empty string or resource id (like "@tzres.dll,-211")
|
@@ -714,6 +740,24 @@ bool OS::Remove(const char* path) {
|
|
714
740
|
}
|
715
741
|
|
716
742
|
|
743
|
+
FILE* OS::OpenTemporaryFile() {
|
744
|
+
// tmpfile_s tries to use the root dir, don't use it.
|
745
|
+
char tempPathBuffer[MAX_PATH];
|
746
|
+
DWORD path_result = 0;
|
747
|
+
path_result = GetTempPathA(MAX_PATH, tempPathBuffer);
|
748
|
+
if (path_result > MAX_PATH || path_result == 0) return NULL;
|
749
|
+
UINT name_result = 0;
|
750
|
+
char tempNameBuffer[MAX_PATH];
|
751
|
+
name_result = GetTempFileNameA(tempPathBuffer, "", 0, tempNameBuffer);
|
752
|
+
if (name_result == 0) return NULL;
|
753
|
+
FILE* result = FOpen(tempNameBuffer, "w+"); // Same mode as tmpfile uses.
|
754
|
+
if (result != NULL) {
|
755
|
+
Remove(tempNameBuffer); // Delete on close.
|
756
|
+
}
|
757
|
+
return result;
|
758
|
+
}
|
759
|
+
|
760
|
+
|
717
761
|
// Open log file in binary mode to avoid /n -> /r/n conversion.
|
718
762
|
const char* const OS::LogFileOpenMode = "wb";
|
719
763
|
|
@@ -913,24 +957,17 @@ void OS::Free(void* address, const size_t size) {
|
|
913
957
|
}
|
914
958
|
|
915
959
|
|
916
|
-
|
917
|
-
|
918
|
-
void OS::Protect(void* address, size_t size) {
|
919
|
-
// TODO(1240712): VirtualProtect has a return value which is ignored here.
|
960
|
+
void OS::ProtectCode(void* address, const size_t size) {
|
920
961
|
DWORD old_protect;
|
921
|
-
VirtualProtect(address, size,
|
962
|
+
VirtualProtect(address, size, PAGE_EXECUTE_READ, &old_protect);
|
922
963
|
}
|
923
964
|
|
924
965
|
|
925
|
-
void OS::
|
926
|
-
|
927
|
-
|
928
|
-
DWORD old_protect;
|
929
|
-
VirtualProtect(address, size, new_protect, &old_protect);
|
966
|
+
void OS::Guard(void* address, const size_t size) {
|
967
|
+
DWORD oldprotect;
|
968
|
+
VirtualProtect(address, size, PAGE_READONLY | PAGE_GUARD, &oldprotect);
|
930
969
|
}
|
931
970
|
|
932
|
-
#endif
|
933
|
-
|
934
971
|
|
935
972
|
void OS::Sleep(int milliseconds) {
|
936
973
|
::Sleep(milliseconds);
|
@@ -1475,10 +1512,6 @@ static const HANDLE kNoThread = INVALID_HANDLE_VALUE;
|
|
1475
1512
|
// convention.
|
1476
1513
|
static unsigned int __stdcall ThreadEntry(void* arg) {
|
1477
1514
|
Thread* thread = reinterpret_cast<Thread*>(arg);
|
1478
|
-
// This is also initialized by the last parameter to _beginthreadex() but we
|
1479
|
-
// don't know which thread will run first (the original thread or the new
|
1480
|
-
// one) so we initialize it here too.
|
1481
|
-
Thread::SetThreadLocal(Isolate::isolate_key(), thread->isolate());
|
1482
1515
|
thread->Run();
|
1483
1516
|
return 0;
|
1484
1517
|
}
|
@@ -1494,17 +1527,15 @@ class Thread::PlatformData : public Malloced {
|
|
1494
1527
|
// Initialize a Win32 thread object. The thread has an invalid thread
|
1495
1528
|
// handle until it is started.
|
1496
1529
|
|
1497
|
-
Thread::Thread(
|
1498
|
-
:
|
1499
|
-
stack_size_(options.stack_size) {
|
1530
|
+
Thread::Thread(const Options& options)
|
1531
|
+
: stack_size_(options.stack_size) {
|
1500
1532
|
data_ = new PlatformData(kNoThread);
|
1501
1533
|
set_name(options.name);
|
1502
1534
|
}
|
1503
1535
|
|
1504
1536
|
|
1505
|
-
Thread::Thread(
|
1506
|
-
:
|
1507
|
-
stack_size_(0) {
|
1537
|
+
Thread::Thread(const char* name)
|
1538
|
+
: stack_size_(0) {
|
1508
1539
|
data_ = new PlatformData(kNoThread);
|
1509
1540
|
set_name(name);
|
1510
1541
|
}
|
@@ -1585,7 +1616,6 @@ void Thread::YieldCPU() {
|
|
1585
1616
|
|
1586
1617
|
class Win32Mutex : public Mutex {
|
1587
1618
|
public:
|
1588
|
-
|
1589
1619
|
Win32Mutex() { InitializeCriticalSection(&cs_); }
|
1590
1620
|
|
1591
1621
|
virtual ~Win32Mutex() { DeleteCriticalSection(&cs_); }
|
@@ -1839,8 +1869,6 @@ Socket* OS::CreateSocket() {
|
|
1839
1869
|
}
|
1840
1870
|
|
1841
1871
|
|
1842
|
-
#ifdef ENABLE_LOGGING_AND_PROFILING
|
1843
|
-
|
1844
1872
|
// ----------------------------------------------------------------------------
|
1845
1873
|
// Win32 profiler support.
|
1846
1874
|
|
@@ -1874,7 +1902,7 @@ class Sampler::PlatformData : public Malloced {
|
|
1874
1902
|
class SamplerThread : public Thread {
|
1875
1903
|
public:
|
1876
1904
|
explicit SamplerThread(int interval)
|
1877
|
-
: Thread(
|
1905
|
+
: Thread("SamplerThread"),
|
1878
1906
|
interval_(interval) {}
|
1879
1907
|
|
1880
1908
|
static void AddActiveSampler(Sampler* sampler) {
|
@@ -1892,8 +1920,7 @@ class SamplerThread : public Thread {
|
|
1892
1920
|
ScopedLock lock(mutex_);
|
1893
1921
|
SamplerRegistry::RemoveActiveSampler(sampler);
|
1894
1922
|
if (SamplerRegistry::GetState() == SamplerRegistry::HAS_NO_SAMPLERS) {
|
1895
|
-
RuntimeProfiler::
|
1896
|
-
instance_->Join();
|
1923
|
+
RuntimeProfiler::StopRuntimeProfilerThreadBeforeShutdown(instance_);
|
1897
1924
|
delete instance_;
|
1898
1925
|
instance_ = NULL;
|
1899
1926
|
}
|
@@ -2016,6 +2043,5 @@ void Sampler::Stop() {
|
|
2016
2043
|
SetActive(false);
|
2017
2044
|
}
|
2018
2045
|
|
2019
|
-
#endif // ENABLE_LOGGING_AND_PROFILING
|
2020
2046
|
|
2021
2047
|
} } // namespace v8::internal
|
data/lib/libv8/v8/src/platform.h
CHANGED
@@ -177,6 +177,9 @@ class OS {
|
|
177
177
|
static FILE* FOpen(const char* path, const char* mode);
|
178
178
|
static bool Remove(const char* path);
|
179
179
|
|
180
|
+
// Opens a temporary file, the file is auto removed on close.
|
181
|
+
static FILE* OpenTemporaryFile();
|
182
|
+
|
180
183
|
// Log file open mode is platform-dependent due to line ends issues.
|
181
184
|
static const char* const LogFileOpenMode;
|
182
185
|
|
@@ -203,15 +206,16 @@ class OS {
|
|
203
206
|
size_t* allocated,
|
204
207
|
bool is_executable);
|
205
208
|
static void Free(void* address, const size_t size);
|
209
|
+
|
210
|
+
// Mark code segments non-writable.
|
211
|
+
static void ProtectCode(void* address, const size_t size);
|
212
|
+
|
213
|
+
// Assign memory as a guard page so that access will cause an exception.
|
214
|
+
static void Guard(void* address, const size_t size);
|
215
|
+
|
206
216
|
// Get the Alignment guaranteed by Allocate().
|
207
217
|
static size_t AllocateAlignment();
|
208
218
|
|
209
|
-
#ifdef ENABLE_HEAP_PROTECTION
|
210
|
-
// Protect/unprotect a block of memory by marking it read-only/writable.
|
211
|
-
static void Protect(void* address, size_t size);
|
212
|
-
static void Unprotect(void* address, size_t size, bool is_executable);
|
213
|
-
#endif
|
214
|
-
|
215
219
|
// Returns an indication of whether a pointer is in a space that
|
216
220
|
// has been allocated by Allocate(). This method may conservatively
|
217
221
|
// always return false, but giving more accurate information may
|
@@ -288,6 +292,10 @@ class OS {
|
|
288
292
|
// positions indicated by the members of the CpuFeature enum from globals.h
|
289
293
|
static uint64_t CpuFeaturesImpliedByPlatform();
|
290
294
|
|
295
|
+
// Maximum size of the virtual memory. 0 means there is no artificial
|
296
|
+
// limit.
|
297
|
+
static intptr_t MaxVirtualMemory();
|
298
|
+
|
291
299
|
// Returns the double constant NAN
|
292
300
|
static double nan_value();
|
293
301
|
|
@@ -384,9 +392,9 @@ class Thread {
|
|
384
392
|
int stack_size;
|
385
393
|
};
|
386
394
|
|
387
|
-
// Create new thread
|
388
|
-
Thread(
|
389
|
-
Thread(
|
395
|
+
// Create new thread.
|
396
|
+
explicit Thread(const Options& options);
|
397
|
+
explicit Thread(const char* name);
|
390
398
|
virtual ~Thread();
|
391
399
|
|
392
400
|
// Start new thread by calling the Run() method in the new thread.
|
@@ -433,7 +441,6 @@ class Thread {
|
|
433
441
|
// A hint to the scheduler to let another thread run.
|
434
442
|
static void YieldCPU();
|
435
443
|
|
436
|
-
Isolate* isolate() const { return isolate_; }
|
437
444
|
|
438
445
|
// The thread name length is limited to 16 based on Linux's implementation of
|
439
446
|
// prctl().
|
@@ -447,7 +454,6 @@ class Thread {
|
|
447
454
|
|
448
455
|
PlatformData* data_;
|
449
456
|
|
450
|
-
Isolate* isolate_;
|
451
457
|
char name_[kMaxThreadNameLength];
|
452
458
|
int stack_size_;
|
453
459
|
|
@@ -601,7 +607,6 @@ class TickSample {
|
|
601
607
|
bool has_external_callback : 1;
|
602
608
|
};
|
603
609
|
|
604
|
-
#ifdef ENABLE_LOGGING_AND_PROFILING
|
605
610
|
class Sampler {
|
606
611
|
public:
|
607
612
|
// Initialize sampler.
|
@@ -660,8 +665,6 @@ class Sampler {
|
|
660
665
|
};
|
661
666
|
|
662
667
|
|
663
|
-
#endif // ENABLE_LOGGING_AND_PROFILING
|
664
|
-
|
665
668
|
} } // namespace v8::internal
|
666
669
|
|
667
670
|
#endif // V8_PLATFORM_H_
|
@@ -1,4 +1,4 @@
|
|
1
|
-
// Copyright
|
1
|
+
// Copyright 2011 the V8 project authors. All rights reserved.
|
2
2
|
// Redistribution and use in source and binary forms, with or without
|
3
3
|
// modification, are permitted provided that the following conditions are
|
4
4
|
// met:
|
@@ -37,7 +37,7 @@ struct PreparseDataConstants {
|
|
37
37
|
public:
|
38
38
|
// Layout and constants of the preparse data exchange format.
|
39
39
|
static const unsigned kMagicNumber = 0xBadDead;
|
40
|
-
static const unsigned kCurrentVersion =
|
40
|
+
static const unsigned kCurrentVersion = 7;
|
41
41
|
|
42
42
|
static const int kMagicOffset = 0;
|
43
43
|
static const int kVersionOffset = 1;
|
@@ -48,7 +48,8 @@ class ParserRecorder {
|
|
48
48
|
virtual void LogFunction(int start,
|
49
49
|
int end,
|
50
50
|
int literals,
|
51
|
-
int properties
|
51
|
+
int properties,
|
52
|
+
int strict_mode) = 0;
|
52
53
|
|
53
54
|
// Logs a symbol creation of a literal or identifier.
|
54
55
|
virtual void LogAsciiSymbol(int start, Vector<const char> literal) { }
|
@@ -84,11 +85,16 @@ class FunctionLoggingParserRecorder : public ParserRecorder {
|
|
84
85
|
FunctionLoggingParserRecorder();
|
85
86
|
virtual ~FunctionLoggingParserRecorder() {}
|
86
87
|
|
87
|
-
virtual void LogFunction(int start,
|
88
|
+
virtual void LogFunction(int start,
|
89
|
+
int end,
|
90
|
+
int literals,
|
91
|
+
int properties,
|
92
|
+
int strict_mode) {
|
88
93
|
function_store_.Add(start);
|
89
94
|
function_store_.Add(end);
|
90
95
|
function_store_.Add(literals);
|
91
96
|
function_store_.Add(properties);
|
97
|
+
function_store_.Add(strict_mode);
|
92
98
|
}
|
93
99
|
|
94
100
|
// Logs an error message and marks the log as containing an error.
|
@@ -28,6 +28,7 @@
|
|
28
28
|
#include "../include/v8-preparser.h"
|
29
29
|
|
30
30
|
#include "globals.h"
|
31
|
+
#include "flags.h"
|
31
32
|
#include "checks.h"
|
32
33
|
#include "allocation.h"
|
33
34
|
#include "utils.h"
|
@@ -158,23 +159,6 @@ class InputStreamUTF16Buffer : public UC16CharacterStream {
|
|
158
159
|
};
|
159
160
|
|
160
161
|
|
161
|
-
class StandAloneJavaScriptScanner : public JavaScriptScanner {
|
162
|
-
public:
|
163
|
-
explicit StandAloneJavaScriptScanner(UnicodeCache* unicode_cache)
|
164
|
-
: JavaScriptScanner(unicode_cache) { }
|
165
|
-
|
166
|
-
void Initialize(UC16CharacterStream* source) {
|
167
|
-
source_ = source;
|
168
|
-
Init();
|
169
|
-
// Skip initial whitespace allowing HTML comment ends just like
|
170
|
-
// after a newline and scan first token.
|
171
|
-
has_line_terminator_before_next_ = true;
|
172
|
-
SkipWhiteSpace();
|
173
|
-
Scan();
|
174
|
-
}
|
175
|
-
};
|
176
|
-
|
177
|
-
|
178
162
|
// Functions declared by allocation.h and implemented in both api.cc (for v8)
|
179
163
|
// or here (for a stand-alone preparser).
|
180
164
|
|
@@ -194,7 +178,7 @@ PreParserData Preparse(UnicodeInputStream* input, size_t max_stack) {
|
|
194
178
|
internal::InputStreamUTF16Buffer buffer(input);
|
195
179
|
uintptr_t stack_limit = reinterpret_cast<uintptr_t>(&buffer) - max_stack;
|
196
180
|
internal::UnicodeCache unicode_cache;
|
197
|
-
internal::
|
181
|
+
internal::JavaScriptScanner scanner(&unicode_cache);
|
198
182
|
scanner.Initialize(&buffer);
|
199
183
|
internal::CompleteParserRecorder recorder;
|
200
184
|
preparser::PreParser::PreParseResult result =
|
@@ -38,6 +38,8 @@
|
|
38
38
|
#include "preparse-data.h"
|
39
39
|
#include "preparser.h"
|
40
40
|
|
41
|
+
#include "conversions-inl.h"
|
42
|
+
|
41
43
|
namespace v8 {
|
42
44
|
namespace preparser {
|
43
45
|
|
@@ -54,8 +56,6 @@ namespace preparser {
|
|
54
56
|
// That means that contextual checks (like a label being declared where
|
55
57
|
// it is used) are generally omitted.
|
56
58
|
|
57
|
-
namespace i = ::v8::internal;
|
58
|
-
|
59
59
|
void PreParser::ReportUnexpectedToken(i::Token::Value token) {
|
60
60
|
// We don't report stack overflows here, to avoid increasing the
|
61
61
|
// stack depth even further. Instead we report it after parsing is
|
@@ -77,9 +77,14 @@ void PreParser::ReportUnexpectedToken(i::Token::Value token) {
|
|
77
77
|
return ReportMessageAt(source_location.beg_pos, source_location.end_pos,
|
78
78
|
"unexpected_token_string", NULL);
|
79
79
|
case i::Token::IDENTIFIER:
|
80
|
-
case i::Token::FUTURE_RESERVED_WORD:
|
81
80
|
return ReportMessageAt(source_location.beg_pos, source_location.end_pos,
|
82
81
|
"unexpected_token_identifier", NULL);
|
82
|
+
case i::Token::FUTURE_RESERVED_WORD:
|
83
|
+
return ReportMessageAt(source_location.beg_pos, source_location.end_pos,
|
84
|
+
"unexpected_reserved", NULL);
|
85
|
+
case i::Token::FUTURE_STRICT_RESERVED_WORD:
|
86
|
+
return ReportMessageAt(source_location.beg_pos, source_location.end_pos,
|
87
|
+
"unexpected_strict_reserved", NULL);
|
83
88
|
default:
|
84
89
|
const char* name = i::Token::String(token);
|
85
90
|
ReportMessageAt(source_location.beg_pos, source_location.end_pos,
|
@@ -107,6 +112,16 @@ void PreParser::CheckOctalLiteral(int beg_pos, int end_pos, bool* ok) {
|
|
107
112
|
#undef DUMMY
|
108
113
|
|
109
114
|
|
115
|
+
PreParser::Statement PreParser::ParseSourceElement(bool* ok) {
|
116
|
+
switch (peek()) {
|
117
|
+
case i::Token::LET:
|
118
|
+
return ParseVariableStatement(kSourceElement, ok);
|
119
|
+
default:
|
120
|
+
return ParseStatement(ok);
|
121
|
+
}
|
122
|
+
}
|
123
|
+
|
124
|
+
|
110
125
|
PreParser::SourceElements PreParser::ParseSourceElements(int end_token,
|
111
126
|
bool* ok) {
|
112
127
|
// SourceElements ::
|
@@ -114,7 +129,7 @@ PreParser::SourceElements PreParser::ParseSourceElements(int end_token,
|
|
114
129
|
|
115
130
|
bool allow_directive_prologue = true;
|
116
131
|
while (peek() != end_token) {
|
117
|
-
Statement statement =
|
132
|
+
Statement statement = ParseSourceElement(CHECK_OK);
|
118
133
|
if (allow_directive_prologue) {
|
119
134
|
if (statement.IsUseStrictLiteral()) {
|
120
135
|
set_strict_mode();
|
@@ -167,7 +182,7 @@ PreParser::Statement PreParser::ParseStatement(bool* ok) {
|
|
167
182
|
|
168
183
|
case i::Token::CONST:
|
169
184
|
case i::Token::VAR:
|
170
|
-
return ParseVariableStatement(ok);
|
185
|
+
return ParseVariableStatement(kStatement, ok);
|
171
186
|
|
172
187
|
case i::Token::SEMICOLON:
|
173
188
|
Next();
|
@@ -209,9 +224,6 @@ PreParser::Statement PreParser::ParseStatement(bool* ok) {
|
|
209
224
|
case i::Token::FUNCTION:
|
210
225
|
return ParseFunctionDeclaration(ok);
|
211
226
|
|
212
|
-
case i::Token::NATIVE:
|
213
|
-
return ParseNativeDeclaration(ok);
|
214
|
-
|
215
227
|
case i::Token::DEBUGGER:
|
216
228
|
return ParseDebuggerStatement(ok);
|
217
229
|
|
@@ -236,7 +248,7 @@ PreParser::Statement PreParser::ParseFunctionDeclaration(bool* ok) {
|
|
236
248
|
// Strict mode violation, using either reserved word or eval/arguments
|
237
249
|
// as name of strict function.
|
238
250
|
const char* type = "strict_function_name";
|
239
|
-
if (identifier.
|
251
|
+
if (identifier.IsFutureStrictReserved()) {
|
240
252
|
type = "strict_reserved_word";
|
241
253
|
}
|
242
254
|
ReportMessageAt(location.beg_pos, location.end_pos, type, NULL);
|
@@ -246,29 +258,6 @@ PreParser::Statement PreParser::ParseFunctionDeclaration(bool* ok) {
|
|
246
258
|
}
|
247
259
|
|
248
260
|
|
249
|
-
// Language extension which is only enabled for source files loaded
|
250
|
-
// through the API's extension mechanism. A native function
|
251
|
-
// declaration is resolved by looking up the function through a
|
252
|
-
// callback provided by the extension.
|
253
|
-
PreParser::Statement PreParser::ParseNativeDeclaration(bool* ok) {
|
254
|
-
Expect(i::Token::NATIVE, CHECK_OK);
|
255
|
-
Expect(i::Token::FUNCTION, CHECK_OK);
|
256
|
-
ParseIdentifier(CHECK_OK);
|
257
|
-
Expect(i::Token::LPAREN, CHECK_OK);
|
258
|
-
bool done = (peek() == i::Token::RPAREN);
|
259
|
-
while (!done) {
|
260
|
-
ParseIdentifier(CHECK_OK);
|
261
|
-
done = (peek() == i::Token::RPAREN);
|
262
|
-
if (!done) {
|
263
|
-
Expect(i::Token::COMMA, CHECK_OK);
|
264
|
-
}
|
265
|
-
}
|
266
|
-
Expect(i::Token::RPAREN, CHECK_OK);
|
267
|
-
Expect(i::Token::SEMICOLON, CHECK_OK);
|
268
|
-
return Statement::Default();
|
269
|
-
}
|
270
|
-
|
271
|
-
|
272
261
|
PreParser::Statement PreParser::ParseBlock(bool* ok) {
|
273
262
|
// Block ::
|
274
263
|
// '{' Statement* '}'
|
@@ -279,7 +268,7 @@ PreParser::Statement PreParser::ParseBlock(bool* ok) {
|
|
279
268
|
Expect(i::Token::LBRACE, CHECK_OK);
|
280
269
|
while (peek() != i::Token::RBRACE) {
|
281
270
|
i::Scanner::Location start_location = scanner_->peek_location();
|
282
|
-
Statement statement =
|
271
|
+
Statement statement = ParseSourceElement(CHECK_OK);
|
283
272
|
i::Scanner::Location end_location = scanner_->location();
|
284
273
|
if (strict_mode() && statement.IsFunctionDeclaration()) {
|
285
274
|
ReportMessageAt(start_location.beg_pos, end_location.end_pos,
|
@@ -293,11 +282,15 @@ PreParser::Statement PreParser::ParseBlock(bool* ok) {
|
|
293
282
|
}
|
294
283
|
|
295
284
|
|
296
|
-
PreParser::Statement PreParser::ParseVariableStatement(
|
285
|
+
PreParser::Statement PreParser::ParseVariableStatement(
|
286
|
+
VariableDeclarationContext var_context,
|
287
|
+
bool* ok) {
|
297
288
|
// VariableStatement ::
|
298
289
|
// VariableDeclarations ';'
|
299
290
|
|
300
|
-
Statement result = ParseVariableDeclarations(
|
291
|
+
Statement result = ParseVariableDeclarations(var_context,
|
292
|
+
NULL,
|
293
|
+
CHECK_OK);
|
301
294
|
ExpectSemicolon(CHECK_OK);
|
302
295
|
return result;
|
303
296
|
}
|
@@ -308,9 +301,10 @@ PreParser::Statement PreParser::ParseVariableStatement(bool* ok) {
|
|
308
301
|
// *var is untouched; in particular, it is the caller's responsibility
|
309
302
|
// to initialize it properly. This mechanism is also used for the parsing
|
310
303
|
// of 'for-in' loops.
|
311
|
-
PreParser::Statement PreParser::ParseVariableDeclarations(
|
312
|
-
|
313
|
-
|
304
|
+
PreParser::Statement PreParser::ParseVariableDeclarations(
|
305
|
+
VariableDeclarationContext var_context,
|
306
|
+
int* num_decl,
|
307
|
+
bool* ok) {
|
314
308
|
// VariableDeclarations ::
|
315
309
|
// ('var' | 'const') (Identifier ('=' AssignmentExpression)?)+[',']
|
316
310
|
|
@@ -325,13 +319,25 @@ PreParser::Statement PreParser::ParseVariableDeclarations(bool accept_IN,
|
|
325
319
|
return Statement::Default();
|
326
320
|
}
|
327
321
|
Consume(i::Token::CONST);
|
322
|
+
} else if (peek() == i::Token::LET) {
|
323
|
+
if (var_context != kSourceElement &&
|
324
|
+
var_context != kForStatement) {
|
325
|
+
i::Scanner::Location location = scanner_->peek_location();
|
326
|
+
ReportMessageAt(location.beg_pos, location.end_pos,
|
327
|
+
"unprotected_let", NULL);
|
328
|
+
*ok = false;
|
329
|
+
return Statement::Default();
|
330
|
+
}
|
331
|
+
Consume(i::Token::LET);
|
328
332
|
} else {
|
329
333
|
*ok = false;
|
330
334
|
return Statement::Default();
|
331
335
|
}
|
332
336
|
|
333
|
-
// The scope of a
|
334
|
-
// is the entire function (ECMA-262, 3rd, 10.1.3, and 12.2).
|
337
|
+
// The scope of a var/const declared variable anywhere inside a function
|
338
|
+
// is the entire function (ECMA-262, 3rd, 10.1.3, and 12.2). The scope
|
339
|
+
// of a let declared variable is the scope of the immediately enclosing
|
340
|
+
// block.
|
335
341
|
int nvars = 0; // the number of variables declared
|
336
342
|
do {
|
337
343
|
// Parse variable name.
|
@@ -347,7 +353,7 @@ PreParser::Statement PreParser::ParseVariableDeclarations(bool accept_IN,
|
|
347
353
|
nvars++;
|
348
354
|
if (peek() == i::Token::ASSIGN) {
|
349
355
|
Expect(i::Token::ASSIGN, CHECK_OK);
|
350
|
-
ParseAssignmentExpression(
|
356
|
+
ParseAssignmentExpression(var_context != kForStatement, CHECK_OK);
|
351
357
|
}
|
352
358
|
} while (peek() == i::Token::COMMA);
|
353
359
|
|
@@ -362,8 +368,9 @@ PreParser::Statement PreParser::ParseExpressionOrLabelledStatement(bool* ok) {
|
|
362
368
|
// Identifier ':' Statement
|
363
369
|
|
364
370
|
Expression expr = ParseExpression(true, CHECK_OK);
|
365
|
-
if (
|
366
|
-
if (
|
371
|
+
if (expr.IsRawIdentifier()) {
|
372
|
+
if (peek() == i::Token::COLON &&
|
373
|
+
(!strict_mode() || !expr.AsIdentifier().IsFutureReserved())) {
|
367
374
|
Consume(i::Token::COLON);
|
368
375
|
i::Scanner::Location start_location = scanner_->peek_location();
|
369
376
|
Statement statement = ParseStatement(CHECK_OK);
|
@@ -375,6 +382,9 @@ PreParser::Statement PreParser::ParseExpressionOrLabelledStatement(bool* ok) {
|
|
375
382
|
}
|
376
383
|
return Statement::Default();
|
377
384
|
}
|
385
|
+
// Preparsing is disabled for extensions (because the extension details
|
386
|
+
// aren't passed to lazily compiled functions), so we don't
|
387
|
+
// accept "native function" in the preparser.
|
378
388
|
}
|
379
389
|
// Parsed expression statement.
|
380
390
|
ExpectSemicolon(CHECK_OK);
|
@@ -405,7 +415,7 @@ PreParser::Statement PreParser::ParseContinueStatement(bool* ok) {
|
|
405
415
|
|
406
416
|
Expect(i::Token::CONTINUE, CHECK_OK);
|
407
417
|
i::Token::Value tok = peek();
|
408
|
-
if (!scanner_->
|
418
|
+
if (!scanner_->HasAnyLineTerminatorBeforeNext() &&
|
409
419
|
tok != i::Token::SEMICOLON &&
|
410
420
|
tok != i::Token::RBRACE &&
|
411
421
|
tok != i::Token::EOS) {
|
@@ -422,7 +432,7 @@ PreParser::Statement PreParser::ParseBreakStatement(bool* ok) {
|
|
422
432
|
|
423
433
|
Expect(i::Token::BREAK, CHECK_OK);
|
424
434
|
i::Token::Value tok = peek();
|
425
|
-
if (!scanner_->
|
435
|
+
if (!scanner_->HasAnyLineTerminatorBeforeNext() &&
|
426
436
|
tok != i::Token::SEMICOLON &&
|
427
437
|
tok != i::Token::RBRACE &&
|
428
438
|
tok != i::Token::EOS) {
|
@@ -448,7 +458,7 @@ PreParser::Statement PreParser::ParseReturnStatement(bool* ok) {
|
|
448
458
|
// This is not handled during preparsing.
|
449
459
|
|
450
460
|
i::Token::Value tok = peek();
|
451
|
-
if (!scanner_->
|
461
|
+
if (!scanner_->HasAnyLineTerminatorBeforeNext() &&
|
452
462
|
tok != i::Token::SEMICOLON &&
|
453
463
|
tok != i::Token::RBRACE &&
|
454
464
|
tok != i::Token::EOS) {
|
@@ -552,9 +562,10 @@ PreParser::Statement PreParser::ParseForStatement(bool* ok) {
|
|
552
562
|
Expect(i::Token::FOR, CHECK_OK);
|
553
563
|
Expect(i::Token::LPAREN, CHECK_OK);
|
554
564
|
if (peek() != i::Token::SEMICOLON) {
|
555
|
-
if (peek() == i::Token::VAR || peek() == i::Token::CONST
|
565
|
+
if (peek() == i::Token::VAR || peek() == i::Token::CONST ||
|
566
|
+
peek() == i::Token::LET) {
|
556
567
|
int decl_count;
|
557
|
-
ParseVariableDeclarations(
|
568
|
+
ParseVariableDeclarations(kForStatement, &decl_count, CHECK_OK);
|
558
569
|
if (peek() == i::Token::IN && decl_count == 1) {
|
559
570
|
Expect(i::Token::IN, CHECK_OK);
|
560
571
|
ParseExpression(true, CHECK_OK);
|
@@ -599,7 +610,7 @@ PreParser::Statement PreParser::ParseThrowStatement(bool* ok) {
|
|
599
610
|
// 'throw' [no line terminator] Expression ';'
|
600
611
|
|
601
612
|
Expect(i::Token::THROW, CHECK_OK);
|
602
|
-
if (scanner_->
|
613
|
+
if (scanner_->HasAnyLineTerminatorBeforeNext()) {
|
603
614
|
i::JavaScriptScanner::Location pos = scanner_->location();
|
604
615
|
ReportMessageAt(pos.beg_pos, pos.end_pos,
|
605
616
|
"newline_after_throw", NULL);
|
@@ -822,7 +833,7 @@ PreParser::Expression PreParser::ParsePostfixExpression(bool* ok) {
|
|
822
833
|
|
823
834
|
i::Scanner::Location before = scanner_->peek_location();
|
824
835
|
Expression expression = ParseLeftHandSideExpression(CHECK_OK);
|
825
|
-
if (!scanner_->
|
836
|
+
if (!scanner_->HasAnyLineTerminatorBeforeNext() &&
|
826
837
|
i::Token::IsCountOp(peek())) {
|
827
838
|
if (strict_mode() && expression.IsIdentifier() &&
|
828
839
|
expression.AsIdentifier().IsEvalOrArguments()) {
|
@@ -1001,7 +1012,16 @@ PreParser::Expression PreParser::ParsePrimaryExpression(bool* ok) {
|
|
1001
1012
|
break;
|
1002
1013
|
}
|
1003
1014
|
|
1004
|
-
case i::Token::FUTURE_RESERVED_WORD:
|
1015
|
+
case i::Token::FUTURE_RESERVED_WORD: {
|
1016
|
+
Next();
|
1017
|
+
i::Scanner::Location location = scanner_->location();
|
1018
|
+
ReportMessageAt(location.beg_pos, location.end_pos,
|
1019
|
+
"reserved_word", NULL);
|
1020
|
+
*ok = false;
|
1021
|
+
return Expression::Default();
|
1022
|
+
}
|
1023
|
+
|
1024
|
+
case i::Token::FUTURE_STRICT_RESERVED_WORD:
|
1005
1025
|
if (strict_mode()) {
|
1006
1026
|
Next();
|
1007
1027
|
i::Scanner::Location location = scanner_->location();
|
@@ -1100,15 +1120,17 @@ PreParser::Expression PreParser::ParseObjectLiteral(bool* ok) {
|
|
1100
1120
|
i::Token::Value next = peek();
|
1101
1121
|
switch (next) {
|
1102
1122
|
case i::Token::IDENTIFIER:
|
1103
|
-
case i::Token::FUTURE_RESERVED_WORD:
|
1123
|
+
case i::Token::FUTURE_RESERVED_WORD:
|
1124
|
+
case i::Token::FUTURE_STRICT_RESERVED_WORD: {
|
1104
1125
|
bool is_getter = false;
|
1105
1126
|
bool is_setter = false;
|
1106
|
-
|
1127
|
+
ParseIdentifierNameOrGetOrSet(&is_getter, &is_setter, CHECK_OK);
|
1107
1128
|
if ((is_getter || is_setter) && peek() != i::Token::COLON) {
|
1108
1129
|
i::Token::Value name = Next();
|
1109
1130
|
bool is_keyword = i::Token::IsKeyword(name);
|
1110
1131
|
if (name != i::Token::IDENTIFIER &&
|
1111
1132
|
name != i::Token::FUTURE_RESERVED_WORD &&
|
1133
|
+
name != i::Token::FUTURE_STRICT_RESERVED_WORD &&
|
1112
1134
|
name != i::Token::NUMBER &&
|
1113
1135
|
name != i::Token::STRING &&
|
1114
1136
|
!is_keyword) {
|
@@ -1256,7 +1278,8 @@ PreParser::Expression PreParser::ParseFunctionLiteral(bool* ok) {
|
|
1256
1278
|
int end_pos = scanner_->location().end_pos;
|
1257
1279
|
log_->LogFunction(function_block_pos, end_pos,
|
1258
1280
|
function_scope.materialized_literal_count(),
|
1259
|
-
function_scope.expected_properties()
|
1281
|
+
function_scope.expected_properties(),
|
1282
|
+
strict_mode() ? 1 : 0);
|
1260
1283
|
} else {
|
1261
1284
|
ParseSourceElements(i::Token::RBRACE, CHECK_OK);
|
1262
1285
|
Expect(i::Token::RBRACE, CHECK_OK);
|
@@ -1295,7 +1318,7 @@ void PreParser::ExpectSemicolon(bool* ok) {
|
|
1295
1318
|
Next();
|
1296
1319
|
return;
|
1297
1320
|
}
|
1298
|
-
if (scanner_->
|
1321
|
+
if (scanner_->HasAnyLineTerminatorBeforeNext() ||
|
1299
1322
|
tok == i::Token::RBRACE ||
|
1300
1323
|
tok == i::Token::EOS) {
|
1301
1324
|
return;
|
@@ -1333,6 +1356,9 @@ PreParser::Identifier PreParser::GetIdentifierSymbol() {
|
|
1333
1356
|
LogSymbol();
|
1334
1357
|
if (scanner_->current_token() == i::Token::FUTURE_RESERVED_WORD) {
|
1335
1358
|
return Identifier::FutureReserved();
|
1359
|
+
} else if (scanner_->current_token() ==
|
1360
|
+
i::Token::FUTURE_STRICT_RESERVED_WORD) {
|
1361
|
+
return Identifier::FutureStrictReserved();
|
1336
1362
|
}
|
1337
1363
|
if (scanner_->is_literal_ascii()) {
|
1338
1364
|
// Detect strict-mode poison words.
|
@@ -1350,11 +1376,22 @@ PreParser::Identifier PreParser::GetIdentifierSymbol() {
|
|
1350
1376
|
|
1351
1377
|
|
1352
1378
|
PreParser::Identifier PreParser::ParseIdentifier(bool* ok) {
|
1353
|
-
|
1354
|
-
|
1355
|
-
|
1379
|
+
i::Token::Value next = Next();
|
1380
|
+
switch (next) {
|
1381
|
+
case i::Token::FUTURE_RESERVED_WORD: {
|
1382
|
+
i::Scanner::Location location = scanner_->location();
|
1383
|
+
ReportMessageAt(location.beg_pos, location.end_pos,
|
1384
|
+
"reserved_word", NULL);
|
1385
|
+
*ok = false;
|
1386
|
+
}
|
1387
|
+
// FALLTHROUGH
|
1388
|
+
case i::Token::FUTURE_STRICT_RESERVED_WORD:
|
1389
|
+
case i::Token::IDENTIFIER:
|
1390
|
+
return GetIdentifierSymbol();
|
1391
|
+
default:
|
1392
|
+
*ok = false;
|
1393
|
+
return Identifier::Default();
|
1356
1394
|
}
|
1357
|
-
return GetIdentifierSymbol();
|
1358
1395
|
}
|
1359
1396
|
|
1360
1397
|
|
@@ -1394,6 +1431,8 @@ void PreParser::StrictModeIdentifierViolation(i::Scanner::Location location,
|
|
1394
1431
|
bool* ok) {
|
1395
1432
|
const char* type = eval_args_type;
|
1396
1433
|
if (identifier.IsFutureReserved()) {
|
1434
|
+
type = "reserved_word";
|
1435
|
+
} else if (identifier.IsFutureStrictReserved()) {
|
1397
1436
|
type = "strict_reserved_word";
|
1398
1437
|
}
|
1399
1438
|
if (strict_mode()) {
|
@@ -1416,7 +1455,8 @@ PreParser::Identifier PreParser::ParseIdentifierName(bool* ok) {
|
|
1416
1455
|
return Identifier::Default();
|
1417
1456
|
}
|
1418
1457
|
if (next == i::Token::IDENTIFIER ||
|
1419
|
-
next == i::Token::FUTURE_RESERVED_WORD
|
1458
|
+
next == i::Token::FUTURE_RESERVED_WORD ||
|
1459
|
+
next == i::Token::FUTURE_STRICT_RESERVED_WORD) {
|
1420
1460
|
return GetIdentifierSymbol();
|
1421
1461
|
}
|
1422
1462
|
*ok = false;
|
@@ -1428,10 +1468,10 @@ PreParser::Identifier PreParser::ParseIdentifierName(bool* ok) {
|
|
1428
1468
|
|
1429
1469
|
// This function reads an identifier and determines whether or not it
|
1430
1470
|
// is 'get' or 'set'.
|
1431
|
-
PreParser::Identifier PreParser::
|
1432
|
-
|
1433
|
-
|
1434
|
-
Identifier result =
|
1471
|
+
PreParser::Identifier PreParser::ParseIdentifierNameOrGetOrSet(bool* is_get,
|
1472
|
+
bool* is_set,
|
1473
|
+
bool* ok) {
|
1474
|
+
Identifier result = ParseIdentifierName(ok);
|
1435
1475
|
if (!*ok) return Identifier::Default();
|
1436
1476
|
if (scanner_->is_literal_ascii() &&
|
1437
1477
|
scanner_->literal_length() == 3) {
|
@@ -1445,6 +1485,7 @@ PreParser::Identifier PreParser::ParseIdentifierOrGetOrSet(bool* is_get,
|
|
1445
1485
|
bool PreParser::peek_any_identifier() {
|
1446
1486
|
i::Token::Value next = peek();
|
1447
1487
|
return next == i::Token::IDENTIFIER ||
|
1448
|
-
next == i::Token::FUTURE_RESERVED_WORD
|
1488
|
+
next == i::Token::FUTURE_RESERVED_WORD ||
|
1489
|
+
next == i::Token::FUTURE_STRICT_RESERVED_WORD;
|
1449
1490
|
}
|
1450
1491
|
} } // v8::preparser
|