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
|
@@ -33,15 +33,19 @@
|
|
|
33
33
|
#include <errno.h>
|
|
34
34
|
#include <time.h>
|
|
35
35
|
|
|
36
|
+
#include <sys/mman.h>
|
|
36
37
|
#include <sys/socket.h>
|
|
37
38
|
#include <sys/resource.h>
|
|
38
39
|
#include <sys/time.h>
|
|
39
40
|
#include <sys/types.h>
|
|
41
|
+
#include <sys/stat.h>
|
|
40
42
|
|
|
41
43
|
#include <arpa/inet.h>
|
|
42
44
|
#include <netinet/in.h>
|
|
43
45
|
#include <netdb.h>
|
|
44
46
|
|
|
47
|
+
#undef MAP_TYPE
|
|
48
|
+
|
|
45
49
|
#if defined(ANDROID)
|
|
46
50
|
#define LOG_TAG "v8"
|
|
47
51
|
#include <utils/Log.h> // LOG_PRI_VA
|
|
@@ -54,6 +58,32 @@
|
|
|
54
58
|
namespace v8 {
|
|
55
59
|
namespace internal {
|
|
56
60
|
|
|
61
|
+
|
|
62
|
+
// Maximum size of the virtual memory. 0 means there is no artificial
|
|
63
|
+
// limit.
|
|
64
|
+
|
|
65
|
+
intptr_t OS::MaxVirtualMemory() {
|
|
66
|
+
struct rlimit limit;
|
|
67
|
+
int result = getrlimit(RLIMIT_DATA, &limit);
|
|
68
|
+
if (result != 0) return 0;
|
|
69
|
+
return limit.rlim_cur;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
#ifndef __CYGWIN__
|
|
74
|
+
// Get rid of writable permission on code allocations.
|
|
75
|
+
void OS::ProtectCode(void* address, const size_t size) {
|
|
76
|
+
mprotect(address, size, PROT_READ | PROT_EXEC);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
// Create guard pages.
|
|
81
|
+
void OS::Guard(void* address, const size_t size) {
|
|
82
|
+
mprotect(address, size, PROT_NONE);
|
|
83
|
+
}
|
|
84
|
+
#endif // __CYGWIN__
|
|
85
|
+
|
|
86
|
+
|
|
57
87
|
// ----------------------------------------------------------------------------
|
|
58
88
|
// Math functions
|
|
59
89
|
|
|
@@ -118,7 +148,14 @@ int OS::GetLastError() {
|
|
|
118
148
|
//
|
|
119
149
|
|
|
120
150
|
FILE* OS::FOpen(const char* path, const char* mode) {
|
|
121
|
-
|
|
151
|
+
FILE* file = fopen(path, mode);
|
|
152
|
+
if (file == NULL) return NULL;
|
|
153
|
+
struct stat file_stat;
|
|
154
|
+
if (fstat(fileno(file), &file_stat) != 0) return NULL;
|
|
155
|
+
bool is_regular_file = ((file_stat.st_mode & S_IFREG) != 0);
|
|
156
|
+
if (is_regular_file) return file;
|
|
157
|
+
fclose(file);
|
|
158
|
+
return NULL;
|
|
122
159
|
}
|
|
123
160
|
|
|
124
161
|
|
|
@@ -127,6 +164,11 @@ bool OS::Remove(const char* path) {
|
|
|
127
164
|
}
|
|
128
165
|
|
|
129
166
|
|
|
167
|
+
FILE* OS::OpenTemporaryFile() {
|
|
168
|
+
return tmpfile();
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
|
|
130
172
|
const char* const OS::LogFileOpenMode = "w";
|
|
131
173
|
|
|
132
174
|
|
|
@@ -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:
|
|
@@ -88,6 +88,7 @@ double ceiling(double x) {
|
|
|
88
88
|
}
|
|
89
89
|
|
|
90
90
|
|
|
91
|
+
static Mutex* limit_mutex = NULL;
|
|
91
92
|
void OS::Setup() {
|
|
92
93
|
// Seed the random number generator.
|
|
93
94
|
// Convert the current time to a 64-bit integer first, before converting it
|
|
@@ -96,6 +97,7 @@ void OS::Setup() {
|
|
|
96
97
|
// call this setup code within the same millisecond.
|
|
97
98
|
uint64_t seed = static_cast<uint64_t>(TimeCurrentMillis());
|
|
98
99
|
srandom(static_cast<unsigned int>(seed));
|
|
100
|
+
limit_mutex = CreateMutex();
|
|
99
101
|
}
|
|
100
102
|
|
|
101
103
|
|
|
@@ -105,7 +107,8 @@ uint64_t OS::CpuFeaturesImpliedByPlatform() {
|
|
|
105
107
|
|
|
106
108
|
|
|
107
109
|
int OS::ActivationFrameAlignment() {
|
|
108
|
-
|
|
110
|
+
// GCC generates code that requires 16 byte alignment such as movdqa.
|
|
111
|
+
return Max(STACK_ALIGN, 16);
|
|
109
112
|
}
|
|
110
113
|
|
|
111
114
|
|
|
@@ -144,6 +147,9 @@ static void* highest_ever_allocated = reinterpret_cast<void*>(0);
|
|
|
144
147
|
|
|
145
148
|
|
|
146
149
|
static void UpdateAllocatedSpaceLimits(void* address, int size) {
|
|
150
|
+
ASSERT(limit_mutex != NULL);
|
|
151
|
+
ScopedLock lock(limit_mutex);
|
|
152
|
+
|
|
147
153
|
lowest_ever_allocated = Min(lowest_ever_allocated, address);
|
|
148
154
|
highest_ever_allocated =
|
|
149
155
|
Max(highest_ever_allocated,
|
|
@@ -186,23 +192,6 @@ void OS::Free(void* address, const size_t size) {
|
|
|
186
192
|
}
|
|
187
193
|
|
|
188
194
|
|
|
189
|
-
#ifdef ENABLE_HEAP_PROTECTION
|
|
190
|
-
|
|
191
|
-
void OS::Protect(void* address, size_t size) {
|
|
192
|
-
// TODO(1240712): mprotect has a return value which is ignored here.
|
|
193
|
-
mprotect(address, size, PROT_READ);
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
void OS::Unprotect(void* address, size_t size, bool is_executable) {
|
|
198
|
-
// TODO(1240712): mprotect has a return value which is ignored here.
|
|
199
|
-
int prot = PROT_READ | PROT_WRITE | (is_executable ? PROT_EXEC : 0);
|
|
200
|
-
mprotect(address, size, prot);
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
#endif
|
|
204
|
-
|
|
205
|
-
|
|
206
195
|
void OS::Sleep(int milliseconds) {
|
|
207
196
|
useconds_t ms = static_cast<useconds_t>(milliseconds);
|
|
208
197
|
usleep(1000 * ms);
|
|
@@ -380,17 +369,15 @@ class Thread::PlatformData : public Malloced {
|
|
|
380
369
|
pthread_t thread_; // Thread handle for pthread.
|
|
381
370
|
};
|
|
382
371
|
|
|
383
|
-
Thread::Thread(
|
|
372
|
+
Thread::Thread(const Options& options)
|
|
384
373
|
: data_(new PlatformData()),
|
|
385
|
-
isolate_(isolate),
|
|
386
374
|
stack_size_(options.stack_size) {
|
|
387
375
|
set_name(options.name);
|
|
388
376
|
}
|
|
389
377
|
|
|
390
378
|
|
|
391
|
-
Thread::Thread(
|
|
379
|
+
Thread::Thread(const char* name)
|
|
392
380
|
: data_(new PlatformData()),
|
|
393
|
-
isolate_(isolate),
|
|
394
381
|
stack_size_(0) {
|
|
395
382
|
set_name(name);
|
|
396
383
|
}
|
|
@@ -408,7 +395,6 @@ static void* ThreadEntry(void* arg) {
|
|
|
408
395
|
// one) so we initialize it here too.
|
|
409
396
|
thread->data()->thread_ = pthread_self();
|
|
410
397
|
ASSERT(thread->data()->thread_ != kNoThread);
|
|
411
|
-
Thread::SetThreadLocal(Isolate::isolate_key(), thread->isolate());
|
|
412
398
|
thread->Run();
|
|
413
399
|
return NULL;
|
|
414
400
|
}
|
|
@@ -586,80 +572,171 @@ Semaphore* OS::CreateSemaphore(int count) {
|
|
|
586
572
|
}
|
|
587
573
|
|
|
588
574
|
|
|
589
|
-
#ifdef ENABLE_LOGGING_AND_PROFILING
|
|
590
|
-
|
|
591
|
-
static Sampler* active_sampler_ = NULL;
|
|
592
|
-
static pthread_t vm_tid_ = 0;
|
|
593
|
-
|
|
594
|
-
|
|
595
575
|
static pthread_t GetThreadID() {
|
|
596
576
|
return pthread_self();
|
|
597
577
|
}
|
|
598
578
|
|
|
599
|
-
|
|
600
579
|
static void ProfilerSignalHandler(int signal, siginfo_t* info, void* context) {
|
|
601
580
|
USE(info);
|
|
602
581
|
if (signal != SIGPROF) return;
|
|
603
|
-
|
|
604
|
-
if (
|
|
582
|
+
Isolate* isolate = Isolate::UncheckedCurrent();
|
|
583
|
+
if (isolate == NULL || !isolate->IsInitialized() || !isolate->IsInUse()) {
|
|
584
|
+
// We require a fully initialized and entered isolate.
|
|
585
|
+
return;
|
|
586
|
+
}
|
|
587
|
+
if (v8::Locker::IsActive() &&
|
|
588
|
+
!isolate->thread_manager()->IsLockedByCurrentThread()) {
|
|
589
|
+
return;
|
|
590
|
+
}
|
|
591
|
+
|
|
592
|
+
Sampler* sampler = isolate->logger()->sampler();
|
|
593
|
+
if (sampler == NULL || !sampler->IsActive()) return;
|
|
605
594
|
|
|
606
595
|
TickSample sample_obj;
|
|
607
|
-
TickSample* sample = CpuProfiler::TickSampleEvent();
|
|
596
|
+
TickSample* sample = CpuProfiler::TickSampleEvent(isolate);
|
|
608
597
|
if (sample == NULL) sample = &sample_obj;
|
|
609
598
|
|
|
610
599
|
// Extracting the sample from the context is extremely machine dependent.
|
|
611
600
|
ucontext_t* ucontext = reinterpret_cast<ucontext_t*>(context);
|
|
612
601
|
mcontext_t& mcontext = ucontext->uc_mcontext;
|
|
613
|
-
sample->state =
|
|
602
|
+
sample->state = isolate->current_vm_state();
|
|
614
603
|
|
|
615
604
|
sample->pc = reinterpret_cast<Address>(mcontext.gregs[REG_PC]);
|
|
616
605
|
sample->sp = reinterpret_cast<Address>(mcontext.gregs[REG_SP]);
|
|
617
606
|
sample->fp = reinterpret_cast<Address>(mcontext.gregs[REG_FP]);
|
|
618
607
|
|
|
619
|
-
|
|
620
|
-
|
|
608
|
+
sampler->SampleStack(sample);
|
|
609
|
+
sampler->Tick(sample);
|
|
621
610
|
}
|
|
622
611
|
|
|
623
|
-
|
|
624
612
|
class Sampler::PlatformData : public Malloced {
|
|
613
|
+
public:
|
|
614
|
+
PlatformData() : vm_tid_(GetThreadID()) {}
|
|
615
|
+
|
|
616
|
+
pthread_t vm_tid() const { return vm_tid_; }
|
|
617
|
+
|
|
618
|
+
private:
|
|
619
|
+
pthread_t vm_tid_;
|
|
620
|
+
};
|
|
621
|
+
|
|
622
|
+
|
|
623
|
+
class SignalSender : public Thread {
|
|
625
624
|
public:
|
|
626
625
|
enum SleepInterval {
|
|
627
|
-
|
|
628
|
-
|
|
626
|
+
HALF_INTERVAL,
|
|
627
|
+
FULL_INTERVAL
|
|
629
628
|
};
|
|
630
629
|
|
|
631
|
-
explicit
|
|
632
|
-
:
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
630
|
+
explicit SignalSender(int interval)
|
|
631
|
+
: Thread("SignalSender"),
|
|
632
|
+
interval_(interval) {}
|
|
633
|
+
|
|
634
|
+
static void InstallSignalHandler() {
|
|
635
|
+
struct sigaction sa;
|
|
636
|
+
sa.sa_sigaction = ProfilerSignalHandler;
|
|
637
|
+
sigemptyset(&sa.sa_mask);
|
|
638
|
+
sa.sa_flags = SA_RESTART | SA_SIGINFO;
|
|
639
|
+
signal_handler_installed_ =
|
|
640
|
+
(sigaction(SIGPROF, &sa, &old_signal_handler_) == 0);
|
|
641
|
+
}
|
|
642
|
+
|
|
643
|
+
static void RestoreSignalHandler() {
|
|
644
|
+
if (signal_handler_installed_) {
|
|
645
|
+
sigaction(SIGPROF, &old_signal_handler_, 0);
|
|
646
|
+
signal_handler_installed_ = false;
|
|
647
|
+
}
|
|
648
|
+
}
|
|
649
|
+
|
|
650
|
+
static void AddActiveSampler(Sampler* sampler) {
|
|
651
|
+
ScopedLock lock(mutex_);
|
|
652
|
+
SamplerRegistry::AddActiveSampler(sampler);
|
|
653
|
+
if (instance_ == NULL) {
|
|
654
|
+
// Start a thread that will send SIGPROF signal to VM threads,
|
|
655
|
+
// when CPU profiling will be enabled.
|
|
656
|
+
instance_ = new SignalSender(sampler->interval());
|
|
657
|
+
instance_->Start();
|
|
658
|
+
} else {
|
|
659
|
+
ASSERT(instance_->interval_ == sampler->interval());
|
|
660
|
+
}
|
|
661
|
+
}
|
|
662
|
+
|
|
663
|
+
static void RemoveActiveSampler(Sampler* sampler) {
|
|
664
|
+
ScopedLock lock(mutex_);
|
|
665
|
+
SamplerRegistry::RemoveActiveSampler(sampler);
|
|
666
|
+
if (SamplerRegistry::GetState() == SamplerRegistry::HAS_NO_SAMPLERS) {
|
|
667
|
+
RuntimeProfiler::StopRuntimeProfilerThreadBeforeShutdown(instance_);
|
|
668
|
+
delete instance_;
|
|
669
|
+
instance_ = NULL;
|
|
670
|
+
RestoreSignalHandler();
|
|
671
|
+
}
|
|
636
672
|
}
|
|
637
673
|
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
674
|
+
// Implement Thread::Run().
|
|
675
|
+
virtual void Run() {
|
|
676
|
+
SamplerRegistry::State state;
|
|
677
|
+
while ((state = SamplerRegistry::GetState()) !=
|
|
678
|
+
SamplerRegistry::HAS_NO_SAMPLERS) {
|
|
679
|
+
bool cpu_profiling_enabled =
|
|
680
|
+
(state == SamplerRegistry::HAS_CPU_PROFILING_SAMPLERS);
|
|
681
|
+
bool runtime_profiler_enabled = RuntimeProfiler::IsEnabled();
|
|
682
|
+
if (cpu_profiling_enabled && !signal_handler_installed_) {
|
|
683
|
+
InstallSignalHandler();
|
|
684
|
+
} else if (!cpu_profiling_enabled && signal_handler_installed_) {
|
|
685
|
+
RestoreSignalHandler();
|
|
686
|
+
}
|
|
687
|
+
|
|
688
|
+
// When CPU profiling is enabled both JavaScript and C++ code is
|
|
689
|
+
// profiled. We must not suspend.
|
|
690
|
+
if (!cpu_profiling_enabled) {
|
|
691
|
+
if (rate_limiter_.SuspendIfNecessary()) continue;
|
|
692
|
+
}
|
|
693
|
+
if (cpu_profiling_enabled && runtime_profiler_enabled) {
|
|
694
|
+
if (!SamplerRegistry::IterateActiveSamplers(&DoCpuProfile, this)) {
|
|
695
|
+
return;
|
|
696
|
+
}
|
|
643
697
|
Sleep(HALF_INTERVAL);
|
|
644
|
-
|
|
698
|
+
if (!SamplerRegistry::IterateActiveSamplers(&DoRuntimeProfile, NULL)) {
|
|
699
|
+
return;
|
|
700
|
+
}
|
|
645
701
|
Sleep(HALF_INTERVAL);
|
|
646
702
|
} else {
|
|
647
|
-
if (
|
|
648
|
-
|
|
703
|
+
if (cpu_profiling_enabled) {
|
|
704
|
+
if (!SamplerRegistry::IterateActiveSamplers(&DoCpuProfile,
|
|
705
|
+
this)) {
|
|
706
|
+
return;
|
|
707
|
+
}
|
|
708
|
+
}
|
|
709
|
+
if (runtime_profiler_enabled) {
|
|
710
|
+
if (!SamplerRegistry::IterateActiveSamplers(&DoRuntimeProfile,
|
|
711
|
+
NULL)) {
|
|
712
|
+
return;
|
|
713
|
+
}
|
|
714
|
+
}
|
|
649
715
|
Sleep(FULL_INTERVAL);
|
|
650
716
|
}
|
|
651
717
|
}
|
|
652
718
|
}
|
|
653
719
|
|
|
654
|
-
void
|
|
720
|
+
static void DoCpuProfile(Sampler* sampler, void* raw_sender) {
|
|
721
|
+
if (!sampler->IsProfiling()) return;
|
|
722
|
+
SignalSender* sender = reinterpret_cast<SignalSender*>(raw_sender);
|
|
723
|
+
sender->SendProfilingSignal(sampler->platform_data()->vm_tid());
|
|
724
|
+
}
|
|
725
|
+
|
|
726
|
+
static void DoRuntimeProfile(Sampler* sampler, void* ignored) {
|
|
727
|
+
if (!sampler->isolate()->IsInitialized()) return;
|
|
728
|
+
sampler->isolate()->runtime_profiler()->NotifyTick();
|
|
729
|
+
}
|
|
730
|
+
|
|
731
|
+
void SendProfilingSignal(pthread_t tid) {
|
|
655
732
|
if (!signal_handler_installed_) return;
|
|
656
|
-
pthread_kill(
|
|
733
|
+
pthread_kill(tid, SIGPROF);
|
|
657
734
|
}
|
|
658
735
|
|
|
659
736
|
void Sleep(SleepInterval full_or_half) {
|
|
660
737
|
// Convert ms to us and subtract 100 us to compensate delays
|
|
661
738
|
// occuring during signal delivery.
|
|
662
|
-
useconds_t interval =
|
|
739
|
+
useconds_t interval = interval_ * 1000 - 100;
|
|
663
740
|
if (full_or_half == HALF_INTERVAL) interval /= 2;
|
|
664
741
|
int result = usleep(interval);
|
|
665
742
|
#ifdef DEBUG
|
|
@@ -674,22 +751,22 @@ class Sampler::PlatformData : public Malloced {
|
|
|
674
751
|
USE(result);
|
|
675
752
|
}
|
|
676
753
|
|
|
677
|
-
|
|
678
|
-
bool signal_handler_installed_;
|
|
679
|
-
struct sigaction old_signal_handler_;
|
|
680
|
-
int vm_tgid_;
|
|
681
|
-
bool signal_sender_launched_;
|
|
682
|
-
pthread_t signal_sender_thread_;
|
|
754
|
+
const int interval_;
|
|
683
755
|
RuntimeProfilerRateLimiter rate_limiter_;
|
|
684
|
-
};
|
|
685
756
|
|
|
757
|
+
// Protects the process wide state below.
|
|
758
|
+
static Mutex* mutex_;
|
|
759
|
+
static SignalSender* instance_;
|
|
760
|
+
static bool signal_handler_installed_;
|
|
761
|
+
static struct sigaction old_signal_handler_;
|
|
686
762
|
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
763
|
+
DISALLOW_COPY_AND_ASSIGN(SignalSender);
|
|
764
|
+
};
|
|
765
|
+
|
|
766
|
+
Mutex* SignalSender::mutex_ = OS::CreateMutex();
|
|
767
|
+
SignalSender* SignalSender::instance_ = NULL;
|
|
768
|
+
struct sigaction SignalSender::old_signal_handler_;
|
|
769
|
+
bool SignalSender::signal_handler_installed_ = false;
|
|
693
770
|
|
|
694
771
|
|
|
695
772
|
Sampler::Sampler(Isolate* isolate, int interval)
|
|
@@ -698,65 +775,27 @@ Sampler::Sampler(Isolate* isolate, int interval)
|
|
|
698
775
|
profiling_(false),
|
|
699
776
|
active_(false),
|
|
700
777
|
samples_taken_(0) {
|
|
701
|
-
data_ = new PlatformData
|
|
778
|
+
data_ = new PlatformData;
|
|
702
779
|
}
|
|
703
780
|
|
|
704
781
|
|
|
705
782
|
Sampler::~Sampler() {
|
|
706
|
-
ASSERT(!
|
|
783
|
+
ASSERT(!IsActive());
|
|
707
784
|
delete data_;
|
|
708
785
|
}
|
|
709
786
|
|
|
710
787
|
|
|
711
788
|
void Sampler::Start() {
|
|
712
|
-
// There can only be one active sampler at the time on POSIX
|
|
713
|
-
// platforms.
|
|
714
789
|
ASSERT(!IsActive());
|
|
715
|
-
vm_tid_ = GetThreadID();
|
|
716
|
-
|
|
717
|
-
// Request profiling signals.
|
|
718
|
-
struct sigaction sa;
|
|
719
|
-
sa.sa_sigaction = ProfilerSignalHandler;
|
|
720
|
-
sigemptyset(&sa.sa_mask);
|
|
721
|
-
sa.sa_flags = SA_RESTART | SA_SIGINFO;
|
|
722
|
-
data_->signal_handler_installed_ =
|
|
723
|
-
sigaction(SIGPROF, &sa, &data_->old_signal_handler_) == 0;
|
|
724
|
-
|
|
725
|
-
// Start a thread that sends SIGPROF signal to VM thread.
|
|
726
|
-
// Sending the signal ourselves instead of relying on itimer provides
|
|
727
|
-
// much better accuracy.
|
|
728
790
|
SetActive(true);
|
|
729
|
-
|
|
730
|
-
&data_->signal_sender_thread_, NULL, SenderEntry, data_) == 0) {
|
|
731
|
-
data_->signal_sender_launched_ = true;
|
|
732
|
-
}
|
|
733
|
-
|
|
734
|
-
// Set this sampler as the active sampler.
|
|
735
|
-
active_sampler_ = this;
|
|
791
|
+
SignalSender::AddActiveSampler(this);
|
|
736
792
|
}
|
|
737
793
|
|
|
738
794
|
|
|
739
795
|
void Sampler::Stop() {
|
|
796
|
+
ASSERT(IsActive());
|
|
797
|
+
SignalSender::RemoveActiveSampler(this);
|
|
740
798
|
SetActive(false);
|
|
741
|
-
|
|
742
|
-
// Wait for signal sender termination (it will exit after setting
|
|
743
|
-
// active_ to false).
|
|
744
|
-
if (data_->signal_sender_launched_) {
|
|
745
|
-
Top::WakeUpRuntimeProfilerThreadBeforeShutdown();
|
|
746
|
-
pthread_join(data_->signal_sender_thread_, NULL);
|
|
747
|
-
data_->signal_sender_launched_ = false;
|
|
748
|
-
}
|
|
749
|
-
|
|
750
|
-
// Restore old signal handler
|
|
751
|
-
if (data_->signal_handler_installed_) {
|
|
752
|
-
sigaction(SIGPROF, &data_->old_signal_handler_, 0);
|
|
753
|
-
data_->signal_handler_installed_ = false;
|
|
754
|
-
}
|
|
755
|
-
|
|
756
|
-
// This sampler is no longer the active sampler.
|
|
757
|
-
active_sampler_ = NULL;
|
|
758
799
|
}
|
|
759
800
|
|
|
760
|
-
#endif // ENABLE_LOGGING_AND_PROFILING
|
|
761
|
-
|
|
762
801
|
} } // namespace v8::internal
|