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
|
@@ -77,6 +77,12 @@ class PreParser {
|
|
|
77
77
|
kFunctionScope
|
|
78
78
|
};
|
|
79
79
|
|
|
80
|
+
enum VariableDeclarationContext {
|
|
81
|
+
kSourceElement,
|
|
82
|
+
kStatement,
|
|
83
|
+
kForStatement
|
|
84
|
+
};
|
|
85
|
+
|
|
80
86
|
class Expression;
|
|
81
87
|
|
|
82
88
|
class Identifier {
|
|
@@ -93,15 +99,23 @@ class PreParser {
|
|
|
93
99
|
static Identifier FutureReserved() {
|
|
94
100
|
return Identifier(kFutureReservedIdentifier);
|
|
95
101
|
}
|
|
102
|
+
static Identifier FutureStrictReserved() {
|
|
103
|
+
return Identifier(kFutureStrictReservedIdentifier);
|
|
104
|
+
}
|
|
96
105
|
bool IsEval() { return type_ == kEvalIdentifier; }
|
|
97
106
|
bool IsArguments() { return type_ == kArgumentsIdentifier; }
|
|
98
107
|
bool IsEvalOrArguments() { return type_ >= kEvalIdentifier; }
|
|
99
108
|
bool IsFutureReserved() { return type_ == kFutureReservedIdentifier; }
|
|
109
|
+
bool IsFutureStrictReserved() {
|
|
110
|
+
return type_ == kFutureStrictReservedIdentifier;
|
|
111
|
+
}
|
|
100
112
|
bool IsValidStrictVariable() { return type_ == kUnknownIdentifier; }
|
|
113
|
+
|
|
101
114
|
private:
|
|
102
115
|
enum Type {
|
|
103
116
|
kUnknownIdentifier,
|
|
104
117
|
kFutureReservedIdentifier,
|
|
118
|
+
kFutureStrictReservedIdentifier,
|
|
105
119
|
kEvalIdentifier,
|
|
106
120
|
kArgumentsIdentifier
|
|
107
121
|
};
|
|
@@ -336,7 +350,8 @@ class PreParser {
|
|
|
336
350
|
strict_mode_violation_type_(NULL),
|
|
337
351
|
stack_overflow_(false),
|
|
338
352
|
allow_lazy_(true),
|
|
339
|
-
parenthesized_function_(false)
|
|
353
|
+
parenthesized_function_(false),
|
|
354
|
+
harmony_block_scoping_(scanner->HarmonyBlockScoping()) { }
|
|
340
355
|
|
|
341
356
|
// Preparse the program. Only called in PreParseProgram after creating
|
|
342
357
|
// the instance.
|
|
@@ -369,13 +384,16 @@ class PreParser {
|
|
|
369
384
|
// which is set to false if parsing failed; it is unchanged otherwise.
|
|
370
385
|
// By making the 'exception handling' explicit, we are forced to check
|
|
371
386
|
// for failure at the call sites.
|
|
387
|
+
Statement ParseSourceElement(bool* ok);
|
|
372
388
|
SourceElements ParseSourceElements(int end_token, bool* ok);
|
|
373
389
|
Statement ParseStatement(bool* ok);
|
|
374
390
|
Statement ParseFunctionDeclaration(bool* ok);
|
|
375
|
-
Statement ParseNativeDeclaration(bool* ok);
|
|
376
391
|
Statement ParseBlock(bool* ok);
|
|
377
|
-
Statement ParseVariableStatement(
|
|
378
|
-
|
|
392
|
+
Statement ParseVariableStatement(VariableDeclarationContext var_context,
|
|
393
|
+
bool* ok);
|
|
394
|
+
Statement ParseVariableDeclarations(VariableDeclarationContext var_context,
|
|
395
|
+
int* num_decl,
|
|
396
|
+
bool* ok);
|
|
379
397
|
Statement ParseExpressionOrLabelledStatement(bool* ok);
|
|
380
398
|
Statement ParseIfStatement(bool* ok);
|
|
381
399
|
Statement ParseContinueStatement(bool* ok);
|
|
@@ -411,7 +429,9 @@ class PreParser {
|
|
|
411
429
|
|
|
412
430
|
Identifier ParseIdentifier(bool* ok);
|
|
413
431
|
Identifier ParseIdentifierName(bool* ok);
|
|
414
|
-
Identifier
|
|
432
|
+
Identifier ParseIdentifierNameOrGetOrSet(bool* is_get,
|
|
433
|
+
bool* is_set,
|
|
434
|
+
bool* ok);
|
|
415
435
|
|
|
416
436
|
// Logs the currently parsed literal as a symbol in the preparser data.
|
|
417
437
|
void LogSymbol();
|
|
@@ -487,6 +507,7 @@ class PreParser {
|
|
|
487
507
|
bool stack_overflow_;
|
|
488
508
|
bool allow_lazy_;
|
|
489
509
|
bool parenthesized_function_;
|
|
510
|
+
bool harmony_block_scoping_;
|
|
490
511
|
};
|
|
491
512
|
} } // v8::preparser
|
|
492
513
|
|
|
@@ -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:
|
|
@@ -123,15 +123,16 @@ void PrettyPrinter::VisitReturnStatement(ReturnStatement* node) {
|
|
|
123
123
|
}
|
|
124
124
|
|
|
125
125
|
|
|
126
|
-
void PrettyPrinter::
|
|
127
|
-
Print("
|
|
126
|
+
void PrettyPrinter::VisitWithStatement(WithStatement* node) {
|
|
127
|
+
Print("with (");
|
|
128
128
|
Visit(node->expression());
|
|
129
129
|
Print(") ");
|
|
130
|
+
Visit(node->statement());
|
|
130
131
|
}
|
|
131
132
|
|
|
132
133
|
|
|
133
|
-
void PrettyPrinter::
|
|
134
|
-
Print("<exit
|
|
134
|
+
void PrettyPrinter::VisitExitContextStatement(ExitContextStatement* node) {
|
|
135
|
+
Print("<exit context>");
|
|
135
136
|
}
|
|
136
137
|
|
|
137
138
|
|
|
@@ -201,7 +202,8 @@ void PrettyPrinter::VisitTryCatchStatement(TryCatchStatement* node) {
|
|
|
201
202
|
Print("try ");
|
|
202
203
|
Visit(node->try_block());
|
|
203
204
|
Print(" catch (");
|
|
204
|
-
|
|
205
|
+
const bool quote = false;
|
|
206
|
+
PrintLiteral(node->variable()->name(), quote);
|
|
205
207
|
Print(") ");
|
|
206
208
|
Visit(node->catch_block());
|
|
207
209
|
}
|
|
@@ -282,15 +284,6 @@ void PrettyPrinter::VisitArrayLiteral(ArrayLiteral* node) {
|
|
|
282
284
|
}
|
|
283
285
|
|
|
284
286
|
|
|
285
|
-
void PrettyPrinter::VisitCatchExtensionObject(CatchExtensionObject* node) {
|
|
286
|
-
Print("{ ");
|
|
287
|
-
Visit(node->key());
|
|
288
|
-
Print(": ");
|
|
289
|
-
Visit(node->value());
|
|
290
|
-
Print(" }");
|
|
291
|
-
}
|
|
292
|
-
|
|
293
|
-
|
|
294
287
|
void PrettyPrinter::VisitSlot(Slot* node) {
|
|
295
288
|
switch (node->type()) {
|
|
296
289
|
case Slot::PARAMETER:
|
|
@@ -805,13 +798,15 @@ void AstPrinter::VisitReturnStatement(ReturnStatement* node) {
|
|
|
805
798
|
}
|
|
806
799
|
|
|
807
800
|
|
|
808
|
-
void AstPrinter::
|
|
809
|
-
|
|
801
|
+
void AstPrinter::VisitWithStatement(WithStatement* node) {
|
|
802
|
+
IndentedScope indent(this, "WITH");
|
|
803
|
+
PrintIndentedVisit("OBJECT", node->expression());
|
|
804
|
+
PrintIndentedVisit("BODY", node->statement());
|
|
810
805
|
}
|
|
811
806
|
|
|
812
807
|
|
|
813
|
-
void AstPrinter::
|
|
814
|
-
PrintIndented("
|
|
808
|
+
void AstPrinter::VisitExitContextStatement(ExitContextStatement* node) {
|
|
809
|
+
PrintIndented("EXIT CONTEXT\n");
|
|
815
810
|
}
|
|
816
811
|
|
|
817
812
|
|
|
@@ -862,7 +857,9 @@ void AstPrinter::VisitForInStatement(ForInStatement* node) {
|
|
|
862
857
|
void AstPrinter::VisitTryCatchStatement(TryCatchStatement* node) {
|
|
863
858
|
IndentedScope indent(this, "TRY CATCH");
|
|
864
859
|
PrintIndentedVisit("TRY", node->try_block());
|
|
865
|
-
|
|
860
|
+
PrintLiteralWithModeIndented("CATCHVAR",
|
|
861
|
+
node->variable(),
|
|
862
|
+
node->variable()->name());
|
|
866
863
|
PrintIndentedVisit("CATCH", node->catch_block());
|
|
867
864
|
}
|
|
868
865
|
|
|
@@ -962,13 +959,6 @@ void AstPrinter::VisitArrayLiteral(ArrayLiteral* node) {
|
|
|
962
959
|
}
|
|
963
960
|
|
|
964
961
|
|
|
965
|
-
void AstPrinter::VisitCatchExtensionObject(CatchExtensionObject* node) {
|
|
966
|
-
IndentedScope indent(this, "CatchExtensionObject");
|
|
967
|
-
PrintIndentedVisit("KEY", node->key());
|
|
968
|
-
PrintIndentedVisit("VALUE", node->value());
|
|
969
|
-
}
|
|
970
|
-
|
|
971
|
-
|
|
972
962
|
void AstPrinter::VisitSlot(Slot* node) {
|
|
973
963
|
PrintIndented("SLOT ");
|
|
974
964
|
PrettyPrinter::VisitSlot(node);
|
|
@@ -1205,14 +1195,15 @@ void JsonAstBuilder::VisitReturnStatement(ReturnStatement* stmt) {
|
|
|
1205
1195
|
}
|
|
1206
1196
|
|
|
1207
1197
|
|
|
1208
|
-
void JsonAstBuilder::
|
|
1209
|
-
TagScope tag(this, "
|
|
1198
|
+
void JsonAstBuilder::VisitWithStatement(WithStatement* stmt) {
|
|
1199
|
+
TagScope tag(this, "WithStatement");
|
|
1210
1200
|
Visit(stmt->expression());
|
|
1201
|
+
Visit(stmt->statement());
|
|
1211
1202
|
}
|
|
1212
1203
|
|
|
1213
1204
|
|
|
1214
|
-
void JsonAstBuilder::
|
|
1215
|
-
TagScope tag(this, "
|
|
1205
|
+
void JsonAstBuilder::VisitExitContextStatement(ExitContextStatement* stmt) {
|
|
1206
|
+
TagScope tag(this, "ExitContextStatement");
|
|
1216
1207
|
}
|
|
1217
1208
|
|
|
1218
1209
|
|
|
@@ -1254,8 +1245,10 @@ void JsonAstBuilder::VisitForInStatement(ForInStatement* stmt) {
|
|
|
1254
1245
|
|
|
1255
1246
|
void JsonAstBuilder::VisitTryCatchStatement(TryCatchStatement* stmt) {
|
|
1256
1247
|
TagScope tag(this, "TryCatchStatement");
|
|
1248
|
+
{ AttributesScope attributes(this);
|
|
1249
|
+
AddAttribute("variable", stmt->variable()->name());
|
|
1250
|
+
}
|
|
1257
1251
|
Visit(stmt->try_block());
|
|
1258
|
-
Visit(stmt->catch_var());
|
|
1259
1252
|
Visit(stmt->catch_block());
|
|
1260
1253
|
}
|
|
1261
1254
|
|
|
@@ -1360,13 +1353,6 @@ void JsonAstBuilder::VisitArrayLiteral(ArrayLiteral* expr) {
|
|
|
1360
1353
|
}
|
|
1361
1354
|
|
|
1362
1355
|
|
|
1363
|
-
void JsonAstBuilder::VisitCatchExtensionObject(CatchExtensionObject* expr) {
|
|
1364
|
-
TagScope tag(this, "CatchExtensionObject");
|
|
1365
|
-
Visit(expr->key());
|
|
1366
|
-
Visit(expr->value());
|
|
1367
|
-
}
|
|
1368
|
-
|
|
1369
|
-
|
|
1370
1356
|
void JsonAstBuilder::VisitAssignment(Assignment* expr) {
|
|
1371
1357
|
TagScope tag(this, "Assignment");
|
|
1372
1358
|
{
|
|
@@ -1386,10 +1372,6 @@ void JsonAstBuilder::VisitThrow(Throw* expr) {
|
|
|
1386
1372
|
|
|
1387
1373
|
void JsonAstBuilder::VisitProperty(Property* expr) {
|
|
1388
1374
|
TagScope tag(this, "Property");
|
|
1389
|
-
{
|
|
1390
|
-
AttributesScope attributes(this);
|
|
1391
|
-
AddAttribute("type", expr->is_synthetic() ? "SYNTHETIC" : "NORMAL");
|
|
1392
|
-
}
|
|
1393
1375
|
Visit(expr->obj());
|
|
1394
1376
|
Visit(expr->key());
|
|
1395
1377
|
}
|
|
@@ -28,8 +28,6 @@
|
|
|
28
28
|
#ifndef V8_PROFILE_GENERATOR_INL_H_
|
|
29
29
|
#define V8_PROFILE_GENERATOR_INL_H_
|
|
30
30
|
|
|
31
|
-
#ifdef ENABLE_LOGGING_AND_PROFILING
|
|
32
|
-
|
|
33
31
|
#include "profile-generator.h"
|
|
34
32
|
|
|
35
33
|
namespace v8 {
|
|
@@ -123,6 +121,4 @@ uint64_t HeapEntry::id() {
|
|
|
123
121
|
|
|
124
122
|
} } // namespace v8::internal
|
|
125
123
|
|
|
126
|
-
#endif // ENABLE_LOGGING_AND_PROFILING
|
|
127
|
-
|
|
128
124
|
#endif // V8_PROFILE_GENERATOR_INL_H_
|
|
@@ -25,8 +25,6 @@
|
|
|
25
25
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
26
26
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
27
27
|
|
|
28
|
-
#ifdef ENABLE_LOGGING_AND_PROFILING
|
|
29
|
-
|
|
30
28
|
#include "v8.h"
|
|
31
29
|
|
|
32
30
|
#include "profile-generator-inl.h"
|
|
@@ -1096,7 +1094,7 @@ class RetainedSizeCalculator {
|
|
|
1096
1094
|
: retained_size_(0) {
|
|
1097
1095
|
}
|
|
1098
1096
|
|
|
1099
|
-
int
|
|
1097
|
+
int retained_size() const { return retained_size_; }
|
|
1100
1098
|
|
|
1101
1099
|
void Apply(HeapEntry** entry_ptr) {
|
|
1102
1100
|
if ((*entry_ptr)->painted_reachable()) {
|
|
@@ -1137,7 +1135,7 @@ void HeapEntry::CalculateExactRetainedSize() {
|
|
|
1137
1135
|
|
|
1138
1136
|
RetainedSizeCalculator ret_size_calc;
|
|
1139
1137
|
snapshot()->IterateEntries(&ret_size_calc);
|
|
1140
|
-
retained_size_ = ret_size_calc.
|
|
1138
|
+
retained_size_ = ret_size_calc.retained_size();
|
|
1141
1139
|
ASSERT((retained_size_ & kExactRetainedSizeTag) == 0);
|
|
1142
1140
|
retained_size_ |= kExactRetainedSizeTag;
|
|
1143
1141
|
}
|
|
@@ -1602,6 +1600,28 @@ void HeapObjectsSet::Insert(Object* obj) {
|
|
|
1602
1600
|
}
|
|
1603
1601
|
|
|
1604
1602
|
|
|
1603
|
+
const char* HeapObjectsSet::GetTag(Object* obj) {
|
|
1604
|
+
HeapObject* object = HeapObject::cast(obj);
|
|
1605
|
+
HashMap::Entry* cache_entry =
|
|
1606
|
+
entries_.Lookup(object, HeapEntriesMap::Hash(object), false);
|
|
1607
|
+
if (cache_entry != NULL
|
|
1608
|
+
&& cache_entry->value != HeapEntriesMap::kHeapEntryPlaceholder) {
|
|
1609
|
+
return reinterpret_cast<const char*>(cache_entry->value);
|
|
1610
|
+
} else {
|
|
1611
|
+
return NULL;
|
|
1612
|
+
}
|
|
1613
|
+
}
|
|
1614
|
+
|
|
1615
|
+
|
|
1616
|
+
void HeapObjectsSet::SetTag(Object* obj, const char* tag) {
|
|
1617
|
+
if (!obj->IsHeapObject()) return;
|
|
1618
|
+
HeapObject* object = HeapObject::cast(obj);
|
|
1619
|
+
HashMap::Entry* cache_entry =
|
|
1620
|
+
entries_.Lookup(object, HeapEntriesMap::Hash(object), true);
|
|
1621
|
+
cache_entry->value = const_cast<char*>(tag);
|
|
1622
|
+
}
|
|
1623
|
+
|
|
1624
|
+
|
|
1605
1625
|
HeapObject *const V8HeapExplorer::kInternalRootObject =
|
|
1606
1626
|
reinterpret_cast<HeapObject*>(
|
|
1607
1627
|
static_cast<intptr_t>(HeapObjectsMap::kInternalRootObjectId));
|
|
@@ -1613,7 +1633,8 @@ HeapObject *const V8HeapExplorer::kGcRootsObject =
|
|
|
1613
1633
|
V8HeapExplorer::V8HeapExplorer(
|
|
1614
1634
|
HeapSnapshot* snapshot,
|
|
1615
1635
|
SnapshottingProgressReportingInterface* progress)
|
|
1616
|
-
:
|
|
1636
|
+
: heap_(Isolate::Current()->heap()),
|
|
1637
|
+
snapshot_(snapshot),
|
|
1617
1638
|
collection_(snapshot_->collection()),
|
|
1618
1639
|
progress_(progress),
|
|
1619
1640
|
filler_(NULL) {
|
|
@@ -1639,6 +1660,18 @@ HeapEntry* V8HeapExplorer::AddEntry(HeapObject* object,
|
|
|
1639
1660
|
return snapshot_->AddRootEntry(children_count);
|
|
1640
1661
|
} else if (object == kGcRootsObject) {
|
|
1641
1662
|
return snapshot_->AddGcRootsEntry(children_count, retainers_count);
|
|
1663
|
+
} else if (object->IsJSGlobalObject()) {
|
|
1664
|
+
const char* tag = objects_tags_.GetTag(object);
|
|
1665
|
+
const char* name = collection_->names()->GetName(
|
|
1666
|
+
GetConstructorName(JSObject::cast(object)));
|
|
1667
|
+
if (tag != NULL) {
|
|
1668
|
+
name = collection_->names()->GetFormatted("%s / %s", name, tag);
|
|
1669
|
+
}
|
|
1670
|
+
return AddEntry(object,
|
|
1671
|
+
HeapEntry::kObject,
|
|
1672
|
+
name,
|
|
1673
|
+
children_count,
|
|
1674
|
+
retainers_count);
|
|
1642
1675
|
} else if (object->IsJSFunction()) {
|
|
1643
1676
|
JSFunction* func = JSFunction::cast(object);
|
|
1644
1677
|
SharedFunctionInfo* shared = func->shared();
|
|
@@ -1658,8 +1691,7 @@ HeapEntry* V8HeapExplorer::AddEntry(HeapObject* object,
|
|
|
1658
1691
|
return AddEntry(object,
|
|
1659
1692
|
HeapEntry::kObject,
|
|
1660
1693
|
collection_->names()->GetName(
|
|
1661
|
-
|
|
1662
|
-
JSObject::cast(object))),
|
|
1694
|
+
GetConstructorName(JSObject::cast(object))),
|
|
1663
1695
|
children_count,
|
|
1664
1696
|
retainers_count);
|
|
1665
1697
|
} else if (object->IsString()) {
|
|
@@ -1691,10 +1723,14 @@ HeapEntry* V8HeapExplorer::AddEntry(HeapObject* object,
|
|
|
1691
1723
|
: "",
|
|
1692
1724
|
children_count,
|
|
1693
1725
|
retainers_count);
|
|
1694
|
-
} else if (object->IsFixedArray() ||
|
|
1726
|
+
} else if (object->IsFixedArray() ||
|
|
1727
|
+
object->IsFixedDoubleArray() ||
|
|
1728
|
+
object->IsByteArray() ||
|
|
1729
|
+
object->IsExternalArray()) {
|
|
1730
|
+
const char* tag = objects_tags_.GetTag(object);
|
|
1695
1731
|
return AddEntry(object,
|
|
1696
1732
|
HeapEntry::kArray,
|
|
1697
|
-
"",
|
|
1733
|
+
tag != NULL ? tag : "",
|
|
1698
1734
|
children_count,
|
|
1699
1735
|
retainers_count);
|
|
1700
1736
|
} else if (object->IsHeapNumber()) {
|
|
@@ -1780,6 +1816,7 @@ class IndexedReferencesExtractor : public ObjectVisitor {
|
|
|
1780
1816
|
ASSERT(Memory::Object_at(field)->IsHeapObject());
|
|
1781
1817
|
*field |= kFailureTag;
|
|
1782
1818
|
}
|
|
1819
|
+
|
|
1783
1820
|
private:
|
|
1784
1821
|
bool CheckVisitedAndUnmark(Object** field) {
|
|
1785
1822
|
if ((*field)->IsFailure()) {
|
|
@@ -1801,15 +1838,13 @@ void V8HeapExplorer::ExtractReferences(HeapObject* obj) {
|
|
|
1801
1838
|
HeapEntry* entry = GetEntry(obj);
|
|
1802
1839
|
if (entry == NULL) return; // No interest in this object.
|
|
1803
1840
|
|
|
1841
|
+
bool extract_indexed_refs = true;
|
|
1804
1842
|
if (obj->IsJSGlobalProxy()) {
|
|
1805
1843
|
// We need to reference JS global objects from snapshot's root.
|
|
1806
1844
|
// We use JSGlobalProxy because this is what embedder (e.g. browser)
|
|
1807
1845
|
// uses for the global object.
|
|
1808
1846
|
JSGlobalProxy* proxy = JSGlobalProxy::cast(obj);
|
|
1809
1847
|
SetRootShortcutReference(proxy->map()->prototype());
|
|
1810
|
-
SetInternalReference(obj, entry, "map", obj->map(), HeapObject::kMapOffset);
|
|
1811
|
-
IndexedReferencesExtractor refs_extractor(this, obj, entry);
|
|
1812
|
-
obj->Iterate(&refs_extractor);
|
|
1813
1848
|
} else if (obj->IsJSObject()) {
|
|
1814
1849
|
JSObject* js_obj = JSObject::cast(obj);
|
|
1815
1850
|
ExtractClosureReferences(js_obj, entry);
|
|
@@ -1817,7 +1852,7 @@ void V8HeapExplorer::ExtractReferences(HeapObject* obj) {
|
|
|
1817
1852
|
ExtractElementReferences(js_obj, entry);
|
|
1818
1853
|
ExtractInternalReferences(js_obj, entry);
|
|
1819
1854
|
SetPropertyReference(
|
|
1820
|
-
obj, entry,
|
|
1855
|
+
obj, entry, heap_->Proto_symbol(), js_obj->GetPrototype());
|
|
1821
1856
|
if (obj->IsJSFunction()) {
|
|
1822
1857
|
JSFunction* js_fun = JSFunction::cast(js_obj);
|
|
1823
1858
|
Object* proto_or_map = js_fun->prototype_or_initial_map();
|
|
@@ -1825,39 +1860,49 @@ void V8HeapExplorer::ExtractReferences(HeapObject* obj) {
|
|
|
1825
1860
|
if (!proto_or_map->IsMap()) {
|
|
1826
1861
|
SetPropertyReference(
|
|
1827
1862
|
obj, entry,
|
|
1828
|
-
|
|
1863
|
+
heap_->prototype_symbol(), proto_or_map,
|
|
1829
1864
|
JSFunction::kPrototypeOrInitialMapOffset);
|
|
1830
1865
|
} else {
|
|
1831
1866
|
SetPropertyReference(
|
|
1832
1867
|
obj, entry,
|
|
1833
|
-
|
|
1868
|
+
heap_->prototype_symbol(), js_fun->prototype());
|
|
1834
1869
|
}
|
|
1835
1870
|
}
|
|
1836
1871
|
SetInternalReference(js_fun, entry,
|
|
1837
1872
|
"shared", js_fun->shared(),
|
|
1838
1873
|
JSFunction::kSharedFunctionInfoOffset);
|
|
1874
|
+
TagObject(js_fun->unchecked_context(), "(context)");
|
|
1839
1875
|
SetInternalReference(js_fun, entry,
|
|
1840
1876
|
"context", js_fun->unchecked_context(),
|
|
1841
1877
|
JSFunction::kContextOffset);
|
|
1878
|
+
TagObject(js_fun->literals(), "(function literals)");
|
|
1842
1879
|
SetInternalReference(js_fun, entry,
|
|
1843
1880
|
"literals", js_fun->literals(),
|
|
1844
1881
|
JSFunction::kLiteralsOffset);
|
|
1845
1882
|
}
|
|
1883
|
+
TagObject(js_obj->properties(), "(object properties)");
|
|
1846
1884
|
SetInternalReference(obj, entry,
|
|
1847
1885
|
"properties", js_obj->properties(),
|
|
1848
1886
|
JSObject::kPropertiesOffset);
|
|
1887
|
+
TagObject(js_obj->elements(), "(object elements)");
|
|
1849
1888
|
SetInternalReference(obj, entry,
|
|
1850
1889
|
"elements", js_obj->elements(),
|
|
1851
1890
|
JSObject::kElementsOffset);
|
|
1852
|
-
SetInternalReference(obj, entry, "map", obj->map(), HeapObject::kMapOffset);
|
|
1853
|
-
IndexedReferencesExtractor refs_extractor(this, obj, entry);
|
|
1854
|
-
obj->Iterate(&refs_extractor);
|
|
1855
1891
|
} else if (obj->IsString()) {
|
|
1856
1892
|
if (obj->IsConsString()) {
|
|
1857
1893
|
ConsString* cs = ConsString::cast(obj);
|
|
1858
1894
|
SetInternalReference(obj, entry, 1, cs->first());
|
|
1859
1895
|
SetInternalReference(obj, entry, 2, cs->second());
|
|
1860
1896
|
}
|
|
1897
|
+
extract_indexed_refs = false;
|
|
1898
|
+
} else if (obj->IsGlobalContext()) {
|
|
1899
|
+
Context* context = Context::cast(obj);
|
|
1900
|
+
TagObject(context->jsfunction_result_caches(),
|
|
1901
|
+
"(context func. result caches)");
|
|
1902
|
+
TagObject(context->normalized_map_cache(), "(context norm. map cache)");
|
|
1903
|
+
TagObject(context->runtime_context(), "(runtime context)");
|
|
1904
|
+
TagObject(context->map_cache(), "(context map cache)");
|
|
1905
|
+
TagObject(context->data(), "(context data)");
|
|
1861
1906
|
} else if (obj->IsMap()) {
|
|
1862
1907
|
Map* map = Map::cast(obj);
|
|
1863
1908
|
SetInternalReference(obj, entry,
|
|
@@ -1866,6 +1911,7 @@ void V8HeapExplorer::ExtractReferences(HeapObject* obj) {
|
|
|
1866
1911
|
"constructor", map->constructor(),
|
|
1867
1912
|
Map::kConstructorOffset);
|
|
1868
1913
|
if (!map->instance_descriptors()->IsEmpty()) {
|
|
1914
|
+
TagObject(map->instance_descriptors(), "(map descriptors)");
|
|
1869
1915
|
SetInternalReference(obj, entry,
|
|
1870
1916
|
"descriptors", map->instance_descriptors(),
|
|
1871
1917
|
Map::kInstanceDescriptorsOrBitField3Offset);
|
|
@@ -1873,9 +1919,6 @@ void V8HeapExplorer::ExtractReferences(HeapObject* obj) {
|
|
|
1873
1919
|
SetInternalReference(obj, entry,
|
|
1874
1920
|
"code_cache", map->code_cache(),
|
|
1875
1921
|
Map::kCodeCacheOffset);
|
|
1876
|
-
SetInternalReference(obj, entry, "map", obj->map(), HeapObject::kMapOffset);
|
|
1877
|
-
IndexedReferencesExtractor refs_extractor(this, obj, entry);
|
|
1878
|
-
obj->Iterate(&refs_extractor);
|
|
1879
1922
|
} else if (obj->IsSharedFunctionInfo()) {
|
|
1880
1923
|
SharedFunctionInfo* shared = SharedFunctionInfo::cast(obj);
|
|
1881
1924
|
SetInternalReference(obj, entry,
|
|
@@ -1884,16 +1927,61 @@ void V8HeapExplorer::ExtractReferences(HeapObject* obj) {
|
|
|
1884
1927
|
SetInternalReference(obj, entry,
|
|
1885
1928
|
"code", shared->unchecked_code(),
|
|
1886
1929
|
SharedFunctionInfo::kCodeOffset);
|
|
1930
|
+
TagObject(shared->scope_info(), "(function scope info)");
|
|
1931
|
+
SetInternalReference(obj, entry,
|
|
1932
|
+
"scope_info", shared->scope_info(),
|
|
1933
|
+
SharedFunctionInfo::kScopeInfoOffset);
|
|
1887
1934
|
SetInternalReference(obj, entry,
|
|
1888
1935
|
"instance_class_name", shared->instance_class_name(),
|
|
1889
1936
|
SharedFunctionInfo::kInstanceClassNameOffset);
|
|
1890
1937
|
SetInternalReference(obj, entry,
|
|
1891
1938
|
"script", shared->script(),
|
|
1892
1939
|
SharedFunctionInfo::kScriptOffset);
|
|
1893
|
-
|
|
1894
|
-
|
|
1895
|
-
obj
|
|
1896
|
-
|
|
1940
|
+
} else if (obj->IsScript()) {
|
|
1941
|
+
Script* script = Script::cast(obj);
|
|
1942
|
+
SetInternalReference(obj, entry,
|
|
1943
|
+
"source", script->source(),
|
|
1944
|
+
Script::kSourceOffset);
|
|
1945
|
+
SetInternalReference(obj, entry,
|
|
1946
|
+
"name", script->name(),
|
|
1947
|
+
Script::kNameOffset);
|
|
1948
|
+
SetInternalReference(obj, entry,
|
|
1949
|
+
"data", script->data(),
|
|
1950
|
+
Script::kDataOffset);
|
|
1951
|
+
SetInternalReference(obj, entry,
|
|
1952
|
+
"context_data", script->context_data(),
|
|
1953
|
+
Script::kContextOffset);
|
|
1954
|
+
TagObject(script->line_ends(), "(script line ends)");
|
|
1955
|
+
SetInternalReference(obj, entry,
|
|
1956
|
+
"line_ends", script->line_ends(),
|
|
1957
|
+
Script::kLineEndsOffset);
|
|
1958
|
+
} else if (obj->IsDescriptorArray()) {
|
|
1959
|
+
DescriptorArray* desc_array = DescriptorArray::cast(obj);
|
|
1960
|
+
if (desc_array->length() > DescriptorArray::kContentArrayIndex) {
|
|
1961
|
+
Object* content_array =
|
|
1962
|
+
desc_array->get(DescriptorArray::kContentArrayIndex);
|
|
1963
|
+
TagObject(content_array, "(map descriptor content)");
|
|
1964
|
+
SetInternalReference(obj, entry,
|
|
1965
|
+
"content", content_array,
|
|
1966
|
+
FixedArray::OffsetOfElementAt(
|
|
1967
|
+
DescriptorArray::kContentArrayIndex));
|
|
1968
|
+
}
|
|
1969
|
+
} else if (obj->IsCodeCache()) {
|
|
1970
|
+
CodeCache* code_cache = CodeCache::cast(obj);
|
|
1971
|
+
TagObject(code_cache->default_cache(), "(default code cache)");
|
|
1972
|
+
SetInternalReference(obj, entry,
|
|
1973
|
+
"default_cache", code_cache->default_cache(),
|
|
1974
|
+
CodeCache::kDefaultCacheOffset);
|
|
1975
|
+
TagObject(code_cache->normal_type_cache(), "(code type cache)");
|
|
1976
|
+
SetInternalReference(obj, entry,
|
|
1977
|
+
"type_cache", code_cache->normal_type_cache(),
|
|
1978
|
+
CodeCache::kNormalTypeCacheOffset);
|
|
1979
|
+
} else if (obj->IsCode()) {
|
|
1980
|
+
Code* code = Code::cast(obj);
|
|
1981
|
+
TagObject(code->unchecked_relocation_info(), "(code relocation info)");
|
|
1982
|
+
TagObject(code->unchecked_deoptimization_data(), "(code deopt data)");
|
|
1983
|
+
}
|
|
1984
|
+
if (extract_indexed_refs) {
|
|
1897
1985
|
SetInternalReference(obj, entry, "map", obj->map(), HeapObject::kMapOffset);
|
|
1898
1986
|
IndexedReferencesExtractor refs_extractor(this, obj, entry);
|
|
1899
1987
|
obj->Iterate(&refs_extractor);
|
|
@@ -2012,6 +2100,31 @@ void V8HeapExplorer::ExtractInternalReferences(JSObject* js_obj,
|
|
|
2012
2100
|
}
|
|
2013
2101
|
|
|
2014
2102
|
|
|
2103
|
+
String* V8HeapExplorer::GetConstructorName(JSObject* object) {
|
|
2104
|
+
if (object->IsJSFunction()) return HEAP->closure_symbol();
|
|
2105
|
+
String* constructor_name = object->constructor_name();
|
|
2106
|
+
if (constructor_name == HEAP->Object_symbol()) {
|
|
2107
|
+
// Look up an immediate "constructor" property, if it is a function,
|
|
2108
|
+
// return its name. This is for instances of binding objects, which
|
|
2109
|
+
// have prototype constructor type "Object".
|
|
2110
|
+
Object* constructor_prop = NULL;
|
|
2111
|
+
LookupResult result;
|
|
2112
|
+
object->LocalLookupRealNamedProperty(HEAP->constructor_symbol(), &result);
|
|
2113
|
+
if (result.IsProperty()) {
|
|
2114
|
+
constructor_prop = result.GetLazyValue();
|
|
2115
|
+
}
|
|
2116
|
+
if (constructor_prop->IsJSFunction()) {
|
|
2117
|
+
Object* maybe_name = JSFunction::cast(constructor_prop)->shared()->name();
|
|
2118
|
+
if (maybe_name->IsString()) {
|
|
2119
|
+
String* name = String::cast(maybe_name);
|
|
2120
|
+
if (name->length() > 0) return name;
|
|
2121
|
+
}
|
|
2122
|
+
}
|
|
2123
|
+
}
|
|
2124
|
+
return object->constructor_name();
|
|
2125
|
+
}
|
|
2126
|
+
|
|
2127
|
+
|
|
2015
2128
|
HeapEntry* V8HeapExplorer::GetEntry(Object* obj) {
|
|
2016
2129
|
if (!obj->IsHeapObject()) return NULL;
|
|
2017
2130
|
return filler_->FindOrAddEntry(obj, this);
|
|
@@ -2051,7 +2164,7 @@ bool V8HeapExplorer::IterateAndExtractReferences(
|
|
|
2051
2164
|
}
|
|
2052
2165
|
SetRootGcRootsReference();
|
|
2053
2166
|
RootsReferencesExtractor extractor(this);
|
|
2054
|
-
|
|
2167
|
+
heap_->IterateRoots(&extractor, VISIT_ALL);
|
|
2055
2168
|
filler_ = NULL;
|
|
2056
2169
|
return progress_->ProgressReport(false);
|
|
2057
2170
|
}
|
|
@@ -2206,6 +2319,76 @@ void V8HeapExplorer::SetGcRootsReference(Object* child_obj) {
|
|
|
2206
2319
|
}
|
|
2207
2320
|
|
|
2208
2321
|
|
|
2322
|
+
void V8HeapExplorer::TagObject(Object* obj, const char* tag) {
|
|
2323
|
+
if (obj->IsHeapObject() &&
|
|
2324
|
+
!obj->IsOddball() &&
|
|
2325
|
+
obj != heap_->raw_unchecked_empty_byte_array() &&
|
|
2326
|
+
obj != heap_->raw_unchecked_empty_fixed_array() &&
|
|
2327
|
+
obj != heap_->raw_unchecked_empty_fixed_double_array() &&
|
|
2328
|
+
obj != heap_->raw_unchecked_empty_descriptor_array()) {
|
|
2329
|
+
objects_tags_.SetTag(obj, tag);
|
|
2330
|
+
}
|
|
2331
|
+
}
|
|
2332
|
+
|
|
2333
|
+
|
|
2334
|
+
class GlobalObjectsEnumerator : public ObjectVisitor {
|
|
2335
|
+
public:
|
|
2336
|
+
virtual void VisitPointers(Object** start, Object** end) {
|
|
2337
|
+
for (Object** p = start; p < end; p++) {
|
|
2338
|
+
if ((*p)->IsGlobalContext()) {
|
|
2339
|
+
Context* context = Context::cast(*p);
|
|
2340
|
+
JSObject* proxy = context->global_proxy();
|
|
2341
|
+
if (proxy->IsJSGlobalProxy()) {
|
|
2342
|
+
Object* global = proxy->map()->prototype();
|
|
2343
|
+
if (global->IsJSGlobalObject()) {
|
|
2344
|
+
objects_.Add(Handle<JSGlobalObject>(JSGlobalObject::cast(global)));
|
|
2345
|
+
}
|
|
2346
|
+
}
|
|
2347
|
+
}
|
|
2348
|
+
}
|
|
2349
|
+
}
|
|
2350
|
+
int count() { return objects_.length(); }
|
|
2351
|
+
Handle<JSGlobalObject>& at(int i) { return objects_[i]; }
|
|
2352
|
+
|
|
2353
|
+
private:
|
|
2354
|
+
List<Handle<JSGlobalObject> > objects_;
|
|
2355
|
+
};
|
|
2356
|
+
|
|
2357
|
+
|
|
2358
|
+
// Modifies heap. Must not be run during heap traversal.
|
|
2359
|
+
void V8HeapExplorer::TagGlobalObjects() {
|
|
2360
|
+
Isolate* isolate = Isolate::Current();
|
|
2361
|
+
GlobalObjectsEnumerator enumerator;
|
|
2362
|
+
isolate->global_handles()->IterateAllRoots(&enumerator);
|
|
2363
|
+
Handle<String> document_string =
|
|
2364
|
+
isolate->factory()->NewStringFromAscii(CStrVector("document"));
|
|
2365
|
+
Handle<String> url_string =
|
|
2366
|
+
isolate->factory()->NewStringFromAscii(CStrVector("URL"));
|
|
2367
|
+
const char** urls = NewArray<const char*>(enumerator.count());
|
|
2368
|
+
for (int i = 0, l = enumerator.count(); i < l; ++i) {
|
|
2369
|
+
urls[i] = NULL;
|
|
2370
|
+
Handle<JSGlobalObject> global_obj = enumerator.at(i);
|
|
2371
|
+
Object* obj_document;
|
|
2372
|
+
if (global_obj->GetProperty(*document_string)->ToObject(&obj_document) &&
|
|
2373
|
+
obj_document->IsJSObject()) {
|
|
2374
|
+
JSObject* document = JSObject::cast(obj_document);
|
|
2375
|
+
Object* obj_url;
|
|
2376
|
+
if (document->GetProperty(*url_string)->ToObject(&obj_url) &&
|
|
2377
|
+
obj_url->IsString()) {
|
|
2378
|
+
urls[i] = collection_->names()->GetName(String::cast(obj_url));
|
|
2379
|
+
}
|
|
2380
|
+
}
|
|
2381
|
+
}
|
|
2382
|
+
|
|
2383
|
+
AssertNoAllocation no_allocation;
|
|
2384
|
+
for (int i = 0, l = enumerator.count(); i < l; ++i) {
|
|
2385
|
+
objects_tags_.SetTag(*enumerator.at(i), urls[i]);
|
|
2386
|
+
}
|
|
2387
|
+
|
|
2388
|
+
DeleteArray(urls);
|
|
2389
|
+
}
|
|
2390
|
+
|
|
2391
|
+
|
|
2209
2392
|
class GlobalHandlesExtractor : public ObjectVisitor {
|
|
2210
2393
|
public:
|
|
2211
2394
|
explicit GlobalHandlesExtractor(NativeObjectsExplorer* explorer)
|
|
@@ -2448,6 +2631,7 @@ class SnapshotCounter : public SnapshotFillerInterface {
|
|
|
2448
2631
|
HeapEntry*) {
|
|
2449
2632
|
entries_->CountReference(parent_ptr, child_ptr);
|
|
2450
2633
|
}
|
|
2634
|
+
|
|
2451
2635
|
private:
|
|
2452
2636
|
HeapEntriesMap* entries_;
|
|
2453
2637
|
};
|
|
@@ -2519,6 +2703,7 @@ class SnapshotFiller : public SnapshotFillerInterface {
|
|
|
2519
2703
|
child_entry,
|
|
2520
2704
|
retainer_index);
|
|
2521
2705
|
}
|
|
2706
|
+
|
|
2522
2707
|
private:
|
|
2523
2708
|
HeapSnapshot* snapshot_;
|
|
2524
2709
|
HeapSnapshotsCollection* collection_;
|
|
@@ -2527,6 +2712,8 @@ class SnapshotFiller : public SnapshotFillerInterface {
|
|
|
2527
2712
|
|
|
2528
2713
|
|
|
2529
2714
|
bool HeapSnapshotGenerator::GenerateSnapshot() {
|
|
2715
|
+
v8_heap_explorer_.TagGlobalObjects();
|
|
2716
|
+
|
|
2530
2717
|
AssertNoAllocation no_alloc;
|
|
2531
2718
|
|
|
2532
2719
|
SetProgressTotal(4); // 2 passes + dominators + sizes.
|
|
@@ -3087,12 +3274,4 @@ void HeapSnapshotJSONSerializer::SortHashMap(
|
|
|
3087
3274
|
sorted_entries->Sort(SortUsingEntryValue);
|
|
3088
3275
|
}
|
|
3089
3276
|
|
|
3090
|
-
|
|
3091
|
-
String* GetConstructorNameForHeapProfile(JSObject* object) {
|
|
3092
|
-
if (object->IsJSFunction()) return HEAP->closure_symbol();
|
|
3093
|
-
return object->constructor_name();
|
|
3094
|
-
}
|
|
3095
|
-
|
|
3096
3277
|
} } // namespace v8::internal
|
|
3097
|
-
|
|
3098
|
-
#endif // ENABLE_LOGGING_AND_PROFILING
|