libv8 3.3.10.4 → 3.5.10.beta1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/libv8/scons/CHANGES.txt +24 -231
- data/lib/libv8/scons/LICENSE.txt +1 -1
- data/lib/libv8/scons/MANIFEST +0 -1
- data/lib/libv8/scons/PKG-INFO +1 -1
- data/lib/libv8/scons/README.txt +9 -9
- data/lib/libv8/scons/RELEASE.txt +75 -77
- data/lib/libv8/scons/engine/SCons/Action.py +6 -22
- data/lib/libv8/scons/engine/SCons/Builder.py +2 -2
- data/lib/libv8/scons/engine/SCons/CacheDir.py +2 -2
- data/lib/libv8/scons/engine/SCons/Debug.py +2 -2
- data/lib/libv8/scons/engine/SCons/Defaults.py +10 -24
- data/lib/libv8/scons/engine/SCons/Environment.py +19 -118
- data/lib/libv8/scons/engine/SCons/Errors.py +2 -2
- data/lib/libv8/scons/engine/SCons/Executor.py +2 -2
- data/lib/libv8/scons/engine/SCons/Job.py +2 -2
- data/lib/libv8/scons/engine/SCons/Memoize.py +2 -2
- data/lib/libv8/scons/engine/SCons/Node/Alias.py +2 -2
- data/lib/libv8/scons/engine/SCons/Node/FS.py +121 -281
- data/lib/libv8/scons/engine/SCons/Node/Python.py +2 -2
- data/lib/libv8/scons/engine/SCons/Node/__init__.py +5 -6
- data/lib/libv8/scons/engine/SCons/Options/BoolOption.py +2 -2
- data/lib/libv8/scons/engine/SCons/Options/EnumOption.py +2 -2
- data/lib/libv8/scons/engine/SCons/Options/ListOption.py +2 -2
- data/lib/libv8/scons/engine/SCons/Options/PackageOption.py +2 -2
- data/lib/libv8/scons/engine/SCons/Options/PathOption.py +2 -2
- data/lib/libv8/scons/engine/SCons/Options/__init__.py +2 -2
- data/lib/libv8/scons/engine/SCons/PathList.py +2 -2
- data/lib/libv8/scons/engine/SCons/Platform/__init__.py +2 -2
- data/lib/libv8/scons/engine/SCons/Platform/aix.py +2 -2
- data/lib/libv8/scons/engine/SCons/Platform/cygwin.py +2 -2
- data/lib/libv8/scons/engine/SCons/Platform/darwin.py +3 -27
- data/lib/libv8/scons/engine/SCons/Platform/hpux.py +2 -2
- data/lib/libv8/scons/engine/SCons/Platform/irix.py +2 -2
- data/lib/libv8/scons/engine/SCons/Platform/os2.py +2 -2
- data/lib/libv8/scons/engine/SCons/Platform/posix.py +2 -2
- data/lib/libv8/scons/engine/SCons/Platform/sunos.py +2 -2
- data/lib/libv8/scons/engine/SCons/Platform/win32.py +2 -2
- data/lib/libv8/scons/engine/SCons/SConf.py +2 -2
- data/lib/libv8/scons/engine/SCons/SConsign.py +3 -9
- data/lib/libv8/scons/engine/SCons/Scanner/C.py +2 -2
- data/lib/libv8/scons/engine/SCons/Scanner/D.py +2 -2
- data/lib/libv8/scons/engine/SCons/Scanner/Dir.py +2 -2
- data/lib/libv8/scons/engine/SCons/Scanner/Fortran.py +2 -2
- data/lib/libv8/scons/engine/SCons/Scanner/IDL.py +2 -2
- data/lib/libv8/scons/engine/SCons/Scanner/LaTeX.py +2 -5
- data/lib/libv8/scons/engine/SCons/Scanner/Prog.py +2 -2
- data/lib/libv8/scons/engine/SCons/Scanner/RC.py +3 -3
- data/lib/libv8/scons/engine/SCons/Scanner/__init__.py +2 -2
- data/lib/libv8/scons/engine/SCons/Script/Interactive.py +2 -2
- data/lib/libv8/scons/engine/SCons/Script/Main.py +11 -82
- data/lib/libv8/scons/engine/SCons/Script/SConsOptions.py +5 -5
- data/lib/libv8/scons/engine/SCons/Script/SConscript.py +2 -2
- data/lib/libv8/scons/engine/SCons/Script/__init__.py +2 -2
- data/lib/libv8/scons/engine/SCons/Sig.py +2 -2
- data/lib/libv8/scons/engine/SCons/Subst.py +2 -2
- data/lib/libv8/scons/engine/SCons/Taskmaster.py +2 -10
- data/lib/libv8/scons/engine/SCons/Tool/386asm.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/BitKeeper.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/CVS.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/FortranCommon.py +2 -19
- data/lib/libv8/scons/engine/SCons/Tool/JavaCommon.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/MSCommon/__init__.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/MSCommon/arch.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/MSCommon/common.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/MSCommon/netframework.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/MSCommon/sdk.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/MSCommon/vc.py +6 -9
- data/lib/libv8/scons/engine/SCons/Tool/MSCommon/vs.py +2 -29
- data/lib/libv8/scons/engine/SCons/Tool/Perforce.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/PharLapCommon.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/RCS.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/SCCS.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/Subversion.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/__init__.py +3 -3
- data/lib/libv8/scons/engine/SCons/Tool/aixc++.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/aixcc.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/aixf77.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/aixlink.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/applelink.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/ar.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/as.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/bcc32.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/c++.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/cc.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/cvf.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/default.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/dmd.py +7 -24
- data/lib/libv8/scons/engine/SCons/Tool/dvi.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/dvipdf.py +2 -3
- data/lib/libv8/scons/engine/SCons/Tool/dvips.py +2 -3
- data/lib/libv8/scons/engine/SCons/Tool/f77.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/f90.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/f95.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/filesystem.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/fortran.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/g++.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/g77.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/gas.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/gcc.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/gfortran.py +3 -3
- data/lib/libv8/scons/engine/SCons/Tool/gnulink.py +3 -2
- data/lib/libv8/scons/engine/SCons/Tool/gs.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/hpc++.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/hpcc.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/hplink.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/icc.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/icl.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/ifl.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/ifort.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/ilink.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/ilink32.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/install.py +3 -57
- data/lib/libv8/scons/engine/SCons/Tool/intelc.py +25 -65
- data/lib/libv8/scons/engine/SCons/Tool/ipkg.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/jar.py +3 -9
- data/lib/libv8/scons/engine/SCons/Tool/javac.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/javah.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/latex.py +2 -3
- data/lib/libv8/scons/engine/SCons/Tool/lex.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/link.py +5 -6
- data/lib/libv8/scons/engine/SCons/Tool/linkloc.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/m4.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/masm.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/midl.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/mingw.py +10 -31
- data/lib/libv8/scons/engine/SCons/Tool/mslib.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/mslink.py +9 -61
- data/lib/libv8/scons/engine/SCons/Tool/mssdk.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/msvc.py +11 -21
- data/lib/libv8/scons/engine/SCons/Tool/msvs.py +59 -477
- data/lib/libv8/scons/engine/SCons/Tool/mwcc.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/mwld.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/nasm.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/packaging/__init__.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/packaging/ipk.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/packaging/msi.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/packaging/rpm.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/packaging/src_tarbz2.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/packaging/src_targz.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/packaging/src_zip.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/packaging/tarbz2.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/packaging/targz.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/packaging/zip.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/pdf.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/pdflatex.py +2 -3
- data/lib/libv8/scons/engine/SCons/Tool/pdftex.py +2 -3
- data/lib/libv8/scons/engine/SCons/Tool/qt.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/rmic.py +3 -9
- data/lib/libv8/scons/engine/SCons/Tool/rpcgen.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/rpm.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/sgiar.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/sgic++.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/sgicc.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/sgilink.py +3 -2
- data/lib/libv8/scons/engine/SCons/Tool/sunar.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/sunc++.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/suncc.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/sunf77.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/sunf90.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/sunf95.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/sunlink.py +3 -2
- data/lib/libv8/scons/engine/SCons/Tool/swig.py +5 -6
- data/lib/libv8/scons/engine/SCons/Tool/tar.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/tex.py +43 -96
- data/lib/libv8/scons/engine/SCons/Tool/textfile.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/tlib.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/wix.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/yacc.py +2 -12
- data/lib/libv8/scons/engine/SCons/Tool/zip.py +2 -2
- data/lib/libv8/scons/engine/SCons/Util.py +3 -3
- data/lib/libv8/scons/engine/SCons/Variables/BoolVariable.py +2 -2
- data/lib/libv8/scons/engine/SCons/Variables/EnumVariable.py +3 -3
- data/lib/libv8/scons/engine/SCons/Variables/ListVariable.py +2 -2
- data/lib/libv8/scons/engine/SCons/Variables/PackageVariable.py +2 -2
- data/lib/libv8/scons/engine/SCons/Variables/PathVariable.py +2 -2
- data/lib/libv8/scons/engine/SCons/Variables/__init__.py +2 -2
- data/lib/libv8/scons/engine/SCons/Warnings.py +2 -2
- data/lib/libv8/scons/engine/SCons/__init__.py +6 -6
- data/lib/libv8/scons/engine/SCons/compat/__init__.py +2 -2
- data/lib/libv8/scons/engine/SCons/compat/_scons_builtins.py +2 -2
- data/lib/libv8/scons/engine/SCons/compat/_scons_collections.py +2 -2
- data/lib/libv8/scons/engine/SCons/compat/_scons_dbm.py +2 -2
- data/lib/libv8/scons/engine/SCons/compat/_scons_hashlib.py +2 -2
- data/lib/libv8/scons/engine/SCons/compat/_scons_io.py +2 -2
- data/lib/libv8/scons/engine/SCons/cpp.py +2 -2
- data/lib/libv8/scons/engine/SCons/dblite.py +1 -4
- data/lib/libv8/scons/engine/SCons/exitfuncs.py +2 -2
- data/lib/libv8/scons/scons-time.1 +3 -3
- data/lib/libv8/scons/scons.1 +1164 -1170
- data/lib/libv8/scons/sconsign.1 +3 -3
- data/lib/libv8/scons/script/scons +22 -22
- data/lib/libv8/scons/script/scons-time +2 -2
- data/lib/libv8/scons/script/scons.bat +4 -7
- data/lib/libv8/scons/script/sconsign +20 -21
- data/lib/libv8/scons/setup.cfg +1 -0
- data/lib/libv8/scons/setup.py +40 -38
- data/lib/libv8/v8/.gitignore +1 -1
- data/lib/libv8/v8/AUTHORS +2 -0
- data/lib/libv8/v8/ChangeLog +387 -0
- data/lib/libv8/v8/Makefile +171 -0
- data/lib/libv8/v8/SConstruct +124 -51
- data/lib/libv8/v8/build/README.txt +31 -14
- data/lib/libv8/v8/build/all.gyp +11 -4
- data/lib/libv8/v8/build/armu.gypi +6 -2
- data/lib/libv8/v8/build/common.gypi +240 -94
- data/lib/libv8/v8/build/gyp_v8 +32 -4
- data/lib/libv8/v8/build/standalone.gypi +200 -0
- data/lib/libv8/v8/include/v8-debug.h +0 -0
- data/lib/libv8/v8/include/v8-profiler.h +8 -11
- data/lib/libv8/v8/include/v8.h +191 -108
- data/lib/libv8/v8/preparser/SConscript +2 -2
- data/lib/libv8/v8/preparser/preparser-process.cc +3 -3
- data/lib/libv8/v8/preparser/preparser.gyp +42 -0
- data/lib/libv8/v8/src/SConscript +33 -8
- data/lib/libv8/v8/src/accessors.cc +77 -43
- data/lib/libv8/v8/src/api.cc +393 -191
- data/lib/libv8/v8/src/api.h +4 -8
- data/lib/libv8/v8/src/apinatives.js +15 -3
- data/lib/libv8/v8/src/arguments.h +8 -0
- data/lib/libv8/v8/src/arm/assembler-arm.cc +120 -120
- data/lib/libv8/v8/src/arm/assembler-arm.h +92 -43
- data/lib/libv8/v8/src/arm/builtins-arm.cc +32 -39
- data/lib/libv8/v8/src/arm/code-stubs-arm.cc +572 -351
- data/lib/libv8/v8/src/arm/code-stubs-arm.h +8 -77
- data/lib/libv8/v8/src/arm/codegen-arm.h +0 -2
- data/lib/libv8/v8/src/arm/deoptimizer-arm.cc +50 -30
- data/lib/libv8/v8/src/arm/disasm-arm.cc +1 -1
- data/lib/libv8/v8/src/arm/frames-arm.h +9 -5
- data/lib/libv8/v8/src/arm/full-codegen-arm.cc +331 -432
- data/lib/libv8/v8/src/arm/ic-arm.cc +192 -124
- data/lib/libv8/v8/src/arm/lithium-arm.cc +216 -232
- data/lib/libv8/v8/src/arm/lithium-arm.h +106 -259
- data/lib/libv8/v8/src/arm/lithium-codegen-arm.cc +633 -642
- data/lib/libv8/v8/src/arm/lithium-codegen-arm.h +4 -4
- data/lib/libv8/v8/src/arm/lithium-gap-resolver-arm.cc +1 -3
- data/lib/libv8/v8/src/arm/macro-assembler-arm.cc +260 -185
- data/lib/libv8/v8/src/arm/macro-assembler-arm.h +45 -25
- data/lib/libv8/v8/src/arm/regexp-macro-assembler-arm.cc +25 -13
- data/lib/libv8/v8/src/arm/regexp-macro-assembler-arm.h +3 -0
- data/lib/libv8/v8/src/arm/stub-cache-arm.cc +413 -226
- data/lib/libv8/v8/src/array.js +38 -18
- data/lib/libv8/v8/src/assembler.cc +12 -5
- data/lib/libv8/v8/src/assembler.h +15 -9
- data/lib/libv8/v8/src/ast-inl.h +34 -25
- data/lib/libv8/v8/src/ast.cc +141 -72
- data/lib/libv8/v8/src/ast.h +255 -181
- data/lib/libv8/v8/src/bignum.cc +3 -4
- data/lib/libv8/v8/src/bootstrapper.cc +55 -11
- data/lib/libv8/v8/src/bootstrapper.h +3 -2
- data/lib/libv8/v8/src/builtins.cc +8 -2
- data/lib/libv8/v8/src/builtins.h +4 -0
- data/lib/libv8/v8/src/cached-powers.cc +8 -4
- data/lib/libv8/v8/src/checks.h +3 -3
- data/lib/libv8/v8/src/code-stubs.cc +173 -28
- data/lib/libv8/v8/src/code-stubs.h +104 -148
- data/lib/libv8/v8/src/codegen.cc +8 -8
- data/lib/libv8/v8/src/compilation-cache.cc +2 -47
- data/lib/libv8/v8/src/compilation-cache.h +0 -10
- data/lib/libv8/v8/src/compiler.cc +27 -16
- data/lib/libv8/v8/src/compiler.h +13 -18
- data/lib/libv8/v8/src/contexts.cc +107 -72
- data/lib/libv8/v8/src/contexts.h +70 -34
- data/lib/libv8/v8/src/conversions-inl.h +572 -14
- data/lib/libv8/v8/src/conversions.cc +9 -707
- data/lib/libv8/v8/src/conversions.h +23 -12
- data/lib/libv8/v8/src/cpu-profiler-inl.h +2 -19
- data/lib/libv8/v8/src/cpu-profiler.cc +4 -21
- data/lib/libv8/v8/src/cpu-profiler.h +8 -17
- data/lib/libv8/v8/src/d8-debug.cc +5 -3
- data/lib/libv8/v8/src/d8-debug.h +6 -7
- data/lib/libv8/v8/src/d8-posix.cc +1 -10
- data/lib/libv8/v8/src/d8.cc +721 -219
- data/lib/libv8/v8/src/d8.gyp +37 -12
- data/lib/libv8/v8/src/d8.h +141 -19
- data/lib/libv8/v8/src/d8.js +17 -8
- data/lib/libv8/v8/src/date.js +16 -5
- data/lib/libv8/v8/src/dateparser-inl.h +242 -39
- data/lib/libv8/v8/src/dateparser.cc +38 -4
- data/lib/libv8/v8/src/dateparser.h +170 -28
- data/lib/libv8/v8/src/debug-agent.cc +5 -3
- data/lib/libv8/v8/src/debug-agent.h +11 -7
- data/lib/libv8/v8/src/debug-debugger.js +65 -34
- data/lib/libv8/v8/src/debug.cc +30 -60
- data/lib/libv8/v8/src/debug.h +5 -3
- data/lib/libv8/v8/src/deoptimizer.cc +227 -10
- data/lib/libv8/v8/src/deoptimizer.h +133 -9
- data/lib/libv8/v8/src/disassembler.cc +22 -14
- data/lib/libv8/v8/src/diy-fp.cc +4 -3
- data/lib/libv8/v8/src/diy-fp.h +3 -3
- data/lib/libv8/v8/src/elements.cc +634 -0
- data/lib/libv8/v8/src/elements.h +95 -0
- data/lib/libv8/v8/src/execution.cc +5 -21
- data/lib/libv8/v8/src/extensions/experimental/break-iterator.cc +3 -1
- data/lib/libv8/v8/src/extensions/experimental/break-iterator.h +1 -1
- data/lib/libv8/v8/src/extensions/experimental/collator.cc +6 -2
- data/lib/libv8/v8/src/extensions/experimental/collator.h +1 -2
- data/lib/libv8/v8/src/extensions/experimental/datetime-format.cc +384 -0
- data/lib/libv8/v8/src/extensions/experimental/datetime-format.h +83 -0
- data/lib/libv8/v8/src/extensions/experimental/experimental.gyp +18 -7
- data/lib/libv8/v8/src/extensions/experimental/i18n-extension.cc +12 -16
- data/lib/libv8/v8/src/extensions/experimental/i18n-extension.h +1 -1
- data/lib/libv8/v8/src/extensions/experimental/i18n-js2c.py +126 -0
- data/lib/libv8/v8/src/extensions/experimental/i18n-locale.cc +3 -4
- data/lib/libv8/v8/src/extensions/experimental/i18n-locale.h +1 -1
- data/lib/libv8/v8/src/{shell.h → extensions/experimental/i18n-natives.h} +8 -20
- data/lib/libv8/v8/src/extensions/experimental/i18n-utils.cc +45 -1
- data/lib/libv8/v8/src/extensions/experimental/i18n-utils.h +21 -1
- data/lib/libv8/v8/src/extensions/experimental/i18n.js +211 -11
- data/lib/libv8/v8/src/extensions/experimental/language-matcher.cc +4 -3
- data/lib/libv8/v8/src/extensions/experimental/language-matcher.h +1 -1
- data/lib/libv8/v8/src/extensions/experimental/number-format.cc +374 -0
- data/lib/libv8/v8/src/extensions/experimental/number-format.h +71 -0
- data/lib/libv8/v8/src/factory.cc +89 -18
- data/lib/libv8/v8/src/factory.h +36 -8
- data/lib/libv8/v8/src/flag-definitions.h +11 -44
- data/lib/libv8/v8/src/frames-inl.h +8 -1
- data/lib/libv8/v8/src/frames.cc +39 -3
- data/lib/libv8/v8/src/frames.h +10 -3
- data/lib/libv8/v8/src/full-codegen.cc +311 -293
- data/lib/libv8/v8/src/full-codegen.h +183 -143
- data/lib/libv8/v8/src/func-name-inferrer.cc +29 -15
- data/lib/libv8/v8/src/func-name-inferrer.h +19 -9
- data/lib/libv8/v8/src/gdb-jit.cc +658 -55
- data/lib/libv8/v8/src/gdb-jit.h +6 -2
- data/lib/libv8/v8/src/global-handles.cc +368 -312
- data/lib/libv8/v8/src/global-handles.h +29 -36
- data/lib/libv8/v8/src/globals.h +3 -1
- data/lib/libv8/v8/src/handles.cc +43 -69
- data/lib/libv8/v8/src/handles.h +21 -16
- data/lib/libv8/v8/src/heap-inl.h +11 -13
- data/lib/libv8/v8/src/heap-profiler.cc +0 -999
- data/lib/libv8/v8/src/heap-profiler.h +0 -303
- data/lib/libv8/v8/src/heap.cc +366 -141
- data/lib/libv8/v8/src/heap.h +87 -26
- data/lib/libv8/v8/src/hydrogen-instructions.cc +192 -81
- data/lib/libv8/v8/src/hydrogen-instructions.h +711 -482
- data/lib/libv8/v8/src/hydrogen.cc +1146 -629
- data/lib/libv8/v8/src/hydrogen.h +100 -64
- data/lib/libv8/v8/src/ia32/assembler-ia32.cc +19 -0
- data/lib/libv8/v8/src/ia32/assembler-ia32.h +15 -2
- data/lib/libv8/v8/src/ia32/builtins-ia32.cc +34 -39
- data/lib/libv8/v8/src/ia32/code-stubs-ia32.cc +675 -377
- data/lib/libv8/v8/src/ia32/code-stubs-ia32.h +8 -69
- data/lib/libv8/v8/src/ia32/codegen-ia32.cc +1 -0
- data/lib/libv8/v8/src/ia32/codegen-ia32.h +0 -2
- data/lib/libv8/v8/src/ia32/cpu-ia32.cc +3 -2
- data/lib/libv8/v8/src/ia32/deoptimizer-ia32.cc +28 -3
- data/lib/libv8/v8/src/ia32/disasm-ia32.cc +21 -10
- data/lib/libv8/v8/src/ia32/frames-ia32.h +6 -5
- data/lib/libv8/v8/src/ia32/full-codegen-ia32.cc +459 -465
- data/lib/libv8/v8/src/ia32/ic-ia32.cc +196 -147
- data/lib/libv8/v8/src/ia32/lithium-codegen-ia32.cc +575 -650
- data/lib/libv8/v8/src/ia32/lithium-codegen-ia32.h +19 -21
- data/lib/libv8/v8/src/ia32/lithium-gap-resolver-ia32.cc +7 -2
- data/lib/libv8/v8/src/ia32/lithium-ia32.cc +261 -256
- data/lib/libv8/v8/src/ia32/lithium-ia32.h +234 -335
- data/lib/libv8/v8/src/ia32/macro-assembler-ia32.cc +224 -67
- data/lib/libv8/v8/src/ia32/macro-assembler-ia32.h +63 -19
- data/lib/libv8/v8/src/ia32/regexp-macro-assembler-ia32.cc +22 -8
- data/lib/libv8/v8/src/ia32/regexp-macro-assembler-ia32.h +3 -0
- data/lib/libv8/v8/src/ia32/stub-cache-ia32.cc +380 -239
- data/lib/libv8/v8/src/ic.cc +198 -234
- data/lib/libv8/v8/src/ic.h +32 -30
- data/lib/libv8/v8/src/interpreter-irregexp.cc +6 -4
- data/lib/libv8/v8/src/isolate.cc +112 -95
- data/lib/libv8/v8/src/isolate.h +55 -71
- data/lib/libv8/v8/src/json-parser.h +486 -48
- data/lib/libv8/v8/src/json.js +28 -23
- data/lib/libv8/v8/src/jsregexp.cc +163 -208
- data/lib/libv8/v8/src/jsregexp.h +0 -1
- data/lib/libv8/v8/src/lithium-allocator-inl.h +29 -27
- data/lib/libv8/v8/src/lithium-allocator.cc +22 -17
- data/lib/libv8/v8/src/lithium-allocator.h +8 -8
- data/lib/libv8/v8/src/lithium.cc +16 -11
- data/lib/libv8/v8/src/lithium.h +31 -34
- data/lib/libv8/v8/src/liveedit.cc +111 -15
- data/lib/libv8/v8/src/liveedit.h +3 -4
- data/lib/libv8/v8/src/liveobjectlist.cc +116 -80
- data/lib/libv8/v8/src/liveobjectlist.h +2 -2
- data/lib/libv8/v8/src/log-inl.h +0 -4
- data/lib/libv8/v8/src/log-utils.cc +25 -143
- data/lib/libv8/v8/src/log-utils.h +13 -92
- data/lib/libv8/v8/src/log.cc +26 -249
- data/lib/libv8/v8/src/log.h +6 -17
- data/lib/libv8/v8/src/macros.py +9 -6
- data/lib/libv8/v8/src/mark-compact.cc +276 -56
- data/lib/libv8/v8/src/mark-compact.h +20 -0
- data/lib/libv8/v8/src/messages.js +93 -39
- data/lib/libv8/v8/src/mips/assembler-mips-inl.h +9 -3
- data/lib/libv8/v8/src/mips/assembler-mips.cc +297 -189
- data/lib/libv8/v8/src/mips/assembler-mips.h +121 -54
- data/lib/libv8/v8/src/mips/builtins-mips.cc +23 -24
- data/lib/libv8/v8/src/mips/code-stubs-mips.cc +484 -263
- data/lib/libv8/v8/src/mips/code-stubs-mips.h +8 -83
- data/lib/libv8/v8/src/mips/codegen-mips.h +0 -2
- data/lib/libv8/v8/src/mips/constants-mips.h +37 -11
- data/lib/libv8/v8/src/mips/deoptimizer-mips.cc +6 -1
- data/lib/libv8/v8/src/mips/frames-mips.h +8 -7
- data/lib/libv8/v8/src/mips/full-codegen-mips.cc +258 -419
- data/lib/libv8/v8/src/mips/ic-mips.cc +181 -121
- data/lib/libv8/v8/src/mips/macro-assembler-mips.cc +640 -382
- data/lib/libv8/v8/src/mips/macro-assembler-mips.h +94 -89
- data/lib/libv8/v8/src/mips/regexp-macro-assembler-mips.cc +23 -10
- data/lib/libv8/v8/src/mips/regexp-macro-assembler-mips.h +6 -1
- data/lib/libv8/v8/src/mips/simulator-mips.cc +249 -49
- data/lib/libv8/v8/src/mips/simulator-mips.h +25 -1
- data/lib/libv8/v8/src/mips/stub-cache-mips.cc +373 -161
- data/lib/libv8/v8/src/mirror-debugger.js +55 -8
- data/lib/libv8/v8/src/misc-intrinsics.h +89 -0
- data/lib/libv8/v8/src/mksnapshot.cc +36 -4
- data/lib/libv8/v8/src/natives.h +5 -2
- data/lib/libv8/v8/src/objects-debug.cc +73 -6
- data/lib/libv8/v8/src/objects-inl.h +529 -164
- data/lib/libv8/v8/src/objects-printer.cc +67 -12
- data/lib/libv8/v8/src/objects-visiting.cc +13 -2
- data/lib/libv8/v8/src/objects-visiting.h +41 -1
- data/lib/libv8/v8/src/objects.cc +2200 -1177
- data/lib/libv8/v8/src/objects.h +912 -283
- data/lib/libv8/v8/src/parser.cc +566 -371
- data/lib/libv8/v8/src/parser.h +35 -33
- data/lib/libv8/v8/src/platform-cygwin.cc +10 -25
- data/lib/libv8/v8/src/platform-freebsd.cc +4 -29
- data/lib/libv8/v8/src/platform-linux.cc +60 -57
- data/lib/libv8/v8/src/platform-macos.cc +4 -27
- data/lib/libv8/v8/src/platform-nullos.cc +3 -16
- data/lib/libv8/v8/src/platform-openbsd.cc +247 -85
- data/lib/libv8/v8/src/platform-posix.cc +43 -1
- data/lib/libv8/v8/src/platform-solaris.cc +151 -112
- data/lib/libv8/v8/src/platform-tls.h +1 -1
- data/lib/libv8/v8/src/platform-win32.cc +65 -39
- data/lib/libv8/v8/src/platform.h +17 -14
- data/lib/libv8/v8/src/preparse-data-format.h +2 -2
- data/lib/libv8/v8/src/preparse-data.h +8 -2
- data/lib/libv8/v8/src/preparser-api.cc +2 -18
- data/lib/libv8/v8/src/preparser.cc +106 -65
- data/lib/libv8/v8/src/preparser.h +26 -5
- data/lib/libv8/v8/src/prettyprinter.cc +25 -43
- data/lib/libv8/v8/src/profile-generator-inl.h +0 -4
- data/lib/libv8/v8/src/profile-generator.cc +213 -34
- data/lib/libv8/v8/src/profile-generator.h +9 -9
- data/lib/libv8/v8/src/property.h +1 -0
- data/lib/libv8/v8/src/proxy.js +74 -4
- data/lib/libv8/v8/src/regexp-macro-assembler.cc +10 -6
- data/lib/libv8/v8/src/regexp.js +16 -11
- data/lib/libv8/v8/src/rewriter.cc +24 -133
- data/lib/libv8/v8/src/runtime-profiler.cc +27 -151
- data/lib/libv8/v8/src/runtime-profiler.h +5 -31
- data/lib/libv8/v8/src/runtime.cc +1450 -681
- data/lib/libv8/v8/src/runtime.h +47 -31
- data/lib/libv8/v8/src/runtime.js +2 -1
- data/lib/libv8/v8/src/scanner-base.cc +358 -220
- data/lib/libv8/v8/src/scanner-base.h +30 -138
- data/lib/libv8/v8/src/scanner.cc +0 -18
- data/lib/libv8/v8/src/scanner.h +0 -15
- data/lib/libv8/v8/src/scopeinfo.cc +3 -1
- data/lib/libv8/v8/src/scopeinfo.h +1 -6
- data/lib/libv8/v8/src/scopes.cc +243 -253
- data/lib/libv8/v8/src/scopes.h +58 -109
- data/lib/libv8/v8/src/serialize.cc +12 -54
- data/lib/libv8/v8/src/serialize.h +47 -0
- data/lib/libv8/v8/src/small-pointer-list.h +25 -0
- data/lib/libv8/v8/src/spaces-inl.h +4 -50
- data/lib/libv8/v8/src/spaces.cc +64 -131
- data/lib/libv8/v8/src/spaces.h +19 -70
- data/lib/libv8/v8/src/string-stream.cc +3 -1
- data/lib/libv8/v8/src/string.js +10 -6
- data/lib/libv8/v8/src/strtod.cc +7 -3
- data/lib/libv8/v8/src/stub-cache.cc +59 -129
- data/lib/libv8/v8/src/stub-cache.h +42 -54
- data/lib/libv8/v8/src/third_party/valgrind/valgrind.h +1447 -1339
- data/lib/libv8/v8/src/token.cc +4 -4
- data/lib/libv8/v8/src/token.h +6 -5
- data/lib/libv8/v8/src/type-info.cc +173 -129
- data/lib/libv8/v8/src/type-info.h +40 -22
- data/lib/libv8/v8/src/utils.cc +25 -304
- data/lib/libv8/v8/src/utils.h +118 -3
- data/lib/libv8/v8/src/v8-counters.h +3 -6
- data/lib/libv8/v8/src/v8.cc +34 -27
- data/lib/libv8/v8/src/v8.h +7 -7
- data/lib/libv8/v8/src/v8conversions.cc +129 -0
- data/lib/libv8/v8/src/v8conversions.h +60 -0
- data/lib/libv8/v8/src/v8globals.h +15 -6
- data/lib/libv8/v8/src/v8natives.js +300 -78
- data/lib/libv8/v8/src/v8threads.cc +14 -6
- data/lib/libv8/v8/src/v8threads.h +4 -1
- data/lib/libv8/v8/src/v8utils.cc +360 -0
- data/lib/libv8/v8/src/v8utils.h +17 -66
- data/lib/libv8/v8/src/variables.cc +7 -12
- data/lib/libv8/v8/src/variables.h +12 -10
- data/lib/libv8/v8/src/version.cc +2 -2
- data/lib/libv8/v8/src/vm-state-inl.h +0 -41
- data/lib/libv8/v8/src/vm-state.h +0 -11
- data/lib/libv8/v8/src/weakmap.js +103 -0
- data/lib/libv8/v8/src/x64/assembler-x64.h +6 -3
- data/lib/libv8/v8/src/x64/builtins-x64.cc +25 -22
- data/lib/libv8/v8/src/x64/code-stubs-x64.cc +523 -250
- data/lib/libv8/v8/src/x64/code-stubs-x64.h +8 -71
- data/lib/libv8/v8/src/x64/codegen-x64.cc +1 -0
- data/lib/libv8/v8/src/x64/codegen-x64.h +0 -2
- data/lib/libv8/v8/src/x64/cpu-x64.cc +2 -1
- data/lib/libv8/v8/src/x64/deoptimizer-x64.cc +40 -8
- data/lib/libv8/v8/src/x64/disasm-x64.cc +12 -10
- data/lib/libv8/v8/src/x64/frames-x64.h +7 -6
- data/lib/libv8/v8/src/x64/full-codegen-x64.cc +310 -415
- data/lib/libv8/v8/src/x64/ic-x64.cc +180 -117
- data/lib/libv8/v8/src/x64/lithium-codegen-x64.cc +411 -523
- data/lib/libv8/v8/src/x64/lithium-codegen-x64.h +11 -6
- data/lib/libv8/v8/src/x64/lithium-x64.cc +191 -216
- data/lib/libv8/v8/src/x64/lithium-x64.h +112 -263
- data/lib/libv8/v8/src/x64/macro-assembler-x64.cc +177 -61
- data/lib/libv8/v8/src/x64/macro-assembler-x64.h +23 -7
- data/lib/libv8/v8/src/x64/regexp-macro-assembler-x64.cc +21 -9
- data/lib/libv8/v8/src/x64/regexp-macro-assembler-x64.h +6 -0
- data/lib/libv8/v8/src/x64/stub-cache-x64.cc +273 -107
- data/lib/libv8/v8/src/zone.cc +31 -22
- data/lib/libv8/v8/src/zone.h +12 -6
- data/lib/libv8/v8/tools/codemap.js +8 -0
- data/lib/libv8/v8/tools/gcmole/Makefile +43 -0
- data/lib/libv8/v8/tools/gcmole/gcmole.lua +0 -2
- data/lib/libv8/v8/tools/gdb-v8-support.py +154 -0
- data/lib/libv8/v8/tools/grokdump.py +44 -35
- data/lib/libv8/v8/tools/gyp/v8.gyp +94 -248
- data/lib/libv8/v8/tools/js2c.py +83 -52
- data/lib/libv8/v8/tools/linux-tick-processor +4 -6
- data/lib/libv8/v8/tools/ll_prof.py +3 -3
- data/lib/libv8/v8/tools/oom_dump/README +3 -1
- data/lib/libv8/v8/tools/presubmit.py +11 -4
- data/lib/libv8/v8/tools/profile.js +46 -2
- data/lib/libv8/v8/tools/splaytree.js +11 -0
- data/lib/libv8/v8/tools/stats-viewer.py +15 -11
- data/lib/libv8/v8/tools/test-wrapper-gypbuild.py +227 -0
- data/lib/libv8/v8/tools/test.py +28 -8
- data/lib/libv8/v8/tools/tickprocessor.js +0 -16
- data/lib/libv8/version.rb +1 -1
- data/libv8.gemspec +2 -2
- metadata +31 -19
- data/lib/libv8/scons/engine/SCons/Tool/f03.py +0 -63
- data/lib/libv8/v8/src/json-parser.cc +0 -504
data/lib/libv8/v8/src/parser.h
CHANGED
|
@@ -72,22 +72,14 @@ class FunctionEntry BASE_EMBEDDED {
|
|
|
72
72
|
FunctionEntry() : backing_(Vector<unsigned>::empty()) { }
|
|
73
73
|
|
|
74
74
|
int start_pos() { return backing_[kStartPosOffset]; }
|
|
75
|
-
void set_start_pos(int value) { backing_[kStartPosOffset] = value; }
|
|
76
|
-
|
|
77
75
|
int end_pos() { return backing_[kEndPosOffset]; }
|
|
78
|
-
void set_end_pos(int value) { backing_[kEndPosOffset] = value; }
|
|
79
|
-
|
|
80
76
|
int literal_count() { return backing_[kLiteralCountOffset]; }
|
|
81
|
-
void set_literal_count(int value) { backing_[kLiteralCountOffset] = value; }
|
|
82
|
-
|
|
83
77
|
int property_count() { return backing_[kPropertyCountOffset]; }
|
|
84
|
-
|
|
85
|
-
backing_[kPropertyCountOffset] = value;
|
|
86
|
-
}
|
|
78
|
+
bool strict_mode() { return backing_[kStrictModeOffset] != 0; }
|
|
87
79
|
|
|
88
80
|
bool is_valid() { return backing_.length() > 0; }
|
|
89
81
|
|
|
90
|
-
static const int kSize =
|
|
82
|
+
static const int kSize = 5;
|
|
91
83
|
|
|
92
84
|
private:
|
|
93
85
|
Vector<unsigned> backing_;
|
|
@@ -95,6 +87,7 @@ class FunctionEntry BASE_EMBEDDED {
|
|
|
95
87
|
static const int kEndPosOffset = 1;
|
|
96
88
|
static const int kLiteralCountOffset = 2;
|
|
97
89
|
static const int kPropertyCountOffset = 3;
|
|
90
|
+
static const int kStrictModeOffset = 4;
|
|
98
91
|
};
|
|
99
92
|
|
|
100
93
|
|
|
@@ -171,12 +164,14 @@ class ParserApi {
|
|
|
171
164
|
|
|
172
165
|
// Generic preparser generating full preparse data.
|
|
173
166
|
static ScriptDataImpl* PreParse(UC16CharacterStream* source,
|
|
174
|
-
v8::Extension* extension
|
|
167
|
+
v8::Extension* extension,
|
|
168
|
+
bool harmony_block_scoping);
|
|
175
169
|
|
|
176
170
|
// Preparser that only does preprocessing that makes sense if only used
|
|
177
171
|
// immediately after.
|
|
178
172
|
static ScriptDataImpl* PartialPreParse(UC16CharacterStream* source,
|
|
179
|
-
v8::Extension* extension
|
|
173
|
+
v8::Extension* extension,
|
|
174
|
+
bool harmony_block_scoping);
|
|
180
175
|
};
|
|
181
176
|
|
|
182
177
|
// ----------------------------------------------------------------------------
|
|
@@ -442,8 +437,9 @@ class Parser {
|
|
|
442
437
|
void ReportMessageAt(Scanner::Location loc,
|
|
443
438
|
const char* message,
|
|
444
439
|
Vector<Handle<String> > args);
|
|
440
|
+
void SetHarmonyBlockScoping(bool block_scoping);
|
|
445
441
|
|
|
446
|
-
|
|
442
|
+
private:
|
|
447
443
|
// Limit on number of function parameters is chosen arbitrarily.
|
|
448
444
|
// Code::Flags uses only the low 17 bits of num-parameters to
|
|
449
445
|
// construct a hashable id, so if more than 2^17 are allowed, this
|
|
@@ -458,6 +454,12 @@ class Parser {
|
|
|
458
454
|
PARSE_EAGERLY
|
|
459
455
|
};
|
|
460
456
|
|
|
457
|
+
enum VariableDeclarationContext {
|
|
458
|
+
kSourceElement,
|
|
459
|
+
kStatement,
|
|
460
|
+
kForStatement
|
|
461
|
+
};
|
|
462
|
+
|
|
461
463
|
Isolate* isolate() { return isolate_; }
|
|
462
464
|
Zone* zone() { return isolate_->zone(); }
|
|
463
465
|
|
|
@@ -473,7 +475,7 @@ class Parser {
|
|
|
473
475
|
void ReportMessage(const char* message, Vector<const char*> args);
|
|
474
476
|
|
|
475
477
|
bool inside_with() const { return with_nesting_level_ > 0; }
|
|
476
|
-
|
|
478
|
+
JavaScriptScanner& scanner() { return scanner_; }
|
|
477
479
|
Mode mode() const { return mode_; }
|
|
478
480
|
ScriptDataImpl* pre_data() const { return pre_data_; }
|
|
479
481
|
|
|
@@ -486,22 +488,23 @@ class Parser {
|
|
|
486
488
|
// for failure at the call sites.
|
|
487
489
|
void* ParseSourceElements(ZoneList<Statement*>* processor,
|
|
488
490
|
int end_token, bool* ok);
|
|
491
|
+
Statement* ParseSourceElement(ZoneStringList* labels, bool* ok);
|
|
489
492
|
Statement* ParseStatement(ZoneStringList* labels, bool* ok);
|
|
490
493
|
Statement* ParseFunctionDeclaration(bool* ok);
|
|
491
494
|
Statement* ParseNativeDeclaration(bool* ok);
|
|
492
495
|
Block* ParseBlock(ZoneStringList* labels, bool* ok);
|
|
493
|
-
Block*
|
|
494
|
-
Block*
|
|
496
|
+
Block* ParseScopedBlock(ZoneStringList* labels, bool* ok);
|
|
497
|
+
Block* ParseVariableStatement(VariableDeclarationContext var_context,
|
|
498
|
+
bool* ok);
|
|
499
|
+
Block* ParseVariableDeclarations(VariableDeclarationContext var_context,
|
|
500
|
+
Handle<String>* out,
|
|
501
|
+
bool* ok);
|
|
495
502
|
Statement* ParseExpressionOrLabelledStatement(ZoneStringList* labels,
|
|
496
503
|
bool* ok);
|
|
497
504
|
IfStatement* ParseIfStatement(ZoneStringList* labels, bool* ok);
|
|
498
505
|
Statement* ParseContinueStatement(bool* ok);
|
|
499
506
|
Statement* ParseBreakStatement(ZoneStringList* labels, bool* ok);
|
|
500
507
|
Statement* ParseReturnStatement(bool* ok);
|
|
501
|
-
Block* WithHelper(Expression* obj,
|
|
502
|
-
ZoneStringList* labels,
|
|
503
|
-
bool is_catch_block,
|
|
504
|
-
bool* ok);
|
|
505
508
|
Statement* ParseWithStatement(ZoneStringList* labels, bool* ok);
|
|
506
509
|
CaseClause* ParseCaseClause(bool* default_seen_ptr, bool* ok);
|
|
507
510
|
SwitchStatement* ParseSwitchStatement(ZoneStringList* labels, bool* ok);
|
|
@@ -560,17 +563,11 @@ class Parser {
|
|
|
560
563
|
// in the object literal boilerplate.
|
|
561
564
|
Handle<Object> GetBoilerplateValue(Expression* expression);
|
|
562
565
|
|
|
563
|
-
enum FunctionLiteralType {
|
|
564
|
-
EXPRESSION,
|
|
565
|
-
DECLARATION,
|
|
566
|
-
NESTED
|
|
567
|
-
};
|
|
568
|
-
|
|
569
566
|
ZoneList<Expression*>* ParseArguments(bool* ok);
|
|
570
567
|
FunctionLiteral* ParseFunctionLiteral(Handle<String> var_name,
|
|
571
568
|
bool name_is_reserved,
|
|
572
569
|
int function_token_position,
|
|
573
|
-
|
|
570
|
+
FunctionLiteral::Type type,
|
|
574
571
|
bool* ok);
|
|
575
572
|
|
|
576
573
|
|
|
@@ -633,11 +630,12 @@ class Parser {
|
|
|
633
630
|
Literal* GetLiteralNumber(double value);
|
|
634
631
|
|
|
635
632
|
Handle<String> ParseIdentifier(bool* ok);
|
|
636
|
-
Handle<String>
|
|
633
|
+
Handle<String> ParseIdentifierOrStrictReservedWord(
|
|
634
|
+
bool* is_strict_reserved, bool* ok);
|
|
637
635
|
Handle<String> ParseIdentifierName(bool* ok);
|
|
638
|
-
Handle<String>
|
|
639
|
-
|
|
640
|
-
|
|
636
|
+
Handle<String> ParseIdentifierNameOrGetOrSet(bool* is_get,
|
|
637
|
+
bool* is_set,
|
|
638
|
+
bool* ok);
|
|
641
639
|
|
|
642
640
|
// Strict mode validation of LValue expressions
|
|
643
641
|
void CheckStrictModeLValue(Expression* expression,
|
|
@@ -675,9 +673,12 @@ class Parser {
|
|
|
675
673
|
Expression* NewCall(Expression* expression,
|
|
676
674
|
ZoneList<Expression*>* arguments,
|
|
677
675
|
int pos) {
|
|
678
|
-
return new Call(expression, arguments, pos);
|
|
676
|
+
return new(zone()) Call(isolate(), expression, arguments, pos);
|
|
679
677
|
}
|
|
680
678
|
|
|
679
|
+
inline Literal* NewLiteral(Handle<Object> handle) {
|
|
680
|
+
return new(zone()) Literal(isolate(), handle);
|
|
681
|
+
}
|
|
681
682
|
|
|
682
683
|
// Create a number literal.
|
|
683
684
|
Literal* NewNumberLiteral(double value);
|
|
@@ -705,7 +706,7 @@ class Parser {
|
|
|
705
706
|
ZoneList<Handle<String> > symbol_cache_;
|
|
706
707
|
|
|
707
708
|
Handle<Script> script_;
|
|
708
|
-
|
|
709
|
+
JavaScriptScanner scanner_;
|
|
709
710
|
|
|
710
711
|
Scope* top_scope_;
|
|
711
712
|
int with_nesting_level_;
|
|
@@ -725,6 +726,7 @@ class Parser {
|
|
|
725
726
|
// Heuristically that means that the function will be called immediately,
|
|
726
727
|
// so never lazily compile it.
|
|
727
728
|
bool parenthesized_function_;
|
|
729
|
+
bool harmony_block_scoping_;
|
|
728
730
|
|
|
729
731
|
friend class LexicalScope;
|
|
730
732
|
};
|
|
@@ -166,22 +166,17 @@ void OS::Free(void* address, const size_t size) {
|
|
|
166
166
|
}
|
|
167
167
|
|
|
168
168
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
// TODO(1240712): mprotect has a return value which is ignored here.
|
|
173
|
-
mprotect(address, size, PROT_READ);
|
|
169
|
+
void OS::ProtectCode(void* address, const size_t size) {
|
|
170
|
+
DWORD old_protect;
|
|
171
|
+
VirtualProtect(address, size, PAGE_EXECUTE_READ, &old_protect);
|
|
174
172
|
}
|
|
175
173
|
|
|
176
174
|
|
|
177
|
-
void OS::
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
mprotect(address, size, prot);
|
|
175
|
+
void OS::Guard(void* address, const size_t size) {
|
|
176
|
+
DWORD oldprotect;
|
|
177
|
+
VirtualProtect(address, size, PAGE_READONLY | PAGE_GUARD, &oldprotect);
|
|
181
178
|
}
|
|
182
179
|
|
|
183
|
-
#endif
|
|
184
|
-
|
|
185
180
|
|
|
186
181
|
void OS::Sleep(int milliseconds) {
|
|
187
182
|
unsigned int ms = static_cast<unsigned int>(milliseconds);
|
|
@@ -249,7 +244,6 @@ PosixMemoryMappedFile::~PosixMemoryMappedFile() {
|
|
|
249
244
|
|
|
250
245
|
|
|
251
246
|
void OS::LogSharedLibraryAddresses() {
|
|
252
|
-
#ifdef ENABLE_LOGGING_AND_PROFILING
|
|
253
247
|
// This function assumes that the layout of the file is as follows:
|
|
254
248
|
// hex_start_addr-hex_end_addr rwxp <unused data> [binary_file_name]
|
|
255
249
|
// If we encounter an unexpected situation we abort scanning further entries.
|
|
@@ -306,7 +300,6 @@ void OS::LogSharedLibraryAddresses() {
|
|
|
306
300
|
}
|
|
307
301
|
free(lib_name);
|
|
308
302
|
fclose(fp);
|
|
309
|
-
#endif
|
|
310
303
|
}
|
|
311
304
|
|
|
312
305
|
|
|
@@ -371,17 +364,15 @@ class Thread::PlatformData : public Malloced {
|
|
|
371
364
|
|
|
372
365
|
|
|
373
366
|
|
|
374
|
-
Thread::Thread(
|
|
367
|
+
Thread::Thread(const Options& options)
|
|
375
368
|
: data_(new PlatformData),
|
|
376
|
-
isolate_(isolate),
|
|
377
369
|
stack_size_(options.stack_size) {
|
|
378
370
|
set_name(options.name);
|
|
379
371
|
}
|
|
380
372
|
|
|
381
373
|
|
|
382
|
-
Thread::Thread(
|
|
374
|
+
Thread::Thread(const char* name)
|
|
383
375
|
: data_(new PlatformData),
|
|
384
|
-
isolate_(isolate),
|
|
385
376
|
stack_size_(0) {
|
|
386
377
|
set_name(name);
|
|
387
378
|
}
|
|
@@ -399,7 +390,6 @@ static void* ThreadEntry(void* arg) {
|
|
|
399
390
|
// one) so we initialize it here too.
|
|
400
391
|
thread->data()->thread_ = pthread_self();
|
|
401
392
|
ASSERT(thread->data()->thread_ != kNoThread);
|
|
402
|
-
Thread::SetThreadLocal(Isolate::isolate_key(), thread->isolate());
|
|
403
393
|
thread->Run();
|
|
404
394
|
return NULL;
|
|
405
395
|
}
|
|
@@ -594,8 +584,6 @@ Semaphore* OS::CreateSemaphore(int count) {
|
|
|
594
584
|
}
|
|
595
585
|
|
|
596
586
|
|
|
597
|
-
#ifdef ENABLE_LOGGING_AND_PROFILING
|
|
598
|
-
|
|
599
587
|
// ----------------------------------------------------------------------------
|
|
600
588
|
// Cygwin profiler support.
|
|
601
589
|
//
|
|
@@ -631,7 +619,7 @@ class Sampler::PlatformData : public Malloced {
|
|
|
631
619
|
class SamplerThread : public Thread {
|
|
632
620
|
public:
|
|
633
621
|
explicit SamplerThread(int interval)
|
|
634
|
-
: Thread(
|
|
622
|
+
: Thread("SamplerThread"),
|
|
635
623
|
interval_(interval) {}
|
|
636
624
|
|
|
637
625
|
static void AddActiveSampler(Sampler* sampler) {
|
|
@@ -649,8 +637,7 @@ class SamplerThread : public Thread {
|
|
|
649
637
|
ScopedLock lock(mutex_);
|
|
650
638
|
SamplerRegistry::RemoveActiveSampler(sampler);
|
|
651
639
|
if (SamplerRegistry::GetState() == SamplerRegistry::HAS_NO_SAMPLERS) {
|
|
652
|
-
RuntimeProfiler::
|
|
653
|
-
instance_->Join();
|
|
640
|
+
RuntimeProfiler::StopRuntimeProfilerThreadBeforeShutdown(instance_);
|
|
654
641
|
delete instance_;
|
|
655
642
|
instance_ = NULL;
|
|
656
643
|
}
|
|
@@ -773,7 +760,5 @@ void Sampler::Stop() {
|
|
|
773
760
|
SetActive(false);
|
|
774
761
|
}
|
|
775
762
|
|
|
776
|
-
#endif // ENABLE_LOGGING_AND_PROFILING
|
|
777
763
|
|
|
778
764
|
} } // namespace v8::internal
|
|
779
|
-
|
|
@@ -181,20 +181,6 @@ void OS::Free(void* buf, const size_t length) {
|
|
|
181
181
|
}
|
|
182
182
|
|
|
183
183
|
|
|
184
|
-
#ifdef ENABLE_HEAP_PROTECTION
|
|
185
|
-
|
|
186
|
-
void OS::Protect(void* address, size_t size) {
|
|
187
|
-
UNIMPLEMENTED();
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
void OS::Unprotect(void* address, size_t size, bool is_executable) {
|
|
192
|
-
UNIMPLEMENTED();
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
#endif
|
|
196
|
-
|
|
197
|
-
|
|
198
184
|
void OS::Sleep(int milliseconds) {
|
|
199
185
|
unsigned int ms = static_cast<unsigned int>(milliseconds);
|
|
200
186
|
usleep(1000 * ms);
|
|
@@ -266,15 +252,12 @@ PosixMemoryMappedFile::~PosixMemoryMappedFile() {
|
|
|
266
252
|
}
|
|
267
253
|
|
|
268
254
|
|
|
269
|
-
#ifdef ENABLE_LOGGING_AND_PROFILING
|
|
270
255
|
static unsigned StringToLong(char* buffer) {
|
|
271
256
|
return static_cast<unsigned>(strtol(buffer, NULL, 16)); // NOLINT
|
|
272
257
|
}
|
|
273
|
-
#endif
|
|
274
258
|
|
|
275
259
|
|
|
276
260
|
void OS::LogSharedLibraryAddresses() {
|
|
277
|
-
#ifdef ENABLE_LOGGING_AND_PROFILING
|
|
278
261
|
static const int MAP_LENGTH = 1024;
|
|
279
262
|
int fd = open("/proc/self/maps", O_RDONLY);
|
|
280
263
|
if (fd < 0) return;
|
|
@@ -311,7 +294,6 @@ void OS::LogSharedLibraryAddresses() {
|
|
|
311
294
|
LOG(i::Isolate::Current(), SharedLibraryEvent(start_of_path, start, end));
|
|
312
295
|
}
|
|
313
296
|
close(fd);
|
|
314
|
-
#endif
|
|
315
297
|
}
|
|
316
298
|
|
|
317
299
|
|
|
@@ -398,17 +380,15 @@ class Thread::PlatformData : public Malloced {
|
|
|
398
380
|
};
|
|
399
381
|
|
|
400
382
|
|
|
401
|
-
Thread::Thread(
|
|
383
|
+
Thread::Thread(const Options& options)
|
|
402
384
|
: data_(new PlatformData),
|
|
403
|
-
isolate_(isolate),
|
|
404
385
|
stack_size_(options.stack_size) {
|
|
405
386
|
set_name(options.name);
|
|
406
387
|
}
|
|
407
388
|
|
|
408
389
|
|
|
409
|
-
Thread::Thread(
|
|
390
|
+
Thread::Thread(const char* name)
|
|
410
391
|
: data_(new PlatformData),
|
|
411
|
-
isolate_(isolate),
|
|
412
392
|
stack_size_(0) {
|
|
413
393
|
set_name(name);
|
|
414
394
|
}
|
|
@@ -426,7 +406,6 @@ static void* ThreadEntry(void* arg) {
|
|
|
426
406
|
// one) so we initialize it here too.
|
|
427
407
|
thread->data()->thread_ = pthread_self();
|
|
428
408
|
ASSERT(thread->data()->thread_ != kNoThread);
|
|
429
|
-
Thread::SetThreadLocal(Isolate::isolate_key(), thread->isolate());
|
|
430
409
|
thread->Run();
|
|
431
410
|
return NULL;
|
|
432
411
|
}
|
|
@@ -591,8 +570,6 @@ Semaphore* OS::CreateSemaphore(int count) {
|
|
|
591
570
|
}
|
|
592
571
|
|
|
593
572
|
|
|
594
|
-
#ifdef ENABLE_LOGGING_AND_PROFILING
|
|
595
|
-
|
|
596
573
|
static pthread_t GetThreadID() {
|
|
597
574
|
pthread_t thread_id = pthread_self();
|
|
598
575
|
return thread_id;
|
|
@@ -660,7 +637,7 @@ class SignalSender : public Thread {
|
|
|
660
637
|
};
|
|
661
638
|
|
|
662
639
|
explicit SignalSender(int interval)
|
|
663
|
-
: Thread(
|
|
640
|
+
: Thread("SignalSender"),
|
|
664
641
|
interval_(interval) {}
|
|
665
642
|
|
|
666
643
|
static void AddActiveSampler(Sampler* sampler) {
|
|
@@ -687,8 +664,7 @@ class SignalSender : public Thread {
|
|
|
687
664
|
ScopedLock lock(mutex_);
|
|
688
665
|
SamplerRegistry::RemoveActiveSampler(sampler);
|
|
689
666
|
if (SamplerRegistry::GetState() == SamplerRegistry::HAS_NO_SAMPLERS) {
|
|
690
|
-
RuntimeProfiler::
|
|
691
|
-
instance_->Join();
|
|
667
|
+
RuntimeProfiler::StopRuntimeProfilerThreadBeforeShutdown(instance_);
|
|
692
668
|
delete instance_;
|
|
693
669
|
instance_ = NULL;
|
|
694
670
|
|
|
@@ -821,6 +797,5 @@ void Sampler::Stop() {
|
|
|
821
797
|
SetActive(false);
|
|
822
798
|
}
|
|
823
799
|
|
|
824
|
-
#endif // ENABLE_LOGGING_AND_PROFILING
|
|
825
800
|
|
|
826
801
|
} } // namespace v8::internal
|
|
@@ -78,13 +78,33 @@ double ceiling(double x) {
|
|
|
78
78
|
static Mutex* limit_mutex = NULL;
|
|
79
79
|
|
|
80
80
|
|
|
81
|
+
static void* GetRandomMmapAddr() {
|
|
82
|
+
Isolate* isolate = Isolate::UncheckedCurrent();
|
|
83
|
+
// Note that the current isolate isn't set up in a call path via
|
|
84
|
+
// CpuFeatures::Probe. We don't care about randomization in this case because
|
|
85
|
+
// the code page is immediately freed.
|
|
86
|
+
if (isolate != NULL) {
|
|
87
|
+
#ifdef V8_TARGET_ARCH_X64
|
|
88
|
+
uint64_t rnd1 = V8::RandomPrivate(isolate);
|
|
89
|
+
uint64_t rnd2 = V8::RandomPrivate(isolate);
|
|
90
|
+
uint64_t raw_addr = (rnd1 << 32) ^ rnd2;
|
|
91
|
+
raw_addr &= V8_UINT64_C(0x3ffffffff000);
|
|
92
|
+
#else
|
|
93
|
+
uint32_t raw_addr = V8::RandomPrivate(isolate);
|
|
94
|
+
// The range 0x20000000 - 0x60000000 is relatively unpopulated across a
|
|
95
|
+
// variety of ASLR modes (PAE kernel, NX compat mode, etc).
|
|
96
|
+
raw_addr &= 0x3ffff000;
|
|
97
|
+
raw_addr += 0x20000000;
|
|
98
|
+
#endif
|
|
99
|
+
return reinterpret_cast<void*>(raw_addr);
|
|
100
|
+
}
|
|
101
|
+
return NULL;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
|
|
81
105
|
void OS::Setup() {
|
|
82
|
-
// Seed the random number generator.
|
|
83
|
-
|
|
84
|
-
// to an unsigned. Going directly can cause an overflow and the seed to be
|
|
85
|
-
// set to all ones. The seed will be identical for different instances that
|
|
86
|
-
// call this setup code within the same millisecond.
|
|
87
|
-
uint64_t seed = static_cast<uint64_t>(TimeCurrentMillis());
|
|
106
|
+
// Seed the random number generator. We preserve microsecond resolution.
|
|
107
|
+
uint64_t seed = Ticks() ^ (getpid() << 16);
|
|
88
108
|
srandom(static_cast<unsigned int>(seed));
|
|
89
109
|
limit_mutex = CreateMutex();
|
|
90
110
|
|
|
@@ -367,10 +387,10 @@ size_t OS::AllocateAlignment() {
|
|
|
367
387
|
void* OS::Allocate(const size_t requested,
|
|
368
388
|
size_t* allocated,
|
|
369
389
|
bool is_executable) {
|
|
370
|
-
// TODO(805): Port randomization of allocated executable memory to Linux.
|
|
371
390
|
const size_t msize = RoundUp(requested, sysconf(_SC_PAGESIZE));
|
|
372
391
|
int prot = PROT_READ | PROT_WRITE | (is_executable ? PROT_EXEC : 0);
|
|
373
|
-
void*
|
|
392
|
+
void* addr = GetRandomMmapAddr();
|
|
393
|
+
void* mbase = mmap(addr, msize, prot, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
|
|
374
394
|
if (mbase == MAP_FAILED) {
|
|
375
395
|
LOG(i::Isolate::Current(),
|
|
376
396
|
StringEvent("OS::Allocate", "mmap failed"));
|
|
@@ -390,23 +410,6 @@ void OS::Free(void* address, const size_t size) {
|
|
|
390
410
|
}
|
|
391
411
|
|
|
392
412
|
|
|
393
|
-
#ifdef ENABLE_HEAP_PROTECTION
|
|
394
|
-
|
|
395
|
-
void OS::Protect(void* address, size_t size) {
|
|
396
|
-
// TODO(1240712): mprotect has a return value which is ignored here.
|
|
397
|
-
mprotect(address, size, PROT_READ);
|
|
398
|
-
}
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
void OS::Unprotect(void* address, size_t size, bool is_executable) {
|
|
402
|
-
// TODO(1240712): mprotect has a return value which is ignored here.
|
|
403
|
-
int prot = PROT_READ | PROT_WRITE | (is_executable ? PROT_EXEC : 0);
|
|
404
|
-
mprotect(address, size, prot);
|
|
405
|
-
}
|
|
406
|
-
|
|
407
|
-
#endif
|
|
408
|
-
|
|
409
|
-
|
|
410
413
|
void OS::Sleep(int milliseconds) {
|
|
411
414
|
unsigned int ms = static_cast<unsigned int>(milliseconds);
|
|
412
415
|
usleep(1000 * ms);
|
|
@@ -483,7 +486,6 @@ PosixMemoryMappedFile::~PosixMemoryMappedFile() {
|
|
|
483
486
|
|
|
484
487
|
|
|
485
488
|
void OS::LogSharedLibraryAddresses() {
|
|
486
|
-
#ifdef ENABLE_LOGGING_AND_PROFILING
|
|
487
489
|
// This function assumes that the layout of the file is as follows:
|
|
488
490
|
// hex_start_addr-hex_end_addr rwxp <unused data> [binary_file_name]
|
|
489
491
|
// If we encounter an unexpected situation we abort scanning further entries.
|
|
@@ -540,7 +542,6 @@ void OS::LogSharedLibraryAddresses() {
|
|
|
540
542
|
}
|
|
541
543
|
free(lib_name);
|
|
542
544
|
fclose(fp);
|
|
543
|
-
#endif
|
|
544
545
|
}
|
|
545
546
|
|
|
546
547
|
|
|
@@ -548,7 +549,6 @@ static const char kGCFakeMmap[] = "/tmp/__v8_gc__";
|
|
|
548
549
|
|
|
549
550
|
|
|
550
551
|
void OS::SignalCodeMovingGC() {
|
|
551
|
-
#ifdef ENABLE_LOGGING_AND_PROFILING
|
|
552
552
|
// Support for ll_prof.py.
|
|
553
553
|
//
|
|
554
554
|
// The Linux profiler built into the kernel logs all mmap's with
|
|
@@ -564,7 +564,6 @@ void OS::SignalCodeMovingGC() {
|
|
|
564
564
|
ASSERT(addr != MAP_FAILED);
|
|
565
565
|
munmap(addr, size);
|
|
566
566
|
fclose(f);
|
|
567
|
-
#endif
|
|
568
567
|
}
|
|
569
568
|
|
|
570
569
|
|
|
@@ -607,7 +606,7 @@ static const int kMmapFdOffset = 0;
|
|
|
607
606
|
|
|
608
607
|
|
|
609
608
|
VirtualMemory::VirtualMemory(size_t size) {
|
|
610
|
-
address_ = mmap(
|
|
609
|
+
address_ = mmap(GetRandomMmapAddr(), size, PROT_NONE,
|
|
611
610
|
MAP_PRIVATE | MAP_ANONYMOUS | MAP_NORESERVE,
|
|
612
611
|
kMmapFd, kMmapFdOffset);
|
|
613
612
|
size_ = size;
|
|
@@ -653,17 +652,15 @@ class Thread::PlatformData : public Malloced {
|
|
|
653
652
|
pthread_t thread_; // Thread handle for pthread.
|
|
654
653
|
};
|
|
655
654
|
|
|
656
|
-
Thread::Thread(
|
|
655
|
+
Thread::Thread(const Options& options)
|
|
657
656
|
: data_(new PlatformData()),
|
|
658
|
-
isolate_(isolate),
|
|
659
657
|
stack_size_(options.stack_size) {
|
|
660
658
|
set_name(options.name);
|
|
661
659
|
}
|
|
662
660
|
|
|
663
661
|
|
|
664
|
-
Thread::Thread(
|
|
662
|
+
Thread::Thread(const char* name)
|
|
665
663
|
: data_(new PlatformData()),
|
|
666
|
-
isolate_(isolate),
|
|
667
664
|
stack_size_(0) {
|
|
668
665
|
set_name(name);
|
|
669
666
|
}
|
|
@@ -679,12 +676,13 @@ static void* ThreadEntry(void* arg) {
|
|
|
679
676
|
// This is also initialized by the first argument to pthread_create() but we
|
|
680
677
|
// don't know which thread will run first (the original thread or the new
|
|
681
678
|
// one) so we initialize it here too.
|
|
679
|
+
#ifdef PR_SET_NAME
|
|
682
680
|
prctl(PR_SET_NAME,
|
|
683
681
|
reinterpret_cast<unsigned long>(thread->name()), // NOLINT
|
|
684
682
|
0, 0, 0);
|
|
683
|
+
#endif
|
|
685
684
|
thread->data()->thread_ = pthread_self();
|
|
686
685
|
ASSERT(thread->data()->thread_ != kNoThread);
|
|
687
|
-
Thread::SetThreadLocal(Isolate::isolate_key(), thread->isolate());
|
|
688
686
|
thread->Run();
|
|
689
687
|
return NULL;
|
|
690
688
|
}
|
|
@@ -750,7 +748,6 @@ void Thread::YieldCPU() {
|
|
|
750
748
|
|
|
751
749
|
class LinuxMutex : public Mutex {
|
|
752
750
|
public:
|
|
753
|
-
|
|
754
751
|
LinuxMutex() {
|
|
755
752
|
pthread_mutexattr_t attrs;
|
|
756
753
|
int result = pthread_mutexattr_init(&attrs);
|
|
@@ -759,6 +756,7 @@ class LinuxMutex : public Mutex {
|
|
|
759
756
|
ASSERT(result == 0);
|
|
760
757
|
result = pthread_mutex_init(&mutex_, &attrs);
|
|
761
758
|
ASSERT(result == 0);
|
|
759
|
+
USE(result);
|
|
762
760
|
}
|
|
763
761
|
|
|
764
762
|
virtual ~LinuxMutex() { pthread_mutex_destroy(&mutex_); }
|
|
@@ -863,8 +861,6 @@ Semaphore* OS::CreateSemaphore(int count) {
|
|
|
863
861
|
}
|
|
864
862
|
|
|
865
863
|
|
|
866
|
-
#ifdef ENABLE_LOGGING_AND_PROFILING
|
|
867
|
-
|
|
868
864
|
#if !defined(__GLIBC__) && (defined(__arm__) || defined(__thumb__))
|
|
869
865
|
// Android runs a fairly new Linux kernel, so signal info is there,
|
|
870
866
|
// but the C library doesn't have the structs defined.
|
|
@@ -975,23 +971,32 @@ class SignalSender : public Thread {
|
|
|
975
971
|
};
|
|
976
972
|
|
|
977
973
|
explicit SignalSender(int interval)
|
|
978
|
-
: Thread(
|
|
974
|
+
: Thread("SignalSender"),
|
|
979
975
|
vm_tgid_(getpid()),
|
|
980
976
|
interval_(interval) {}
|
|
981
977
|
|
|
978
|
+
static void InstallSignalHandler() {
|
|
979
|
+
struct sigaction sa;
|
|
980
|
+
sa.sa_sigaction = ProfilerSignalHandler;
|
|
981
|
+
sigemptyset(&sa.sa_mask);
|
|
982
|
+
sa.sa_flags = SA_RESTART | SA_SIGINFO;
|
|
983
|
+
signal_handler_installed_ =
|
|
984
|
+
(sigaction(SIGPROF, &sa, &old_signal_handler_) == 0);
|
|
985
|
+
}
|
|
986
|
+
|
|
987
|
+
static void RestoreSignalHandler() {
|
|
988
|
+
if (signal_handler_installed_) {
|
|
989
|
+
sigaction(SIGPROF, &old_signal_handler_, 0);
|
|
990
|
+
signal_handler_installed_ = false;
|
|
991
|
+
}
|
|
992
|
+
}
|
|
993
|
+
|
|
982
994
|
static void AddActiveSampler(Sampler* sampler) {
|
|
983
995
|
ScopedLock lock(mutex_);
|
|
984
996
|
SamplerRegistry::AddActiveSampler(sampler);
|
|
985
997
|
if (instance_ == NULL) {
|
|
986
|
-
//
|
|
987
|
-
|
|
988
|
-
sa.sa_sigaction = ProfilerSignalHandler;
|
|
989
|
-
sigemptyset(&sa.sa_mask);
|
|
990
|
-
sa.sa_flags = SA_RESTART | SA_SIGINFO;
|
|
991
|
-
signal_handler_installed_ =
|
|
992
|
-
(sigaction(SIGPROF, &sa, &old_signal_handler_) == 0);
|
|
993
|
-
|
|
994
|
-
// Start a thread that sends SIGPROF signal to VM threads.
|
|
998
|
+
// Start a thread that will send SIGPROF signal to VM threads,
|
|
999
|
+
// when CPU profiling will be enabled.
|
|
995
1000
|
instance_ = new SignalSender(sampler->interval());
|
|
996
1001
|
instance_->Start();
|
|
997
1002
|
} else {
|
|
@@ -1003,16 +1008,10 @@ class SignalSender : public Thread {
|
|
|
1003
1008
|
ScopedLock lock(mutex_);
|
|
1004
1009
|
SamplerRegistry::RemoveActiveSampler(sampler);
|
|
1005
1010
|
if (SamplerRegistry::GetState() == SamplerRegistry::HAS_NO_SAMPLERS) {
|
|
1006
|
-
RuntimeProfiler::
|
|
1007
|
-
instance_->Join();
|
|
1011
|
+
RuntimeProfiler::StopRuntimeProfilerThreadBeforeShutdown(instance_);
|
|
1008
1012
|
delete instance_;
|
|
1009
1013
|
instance_ = NULL;
|
|
1010
|
-
|
|
1011
|
-
// Restore the old signal handler.
|
|
1012
|
-
if (signal_handler_installed_) {
|
|
1013
|
-
sigaction(SIGPROF, &old_signal_handler_, 0);
|
|
1014
|
-
signal_handler_installed_ = false;
|
|
1015
|
-
}
|
|
1014
|
+
RestoreSignalHandler();
|
|
1016
1015
|
}
|
|
1017
1016
|
}
|
|
1018
1017
|
|
|
@@ -1024,6 +1023,11 @@ class SignalSender : public Thread {
|
|
|
1024
1023
|
bool cpu_profiling_enabled =
|
|
1025
1024
|
(state == SamplerRegistry::HAS_CPU_PROFILING_SAMPLERS);
|
|
1026
1025
|
bool runtime_profiler_enabled = RuntimeProfiler::IsEnabled();
|
|
1026
|
+
if (cpu_profiling_enabled && !signal_handler_installed_) {
|
|
1027
|
+
InstallSignalHandler();
|
|
1028
|
+
} else if (!cpu_profiling_enabled && signal_handler_installed_) {
|
|
1029
|
+
RestoreSignalHandler();
|
|
1030
|
+
}
|
|
1027
1031
|
// When CPU profiling is enabled both JavaScript and C++ code is
|
|
1028
1032
|
// profiled. We must not suspend.
|
|
1029
1033
|
if (!cpu_profiling_enabled) {
|
|
@@ -1144,6 +1148,5 @@ void Sampler::Stop() {
|
|
|
1144
1148
|
SetActive(false);
|
|
1145
1149
|
}
|
|
1146
1150
|
|
|
1147
|
-
#endif // ENABLE_LOGGING_AND_PROFILING
|
|
1148
1151
|
|
|
1149
1152
|
} } // namespace v8::internal
|