libv8 3.3.10.4 → 3.5.10.beta1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/libv8/scons/CHANGES.txt +24 -231
- data/lib/libv8/scons/LICENSE.txt +1 -1
- data/lib/libv8/scons/MANIFEST +0 -1
- data/lib/libv8/scons/PKG-INFO +1 -1
- data/lib/libv8/scons/README.txt +9 -9
- data/lib/libv8/scons/RELEASE.txt +75 -77
- data/lib/libv8/scons/engine/SCons/Action.py +6 -22
- data/lib/libv8/scons/engine/SCons/Builder.py +2 -2
- data/lib/libv8/scons/engine/SCons/CacheDir.py +2 -2
- data/lib/libv8/scons/engine/SCons/Debug.py +2 -2
- data/lib/libv8/scons/engine/SCons/Defaults.py +10 -24
- data/lib/libv8/scons/engine/SCons/Environment.py +19 -118
- data/lib/libv8/scons/engine/SCons/Errors.py +2 -2
- data/lib/libv8/scons/engine/SCons/Executor.py +2 -2
- data/lib/libv8/scons/engine/SCons/Job.py +2 -2
- data/lib/libv8/scons/engine/SCons/Memoize.py +2 -2
- data/lib/libv8/scons/engine/SCons/Node/Alias.py +2 -2
- data/lib/libv8/scons/engine/SCons/Node/FS.py +121 -281
- data/lib/libv8/scons/engine/SCons/Node/Python.py +2 -2
- data/lib/libv8/scons/engine/SCons/Node/__init__.py +5 -6
- data/lib/libv8/scons/engine/SCons/Options/BoolOption.py +2 -2
- data/lib/libv8/scons/engine/SCons/Options/EnumOption.py +2 -2
- data/lib/libv8/scons/engine/SCons/Options/ListOption.py +2 -2
- data/lib/libv8/scons/engine/SCons/Options/PackageOption.py +2 -2
- data/lib/libv8/scons/engine/SCons/Options/PathOption.py +2 -2
- data/lib/libv8/scons/engine/SCons/Options/__init__.py +2 -2
- data/lib/libv8/scons/engine/SCons/PathList.py +2 -2
- data/lib/libv8/scons/engine/SCons/Platform/__init__.py +2 -2
- data/lib/libv8/scons/engine/SCons/Platform/aix.py +2 -2
- data/lib/libv8/scons/engine/SCons/Platform/cygwin.py +2 -2
- data/lib/libv8/scons/engine/SCons/Platform/darwin.py +3 -27
- data/lib/libv8/scons/engine/SCons/Platform/hpux.py +2 -2
- data/lib/libv8/scons/engine/SCons/Platform/irix.py +2 -2
- data/lib/libv8/scons/engine/SCons/Platform/os2.py +2 -2
- data/lib/libv8/scons/engine/SCons/Platform/posix.py +2 -2
- data/lib/libv8/scons/engine/SCons/Platform/sunos.py +2 -2
- data/lib/libv8/scons/engine/SCons/Platform/win32.py +2 -2
- data/lib/libv8/scons/engine/SCons/SConf.py +2 -2
- data/lib/libv8/scons/engine/SCons/SConsign.py +3 -9
- data/lib/libv8/scons/engine/SCons/Scanner/C.py +2 -2
- data/lib/libv8/scons/engine/SCons/Scanner/D.py +2 -2
- data/lib/libv8/scons/engine/SCons/Scanner/Dir.py +2 -2
- data/lib/libv8/scons/engine/SCons/Scanner/Fortran.py +2 -2
- data/lib/libv8/scons/engine/SCons/Scanner/IDL.py +2 -2
- data/lib/libv8/scons/engine/SCons/Scanner/LaTeX.py +2 -5
- data/lib/libv8/scons/engine/SCons/Scanner/Prog.py +2 -2
- data/lib/libv8/scons/engine/SCons/Scanner/RC.py +3 -3
- data/lib/libv8/scons/engine/SCons/Scanner/__init__.py +2 -2
- data/lib/libv8/scons/engine/SCons/Script/Interactive.py +2 -2
- data/lib/libv8/scons/engine/SCons/Script/Main.py +11 -82
- data/lib/libv8/scons/engine/SCons/Script/SConsOptions.py +5 -5
- data/lib/libv8/scons/engine/SCons/Script/SConscript.py +2 -2
- data/lib/libv8/scons/engine/SCons/Script/__init__.py +2 -2
- data/lib/libv8/scons/engine/SCons/Sig.py +2 -2
- data/lib/libv8/scons/engine/SCons/Subst.py +2 -2
- data/lib/libv8/scons/engine/SCons/Taskmaster.py +2 -10
- data/lib/libv8/scons/engine/SCons/Tool/386asm.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/BitKeeper.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/CVS.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/FortranCommon.py +2 -19
- data/lib/libv8/scons/engine/SCons/Tool/JavaCommon.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/MSCommon/__init__.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/MSCommon/arch.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/MSCommon/common.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/MSCommon/netframework.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/MSCommon/sdk.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/MSCommon/vc.py +6 -9
- data/lib/libv8/scons/engine/SCons/Tool/MSCommon/vs.py +2 -29
- data/lib/libv8/scons/engine/SCons/Tool/Perforce.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/PharLapCommon.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/RCS.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/SCCS.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/Subversion.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/__init__.py +3 -3
- data/lib/libv8/scons/engine/SCons/Tool/aixc++.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/aixcc.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/aixf77.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/aixlink.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/applelink.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/ar.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/as.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/bcc32.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/c++.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/cc.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/cvf.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/default.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/dmd.py +7 -24
- data/lib/libv8/scons/engine/SCons/Tool/dvi.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/dvipdf.py +2 -3
- data/lib/libv8/scons/engine/SCons/Tool/dvips.py +2 -3
- data/lib/libv8/scons/engine/SCons/Tool/f77.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/f90.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/f95.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/filesystem.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/fortran.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/g++.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/g77.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/gas.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/gcc.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/gfortran.py +3 -3
- data/lib/libv8/scons/engine/SCons/Tool/gnulink.py +3 -2
- data/lib/libv8/scons/engine/SCons/Tool/gs.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/hpc++.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/hpcc.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/hplink.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/icc.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/icl.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/ifl.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/ifort.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/ilink.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/ilink32.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/install.py +3 -57
- data/lib/libv8/scons/engine/SCons/Tool/intelc.py +25 -65
- data/lib/libv8/scons/engine/SCons/Tool/ipkg.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/jar.py +3 -9
- data/lib/libv8/scons/engine/SCons/Tool/javac.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/javah.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/latex.py +2 -3
- data/lib/libv8/scons/engine/SCons/Tool/lex.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/link.py +5 -6
- data/lib/libv8/scons/engine/SCons/Tool/linkloc.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/m4.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/masm.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/midl.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/mingw.py +10 -31
- data/lib/libv8/scons/engine/SCons/Tool/mslib.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/mslink.py +9 -61
- data/lib/libv8/scons/engine/SCons/Tool/mssdk.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/msvc.py +11 -21
- data/lib/libv8/scons/engine/SCons/Tool/msvs.py +59 -477
- data/lib/libv8/scons/engine/SCons/Tool/mwcc.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/mwld.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/nasm.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/packaging/__init__.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/packaging/ipk.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/packaging/msi.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/packaging/rpm.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/packaging/src_tarbz2.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/packaging/src_targz.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/packaging/src_zip.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/packaging/tarbz2.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/packaging/targz.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/packaging/zip.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/pdf.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/pdflatex.py +2 -3
- data/lib/libv8/scons/engine/SCons/Tool/pdftex.py +2 -3
- data/lib/libv8/scons/engine/SCons/Tool/qt.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/rmic.py +3 -9
- data/lib/libv8/scons/engine/SCons/Tool/rpcgen.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/rpm.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/sgiar.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/sgic++.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/sgicc.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/sgilink.py +3 -2
- data/lib/libv8/scons/engine/SCons/Tool/sunar.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/sunc++.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/suncc.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/sunf77.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/sunf90.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/sunf95.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/sunlink.py +3 -2
- data/lib/libv8/scons/engine/SCons/Tool/swig.py +5 -6
- data/lib/libv8/scons/engine/SCons/Tool/tar.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/tex.py +43 -96
- data/lib/libv8/scons/engine/SCons/Tool/textfile.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/tlib.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/wix.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/yacc.py +2 -12
- data/lib/libv8/scons/engine/SCons/Tool/zip.py +2 -2
- data/lib/libv8/scons/engine/SCons/Util.py +3 -3
- data/lib/libv8/scons/engine/SCons/Variables/BoolVariable.py +2 -2
- data/lib/libv8/scons/engine/SCons/Variables/EnumVariable.py +3 -3
- data/lib/libv8/scons/engine/SCons/Variables/ListVariable.py +2 -2
- data/lib/libv8/scons/engine/SCons/Variables/PackageVariable.py +2 -2
- data/lib/libv8/scons/engine/SCons/Variables/PathVariable.py +2 -2
- data/lib/libv8/scons/engine/SCons/Variables/__init__.py +2 -2
- data/lib/libv8/scons/engine/SCons/Warnings.py +2 -2
- data/lib/libv8/scons/engine/SCons/__init__.py +6 -6
- data/lib/libv8/scons/engine/SCons/compat/__init__.py +2 -2
- data/lib/libv8/scons/engine/SCons/compat/_scons_builtins.py +2 -2
- data/lib/libv8/scons/engine/SCons/compat/_scons_collections.py +2 -2
- data/lib/libv8/scons/engine/SCons/compat/_scons_dbm.py +2 -2
- data/lib/libv8/scons/engine/SCons/compat/_scons_hashlib.py +2 -2
- data/lib/libv8/scons/engine/SCons/compat/_scons_io.py +2 -2
- data/lib/libv8/scons/engine/SCons/cpp.py +2 -2
- data/lib/libv8/scons/engine/SCons/dblite.py +1 -4
- data/lib/libv8/scons/engine/SCons/exitfuncs.py +2 -2
- data/lib/libv8/scons/scons-time.1 +3 -3
- data/lib/libv8/scons/scons.1 +1164 -1170
- data/lib/libv8/scons/sconsign.1 +3 -3
- data/lib/libv8/scons/script/scons +22 -22
- data/lib/libv8/scons/script/scons-time +2 -2
- data/lib/libv8/scons/script/scons.bat +4 -7
- data/lib/libv8/scons/script/sconsign +20 -21
- data/lib/libv8/scons/setup.cfg +1 -0
- data/lib/libv8/scons/setup.py +40 -38
- data/lib/libv8/v8/.gitignore +1 -1
- data/lib/libv8/v8/AUTHORS +2 -0
- data/lib/libv8/v8/ChangeLog +387 -0
- data/lib/libv8/v8/Makefile +171 -0
- data/lib/libv8/v8/SConstruct +124 -51
- data/lib/libv8/v8/build/README.txt +31 -14
- data/lib/libv8/v8/build/all.gyp +11 -4
- data/lib/libv8/v8/build/armu.gypi +6 -2
- data/lib/libv8/v8/build/common.gypi +240 -94
- data/lib/libv8/v8/build/gyp_v8 +32 -4
- data/lib/libv8/v8/build/standalone.gypi +200 -0
- data/lib/libv8/v8/include/v8-debug.h +0 -0
- data/lib/libv8/v8/include/v8-profiler.h +8 -11
- data/lib/libv8/v8/include/v8.h +191 -108
- data/lib/libv8/v8/preparser/SConscript +2 -2
- data/lib/libv8/v8/preparser/preparser-process.cc +3 -3
- data/lib/libv8/v8/preparser/preparser.gyp +42 -0
- data/lib/libv8/v8/src/SConscript +33 -8
- data/lib/libv8/v8/src/accessors.cc +77 -43
- data/lib/libv8/v8/src/api.cc +393 -191
- data/lib/libv8/v8/src/api.h +4 -8
- data/lib/libv8/v8/src/apinatives.js +15 -3
- data/lib/libv8/v8/src/arguments.h +8 -0
- data/lib/libv8/v8/src/arm/assembler-arm.cc +120 -120
- data/lib/libv8/v8/src/arm/assembler-arm.h +92 -43
- data/lib/libv8/v8/src/arm/builtins-arm.cc +32 -39
- data/lib/libv8/v8/src/arm/code-stubs-arm.cc +572 -351
- data/lib/libv8/v8/src/arm/code-stubs-arm.h +8 -77
- data/lib/libv8/v8/src/arm/codegen-arm.h +0 -2
- data/lib/libv8/v8/src/arm/deoptimizer-arm.cc +50 -30
- data/lib/libv8/v8/src/arm/disasm-arm.cc +1 -1
- data/lib/libv8/v8/src/arm/frames-arm.h +9 -5
- data/lib/libv8/v8/src/arm/full-codegen-arm.cc +331 -432
- data/lib/libv8/v8/src/arm/ic-arm.cc +192 -124
- data/lib/libv8/v8/src/arm/lithium-arm.cc +216 -232
- data/lib/libv8/v8/src/arm/lithium-arm.h +106 -259
- data/lib/libv8/v8/src/arm/lithium-codegen-arm.cc +633 -642
- data/lib/libv8/v8/src/arm/lithium-codegen-arm.h +4 -4
- data/lib/libv8/v8/src/arm/lithium-gap-resolver-arm.cc +1 -3
- data/lib/libv8/v8/src/arm/macro-assembler-arm.cc +260 -185
- data/lib/libv8/v8/src/arm/macro-assembler-arm.h +45 -25
- data/lib/libv8/v8/src/arm/regexp-macro-assembler-arm.cc +25 -13
- data/lib/libv8/v8/src/arm/regexp-macro-assembler-arm.h +3 -0
- data/lib/libv8/v8/src/arm/stub-cache-arm.cc +413 -226
- data/lib/libv8/v8/src/array.js +38 -18
- data/lib/libv8/v8/src/assembler.cc +12 -5
- data/lib/libv8/v8/src/assembler.h +15 -9
- data/lib/libv8/v8/src/ast-inl.h +34 -25
- data/lib/libv8/v8/src/ast.cc +141 -72
- data/lib/libv8/v8/src/ast.h +255 -181
- data/lib/libv8/v8/src/bignum.cc +3 -4
- data/lib/libv8/v8/src/bootstrapper.cc +55 -11
- data/lib/libv8/v8/src/bootstrapper.h +3 -2
- data/lib/libv8/v8/src/builtins.cc +8 -2
- data/lib/libv8/v8/src/builtins.h +4 -0
- data/lib/libv8/v8/src/cached-powers.cc +8 -4
- data/lib/libv8/v8/src/checks.h +3 -3
- data/lib/libv8/v8/src/code-stubs.cc +173 -28
- data/lib/libv8/v8/src/code-stubs.h +104 -148
- data/lib/libv8/v8/src/codegen.cc +8 -8
- data/lib/libv8/v8/src/compilation-cache.cc +2 -47
- data/lib/libv8/v8/src/compilation-cache.h +0 -10
- data/lib/libv8/v8/src/compiler.cc +27 -16
- data/lib/libv8/v8/src/compiler.h +13 -18
- data/lib/libv8/v8/src/contexts.cc +107 -72
- data/lib/libv8/v8/src/contexts.h +70 -34
- data/lib/libv8/v8/src/conversions-inl.h +572 -14
- data/lib/libv8/v8/src/conversions.cc +9 -707
- data/lib/libv8/v8/src/conversions.h +23 -12
- data/lib/libv8/v8/src/cpu-profiler-inl.h +2 -19
- data/lib/libv8/v8/src/cpu-profiler.cc +4 -21
- data/lib/libv8/v8/src/cpu-profiler.h +8 -17
- data/lib/libv8/v8/src/d8-debug.cc +5 -3
- data/lib/libv8/v8/src/d8-debug.h +6 -7
- data/lib/libv8/v8/src/d8-posix.cc +1 -10
- data/lib/libv8/v8/src/d8.cc +721 -219
- data/lib/libv8/v8/src/d8.gyp +37 -12
- data/lib/libv8/v8/src/d8.h +141 -19
- data/lib/libv8/v8/src/d8.js +17 -8
- data/lib/libv8/v8/src/date.js +16 -5
- data/lib/libv8/v8/src/dateparser-inl.h +242 -39
- data/lib/libv8/v8/src/dateparser.cc +38 -4
- data/lib/libv8/v8/src/dateparser.h +170 -28
- data/lib/libv8/v8/src/debug-agent.cc +5 -3
- data/lib/libv8/v8/src/debug-agent.h +11 -7
- data/lib/libv8/v8/src/debug-debugger.js +65 -34
- data/lib/libv8/v8/src/debug.cc +30 -60
- data/lib/libv8/v8/src/debug.h +5 -3
- data/lib/libv8/v8/src/deoptimizer.cc +227 -10
- data/lib/libv8/v8/src/deoptimizer.h +133 -9
- data/lib/libv8/v8/src/disassembler.cc +22 -14
- data/lib/libv8/v8/src/diy-fp.cc +4 -3
- data/lib/libv8/v8/src/diy-fp.h +3 -3
- data/lib/libv8/v8/src/elements.cc +634 -0
- data/lib/libv8/v8/src/elements.h +95 -0
- data/lib/libv8/v8/src/execution.cc +5 -21
- data/lib/libv8/v8/src/extensions/experimental/break-iterator.cc +3 -1
- data/lib/libv8/v8/src/extensions/experimental/break-iterator.h +1 -1
- data/lib/libv8/v8/src/extensions/experimental/collator.cc +6 -2
- data/lib/libv8/v8/src/extensions/experimental/collator.h +1 -2
- data/lib/libv8/v8/src/extensions/experimental/datetime-format.cc +384 -0
- data/lib/libv8/v8/src/extensions/experimental/datetime-format.h +83 -0
- data/lib/libv8/v8/src/extensions/experimental/experimental.gyp +18 -7
- data/lib/libv8/v8/src/extensions/experimental/i18n-extension.cc +12 -16
- data/lib/libv8/v8/src/extensions/experimental/i18n-extension.h +1 -1
- data/lib/libv8/v8/src/extensions/experimental/i18n-js2c.py +126 -0
- data/lib/libv8/v8/src/extensions/experimental/i18n-locale.cc +3 -4
- data/lib/libv8/v8/src/extensions/experimental/i18n-locale.h +1 -1
- data/lib/libv8/v8/src/{shell.h → extensions/experimental/i18n-natives.h} +8 -20
- data/lib/libv8/v8/src/extensions/experimental/i18n-utils.cc +45 -1
- data/lib/libv8/v8/src/extensions/experimental/i18n-utils.h +21 -1
- data/lib/libv8/v8/src/extensions/experimental/i18n.js +211 -11
- data/lib/libv8/v8/src/extensions/experimental/language-matcher.cc +4 -3
- data/lib/libv8/v8/src/extensions/experimental/language-matcher.h +1 -1
- data/lib/libv8/v8/src/extensions/experimental/number-format.cc +374 -0
- data/lib/libv8/v8/src/extensions/experimental/number-format.h +71 -0
- data/lib/libv8/v8/src/factory.cc +89 -18
- data/lib/libv8/v8/src/factory.h +36 -8
- data/lib/libv8/v8/src/flag-definitions.h +11 -44
- data/lib/libv8/v8/src/frames-inl.h +8 -1
- data/lib/libv8/v8/src/frames.cc +39 -3
- data/lib/libv8/v8/src/frames.h +10 -3
- data/lib/libv8/v8/src/full-codegen.cc +311 -293
- data/lib/libv8/v8/src/full-codegen.h +183 -143
- data/lib/libv8/v8/src/func-name-inferrer.cc +29 -15
- data/lib/libv8/v8/src/func-name-inferrer.h +19 -9
- data/lib/libv8/v8/src/gdb-jit.cc +658 -55
- data/lib/libv8/v8/src/gdb-jit.h +6 -2
- data/lib/libv8/v8/src/global-handles.cc +368 -312
- data/lib/libv8/v8/src/global-handles.h +29 -36
- data/lib/libv8/v8/src/globals.h +3 -1
- data/lib/libv8/v8/src/handles.cc +43 -69
- data/lib/libv8/v8/src/handles.h +21 -16
- data/lib/libv8/v8/src/heap-inl.h +11 -13
- data/lib/libv8/v8/src/heap-profiler.cc +0 -999
- data/lib/libv8/v8/src/heap-profiler.h +0 -303
- data/lib/libv8/v8/src/heap.cc +366 -141
- data/lib/libv8/v8/src/heap.h +87 -26
- data/lib/libv8/v8/src/hydrogen-instructions.cc +192 -81
- data/lib/libv8/v8/src/hydrogen-instructions.h +711 -482
- data/lib/libv8/v8/src/hydrogen.cc +1146 -629
- data/lib/libv8/v8/src/hydrogen.h +100 -64
- data/lib/libv8/v8/src/ia32/assembler-ia32.cc +19 -0
- data/lib/libv8/v8/src/ia32/assembler-ia32.h +15 -2
- data/lib/libv8/v8/src/ia32/builtins-ia32.cc +34 -39
- data/lib/libv8/v8/src/ia32/code-stubs-ia32.cc +675 -377
- data/lib/libv8/v8/src/ia32/code-stubs-ia32.h +8 -69
- data/lib/libv8/v8/src/ia32/codegen-ia32.cc +1 -0
- data/lib/libv8/v8/src/ia32/codegen-ia32.h +0 -2
- data/lib/libv8/v8/src/ia32/cpu-ia32.cc +3 -2
- data/lib/libv8/v8/src/ia32/deoptimizer-ia32.cc +28 -3
- data/lib/libv8/v8/src/ia32/disasm-ia32.cc +21 -10
- data/lib/libv8/v8/src/ia32/frames-ia32.h +6 -5
- data/lib/libv8/v8/src/ia32/full-codegen-ia32.cc +459 -465
- data/lib/libv8/v8/src/ia32/ic-ia32.cc +196 -147
- data/lib/libv8/v8/src/ia32/lithium-codegen-ia32.cc +575 -650
- data/lib/libv8/v8/src/ia32/lithium-codegen-ia32.h +19 -21
- data/lib/libv8/v8/src/ia32/lithium-gap-resolver-ia32.cc +7 -2
- data/lib/libv8/v8/src/ia32/lithium-ia32.cc +261 -256
- data/lib/libv8/v8/src/ia32/lithium-ia32.h +234 -335
- data/lib/libv8/v8/src/ia32/macro-assembler-ia32.cc +224 -67
- data/lib/libv8/v8/src/ia32/macro-assembler-ia32.h +63 -19
- data/lib/libv8/v8/src/ia32/regexp-macro-assembler-ia32.cc +22 -8
- data/lib/libv8/v8/src/ia32/regexp-macro-assembler-ia32.h +3 -0
- data/lib/libv8/v8/src/ia32/stub-cache-ia32.cc +380 -239
- data/lib/libv8/v8/src/ic.cc +198 -234
- data/lib/libv8/v8/src/ic.h +32 -30
- data/lib/libv8/v8/src/interpreter-irregexp.cc +6 -4
- data/lib/libv8/v8/src/isolate.cc +112 -95
- data/lib/libv8/v8/src/isolate.h +55 -71
- data/lib/libv8/v8/src/json-parser.h +486 -48
- data/lib/libv8/v8/src/json.js +28 -23
- data/lib/libv8/v8/src/jsregexp.cc +163 -208
- data/lib/libv8/v8/src/jsregexp.h +0 -1
- data/lib/libv8/v8/src/lithium-allocator-inl.h +29 -27
- data/lib/libv8/v8/src/lithium-allocator.cc +22 -17
- data/lib/libv8/v8/src/lithium-allocator.h +8 -8
- data/lib/libv8/v8/src/lithium.cc +16 -11
- data/lib/libv8/v8/src/lithium.h +31 -34
- data/lib/libv8/v8/src/liveedit.cc +111 -15
- data/lib/libv8/v8/src/liveedit.h +3 -4
- data/lib/libv8/v8/src/liveobjectlist.cc +116 -80
- data/lib/libv8/v8/src/liveobjectlist.h +2 -2
- data/lib/libv8/v8/src/log-inl.h +0 -4
- data/lib/libv8/v8/src/log-utils.cc +25 -143
- data/lib/libv8/v8/src/log-utils.h +13 -92
- data/lib/libv8/v8/src/log.cc +26 -249
- data/lib/libv8/v8/src/log.h +6 -17
- data/lib/libv8/v8/src/macros.py +9 -6
- data/lib/libv8/v8/src/mark-compact.cc +276 -56
- data/lib/libv8/v8/src/mark-compact.h +20 -0
- data/lib/libv8/v8/src/messages.js +93 -39
- data/lib/libv8/v8/src/mips/assembler-mips-inl.h +9 -3
- data/lib/libv8/v8/src/mips/assembler-mips.cc +297 -189
- data/lib/libv8/v8/src/mips/assembler-mips.h +121 -54
- data/lib/libv8/v8/src/mips/builtins-mips.cc +23 -24
- data/lib/libv8/v8/src/mips/code-stubs-mips.cc +484 -263
- data/lib/libv8/v8/src/mips/code-stubs-mips.h +8 -83
- data/lib/libv8/v8/src/mips/codegen-mips.h +0 -2
- data/lib/libv8/v8/src/mips/constants-mips.h +37 -11
- data/lib/libv8/v8/src/mips/deoptimizer-mips.cc +6 -1
- data/lib/libv8/v8/src/mips/frames-mips.h +8 -7
- data/lib/libv8/v8/src/mips/full-codegen-mips.cc +258 -419
- data/lib/libv8/v8/src/mips/ic-mips.cc +181 -121
- data/lib/libv8/v8/src/mips/macro-assembler-mips.cc +640 -382
- data/lib/libv8/v8/src/mips/macro-assembler-mips.h +94 -89
- data/lib/libv8/v8/src/mips/regexp-macro-assembler-mips.cc +23 -10
- data/lib/libv8/v8/src/mips/regexp-macro-assembler-mips.h +6 -1
- data/lib/libv8/v8/src/mips/simulator-mips.cc +249 -49
- data/lib/libv8/v8/src/mips/simulator-mips.h +25 -1
- data/lib/libv8/v8/src/mips/stub-cache-mips.cc +373 -161
- data/lib/libv8/v8/src/mirror-debugger.js +55 -8
- data/lib/libv8/v8/src/misc-intrinsics.h +89 -0
- data/lib/libv8/v8/src/mksnapshot.cc +36 -4
- data/lib/libv8/v8/src/natives.h +5 -2
- data/lib/libv8/v8/src/objects-debug.cc +73 -6
- data/lib/libv8/v8/src/objects-inl.h +529 -164
- data/lib/libv8/v8/src/objects-printer.cc +67 -12
- data/lib/libv8/v8/src/objects-visiting.cc +13 -2
- data/lib/libv8/v8/src/objects-visiting.h +41 -1
- data/lib/libv8/v8/src/objects.cc +2200 -1177
- data/lib/libv8/v8/src/objects.h +912 -283
- data/lib/libv8/v8/src/parser.cc +566 -371
- data/lib/libv8/v8/src/parser.h +35 -33
- data/lib/libv8/v8/src/platform-cygwin.cc +10 -25
- data/lib/libv8/v8/src/platform-freebsd.cc +4 -29
- data/lib/libv8/v8/src/platform-linux.cc +60 -57
- data/lib/libv8/v8/src/platform-macos.cc +4 -27
- data/lib/libv8/v8/src/platform-nullos.cc +3 -16
- data/lib/libv8/v8/src/platform-openbsd.cc +247 -85
- data/lib/libv8/v8/src/platform-posix.cc +43 -1
- data/lib/libv8/v8/src/platform-solaris.cc +151 -112
- data/lib/libv8/v8/src/platform-tls.h +1 -1
- data/lib/libv8/v8/src/platform-win32.cc +65 -39
- data/lib/libv8/v8/src/platform.h +17 -14
- data/lib/libv8/v8/src/preparse-data-format.h +2 -2
- data/lib/libv8/v8/src/preparse-data.h +8 -2
- data/lib/libv8/v8/src/preparser-api.cc +2 -18
- data/lib/libv8/v8/src/preparser.cc +106 -65
- data/lib/libv8/v8/src/preparser.h +26 -5
- data/lib/libv8/v8/src/prettyprinter.cc +25 -43
- data/lib/libv8/v8/src/profile-generator-inl.h +0 -4
- data/lib/libv8/v8/src/profile-generator.cc +213 -34
- data/lib/libv8/v8/src/profile-generator.h +9 -9
- data/lib/libv8/v8/src/property.h +1 -0
- data/lib/libv8/v8/src/proxy.js +74 -4
- data/lib/libv8/v8/src/regexp-macro-assembler.cc +10 -6
- data/lib/libv8/v8/src/regexp.js +16 -11
- data/lib/libv8/v8/src/rewriter.cc +24 -133
- data/lib/libv8/v8/src/runtime-profiler.cc +27 -151
- data/lib/libv8/v8/src/runtime-profiler.h +5 -31
- data/lib/libv8/v8/src/runtime.cc +1450 -681
- data/lib/libv8/v8/src/runtime.h +47 -31
- data/lib/libv8/v8/src/runtime.js +2 -1
- data/lib/libv8/v8/src/scanner-base.cc +358 -220
- data/lib/libv8/v8/src/scanner-base.h +30 -138
- data/lib/libv8/v8/src/scanner.cc +0 -18
- data/lib/libv8/v8/src/scanner.h +0 -15
- data/lib/libv8/v8/src/scopeinfo.cc +3 -1
- data/lib/libv8/v8/src/scopeinfo.h +1 -6
- data/lib/libv8/v8/src/scopes.cc +243 -253
- data/lib/libv8/v8/src/scopes.h +58 -109
- data/lib/libv8/v8/src/serialize.cc +12 -54
- data/lib/libv8/v8/src/serialize.h +47 -0
- data/lib/libv8/v8/src/small-pointer-list.h +25 -0
- data/lib/libv8/v8/src/spaces-inl.h +4 -50
- data/lib/libv8/v8/src/spaces.cc +64 -131
- data/lib/libv8/v8/src/spaces.h +19 -70
- data/lib/libv8/v8/src/string-stream.cc +3 -1
- data/lib/libv8/v8/src/string.js +10 -6
- data/lib/libv8/v8/src/strtod.cc +7 -3
- data/lib/libv8/v8/src/stub-cache.cc +59 -129
- data/lib/libv8/v8/src/stub-cache.h +42 -54
- data/lib/libv8/v8/src/third_party/valgrind/valgrind.h +1447 -1339
- data/lib/libv8/v8/src/token.cc +4 -4
- data/lib/libv8/v8/src/token.h +6 -5
- data/lib/libv8/v8/src/type-info.cc +173 -129
- data/lib/libv8/v8/src/type-info.h +40 -22
- data/lib/libv8/v8/src/utils.cc +25 -304
- data/lib/libv8/v8/src/utils.h +118 -3
- data/lib/libv8/v8/src/v8-counters.h +3 -6
- data/lib/libv8/v8/src/v8.cc +34 -27
- data/lib/libv8/v8/src/v8.h +7 -7
- data/lib/libv8/v8/src/v8conversions.cc +129 -0
- data/lib/libv8/v8/src/v8conversions.h +60 -0
- data/lib/libv8/v8/src/v8globals.h +15 -6
- data/lib/libv8/v8/src/v8natives.js +300 -78
- data/lib/libv8/v8/src/v8threads.cc +14 -6
- data/lib/libv8/v8/src/v8threads.h +4 -1
- data/lib/libv8/v8/src/v8utils.cc +360 -0
- data/lib/libv8/v8/src/v8utils.h +17 -66
- data/lib/libv8/v8/src/variables.cc +7 -12
- data/lib/libv8/v8/src/variables.h +12 -10
- data/lib/libv8/v8/src/version.cc +2 -2
- data/lib/libv8/v8/src/vm-state-inl.h +0 -41
- data/lib/libv8/v8/src/vm-state.h +0 -11
- data/lib/libv8/v8/src/weakmap.js +103 -0
- data/lib/libv8/v8/src/x64/assembler-x64.h +6 -3
- data/lib/libv8/v8/src/x64/builtins-x64.cc +25 -22
- data/lib/libv8/v8/src/x64/code-stubs-x64.cc +523 -250
- data/lib/libv8/v8/src/x64/code-stubs-x64.h +8 -71
- data/lib/libv8/v8/src/x64/codegen-x64.cc +1 -0
- data/lib/libv8/v8/src/x64/codegen-x64.h +0 -2
- data/lib/libv8/v8/src/x64/cpu-x64.cc +2 -1
- data/lib/libv8/v8/src/x64/deoptimizer-x64.cc +40 -8
- data/lib/libv8/v8/src/x64/disasm-x64.cc +12 -10
- data/lib/libv8/v8/src/x64/frames-x64.h +7 -6
- data/lib/libv8/v8/src/x64/full-codegen-x64.cc +310 -415
- data/lib/libv8/v8/src/x64/ic-x64.cc +180 -117
- data/lib/libv8/v8/src/x64/lithium-codegen-x64.cc +411 -523
- data/lib/libv8/v8/src/x64/lithium-codegen-x64.h +11 -6
- data/lib/libv8/v8/src/x64/lithium-x64.cc +191 -216
- data/lib/libv8/v8/src/x64/lithium-x64.h +112 -263
- data/lib/libv8/v8/src/x64/macro-assembler-x64.cc +177 -61
- data/lib/libv8/v8/src/x64/macro-assembler-x64.h +23 -7
- data/lib/libv8/v8/src/x64/regexp-macro-assembler-x64.cc +21 -9
- data/lib/libv8/v8/src/x64/regexp-macro-assembler-x64.h +6 -0
- data/lib/libv8/v8/src/x64/stub-cache-x64.cc +273 -107
- data/lib/libv8/v8/src/zone.cc +31 -22
- data/lib/libv8/v8/src/zone.h +12 -6
- data/lib/libv8/v8/tools/codemap.js +8 -0
- data/lib/libv8/v8/tools/gcmole/Makefile +43 -0
- data/lib/libv8/v8/tools/gcmole/gcmole.lua +0 -2
- data/lib/libv8/v8/tools/gdb-v8-support.py +154 -0
- data/lib/libv8/v8/tools/grokdump.py +44 -35
- data/lib/libv8/v8/tools/gyp/v8.gyp +94 -248
- data/lib/libv8/v8/tools/js2c.py +83 -52
- data/lib/libv8/v8/tools/linux-tick-processor +4 -6
- data/lib/libv8/v8/tools/ll_prof.py +3 -3
- data/lib/libv8/v8/tools/oom_dump/README +3 -1
- data/lib/libv8/v8/tools/presubmit.py +11 -4
- data/lib/libv8/v8/tools/profile.js +46 -2
- data/lib/libv8/v8/tools/splaytree.js +11 -0
- data/lib/libv8/v8/tools/stats-viewer.py +15 -11
- data/lib/libv8/v8/tools/test-wrapper-gypbuild.py +227 -0
- data/lib/libv8/v8/tools/test.py +28 -8
- data/lib/libv8/v8/tools/tickprocessor.js +0 -16
- data/lib/libv8/version.rb +1 -1
- data/libv8.gemspec +2 -2
- metadata +31 -19
- data/lib/libv8/scons/engine/SCons/Tool/f03.py +0 -63
- data/lib/libv8/v8/src/json-parser.cc +0 -504
data/lib/libv8/v8/src/log.h
CHANGED
|
@@ -78,7 +78,6 @@ class SlidingStateWindow;
|
|
|
78
78
|
class Ticker;
|
|
79
79
|
|
|
80
80
|
#undef LOG
|
|
81
|
-
#ifdef ENABLE_LOGGING_AND_PROFILING
|
|
82
81
|
#define LOG(isolate, Call) \
|
|
83
82
|
do { \
|
|
84
83
|
v8::internal::Logger* logger = \
|
|
@@ -86,9 +85,6 @@ class Ticker;
|
|
|
86
85
|
if (logger->is_logging()) \
|
|
87
86
|
logger->Call; \
|
|
88
87
|
} while (false)
|
|
89
|
-
#else
|
|
90
|
-
#define LOG(isolate, Call) ((void) 0)
|
|
91
|
-
#endif
|
|
92
88
|
|
|
93
89
|
#define LOG_EVENTS_AND_TAGS_LIST(V) \
|
|
94
90
|
V(CODE_CREATION_EVENT, "code-creation") \
|
|
@@ -161,7 +157,9 @@ class Logger {
|
|
|
161
157
|
Sampler* sampler();
|
|
162
158
|
|
|
163
159
|
// Frees resources acquired in Setup.
|
|
164
|
-
|
|
160
|
+
// When a temporary file is used for the log, returns its stream descriptor,
|
|
161
|
+
// leaving the file open.
|
|
162
|
+
FILE* TearDown();
|
|
165
163
|
|
|
166
164
|
// Enable the computation of a sliding window of states.
|
|
167
165
|
void EnableSlidingStateWindow();
|
|
@@ -272,7 +270,6 @@ class Logger {
|
|
|
272
270
|
// Log an event reported from generated code
|
|
273
271
|
void LogRuntime(Vector<const char> format, JSArray* args);
|
|
274
272
|
|
|
275
|
-
#ifdef ENABLE_LOGGING_AND_PROFILING
|
|
276
273
|
bool is_logging() {
|
|
277
274
|
return logging_nesting_ > 0;
|
|
278
275
|
}
|
|
@@ -280,13 +277,9 @@ class Logger {
|
|
|
280
277
|
// Pause/Resume collection of profiling data.
|
|
281
278
|
// When data collection is paused, CPU Tick events are discarded until
|
|
282
279
|
// data collection is Resumed.
|
|
283
|
-
void PauseProfiler(
|
|
284
|
-
void ResumeProfiler(
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
// If logging is performed into a memory buffer, allows to
|
|
288
|
-
// retrieve previously written messages. See v8.h.
|
|
289
|
-
int GetLogLines(int from_pos, char* dest_buf, int max_size);
|
|
280
|
+
void PauseProfiler();
|
|
281
|
+
void ResumeProfiler();
|
|
282
|
+
bool IsProfilerPaused();
|
|
290
283
|
|
|
291
284
|
// Logs all compiled functions found in the heap.
|
|
292
285
|
void LogCompiledFunctions();
|
|
@@ -401,7 +394,6 @@ class Logger {
|
|
|
401
394
|
|
|
402
395
|
int logging_nesting_;
|
|
403
396
|
int cpu_profiler_nesting_;
|
|
404
|
-
int heap_profiler_nesting_;
|
|
405
397
|
|
|
406
398
|
Log* log_;
|
|
407
399
|
|
|
@@ -425,9 +417,6 @@ class Logger {
|
|
|
425
417
|
Address prev_code_;
|
|
426
418
|
|
|
427
419
|
friend class CpuProfiler;
|
|
428
|
-
#else
|
|
429
|
-
bool is_logging() { return false; }
|
|
430
|
-
#endif
|
|
431
420
|
};
|
|
432
421
|
|
|
433
422
|
|
data/lib/libv8/v8/src/macros.py
CHANGED
|
@@ -38,12 +38,13 @@ const GETTER = 0;
|
|
|
38
38
|
const SETTER = 1;
|
|
39
39
|
|
|
40
40
|
# These definitions must match the index of the properties in objects.h.
|
|
41
|
-
const kApiTagOffset
|
|
42
|
-
const kApiPropertyListOffset
|
|
43
|
-
const kApiSerialNumberOffset
|
|
44
|
-
const kApiConstructorOffset
|
|
45
|
-
const kApiPrototypeTemplateOffset
|
|
46
|
-
const kApiParentTemplateOffset
|
|
41
|
+
const kApiTagOffset = 0;
|
|
42
|
+
const kApiPropertyListOffset = 1;
|
|
43
|
+
const kApiSerialNumberOffset = 2;
|
|
44
|
+
const kApiConstructorOffset = 2;
|
|
45
|
+
const kApiPrototypeTemplateOffset = 5;
|
|
46
|
+
const kApiParentTemplateOffset = 6;
|
|
47
|
+
const kApiFlagOffset = 14;
|
|
47
48
|
|
|
48
49
|
const NO_HINT = 0;
|
|
49
50
|
const NUMBER_HINT = 1;
|
|
@@ -64,6 +65,7 @@ const msPerMonth = 2592000000;
|
|
|
64
65
|
|
|
65
66
|
# For apinatives.js
|
|
66
67
|
const kUninitialized = -1;
|
|
68
|
+
const kReadOnlyPrototypeBit = 3; # For FunctionTemplateInfo, matches objects.h
|
|
67
69
|
|
|
68
70
|
# Note: kDayZeroInJulianDay = ToJulianDay(1970, 0, 1).
|
|
69
71
|
const kInvalidDate = 'Invalid Date';
|
|
@@ -128,6 +130,7 @@ macro TO_UINT32(arg) = (arg >>> 0);
|
|
|
128
130
|
macro TO_STRING_INLINE(arg) = (IS_STRING(%IS_VAR(arg)) ? arg : NonStringToString(arg));
|
|
129
131
|
macro TO_NUMBER_INLINE(arg) = (IS_NUMBER(%IS_VAR(arg)) ? arg : NonNumberToNumber(arg));
|
|
130
132
|
macro TO_OBJECT_INLINE(arg) = (IS_SPEC_OBJECT(%IS_VAR(arg)) ? arg : ToObject(arg));
|
|
133
|
+
macro JSON_NUMBER_TO_STRING(arg) = ((%_IsSmi(%IS_VAR(arg)) || arg - arg == 0) ? %_NumberToString(arg) : "null");
|
|
131
134
|
|
|
132
135
|
# Macros implemented in Python.
|
|
133
136
|
python macro CHAR_CODE(str) = ord(str[1]);
|
|
@@ -64,13 +64,15 @@ MarkCompactCollector::MarkCompactCollector() : // NOLINT
|
|
|
64
64
|
live_bytes_(0),
|
|
65
65
|
#endif
|
|
66
66
|
heap_(NULL),
|
|
67
|
-
code_flusher_(NULL)
|
|
67
|
+
code_flusher_(NULL),
|
|
68
|
+
encountered_weak_maps_(NULL) { }
|
|
68
69
|
|
|
69
70
|
|
|
70
71
|
void MarkCompactCollector::CollectGarbage() {
|
|
71
72
|
// Make sure that Prepare() has been called. The individual steps below will
|
|
72
73
|
// update the state as they proceed.
|
|
73
74
|
ASSERT(state_ == PREPARE_GC);
|
|
75
|
+
ASSERT(encountered_weak_maps_ == Smi::FromInt(0));
|
|
74
76
|
|
|
75
77
|
// Prepare has selected whether to compact the old generation or not.
|
|
76
78
|
// Tell the tracer.
|
|
@@ -80,6 +82,8 @@ void MarkCompactCollector::CollectGarbage() {
|
|
|
80
82
|
|
|
81
83
|
if (FLAG_collect_maps) ClearNonLiveTransitions();
|
|
82
84
|
|
|
85
|
+
ClearWeakMaps();
|
|
86
|
+
|
|
83
87
|
SweepLargeObjectSpace();
|
|
84
88
|
|
|
85
89
|
if (IsCompacting()) {
|
|
@@ -390,12 +394,18 @@ class StaticMarkingVisitor : public StaticVisitorBase {
|
|
|
390
394
|
ConsString::BodyDescriptor,
|
|
391
395
|
void>::Visit);
|
|
392
396
|
|
|
397
|
+
table_.Register(kVisitSlicedString,
|
|
398
|
+
&FixedBodyVisitor<StaticMarkingVisitor,
|
|
399
|
+
SlicedString::BodyDescriptor,
|
|
400
|
+
void>::Visit);
|
|
393
401
|
|
|
394
402
|
table_.Register(kVisitFixedArray,
|
|
395
403
|
&FlexibleBodyVisitor<StaticMarkingVisitor,
|
|
396
404
|
FixedArray::BodyDescriptor,
|
|
397
405
|
void>::Visit);
|
|
398
406
|
|
|
407
|
+
table_.Register(kVisitFixedDoubleArray, DataObjectVisitor::Visit);
|
|
408
|
+
|
|
399
409
|
table_.Register(kVisitGlobalContext,
|
|
400
410
|
&FixedBodyVisitor<StaticMarkingVisitor,
|
|
401
411
|
Context::MarkCompactBodyDescriptor,
|
|
@@ -405,6 +415,8 @@ class StaticMarkingVisitor : public StaticVisitorBase {
|
|
|
405
415
|
table_.Register(kVisitSeqAsciiString, &DataObjectVisitor::Visit);
|
|
406
416
|
table_.Register(kVisitSeqTwoByteString, &DataObjectVisitor::Visit);
|
|
407
417
|
|
|
418
|
+
table_.Register(kVisitJSWeakMap, &VisitJSWeakMap);
|
|
419
|
+
|
|
408
420
|
table_.Register(kVisitOddball,
|
|
409
421
|
&FixedBodyVisitor<StaticMarkingVisitor,
|
|
410
422
|
Oddball::BodyDescriptor,
|
|
@@ -422,6 +434,9 @@ class StaticMarkingVisitor : public StaticVisitorBase {
|
|
|
422
434
|
table_.Register(kVisitJSFunction,
|
|
423
435
|
&VisitJSFunctionAndFlushCode);
|
|
424
436
|
|
|
437
|
+
table_.Register(kVisitJSRegExp,
|
|
438
|
+
&VisitRegExpAndFlushCode);
|
|
439
|
+
|
|
425
440
|
table_.Register(kVisitPropertyCell,
|
|
426
441
|
&FixedBodyVisitor<StaticMarkingVisitor,
|
|
427
442
|
JSGlobalPropertyCell::BodyDescriptor,
|
|
@@ -551,6 +566,34 @@ class StaticMarkingVisitor : public StaticVisitorBase {
|
|
|
551
566
|
StructBodyDescriptor,
|
|
552
567
|
void> StructObjectVisitor;
|
|
553
568
|
|
|
569
|
+
static void VisitJSWeakMap(Map* map, HeapObject* object) {
|
|
570
|
+
MarkCompactCollector* collector = map->heap()->mark_compact_collector();
|
|
571
|
+
JSWeakMap* weak_map = reinterpret_cast<JSWeakMap*>(object);
|
|
572
|
+
|
|
573
|
+
// Enqueue weak map in linked list of encountered weak maps.
|
|
574
|
+
ASSERT(weak_map->next() == Smi::FromInt(0));
|
|
575
|
+
weak_map->set_next(collector->encountered_weak_maps());
|
|
576
|
+
collector->set_encountered_weak_maps(weak_map);
|
|
577
|
+
|
|
578
|
+
// Skip visiting the backing hash table containing the mappings.
|
|
579
|
+
int object_size = JSWeakMap::BodyDescriptor::SizeOf(map, object);
|
|
580
|
+
BodyVisitorBase<StaticMarkingVisitor>::IteratePointers(
|
|
581
|
+
map->heap(),
|
|
582
|
+
object,
|
|
583
|
+
JSWeakMap::BodyDescriptor::kStartOffset,
|
|
584
|
+
JSWeakMap::kTableOffset);
|
|
585
|
+
BodyVisitorBase<StaticMarkingVisitor>::IteratePointers(
|
|
586
|
+
map->heap(),
|
|
587
|
+
object,
|
|
588
|
+
JSWeakMap::kTableOffset + kPointerSize,
|
|
589
|
+
object_size);
|
|
590
|
+
|
|
591
|
+
// Mark the backing hash table without pushing it on the marking stack.
|
|
592
|
+
ASSERT(!weak_map->unchecked_table()->IsMarked());
|
|
593
|
+
ASSERT(weak_map->unchecked_table()->map()->IsMarked());
|
|
594
|
+
collector->SetMark(weak_map->unchecked_table());
|
|
595
|
+
}
|
|
596
|
+
|
|
554
597
|
static void VisitCode(Map* map, HeapObject* object) {
|
|
555
598
|
reinterpret_cast<Code*>(object)->CodeIterateBody<StaticMarkingVisitor>(
|
|
556
599
|
map->heap());
|
|
@@ -562,6 +605,8 @@ class StaticMarkingVisitor : public StaticVisitorBase {
|
|
|
562
605
|
// flushed.
|
|
563
606
|
static const int kCodeAgeThreshold = 5;
|
|
564
607
|
|
|
608
|
+
static const int kRegExpCodeThreshold = 5;
|
|
609
|
+
|
|
565
610
|
inline static bool HasSourceCode(Heap* heap, SharedFunctionInfo* info) {
|
|
566
611
|
Object* undefined = heap->raw_unchecked_undefined_value();
|
|
567
612
|
return (info->script() != undefined) &&
|
|
@@ -670,8 +715,9 @@ class StaticMarkingVisitor : public StaticVisitorBase {
|
|
|
670
715
|
|
|
671
716
|
Map* map = SafeMap(ctx);
|
|
672
717
|
Heap* heap = map->heap();
|
|
673
|
-
if (!(map == heap->
|
|
718
|
+
if (!(map == heap->raw_unchecked_function_context_map() ||
|
|
674
719
|
map == heap->raw_unchecked_catch_context_map() ||
|
|
720
|
+
map == heap->raw_unchecked_with_context_map() ||
|
|
675
721
|
map == heap->raw_unchecked_global_context_map())) {
|
|
676
722
|
return false;
|
|
677
723
|
}
|
|
@@ -697,6 +743,68 @@ class StaticMarkingVisitor : public StaticVisitorBase {
|
|
|
697
743
|
}
|
|
698
744
|
|
|
699
745
|
|
|
746
|
+
static void UpdateRegExpCodeAgeAndFlush(Heap* heap,
|
|
747
|
+
JSRegExp* re,
|
|
748
|
+
bool is_ascii) {
|
|
749
|
+
// Make sure that the fixed array is in fact initialized on the RegExp.
|
|
750
|
+
// We could potentially trigger a GC when initializing the RegExp.
|
|
751
|
+
if (SafeMap(re->data())->instance_type() != FIXED_ARRAY_TYPE) return;
|
|
752
|
+
|
|
753
|
+
// Make sure this is a RegExp that actually contains code.
|
|
754
|
+
if (re->TypeTagUnchecked() != JSRegExp::IRREGEXP) return;
|
|
755
|
+
|
|
756
|
+
Object* code = re->DataAtUnchecked(JSRegExp::code_index(is_ascii));
|
|
757
|
+
if (!code->IsSmi() && SafeMap(code)->instance_type() == CODE_TYPE) {
|
|
758
|
+
// Save a copy that can be reinstated if we need the code again.
|
|
759
|
+
re->SetDataAtUnchecked(JSRegExp::saved_code_index(is_ascii),
|
|
760
|
+
code,
|
|
761
|
+
heap);
|
|
762
|
+
// Set a number in the 0-255 range to guarantee no smi overflow.
|
|
763
|
+
re->SetDataAtUnchecked(JSRegExp::code_index(is_ascii),
|
|
764
|
+
Smi::FromInt(heap->sweep_generation() & 0xff),
|
|
765
|
+
heap);
|
|
766
|
+
} else if (code->IsSmi()) {
|
|
767
|
+
int value = Smi::cast(code)->value();
|
|
768
|
+
// The regexp has not been compiled yet or there was a compilation error.
|
|
769
|
+
if (value == JSRegExp::kUninitializedValue ||
|
|
770
|
+
value == JSRegExp::kCompilationErrorValue) {
|
|
771
|
+
return;
|
|
772
|
+
}
|
|
773
|
+
|
|
774
|
+
// Check if we should flush now.
|
|
775
|
+
if (value == ((heap->sweep_generation() - kRegExpCodeThreshold) & 0xff)) {
|
|
776
|
+
re->SetDataAtUnchecked(JSRegExp::code_index(is_ascii),
|
|
777
|
+
Smi::FromInt(JSRegExp::kUninitializedValue),
|
|
778
|
+
heap);
|
|
779
|
+
re->SetDataAtUnchecked(JSRegExp::saved_code_index(is_ascii),
|
|
780
|
+
Smi::FromInt(JSRegExp::kUninitializedValue),
|
|
781
|
+
heap);
|
|
782
|
+
}
|
|
783
|
+
}
|
|
784
|
+
}
|
|
785
|
+
|
|
786
|
+
|
|
787
|
+
// Works by setting the current sweep_generation (as a smi) in the
|
|
788
|
+
// code object place in the data array of the RegExp and keeps a copy
|
|
789
|
+
// around that can be reinstated if we reuse the RegExp before flushing.
|
|
790
|
+
// If we did not use the code for kRegExpCodeThreshold mark sweep GCs
|
|
791
|
+
// we flush the code.
|
|
792
|
+
static void VisitRegExpAndFlushCode(Map* map, HeapObject* object) {
|
|
793
|
+
Heap* heap = map->heap();
|
|
794
|
+
MarkCompactCollector* collector = heap->mark_compact_collector();
|
|
795
|
+
if (!collector->is_code_flushing_enabled()) {
|
|
796
|
+
VisitJSRegExpFields(map, object);
|
|
797
|
+
return;
|
|
798
|
+
}
|
|
799
|
+
JSRegExp* re = reinterpret_cast<JSRegExp*>(object);
|
|
800
|
+
// Flush code or set age on both ascii and two byte code.
|
|
801
|
+
UpdateRegExpCodeAgeAndFlush(heap, re, true);
|
|
802
|
+
UpdateRegExpCodeAgeAndFlush(heap, re, false);
|
|
803
|
+
// Visit the fields of the RegExp, including the updated FixedArray.
|
|
804
|
+
VisitJSRegExpFields(map, object);
|
|
805
|
+
}
|
|
806
|
+
|
|
807
|
+
|
|
700
808
|
static void VisitSharedFunctionInfoAndFlushCode(Map* map,
|
|
701
809
|
HeapObject* object) {
|
|
702
810
|
MarkCompactCollector* collector = map->heap()->mark_compact_collector();
|
|
@@ -827,6 +935,15 @@ class StaticMarkingVisitor : public StaticVisitorBase {
|
|
|
827
935
|
// Don't visit the next function list field as it is a weak reference.
|
|
828
936
|
}
|
|
829
937
|
|
|
938
|
+
static inline void VisitJSRegExpFields(Map* map,
|
|
939
|
+
HeapObject* object) {
|
|
940
|
+
int last_property_offset =
|
|
941
|
+
JSRegExp::kSize + kPointerSize * map->inobject_properties();
|
|
942
|
+
VisitPointers(map->heap(),
|
|
943
|
+
SLOT_ADDR(object, JSRegExp::kPropertiesOffset),
|
|
944
|
+
SLOT_ADDR(object, last_property_offset));
|
|
945
|
+
}
|
|
946
|
+
|
|
830
947
|
|
|
831
948
|
static void VisitSharedFunctionInfoFields(Heap* heap,
|
|
832
949
|
HeapObject* object,
|
|
@@ -866,18 +983,6 @@ class MarkingVisitor : public ObjectVisitor {
|
|
|
866
983
|
StaticMarkingVisitor::VisitPointers(heap_, start, end);
|
|
867
984
|
}
|
|
868
985
|
|
|
869
|
-
void VisitCodeTarget(Heap* heap, RelocInfo* rinfo) {
|
|
870
|
-
StaticMarkingVisitor::VisitCodeTarget(heap, rinfo);
|
|
871
|
-
}
|
|
872
|
-
|
|
873
|
-
void VisitGlobalPropertyCell(Heap* heap, RelocInfo* rinfo) {
|
|
874
|
-
StaticMarkingVisitor::VisitGlobalPropertyCell(heap, rinfo);
|
|
875
|
-
}
|
|
876
|
-
|
|
877
|
-
void VisitDebugTarget(Heap* heap, RelocInfo* rinfo) {
|
|
878
|
-
StaticMarkingVisitor::VisitDebugTarget(heap, rinfo);
|
|
879
|
-
}
|
|
880
|
-
|
|
881
986
|
private:
|
|
882
987
|
Heap* heap_;
|
|
883
988
|
};
|
|
@@ -1030,6 +1135,7 @@ class SymbolTableCleaner : public ObjectVisitor {
|
|
|
1030
1135
|
int PointersRemoved() {
|
|
1031
1136
|
return pointers_removed_;
|
|
1032
1137
|
}
|
|
1138
|
+
|
|
1033
1139
|
private:
|
|
1034
1140
|
Heap* heap_;
|
|
1035
1141
|
int pointers_removed_;
|
|
@@ -1060,9 +1166,12 @@ void MarkCompactCollector::MarkUnmarkedObject(HeapObject* object) {
|
|
|
1060
1166
|
map->ClearCodeCache(heap());
|
|
1061
1167
|
}
|
|
1062
1168
|
SetMark(map);
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
|
|
1169
|
+
|
|
1170
|
+
// When map collection is enabled we have to mark through map's transitions
|
|
1171
|
+
// in a special way to make transition links weak.
|
|
1172
|
+
// Only maps for subclasses of JSReceiver can have transitions.
|
|
1173
|
+
STATIC_ASSERT(LAST_TYPE == LAST_JS_RECEIVER_TYPE);
|
|
1174
|
+
if (FLAG_collect_maps && map->instance_type() >= FIRST_JS_RECEIVER_TYPE) {
|
|
1066
1175
|
MarkMapContents(map);
|
|
1067
1176
|
} else {
|
|
1068
1177
|
marking_stack_.Push(map);
|
|
@@ -1144,8 +1253,8 @@ void MarkCompactCollector::CreateBackPointers() {
|
|
|
1144
1253
|
next_object != NULL; next_object = iterator.next()) {
|
|
1145
1254
|
if (next_object->IsMap()) { // Could also be ByteArray on free list.
|
|
1146
1255
|
Map* map = Map::cast(next_object);
|
|
1147
|
-
|
|
1148
|
-
|
|
1256
|
+
STATIC_ASSERT(LAST_TYPE == LAST_CALLABLE_SPEC_OBJECT_TYPE);
|
|
1257
|
+
if (map->instance_type() >= FIRST_JS_RECEIVER_TYPE) {
|
|
1149
1258
|
map->CreateBackPointers();
|
|
1150
1259
|
} else {
|
|
1151
1260
|
ASSERT(map->instance_descriptors() == heap()->empty_descriptor_array());
|
|
@@ -1298,20 +1407,26 @@ void MarkCompactCollector::MarkImplicitRefGroups() {
|
|
|
1298
1407
|
// marking stack have been marked, or are overflowed in the heap.
|
|
1299
1408
|
void MarkCompactCollector::EmptyMarkingStack() {
|
|
1300
1409
|
while (!marking_stack_.is_empty()) {
|
|
1301
|
-
|
|
1302
|
-
|
|
1303
|
-
|
|
1304
|
-
|
|
1305
|
-
|
|
1306
|
-
|
|
1307
|
-
// Because the object is marked, we have to recover the original map
|
|
1308
|
-
// pointer and use it to mark the object's body.
|
|
1309
|
-
MapWord map_word = object->map_word();
|
|
1310
|
-
map_word.ClearMark();
|
|
1311
|
-
Map* map = map_word.ToMap();
|
|
1312
|
-
MarkObject(map);
|
|
1410
|
+
while (!marking_stack_.is_empty()) {
|
|
1411
|
+
HeapObject* object = marking_stack_.Pop();
|
|
1412
|
+
ASSERT(object->IsHeapObject());
|
|
1413
|
+
ASSERT(heap()->Contains(object));
|
|
1414
|
+
ASSERT(object->IsMarked());
|
|
1415
|
+
ASSERT(!object->IsOverflowed());
|
|
1313
1416
|
|
|
1314
|
-
|
|
1417
|
+
// Because the object is marked, we have to recover the original map
|
|
1418
|
+
// pointer and use it to mark the object's body.
|
|
1419
|
+
MapWord map_word = object->map_word();
|
|
1420
|
+
map_word.ClearMark();
|
|
1421
|
+
Map* map = map_word.ToMap();
|
|
1422
|
+
MarkObject(map);
|
|
1423
|
+
|
|
1424
|
+
StaticMarkingVisitor::IterateBody(map, object);
|
|
1425
|
+
}
|
|
1426
|
+
|
|
1427
|
+
// Process encountered weak maps, mark objects only reachable by those
|
|
1428
|
+
// weak maps and repeat until fix-point is reached.
|
|
1429
|
+
ProcessWeakMaps();
|
|
1315
1430
|
}
|
|
1316
1431
|
}
|
|
1317
1432
|
|
|
@@ -1429,6 +1544,12 @@ void MarkCompactCollector::MarkLiveObjects() {
|
|
|
1429
1544
|
// reachable from the weak roots.
|
|
1430
1545
|
ProcessExternalMarking();
|
|
1431
1546
|
|
|
1547
|
+
// Object literal map caches reference symbols (cache keys) and maps
|
|
1548
|
+
// (cache values). At this point still useful maps have already been
|
|
1549
|
+
// marked. Mark the keys for the alive values before we process the
|
|
1550
|
+
// symbol table.
|
|
1551
|
+
ProcessMapCaches();
|
|
1552
|
+
|
|
1432
1553
|
// Prune the symbol table removing all symbols only pointed to by the
|
|
1433
1554
|
// symbol table. Cannot use symbol_table() here because the symbol
|
|
1434
1555
|
// table is marked.
|
|
@@ -1457,6 +1578,57 @@ void MarkCompactCollector::MarkLiveObjects() {
|
|
|
1457
1578
|
}
|
|
1458
1579
|
|
|
1459
1580
|
|
|
1581
|
+
void MarkCompactCollector::ProcessMapCaches() {
|
|
1582
|
+
Object* raw_context = heap()->global_contexts_list_;
|
|
1583
|
+
while (raw_context != heap()->undefined_value()) {
|
|
1584
|
+
Context* context = reinterpret_cast<Context*>(raw_context);
|
|
1585
|
+
if (context->IsMarked()) {
|
|
1586
|
+
HeapObject* raw_map_cache =
|
|
1587
|
+
HeapObject::cast(context->get(Context::MAP_CACHE_INDEX));
|
|
1588
|
+
// A map cache may be reachable from the stack. In this case
|
|
1589
|
+
// it's already transitively marked and it's too late to clean
|
|
1590
|
+
// up its parts.
|
|
1591
|
+
if (!raw_map_cache->IsMarked() &&
|
|
1592
|
+
raw_map_cache != heap()->undefined_value()) {
|
|
1593
|
+
MapCache* map_cache = reinterpret_cast<MapCache*>(raw_map_cache);
|
|
1594
|
+
int existing_elements = map_cache->NumberOfElements();
|
|
1595
|
+
int used_elements = 0;
|
|
1596
|
+
for (int i = MapCache::kElementsStartIndex;
|
|
1597
|
+
i < map_cache->length();
|
|
1598
|
+
i += MapCache::kEntrySize) {
|
|
1599
|
+
Object* raw_key = map_cache->get(i);
|
|
1600
|
+
if (raw_key == heap()->undefined_value() ||
|
|
1601
|
+
raw_key == heap()->null_value()) continue;
|
|
1602
|
+
STATIC_ASSERT(MapCache::kEntrySize == 2);
|
|
1603
|
+
Object* raw_map = map_cache->get(i + 1);
|
|
1604
|
+
if (raw_map->IsHeapObject() &&
|
|
1605
|
+
HeapObject::cast(raw_map)->IsMarked()) {
|
|
1606
|
+
++used_elements;
|
|
1607
|
+
} else {
|
|
1608
|
+
// Delete useless entries with unmarked maps.
|
|
1609
|
+
ASSERT(raw_map->IsMap());
|
|
1610
|
+
map_cache->set_null_unchecked(heap(), i);
|
|
1611
|
+
map_cache->set_null_unchecked(heap(), i + 1);
|
|
1612
|
+
}
|
|
1613
|
+
}
|
|
1614
|
+
if (used_elements == 0) {
|
|
1615
|
+
context->set(Context::MAP_CACHE_INDEX, heap()->undefined_value());
|
|
1616
|
+
} else {
|
|
1617
|
+
// Note: we don't actually shrink the cache here to avoid
|
|
1618
|
+
// extra complexity during GC. We rely on subsequent cache
|
|
1619
|
+
// usages (EnsureCapacity) to do this.
|
|
1620
|
+
map_cache->ElementsRemoved(existing_elements - used_elements);
|
|
1621
|
+
MarkObject(map_cache);
|
|
1622
|
+
}
|
|
1623
|
+
}
|
|
1624
|
+
}
|
|
1625
|
+
// Move to next element in the list.
|
|
1626
|
+
raw_context = context->get(Context::NEXT_CONTEXT_LINK);
|
|
1627
|
+
}
|
|
1628
|
+
ProcessMarkingStack();
|
|
1629
|
+
}
|
|
1630
|
+
|
|
1631
|
+
|
|
1460
1632
|
#ifdef DEBUG
|
|
1461
1633
|
void MarkCompactCollector::UpdateLiveObjectCount(HeapObject* obj) {
|
|
1462
1634
|
live_bytes_ += obj->Size();
|
|
@@ -1521,8 +1693,8 @@ void MarkCompactCollector::ClearNonLiveTransitions() {
|
|
|
1521
1693
|
|
|
1522
1694
|
ASSERT(SafeIsMap(map));
|
|
1523
1695
|
// Only JSObject and subtypes have map transitions and back pointers.
|
|
1524
|
-
|
|
1525
|
-
if (map->instance_type()
|
|
1696
|
+
STATIC_ASSERT(LAST_TYPE == LAST_CALLABLE_SPEC_OBJECT_TYPE);
|
|
1697
|
+
if (map->instance_type() < FIRST_JS_RECEIVER_TYPE) continue;
|
|
1526
1698
|
|
|
1527
1699
|
if (map->IsMarked() && map->attached_to_shared_function_info()) {
|
|
1528
1700
|
// This map is used for inobject slack tracking and has been detached
|
|
@@ -1532,38 +1704,48 @@ void MarkCompactCollector::ClearNonLiveTransitions() {
|
|
|
1532
1704
|
}
|
|
1533
1705
|
|
|
1534
1706
|
// Clear dead prototype transitions.
|
|
1535
|
-
|
|
1536
|
-
if (
|
|
1537
|
-
|
|
1538
|
-
|
|
1539
|
-
|
|
1540
|
-
|
|
1541
|
-
|
|
1707
|
+
int number_of_transitions = map->NumberOfProtoTransitions();
|
|
1708
|
+
if (number_of_transitions > 0) {
|
|
1709
|
+
FixedArray* prototype_transitions =
|
|
1710
|
+
map->unchecked_prototype_transitions();
|
|
1711
|
+
int new_number_of_transitions = 0;
|
|
1712
|
+
const int header = Map::kProtoTransitionHeaderSize;
|
|
1713
|
+
const int proto_offset =
|
|
1714
|
+
header + Map::kProtoTransitionPrototypeOffset;
|
|
1715
|
+
const int map_offset = header + Map::kProtoTransitionMapOffset;
|
|
1716
|
+
const int step = Map::kProtoTransitionElementsPerEntry;
|
|
1717
|
+
for (int i = 0; i < number_of_transitions; i++) {
|
|
1718
|
+
Object* prototype = prototype_transitions->get(proto_offset + i * step);
|
|
1719
|
+
Object* cached_map = prototype_transitions->get(map_offset + i * step);
|
|
1542
1720
|
if (HeapObject::cast(prototype)->IsMarked() &&
|
|
1543
1721
|
HeapObject::cast(cached_map)->IsMarked()) {
|
|
1544
|
-
if (
|
|
1545
|
-
prototype_transitions->set_unchecked(
|
|
1546
|
-
|
|
1547
|
-
|
|
1548
|
-
|
|
1549
|
-
|
|
1550
|
-
|
|
1551
|
-
|
|
1552
|
-
|
|
1722
|
+
if (new_number_of_transitions != i) {
|
|
1723
|
+
prototype_transitions->set_unchecked(
|
|
1724
|
+
heap_,
|
|
1725
|
+
proto_offset + new_number_of_transitions * step,
|
|
1726
|
+
prototype,
|
|
1727
|
+
UPDATE_WRITE_BARRIER);
|
|
1728
|
+
prototype_transitions->set_unchecked(
|
|
1729
|
+
heap_,
|
|
1730
|
+
map_offset + new_number_of_transitions * step,
|
|
1731
|
+
cached_map,
|
|
1732
|
+
SKIP_WRITE_BARRIER);
|
|
1553
1733
|
}
|
|
1554
|
-
|
|
1734
|
+
new_number_of_transitions++;
|
|
1555
1735
|
}
|
|
1556
1736
|
}
|
|
1557
1737
|
|
|
1558
1738
|
// Fill slots that became free with undefined value.
|
|
1559
1739
|
Object* undefined = heap()->raw_unchecked_undefined_value();
|
|
1560
|
-
for (int i =
|
|
1740
|
+
for (int i = new_number_of_transitions * step;
|
|
1741
|
+
i < number_of_transitions * step;
|
|
1742
|
+
i++) {
|
|
1561
1743
|
prototype_transitions->set_unchecked(heap_,
|
|
1562
|
-
i,
|
|
1744
|
+
header + i,
|
|
1563
1745
|
undefined,
|
|
1564
1746
|
SKIP_WRITE_BARRIER);
|
|
1565
1747
|
}
|
|
1566
|
-
|
|
1748
|
+
map->SetNumberOfProtoTransitions(new_number_of_transitions);
|
|
1567
1749
|
}
|
|
1568
1750
|
|
|
1569
1751
|
// Follow the chain of back pointers to find the prototype.
|
|
@@ -1597,6 +1779,45 @@ void MarkCompactCollector::ClearNonLiveTransitions() {
|
|
|
1597
1779
|
}
|
|
1598
1780
|
}
|
|
1599
1781
|
|
|
1782
|
+
|
|
1783
|
+
void MarkCompactCollector::ProcessWeakMaps() {
|
|
1784
|
+
Object* weak_map_obj = encountered_weak_maps();
|
|
1785
|
+
while (weak_map_obj != Smi::FromInt(0)) {
|
|
1786
|
+
ASSERT(HeapObject::cast(weak_map_obj)->IsMarked());
|
|
1787
|
+
JSWeakMap* weak_map = reinterpret_cast<JSWeakMap*>(weak_map_obj);
|
|
1788
|
+
ObjectHashTable* table = weak_map->unchecked_table();
|
|
1789
|
+
for (int i = 0; i < table->Capacity(); i++) {
|
|
1790
|
+
if (HeapObject::cast(table->KeyAt(i))->IsMarked()) {
|
|
1791
|
+
Object* value = table->get(table->EntryToValueIndex(i));
|
|
1792
|
+
StaticMarkingVisitor::MarkObjectByPointer(heap(), &value);
|
|
1793
|
+
table->set_unchecked(heap(),
|
|
1794
|
+
table->EntryToValueIndex(i),
|
|
1795
|
+
value,
|
|
1796
|
+
UPDATE_WRITE_BARRIER);
|
|
1797
|
+
}
|
|
1798
|
+
}
|
|
1799
|
+
weak_map_obj = weak_map->next();
|
|
1800
|
+
}
|
|
1801
|
+
}
|
|
1802
|
+
|
|
1803
|
+
|
|
1804
|
+
void MarkCompactCollector::ClearWeakMaps() {
|
|
1805
|
+
Object* weak_map_obj = encountered_weak_maps();
|
|
1806
|
+
while (weak_map_obj != Smi::FromInt(0)) {
|
|
1807
|
+
ASSERT(HeapObject::cast(weak_map_obj)->IsMarked());
|
|
1808
|
+
JSWeakMap* weak_map = reinterpret_cast<JSWeakMap*>(weak_map_obj);
|
|
1809
|
+
ObjectHashTable* table = weak_map->unchecked_table();
|
|
1810
|
+
for (int i = 0; i < table->Capacity(); i++) {
|
|
1811
|
+
if (!HeapObject::cast(table->KeyAt(i))->IsMarked()) {
|
|
1812
|
+
table->RemoveEntry(i, heap());
|
|
1813
|
+
}
|
|
1814
|
+
}
|
|
1815
|
+
weak_map_obj = weak_map->next();
|
|
1816
|
+
weak_map->set_next(Smi::FromInt(0));
|
|
1817
|
+
}
|
|
1818
|
+
set_encountered_weak_maps(Smi::FromInt(0));
|
|
1819
|
+
}
|
|
1820
|
+
|
|
1600
1821
|
// -------------------------------------------------------------------------
|
|
1601
1822
|
// Phase 2: Encode forwarding addresses.
|
|
1602
1823
|
// When compacting, forwarding addresses for objects in old space and map
|
|
@@ -1925,6 +2146,7 @@ class PointersToNewGenUpdatingVisitor: public ObjectVisitor {
|
|
|
1925
2146
|
VisitPointer(&target);
|
|
1926
2147
|
rinfo->set_call_address(Code::cast(target)->instruction_start());
|
|
1927
2148
|
}
|
|
2149
|
+
|
|
1928
2150
|
private:
|
|
1929
2151
|
Heap* heap_;
|
|
1930
2152
|
};
|
|
@@ -3119,11 +3341,9 @@ void MarkCompactCollector::ReportDeleteIfNeeded(HeapObject* obj,
|
|
|
3119
3341
|
GDBJITInterface::RemoveCode(reinterpret_cast<Code*>(obj));
|
|
3120
3342
|
}
|
|
3121
3343
|
#endif
|
|
3122
|
-
#ifdef ENABLE_LOGGING_AND_PROFILING
|
|
3123
3344
|
if (obj->IsCode()) {
|
|
3124
3345
|
PROFILE(isolate, CodeDeleteEvent(obj->address()));
|
|
3125
3346
|
}
|
|
3126
|
-
#endif
|
|
3127
3347
|
}
|
|
3128
3348
|
|
|
3129
3349
|
|