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
|
@@ -44,6 +44,31 @@ class SmallPointerList {
|
|
|
44
44
|
public:
|
|
45
45
|
SmallPointerList() : data_(kEmptyTag) {}
|
|
46
46
|
|
|
47
|
+
explicit SmallPointerList(int capacity) : data_(kEmptyTag) {
|
|
48
|
+
Reserve(capacity);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
void Reserve(int capacity) {
|
|
52
|
+
if (capacity < 2) return;
|
|
53
|
+
if ((data_ & kTagMask) == kListTag) {
|
|
54
|
+
if (list()->capacity() >= capacity) return;
|
|
55
|
+
int old_length = list()->length();
|
|
56
|
+
list()->AddBlock(NULL, capacity - list()->capacity());
|
|
57
|
+
list()->Rewind(old_length);
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
PointerList* list = new PointerList(capacity);
|
|
61
|
+
if ((data_ & kTagMask) == kSingletonTag) {
|
|
62
|
+
list->Add(single_value());
|
|
63
|
+
}
|
|
64
|
+
ASSERT(IsAligned(reinterpret_cast<intptr_t>(list), kPointerAlignment));
|
|
65
|
+
data_ = reinterpret_cast<intptr_t>(list) | kListTag;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
void Clear() {
|
|
69
|
+
data_ = kEmptyTag;
|
|
70
|
+
}
|
|
71
|
+
|
|
47
72
|
bool is_empty() const { return length() == 0; }
|
|
48
73
|
|
|
49
74
|
int length() const {
|
|
@@ -294,13 +294,13 @@ void Page::SetIsLargeObjectPage(bool is_large_object_page) {
|
|
|
294
294
|
SetPageFlag(IS_NORMAL_PAGE, !is_large_object_page);
|
|
295
295
|
}
|
|
296
296
|
|
|
297
|
-
|
|
298
|
-
return GetPageFlag(IS_EXECUTABLE);
|
|
297
|
+
Executability Page::PageExecutability() {
|
|
298
|
+
return GetPageFlag(IS_EXECUTABLE) ? EXECUTABLE : NOT_EXECUTABLE;
|
|
299
299
|
}
|
|
300
300
|
|
|
301
301
|
|
|
302
|
-
void Page::
|
|
303
|
-
SetPageFlag(IS_EXECUTABLE,
|
|
302
|
+
void Page::SetPageExecutability(Executability executable) {
|
|
303
|
+
SetPageFlag(IS_EXECUTABLE, executable == EXECUTABLE);
|
|
304
304
|
}
|
|
305
305
|
|
|
306
306
|
|
|
@@ -378,35 +378,6 @@ bool MemoryAllocator::InInitialChunk(Address address) {
|
|
|
378
378
|
}
|
|
379
379
|
|
|
380
380
|
|
|
381
|
-
#ifdef ENABLE_HEAP_PROTECTION
|
|
382
|
-
|
|
383
|
-
void MemoryAllocator::Protect(Address start, size_t size) {
|
|
384
|
-
OS::Protect(start, size);
|
|
385
|
-
}
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
void MemoryAllocator::Unprotect(Address start,
|
|
389
|
-
size_t size,
|
|
390
|
-
Executability executable) {
|
|
391
|
-
OS::Unprotect(start, size, executable);
|
|
392
|
-
}
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
void MemoryAllocator::ProtectChunkFromPage(Page* page) {
|
|
396
|
-
int id = GetChunkId(page);
|
|
397
|
-
OS::Protect(chunks_[id].address(), chunks_[id].size());
|
|
398
|
-
}
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
void MemoryAllocator::UnprotectChunkFromPage(Page* page) {
|
|
402
|
-
int id = GetChunkId(page);
|
|
403
|
-
OS::Unprotect(chunks_[id].address(), chunks_[id].size(),
|
|
404
|
-
chunks_[id].owner()->executable() == EXECUTABLE);
|
|
405
|
-
}
|
|
406
|
-
|
|
407
|
-
#endif
|
|
408
|
-
|
|
409
|
-
|
|
410
381
|
// --------------------------------------------------------------------------
|
|
411
382
|
// PagedSpace
|
|
412
383
|
|
|
@@ -462,23 +433,6 @@ MaybeObject* PagedSpace::MCAllocateRaw(int size_in_bytes) {
|
|
|
462
433
|
}
|
|
463
434
|
|
|
464
435
|
|
|
465
|
-
// -----------------------------------------------------------------------------
|
|
466
|
-
// LargeObjectChunk
|
|
467
|
-
|
|
468
|
-
Address LargeObjectChunk::GetStartAddress() {
|
|
469
|
-
// Round the chunk address up to the nearest page-aligned address
|
|
470
|
-
// and return the heap object in that page.
|
|
471
|
-
Page* page = Page::FromAddress(RoundUp(address(), Page::kPageSize));
|
|
472
|
-
return page->ObjectAreaStart();
|
|
473
|
-
}
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
void LargeObjectChunk::Free(Executability executable) {
|
|
477
|
-
Isolate* isolate =
|
|
478
|
-
Page::FromAddress(RoundUp(address(), Page::kPageSize))->heap_->isolate();
|
|
479
|
-
isolate->memory_allocator()->FreeRawMemory(address(), size(), executable);
|
|
480
|
-
}
|
|
481
|
-
|
|
482
436
|
// -----------------------------------------------------------------------------
|
|
483
437
|
// NewSpace
|
|
484
438
|
|
data/lib/libv8/v8/src/spaces.cc
CHANGED
|
@@ -148,12 +148,12 @@ PageIterator::PageIterator(PagedSpace* space, Mode mode) : space_(space) {
|
|
|
148
148
|
// CodeRange
|
|
149
149
|
|
|
150
150
|
|
|
151
|
-
CodeRange::CodeRange()
|
|
152
|
-
:
|
|
151
|
+
CodeRange::CodeRange(Isolate* isolate)
|
|
152
|
+
: isolate_(isolate),
|
|
153
|
+
code_range_(NULL),
|
|
153
154
|
free_list_(0),
|
|
154
155
|
allocation_list_(0),
|
|
155
|
-
current_allocation_block_index_(0)
|
|
156
|
-
isolate_(NULL) {
|
|
156
|
+
current_allocation_block_index_(0) {
|
|
157
157
|
}
|
|
158
158
|
|
|
159
159
|
|
|
@@ -279,8 +279,9 @@ void CodeRange::TearDown() {
|
|
|
279
279
|
const int kEstimatedNumberOfChunks = 270;
|
|
280
280
|
|
|
281
281
|
|
|
282
|
-
MemoryAllocator::MemoryAllocator()
|
|
283
|
-
:
|
|
282
|
+
MemoryAllocator::MemoryAllocator(Isolate* isolate)
|
|
283
|
+
: isolate_(isolate),
|
|
284
|
+
capacity_(0),
|
|
284
285
|
capacity_executable_(0),
|
|
285
286
|
size_(0),
|
|
286
287
|
size_executable_(0),
|
|
@@ -288,8 +289,7 @@ MemoryAllocator::MemoryAllocator()
|
|
|
288
289
|
chunks_(kEstimatedNumberOfChunks),
|
|
289
290
|
free_chunk_ids_(kEstimatedNumberOfChunks),
|
|
290
291
|
max_nof_chunks_(0),
|
|
291
|
-
top_(0)
|
|
292
|
-
isolate_(NULL) {
|
|
292
|
+
top_(0) {
|
|
293
293
|
}
|
|
294
294
|
|
|
295
295
|
|
|
@@ -402,7 +402,9 @@ void MemoryAllocator::FreeRawMemory(void* mem,
|
|
|
402
402
|
size_t length,
|
|
403
403
|
Executability executable) {
|
|
404
404
|
#ifdef DEBUG
|
|
405
|
-
|
|
405
|
+
// Do not try to zap the guard page.
|
|
406
|
+
size_t guard_size = (executable == EXECUTABLE) ? Page::kPageSize : 0;
|
|
407
|
+
ZapBlock(reinterpret_cast<Address>(mem) + guard_size, length - guard_size);
|
|
406
408
|
#endif
|
|
407
409
|
if (isolate_->code_range()->contains(static_cast<Address>(mem))) {
|
|
408
410
|
isolate_->code_range()->FreeRawMemory(mem, length);
|
|
@@ -504,14 +506,28 @@ Page* MemoryAllocator::AllocatePages(int requested_pages,
|
|
|
504
506
|
LOG(isolate_, NewEvent("PagedChunk", chunk, chunk_size));
|
|
505
507
|
|
|
506
508
|
*allocated_pages = PagesInChunk(static_cast<Address>(chunk), chunk_size);
|
|
509
|
+
|
|
507
510
|
// We may 'lose' a page due to alignment.
|
|
508
511
|
ASSERT(*allocated_pages >= kPagesPerChunk - 1);
|
|
509
|
-
|
|
510
|
-
|
|
512
|
+
|
|
513
|
+
size_t guard_size = (owner->executable() == EXECUTABLE) ? Page::kPageSize : 0;
|
|
514
|
+
|
|
515
|
+
// Check that we got at least one page that we can use.
|
|
516
|
+
if (*allocated_pages <= ((guard_size != 0) ? 1 : 0)) {
|
|
517
|
+
FreeRawMemory(chunk,
|
|
518
|
+
chunk_size,
|
|
519
|
+
owner->executable());
|
|
511
520
|
LOG(isolate_, DeleteEvent("PagedChunk", chunk));
|
|
512
521
|
return Page::FromAddress(NULL);
|
|
513
522
|
}
|
|
514
523
|
|
|
524
|
+
if (guard_size != 0) {
|
|
525
|
+
OS::Guard(chunk, guard_size);
|
|
526
|
+
chunk_size -= guard_size;
|
|
527
|
+
chunk = static_cast<Address>(chunk) + guard_size;
|
|
528
|
+
--*allocated_pages;
|
|
529
|
+
}
|
|
530
|
+
|
|
515
531
|
int chunk_id = Pop();
|
|
516
532
|
chunks_[chunk_id].init(static_cast<Address>(chunk), chunk_size, owner);
|
|
517
533
|
|
|
@@ -681,7 +697,8 @@ void MemoryAllocator::DeleteChunk(int chunk_id) {
|
|
|
681
697
|
LOG(isolate_, DeleteEvent("PagedChunk", c.address()));
|
|
682
698
|
ObjectSpace space = static_cast<ObjectSpace>(1 << c.owner_identity());
|
|
683
699
|
size_t size = c.size();
|
|
684
|
-
|
|
700
|
+
size_t guard_size = (c.executable() == EXECUTABLE) ? Page::kPageSize : 0;
|
|
701
|
+
FreeRawMemory(c.address() - guard_size, size + guard_size, c.executable());
|
|
685
702
|
PerformAllocationCallback(space, kAllocationActionFree, size);
|
|
686
703
|
}
|
|
687
704
|
c.init(NULL, 0, NULL);
|
|
@@ -868,30 +885,6 @@ void PagedSpace::TearDown() {
|
|
|
868
885
|
}
|
|
869
886
|
|
|
870
887
|
|
|
871
|
-
#ifdef ENABLE_HEAP_PROTECTION
|
|
872
|
-
|
|
873
|
-
void PagedSpace::Protect() {
|
|
874
|
-
Page* page = first_page_;
|
|
875
|
-
while (page->is_valid()) {
|
|
876
|
-
Isolate::Current()->memory_allocator()->ProtectChunkFromPage(page);
|
|
877
|
-
page = Isolate::Current()->memory_allocator()->
|
|
878
|
-
FindLastPageInSameChunk(page)->next_page();
|
|
879
|
-
}
|
|
880
|
-
}
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
void PagedSpace::Unprotect() {
|
|
884
|
-
Page* page = first_page_;
|
|
885
|
-
while (page->is_valid()) {
|
|
886
|
-
Isolate::Current()->memory_allocator()->UnprotectChunkFromPage(page);
|
|
887
|
-
page = Isolate::Current()->memory_allocator()->
|
|
888
|
-
FindLastPageInSameChunk(page)->next_page();
|
|
889
|
-
}
|
|
890
|
-
}
|
|
891
|
-
|
|
892
|
-
#endif
|
|
893
|
-
|
|
894
|
-
|
|
895
888
|
void PagedSpace::MarkAllPagesClean() {
|
|
896
889
|
PageIterator it(this, PageIterator::ALL_PAGES);
|
|
897
890
|
while (it.has_next()) {
|
|
@@ -1196,7 +1189,6 @@ bool NewSpace::Setup(Address start, int size) {
|
|
|
1196
1189
|
ASSERT(IsPowerOf2(maximum_semispace_capacity));
|
|
1197
1190
|
|
|
1198
1191
|
// Allocate and setup the histogram arrays if necessary.
|
|
1199
|
-
#if defined(DEBUG) || defined(ENABLE_LOGGING_AND_PROFILING)
|
|
1200
1192
|
allocated_histogram_ = NewArray<HistogramInfo>(LAST_TYPE + 1);
|
|
1201
1193
|
promoted_histogram_ = NewArray<HistogramInfo>(LAST_TYPE + 1);
|
|
1202
1194
|
|
|
@@ -1204,7 +1196,6 @@ bool NewSpace::Setup(Address start, int size) {
|
|
|
1204
1196
|
promoted_histogram_[name].set_name(#name);
|
|
1205
1197
|
INSTANCE_TYPE_LIST(SET_NAME)
|
|
1206
1198
|
#undef SET_NAME
|
|
1207
|
-
#endif
|
|
1208
1199
|
|
|
1209
1200
|
ASSERT(size == 2 * heap()->ReservedSemiSpaceSize());
|
|
1210
1201
|
ASSERT(IsAddressAligned(start, size, 0));
|
|
@@ -1236,7 +1227,6 @@ bool NewSpace::Setup(Address start, int size) {
|
|
|
1236
1227
|
|
|
1237
1228
|
|
|
1238
1229
|
void NewSpace::TearDown() {
|
|
1239
|
-
#if defined(DEBUG) || defined(ENABLE_LOGGING_AND_PROFILING)
|
|
1240
1230
|
if (allocated_histogram_) {
|
|
1241
1231
|
DeleteArray(allocated_histogram_);
|
|
1242
1232
|
allocated_histogram_ = NULL;
|
|
@@ -1245,7 +1235,6 @@ void NewSpace::TearDown() {
|
|
|
1245
1235
|
DeleteArray(promoted_histogram_);
|
|
1246
1236
|
promoted_histogram_ = NULL;
|
|
1247
1237
|
}
|
|
1248
|
-
#endif
|
|
1249
1238
|
|
|
1250
1239
|
start_ = NULL;
|
|
1251
1240
|
allocation_info_.top = NULL;
|
|
@@ -1258,24 +1247,6 @@ void NewSpace::TearDown() {
|
|
|
1258
1247
|
}
|
|
1259
1248
|
|
|
1260
1249
|
|
|
1261
|
-
#ifdef ENABLE_HEAP_PROTECTION
|
|
1262
|
-
|
|
1263
|
-
void NewSpace::Protect() {
|
|
1264
|
-
heap()->isolate()->memory_allocator()->Protect(ToSpaceLow(), Capacity());
|
|
1265
|
-
heap()->isolate()->memory_allocator()->Protect(FromSpaceLow(), Capacity());
|
|
1266
|
-
}
|
|
1267
|
-
|
|
1268
|
-
|
|
1269
|
-
void NewSpace::Unprotect() {
|
|
1270
|
-
heap()->isolate()->memory_allocator()->Unprotect(ToSpaceLow(), Capacity(),
|
|
1271
|
-
to_space_.executable());
|
|
1272
|
-
heap()->isolate()->memory_allocator()->Unprotect(FromSpaceLow(), Capacity(),
|
|
1273
|
-
from_space_.executable());
|
|
1274
|
-
}
|
|
1275
|
-
|
|
1276
|
-
#endif
|
|
1277
|
-
|
|
1278
|
-
|
|
1279
1250
|
void NewSpace::Flip() {
|
|
1280
1251
|
SemiSpace tmp = from_space_;
|
|
1281
1252
|
from_space_ = to_space_;
|
|
@@ -1571,6 +1542,7 @@ static void ReportCodeKindStatistics() {
|
|
|
1571
1542
|
CASE(UNARY_OP_IC);
|
|
1572
1543
|
CASE(BINARY_OP_IC);
|
|
1573
1544
|
CASE(COMPARE_IC);
|
|
1545
|
+
CASE(TO_BOOLEAN_IC);
|
|
1574
1546
|
}
|
|
1575
1547
|
}
|
|
1576
1548
|
|
|
@@ -1638,7 +1610,6 @@ static void ReportHistogram(bool print_spill) {
|
|
|
1638
1610
|
|
|
1639
1611
|
|
|
1640
1612
|
// Support for statistics gathering for --heap-stats and --log-gc.
|
|
1641
|
-
#if defined(DEBUG) || defined(ENABLE_LOGGING_AND_PROFILING)
|
|
1642
1613
|
void NewSpace::ClearHistograms() {
|
|
1643
1614
|
for (int i = 0; i <= LAST_TYPE; i++) {
|
|
1644
1615
|
allocated_histogram_[i].clear();
|
|
@@ -1648,9 +1619,7 @@ void NewSpace::ClearHistograms() {
|
|
|
1648
1619
|
|
|
1649
1620
|
// Because the copying collector does not touch garbage objects, we iterate
|
|
1650
1621
|
// the new space before a collection to get a histogram of allocated objects.
|
|
1651
|
-
// This only happens
|
|
1652
|
-
// set, or when compiled with ENABLE_LOGGING_AND_PROFILING and the --log-gc
|
|
1653
|
-
// flag is set.
|
|
1622
|
+
// This only happens when --log-gc flag is set.
|
|
1654
1623
|
void NewSpace::CollectStatistics() {
|
|
1655
1624
|
ClearHistograms();
|
|
1656
1625
|
SemiSpaceIterator it(this);
|
|
@@ -1659,7 +1628,6 @@ void NewSpace::CollectStatistics() {
|
|
|
1659
1628
|
}
|
|
1660
1629
|
|
|
1661
1630
|
|
|
1662
|
-
#ifdef ENABLE_LOGGING_AND_PROFILING
|
|
1663
1631
|
static void DoReportStatistics(Isolate* isolate,
|
|
1664
1632
|
HistogramInfo* info, const char* description) {
|
|
1665
1633
|
LOG(isolate, HeapSampleBeginEvent("NewSpace", description));
|
|
@@ -1686,7 +1654,6 @@ static void DoReportStatistics(Isolate* isolate,
|
|
|
1686
1654
|
}
|
|
1687
1655
|
LOG(isolate, HeapSampleEndEvent("NewSpace", description));
|
|
1688
1656
|
}
|
|
1689
|
-
#endif // ENABLE_LOGGING_AND_PROFILING
|
|
1690
1657
|
|
|
1691
1658
|
|
|
1692
1659
|
void NewSpace::ReportStatistics() {
|
|
@@ -1709,13 +1676,11 @@ void NewSpace::ReportStatistics() {
|
|
|
1709
1676
|
}
|
|
1710
1677
|
#endif // DEBUG
|
|
1711
1678
|
|
|
1712
|
-
#ifdef ENABLE_LOGGING_AND_PROFILING
|
|
1713
1679
|
if (FLAG_log_gc) {
|
|
1714
1680
|
Isolate* isolate = ISOLATE;
|
|
1715
1681
|
DoReportStatistics(isolate, allocated_histogram_, "allocated");
|
|
1716
1682
|
DoReportStatistics(isolate, promoted_histogram_, "promoted");
|
|
1717
1683
|
}
|
|
1718
|
-
#endif // ENABLE_LOGGING_AND_PROFILING
|
|
1719
1684
|
}
|
|
1720
1685
|
|
|
1721
1686
|
|
|
@@ -1733,7 +1698,6 @@ void NewSpace::RecordPromotion(HeapObject* obj) {
|
|
|
1733
1698
|
promoted_histogram_[type].increment_number(1);
|
|
1734
1699
|
promoted_histogram_[type].increment_bytes(obj->Size());
|
|
1735
1700
|
}
|
|
1736
|
-
#endif // defined(DEBUG) || defined(ENABLE_LOGGING_AND_PROFILING)
|
|
1737
1701
|
|
|
1738
1702
|
|
|
1739
1703
|
// -----------------------------------------------------------------------------
|
|
@@ -2726,9 +2690,10 @@ LargeObjectChunk* LargeObjectChunk::New(int size_in_bytes,
|
|
|
2726
2690
|
Executability executable) {
|
|
2727
2691
|
size_t requested = ChunkSizeFor(size_in_bytes);
|
|
2728
2692
|
size_t size;
|
|
2693
|
+
size_t guard_size = (executable == EXECUTABLE) ? Page::kPageSize : 0;
|
|
2729
2694
|
Isolate* isolate = Isolate::Current();
|
|
2730
2695
|
void* mem = isolate->memory_allocator()->AllocateRawMemory(
|
|
2731
|
-
requested, &size, executable);
|
|
2696
|
+
requested + guard_size, &size, executable);
|
|
2732
2697
|
if (mem == NULL) return NULL;
|
|
2733
2698
|
|
|
2734
2699
|
// The start of the chunk may be overlayed with a page so we have to
|
|
@@ -2736,13 +2701,19 @@ LargeObjectChunk* LargeObjectChunk::New(int size_in_bytes,
|
|
|
2736
2701
|
ASSERT((size & Page::kPageFlagMask) == 0);
|
|
2737
2702
|
|
|
2738
2703
|
LOG(isolate, NewEvent("LargeObjectChunk", mem, size));
|
|
2739
|
-
if (size < requested) {
|
|
2704
|
+
if (size < requested + guard_size) {
|
|
2740
2705
|
isolate->memory_allocator()->FreeRawMemory(
|
|
2741
2706
|
mem, size, executable);
|
|
2742
2707
|
LOG(isolate, DeleteEvent("LargeObjectChunk", mem));
|
|
2743
2708
|
return NULL;
|
|
2744
2709
|
}
|
|
2745
2710
|
|
|
2711
|
+
if (guard_size != 0) {
|
|
2712
|
+
OS::Guard(mem, guard_size);
|
|
2713
|
+
size -= guard_size;
|
|
2714
|
+
mem = static_cast<Address>(mem) + guard_size;
|
|
2715
|
+
}
|
|
2716
|
+
|
|
2746
2717
|
ObjectSpace space = (executable == EXECUTABLE)
|
|
2747
2718
|
? kObjectSpaceCodeSpace
|
|
2748
2719
|
: kObjectSpaceLoSpace;
|
|
@@ -2751,12 +2722,26 @@ LargeObjectChunk* LargeObjectChunk::New(int size_in_bytes,
|
|
|
2751
2722
|
|
|
2752
2723
|
LargeObjectChunk* chunk = reinterpret_cast<LargeObjectChunk*>(mem);
|
|
2753
2724
|
chunk->size_ = size;
|
|
2754
|
-
|
|
2755
|
-
page->heap_ = isolate->heap();
|
|
2725
|
+
chunk->GetPage()->heap_ = isolate->heap();
|
|
2756
2726
|
return chunk;
|
|
2757
2727
|
}
|
|
2758
2728
|
|
|
2759
2729
|
|
|
2730
|
+
void LargeObjectChunk::Free(Executability executable) {
|
|
2731
|
+
size_t guard_size = (executable == EXECUTABLE) ? Page::kPageSize : 0;
|
|
2732
|
+
ObjectSpace space =
|
|
2733
|
+
(executable == EXECUTABLE) ? kObjectSpaceCodeSpace : kObjectSpaceLoSpace;
|
|
2734
|
+
// Do not access instance fields after FreeRawMemory!
|
|
2735
|
+
Address my_address = address();
|
|
2736
|
+
size_t my_size = size();
|
|
2737
|
+
Isolate* isolate = GetPage()->heap_->isolate();
|
|
2738
|
+
MemoryAllocator* a = isolate->memory_allocator();
|
|
2739
|
+
a->FreeRawMemory(my_address - guard_size, my_size + guard_size, executable);
|
|
2740
|
+
a->PerformAllocationCallback(space, kAllocationActionFree, my_size);
|
|
2741
|
+
LOG(isolate, DeleteEvent("LargeObjectChunk", my_address));
|
|
2742
|
+
}
|
|
2743
|
+
|
|
2744
|
+
|
|
2760
2745
|
int LargeObjectChunk::ChunkSizeFor(int size_in_bytes) {
|
|
2761
2746
|
int os_alignment = static_cast<int>(OS::AllocateAlignment());
|
|
2762
2747
|
if (os_alignment < Page::kPageSize) {
|
|
@@ -2789,50 +2774,11 @@ void LargeObjectSpace::TearDown() {
|
|
|
2789
2774
|
while (first_chunk_ != NULL) {
|
|
2790
2775
|
LargeObjectChunk* chunk = first_chunk_;
|
|
2791
2776
|
first_chunk_ = first_chunk_->next();
|
|
2792
|
-
|
|
2793
|
-
Page* page = Page::FromAddress(RoundUp(chunk->address(), Page::kPageSize));
|
|
2794
|
-
Executability executable =
|
|
2795
|
-
page->IsPageExecutable() ? EXECUTABLE : NOT_EXECUTABLE;
|
|
2796
|
-
ObjectSpace space = kObjectSpaceLoSpace;
|
|
2797
|
-
if (executable == EXECUTABLE) space = kObjectSpaceCodeSpace;
|
|
2798
|
-
size_t size = chunk->size();
|
|
2799
|
-
heap()->isolate()->memory_allocator()->FreeRawMemory(chunk->address(),
|
|
2800
|
-
size,
|
|
2801
|
-
executable);
|
|
2802
|
-
heap()->isolate()->memory_allocator()->PerformAllocationCallback(
|
|
2803
|
-
space, kAllocationActionFree, size);
|
|
2804
|
-
}
|
|
2805
|
-
|
|
2806
|
-
size_ = 0;
|
|
2807
|
-
page_count_ = 0;
|
|
2808
|
-
objects_size_ = 0;
|
|
2809
|
-
}
|
|
2810
|
-
|
|
2811
|
-
|
|
2812
|
-
#ifdef ENABLE_HEAP_PROTECTION
|
|
2813
|
-
|
|
2814
|
-
void LargeObjectSpace::Protect() {
|
|
2815
|
-
LargeObjectChunk* chunk = first_chunk_;
|
|
2816
|
-
while (chunk != NULL) {
|
|
2817
|
-
heap()->isolate()->memory_allocator()->Protect(chunk->address(),
|
|
2818
|
-
chunk->size());
|
|
2819
|
-
chunk = chunk->next();
|
|
2820
|
-
}
|
|
2821
|
-
}
|
|
2822
|
-
|
|
2823
|
-
|
|
2824
|
-
void LargeObjectSpace::Unprotect() {
|
|
2825
|
-
LargeObjectChunk* chunk = first_chunk_;
|
|
2826
|
-
while (chunk != NULL) {
|
|
2827
|
-
bool is_code = chunk->GetObject()->IsCode();
|
|
2828
|
-
heap()->isolate()->memory_allocator()->Unprotect(chunk->address(),
|
|
2829
|
-
chunk->size(), is_code ? EXECUTABLE : NOT_EXECUTABLE);
|
|
2830
|
-
chunk = chunk->next();
|
|
2777
|
+
chunk->Free(chunk->GetPage()->PageExecutability());
|
|
2831
2778
|
}
|
|
2779
|
+
Setup();
|
|
2832
2780
|
}
|
|
2833
2781
|
|
|
2834
|
-
#endif
|
|
2835
|
-
|
|
2836
2782
|
|
|
2837
2783
|
MaybeObject* LargeObjectSpace::AllocateRawInternal(int requested_size,
|
|
2838
2784
|
int object_size,
|
|
@@ -2858,14 +2804,14 @@ MaybeObject* LargeObjectSpace::AllocateRawInternal(int requested_size,
|
|
|
2858
2804
|
first_chunk_ = chunk;
|
|
2859
2805
|
|
|
2860
2806
|
// Initialize page header.
|
|
2861
|
-
Page* page =
|
|
2807
|
+
Page* page = chunk->GetPage();
|
|
2862
2808
|
Address object_address = page->ObjectAreaStart();
|
|
2863
2809
|
|
|
2864
2810
|
// Clear the low order bit of the second word in the page to flag it as a
|
|
2865
2811
|
// large object page. If the chunk_size happened to be written there, its
|
|
2866
2812
|
// low order bit should already be clear.
|
|
2867
2813
|
page->SetIsLargeObjectPage(true);
|
|
2868
|
-
page->
|
|
2814
|
+
page->SetPageExecutability(executable);
|
|
2869
2815
|
page->SetRegionMarks(Page::kAllRegionsCleanMarks);
|
|
2870
2816
|
return HeapObject::FromAddress(object_address);
|
|
2871
2817
|
}
|
|
@@ -2996,14 +2942,8 @@ void LargeObjectSpace::FreeUnmarkedObjects() {
|
|
|
2996
2942
|
previous = current;
|
|
2997
2943
|
current = current->next();
|
|
2998
2944
|
} else {
|
|
2999
|
-
Page* page = Page::FromAddress(RoundUp(current->address(),
|
|
3000
|
-
Page::kPageSize));
|
|
3001
|
-
Executability executable =
|
|
3002
|
-
page->IsPageExecutable() ? EXECUTABLE : NOT_EXECUTABLE;
|
|
3003
|
-
Address chunk_address = current->address();
|
|
3004
|
-
size_t chunk_size = current->size();
|
|
3005
|
-
|
|
3006
2945
|
// Cut the chunk out from the chunk list.
|
|
2946
|
+
LargeObjectChunk* current_chunk = current;
|
|
3007
2947
|
current = current->next();
|
|
3008
2948
|
if (previous == NULL) {
|
|
3009
2949
|
first_chunk_ = current;
|
|
@@ -3016,17 +2956,10 @@ void LargeObjectSpace::FreeUnmarkedObjects() {
|
|
|
3016
2956
|
object, heap()->isolate());
|
|
3017
2957
|
LiveObjectList::ProcessNonLive(object);
|
|
3018
2958
|
|
|
3019
|
-
size_ -= static_cast<int>(
|
|
2959
|
+
size_ -= static_cast<int>(current_chunk->size());
|
|
3020
2960
|
objects_size_ -= object->Size();
|
|
3021
2961
|
page_count_--;
|
|
3022
|
-
|
|
3023
|
-
if (executable == EXECUTABLE) space = kObjectSpaceCodeSpace;
|
|
3024
|
-
heap()->isolate()->memory_allocator()->FreeRawMemory(chunk_address,
|
|
3025
|
-
chunk_size,
|
|
3026
|
-
executable);
|
|
3027
|
-
heap()->isolate()->memory_allocator()->PerformAllocationCallback(
|
|
3028
|
-
space, kAllocationActionFree, size_);
|
|
3029
|
-
LOG(heap()->isolate(), DeleteEvent("LargeObjectChunk", chunk_address));
|
|
2962
|
+
current_chunk->Free(current_chunk->GetPage()->PageExecutability());
|
|
3030
2963
|
}
|
|
3031
2964
|
}
|
|
3032
2965
|
}
|
|
@@ -3070,7 +3003,7 @@ void LargeObjectSpace::Verify() {
|
|
|
3070
3003
|
// strings), fixed arrays, and byte arrays in large object space.
|
|
3071
3004
|
ASSERT(object->IsCode() || object->IsSeqString() ||
|
|
3072
3005
|
object->IsExternalString() || object->IsFixedArray() ||
|
|
3073
|
-
object->IsByteArray());
|
|
3006
|
+
object->IsFixedDoubleArray() || object->IsByteArray());
|
|
3074
3007
|
|
|
3075
3008
|
// The object itself should look OK.
|
|
3076
3009
|
object->Verify();
|