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
|
@@ -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
|