libv8 3.3.10.4 → 3.5.10.beta1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
|