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
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Copyright
|
|
1
|
+
// Copyright 2011 the V8 project authors. All rights reserved.
|
|
2
2
|
// Redistribution and use in source and binary forms, with or without
|
|
3
3
|
// modification, are permitted provided that the following conditions are
|
|
4
4
|
// met:
|
|
@@ -44,6 +44,9 @@ DeoptimizerData::DeoptimizerData() {
|
|
|
44
44
|
lazy_deoptimization_entry_code_ = NULL;
|
|
45
45
|
current_ = NULL;
|
|
46
46
|
deoptimizing_code_list_ = NULL;
|
|
47
|
+
#ifdef ENABLE_DEBUGGER_SUPPORT
|
|
48
|
+
deoptimized_frame_info_ = NULL;
|
|
49
|
+
#endif
|
|
47
50
|
}
|
|
48
51
|
|
|
49
52
|
|
|
@@ -58,6 +61,16 @@ DeoptimizerData::~DeoptimizerData() {
|
|
|
58
61
|
}
|
|
59
62
|
}
|
|
60
63
|
|
|
64
|
+
|
|
65
|
+
#ifdef ENABLE_DEBUGGER_SUPPORT
|
|
66
|
+
void DeoptimizerData::Iterate(ObjectVisitor* v) {
|
|
67
|
+
if (deoptimized_frame_info_ != NULL) {
|
|
68
|
+
deoptimized_frame_info_->Iterate(v);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
#endif
|
|
72
|
+
|
|
73
|
+
|
|
61
74
|
Deoptimizer* Deoptimizer::New(JSFunction* function,
|
|
62
75
|
BailoutType type,
|
|
63
76
|
unsigned bailout_id,
|
|
@@ -70,7 +83,8 @@ Deoptimizer* Deoptimizer::New(JSFunction* function,
|
|
|
70
83
|
type,
|
|
71
84
|
bailout_id,
|
|
72
85
|
from,
|
|
73
|
-
fp_to_sp_delta
|
|
86
|
+
fp_to_sp_delta,
|
|
87
|
+
NULL);
|
|
74
88
|
ASSERT(isolate->deoptimizer_data()->current_ == NULL);
|
|
75
89
|
isolate->deoptimizer_data()->current_ = deoptimizer;
|
|
76
90
|
return deoptimizer;
|
|
@@ -86,6 +100,91 @@ Deoptimizer* Deoptimizer::Grab(Isolate* isolate) {
|
|
|
86
100
|
return result;
|
|
87
101
|
}
|
|
88
102
|
|
|
103
|
+
#ifdef ENABLE_DEBUGGER_SUPPORT
|
|
104
|
+
DeoptimizedFrameInfo* Deoptimizer::DebuggerInspectableFrame(
|
|
105
|
+
JavaScriptFrame* frame,
|
|
106
|
+
int frame_index,
|
|
107
|
+
Isolate* isolate) {
|
|
108
|
+
ASSERT(isolate == Isolate::Current());
|
|
109
|
+
ASSERT(frame->is_optimized());
|
|
110
|
+
ASSERT(isolate->deoptimizer_data()->deoptimized_frame_info_ == NULL);
|
|
111
|
+
|
|
112
|
+
// Get the function and code from the frame.
|
|
113
|
+
JSFunction* function = JSFunction::cast(frame->function());
|
|
114
|
+
Code* code = frame->LookupCode();
|
|
115
|
+
Address code_start_address = code->instruction_start();
|
|
116
|
+
|
|
117
|
+
// Locate the deoptimization point in the code. As we are at a call the
|
|
118
|
+
// return address must be at a place in the code with deoptimization support.
|
|
119
|
+
int deoptimization_index = Safepoint::kNoDeoptimizationIndex;
|
|
120
|
+
// Scope this as the safe point constructor will disallow allocation.
|
|
121
|
+
{
|
|
122
|
+
SafepointTable table(code);
|
|
123
|
+
for (unsigned i = 0; i < table.length(); ++i) {
|
|
124
|
+
Address address = code_start_address + table.GetPcOffset(i);
|
|
125
|
+
if (address == frame->pc()) {
|
|
126
|
+
SafepointEntry safepoint_entry = table.GetEntry(i);
|
|
127
|
+
ASSERT(safepoint_entry.deoptimization_index() !=
|
|
128
|
+
Safepoint::kNoDeoptimizationIndex);
|
|
129
|
+
deoptimization_index = safepoint_entry.deoptimization_index();
|
|
130
|
+
break;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
ASSERT(deoptimization_index != Safepoint::kNoDeoptimizationIndex);
|
|
135
|
+
|
|
136
|
+
// Always use the actual stack slots when calculating the fp to sp
|
|
137
|
+
// delta adding two for the function and context.
|
|
138
|
+
unsigned stack_slots = code->stack_slots();
|
|
139
|
+
unsigned fp_to_sp_delta = ((stack_slots + 2) * kPointerSize);
|
|
140
|
+
|
|
141
|
+
Deoptimizer* deoptimizer = new Deoptimizer(isolate,
|
|
142
|
+
function,
|
|
143
|
+
Deoptimizer::DEBUGGER,
|
|
144
|
+
deoptimization_index,
|
|
145
|
+
frame->pc(),
|
|
146
|
+
fp_to_sp_delta,
|
|
147
|
+
code);
|
|
148
|
+
Address tos = frame->fp() - fp_to_sp_delta;
|
|
149
|
+
deoptimizer->FillInputFrame(tos, frame);
|
|
150
|
+
|
|
151
|
+
// Calculate the output frames.
|
|
152
|
+
Deoptimizer::ComputeOutputFrames(deoptimizer);
|
|
153
|
+
|
|
154
|
+
// Create the GC safe output frame information and register it for GC
|
|
155
|
+
// handling.
|
|
156
|
+
ASSERT_LT(frame_index, deoptimizer->output_count());
|
|
157
|
+
DeoptimizedFrameInfo* info =
|
|
158
|
+
new DeoptimizedFrameInfo(deoptimizer, frame_index);
|
|
159
|
+
isolate->deoptimizer_data()->deoptimized_frame_info_ = info;
|
|
160
|
+
|
|
161
|
+
// Get the "simulated" top and size for the requested frame.
|
|
162
|
+
Address top =
|
|
163
|
+
reinterpret_cast<Address>(deoptimizer->output_[frame_index]->GetTop());
|
|
164
|
+
uint32_t size = deoptimizer->output_[frame_index]->GetFrameSize();
|
|
165
|
+
|
|
166
|
+
// Done with the GC-unsafe frame descriptions. This re-enables allocation.
|
|
167
|
+
deoptimizer->DeleteFrameDescriptions();
|
|
168
|
+
|
|
169
|
+
// Allocate a heap number for the doubles belonging to this frame.
|
|
170
|
+
deoptimizer->MaterializeHeapNumbersForDebuggerInspectableFrame(
|
|
171
|
+
top, size, info);
|
|
172
|
+
|
|
173
|
+
// Finished using the deoptimizer instance.
|
|
174
|
+
delete deoptimizer;
|
|
175
|
+
|
|
176
|
+
return info;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
|
|
180
|
+
void Deoptimizer::DeleteDebuggerInspectableFrame(DeoptimizedFrameInfo* info,
|
|
181
|
+
Isolate* isolate) {
|
|
182
|
+
ASSERT(isolate == Isolate::Current());
|
|
183
|
+
ASSERT(isolate->deoptimizer_data()->deoptimized_frame_info_ == info);
|
|
184
|
+
delete info;
|
|
185
|
+
isolate->deoptimizer_data()->deoptimized_frame_info_ = NULL;
|
|
186
|
+
}
|
|
187
|
+
#endif
|
|
89
188
|
|
|
90
189
|
void Deoptimizer::GenerateDeoptimizationEntries(MacroAssembler* masm,
|
|
91
190
|
int count,
|
|
@@ -209,18 +308,24 @@ Deoptimizer::Deoptimizer(Isolate* isolate,
|
|
|
209
308
|
BailoutType type,
|
|
210
309
|
unsigned bailout_id,
|
|
211
310
|
Address from,
|
|
212
|
-
int fp_to_sp_delta
|
|
311
|
+
int fp_to_sp_delta,
|
|
312
|
+
Code* optimized_code)
|
|
213
313
|
: isolate_(isolate),
|
|
214
314
|
function_(function),
|
|
215
315
|
bailout_id_(bailout_id),
|
|
216
316
|
bailout_type_(type),
|
|
217
317
|
from_(from),
|
|
218
318
|
fp_to_sp_delta_(fp_to_sp_delta),
|
|
319
|
+
input_(NULL),
|
|
219
320
|
output_count_(0),
|
|
220
321
|
output_(NULL),
|
|
221
322
|
deferred_heap_numbers_(0) {
|
|
222
323
|
if (FLAG_trace_deopt && type != OSR) {
|
|
223
|
-
|
|
324
|
+
if (type == DEBUGGER) {
|
|
325
|
+
PrintF("**** DEOPT FOR DEBUGGER: ");
|
|
326
|
+
} else {
|
|
327
|
+
PrintF("**** DEOPT: ");
|
|
328
|
+
}
|
|
224
329
|
function->PrintName();
|
|
225
330
|
PrintF(" at bailout #%u, address 0x%" V8PRIxPTR ", frame size %d\n",
|
|
226
331
|
bailout_id,
|
|
@@ -248,10 +353,16 @@ Deoptimizer::Deoptimizer(Isolate* isolate,
|
|
|
248
353
|
optimized_code_ = function_->code();
|
|
249
354
|
ASSERT(optimized_code_->kind() == Code::OPTIMIZED_FUNCTION);
|
|
250
355
|
ASSERT(!optimized_code_->contains(from));
|
|
356
|
+
} else if (type == DEBUGGER) {
|
|
357
|
+
optimized_code_ = optimized_code;
|
|
358
|
+
ASSERT(optimized_code_->contains(from));
|
|
251
359
|
}
|
|
252
360
|
ASSERT(HEAP->allow_allocation(false));
|
|
253
361
|
unsigned size = ComputeInputFrameSize();
|
|
254
362
|
input_ = new(size) FrameDescription(size, function);
|
|
363
|
+
#ifdef DEBUG
|
|
364
|
+
input_->SetKind(Code::OPTIMIZED_FUNCTION);
|
|
365
|
+
#endif
|
|
255
366
|
}
|
|
256
367
|
|
|
257
368
|
|
|
@@ -417,6 +528,7 @@ void Deoptimizer::DoComputeOutputFrames() {
|
|
|
417
528
|
|
|
418
529
|
|
|
419
530
|
void Deoptimizer::MaterializeHeapNumbers() {
|
|
531
|
+
ASSERT_NE(DEBUGGER, bailout_type_);
|
|
420
532
|
for (int i = 0; i < deferred_heap_numbers_.length(); i++) {
|
|
421
533
|
HeapNumberMaterializationDescriptor d = deferred_heap_numbers_[i];
|
|
422
534
|
Handle<Object> num = isolate_->factory()->NewNumber(d.value());
|
|
@@ -432,6 +544,47 @@ void Deoptimizer::MaterializeHeapNumbers() {
|
|
|
432
544
|
}
|
|
433
545
|
|
|
434
546
|
|
|
547
|
+
#ifdef ENABLE_DEBUGGER_SUPPORT
|
|
548
|
+
void Deoptimizer::MaterializeHeapNumbersForDebuggerInspectableFrame(
|
|
549
|
+
Address top, uint32_t size, DeoptimizedFrameInfo* info) {
|
|
550
|
+
ASSERT_EQ(DEBUGGER, bailout_type_);
|
|
551
|
+
for (int i = 0; i < deferred_heap_numbers_.length(); i++) {
|
|
552
|
+
HeapNumberMaterializationDescriptor d = deferred_heap_numbers_[i];
|
|
553
|
+
|
|
554
|
+
// Check of the heap number to materialize actually belong to the frame
|
|
555
|
+
// being extracted.
|
|
556
|
+
Address slot = d.slot_address();
|
|
557
|
+
if (top <= slot && slot < top + size) {
|
|
558
|
+
Handle<Object> num = isolate_->factory()->NewNumber(d.value());
|
|
559
|
+
// Calculate the index with the botton of the expression stack
|
|
560
|
+
// at index 0, and the fixed part (including incoming arguments)
|
|
561
|
+
// at negative indexes.
|
|
562
|
+
int index = static_cast<int>(
|
|
563
|
+
info->expression_count_ - (slot - top) / kPointerSize - 1);
|
|
564
|
+
if (FLAG_trace_deopt) {
|
|
565
|
+
PrintF("Materializing a new heap number %p [%e] in slot %p"
|
|
566
|
+
"for stack index %d\n",
|
|
567
|
+
reinterpret_cast<void*>(*num),
|
|
568
|
+
d.value(),
|
|
569
|
+
d.slot_address(),
|
|
570
|
+
index);
|
|
571
|
+
}
|
|
572
|
+
if (index >=0) {
|
|
573
|
+
info->SetExpression(index, *num);
|
|
574
|
+
} else {
|
|
575
|
+
// Calculate parameter index subtracting one for the receiver.
|
|
576
|
+
int parameter_index =
|
|
577
|
+
index +
|
|
578
|
+
static_cast<int>(size) / kPointerSize -
|
|
579
|
+
info->expression_count_ - 1;
|
|
580
|
+
info->SetParameter(parameter_index, *num);
|
|
581
|
+
}
|
|
582
|
+
}
|
|
583
|
+
}
|
|
584
|
+
}
|
|
585
|
+
#endif
|
|
586
|
+
|
|
587
|
+
|
|
435
588
|
void Deoptimizer::DoTranslateCommand(TranslationIterator* iterator,
|
|
436
589
|
int frame_index,
|
|
437
590
|
unsigned output_offset) {
|
|
@@ -901,6 +1054,9 @@ LargeObjectChunk* Deoptimizer::CreateCode(BailoutType type) {
|
|
|
901
1054
|
ASSERT(desc.reloc_size == 0);
|
|
902
1055
|
|
|
903
1056
|
LargeObjectChunk* chunk = LargeObjectChunk::New(desc.instr_size, EXECUTABLE);
|
|
1057
|
+
if (chunk == NULL) {
|
|
1058
|
+
V8::FatalProcessOutOfMemory("Not enough memory for deoptimization table");
|
|
1059
|
+
}
|
|
904
1060
|
memcpy(chunk->GetStartAddress(), desc.buffer, desc.instr_size);
|
|
905
1061
|
CPU::FlushICache(chunk->GetStartAddress(), desc.instr_size);
|
|
906
1062
|
return chunk;
|
|
@@ -969,18 +1125,48 @@ unsigned FrameDescription::GetOffsetFromSlotIndex(Deoptimizer* deoptimizer,
|
|
|
969
1125
|
if (slot_index >= 0) {
|
|
970
1126
|
// Local or spill slots. Skip the fixed part of the frame
|
|
971
1127
|
// including all arguments.
|
|
972
|
-
unsigned base =
|
|
973
|
-
GetFrameSize() - deoptimizer->ComputeFixedSize(GetFunction())
|
|
1128
|
+
unsigned base =
|
|
1129
|
+
GetFrameSize() - deoptimizer->ComputeFixedSize(GetFunction());
|
|
974
1130
|
return base - ((slot_index + 1) * kPointerSize);
|
|
975
1131
|
} else {
|
|
976
1132
|
// Incoming parameter.
|
|
977
|
-
unsigned base =
|
|
978
|
-
deoptimizer->ComputeIncomingArgumentSize(GetFunction())
|
|
1133
|
+
unsigned base = GetFrameSize() -
|
|
1134
|
+
deoptimizer->ComputeIncomingArgumentSize(GetFunction());
|
|
979
1135
|
return base - ((slot_index + 1) * kPointerSize);
|
|
980
1136
|
}
|
|
981
1137
|
}
|
|
982
1138
|
|
|
983
1139
|
|
|
1140
|
+
int FrameDescription::ComputeParametersCount() {
|
|
1141
|
+
return function_->shared()->formal_parameter_count();
|
|
1142
|
+
}
|
|
1143
|
+
|
|
1144
|
+
|
|
1145
|
+
Object* FrameDescription::GetParameter(Deoptimizer* deoptimizer, int index) {
|
|
1146
|
+
ASSERT_EQ(Code::FUNCTION, kind_);
|
|
1147
|
+
ASSERT(index >= 0);
|
|
1148
|
+
ASSERT(index < ComputeParametersCount());
|
|
1149
|
+
// The slot indexes for incoming arguments are negative.
|
|
1150
|
+
unsigned offset = GetOffsetFromSlotIndex(deoptimizer,
|
|
1151
|
+
index - ComputeParametersCount());
|
|
1152
|
+
return reinterpret_cast<Object*>(*GetFrameSlotPointer(offset));
|
|
1153
|
+
}
|
|
1154
|
+
|
|
1155
|
+
|
|
1156
|
+
unsigned FrameDescription::GetExpressionCount(Deoptimizer* deoptimizer) {
|
|
1157
|
+
ASSERT_EQ(Code::FUNCTION, kind_);
|
|
1158
|
+
unsigned size = GetFrameSize() - deoptimizer->ComputeFixedSize(GetFunction());
|
|
1159
|
+
return size / kPointerSize;
|
|
1160
|
+
}
|
|
1161
|
+
|
|
1162
|
+
|
|
1163
|
+
Object* FrameDescription::GetExpression(Deoptimizer* deoptimizer, int index) {
|
|
1164
|
+
ASSERT_EQ(Code::FUNCTION, kind_);
|
|
1165
|
+
unsigned offset = GetOffsetFromSlotIndex(deoptimizer, index);
|
|
1166
|
+
return reinterpret_cast<Object*>(*GetFrameSlotPointer(offset));
|
|
1167
|
+
}
|
|
1168
|
+
|
|
1169
|
+
|
|
984
1170
|
void TranslationBuffer::Add(int32_t value) {
|
|
985
1171
|
// Encode the sign bit in the least significant bit.
|
|
986
1172
|
bool is_negative = (value < 0);
|
|
@@ -997,11 +1183,11 @@ void TranslationBuffer::Add(int32_t value) {
|
|
|
997
1183
|
|
|
998
1184
|
|
|
999
1185
|
int32_t TranslationIterator::Next() {
|
|
1000
|
-
ASSERT(HasNext());
|
|
1001
1186
|
// Run through the bytes until we reach one with a least significant
|
|
1002
1187
|
// bit of zero (marks the end).
|
|
1003
1188
|
uint32_t bits = 0;
|
|
1004
1189
|
for (int i = 0; true; i += 7) {
|
|
1190
|
+
ASSERT(HasNext());
|
|
1005
1191
|
uint8_t next = buffer_->get(index_++);
|
|
1006
1192
|
bits |= (next >> 1) << i;
|
|
1007
1193
|
if ((next & 1) == 0) break;
|
|
@@ -1104,7 +1290,7 @@ int Translation::NumberOfOperandsFor(Opcode opcode) {
|
|
|
1104
1290
|
}
|
|
1105
1291
|
|
|
1106
1292
|
|
|
1107
|
-
#
|
|
1293
|
+
#if defined(OBJECT_PRINT) || defined(ENABLE_DISASSEMBLER)
|
|
1108
1294
|
|
|
1109
1295
|
const char* Translation::StringFor(Opcode opcode) {
|
|
1110
1296
|
switch (opcode) {
|
|
@@ -1252,5 +1438,36 @@ void SlotRef::ComputeSlotMappingForArguments(JavaScriptFrame* frame,
|
|
|
1252
1438
|
UNREACHABLE();
|
|
1253
1439
|
}
|
|
1254
1440
|
|
|
1441
|
+
#ifdef ENABLE_DEBUGGER_SUPPORT
|
|
1442
|
+
|
|
1443
|
+
DeoptimizedFrameInfo::DeoptimizedFrameInfo(
|
|
1444
|
+
Deoptimizer* deoptimizer, int frame_index) {
|
|
1445
|
+
FrameDescription* output_frame = deoptimizer->output_[frame_index];
|
|
1446
|
+
SetFunction(output_frame->GetFunction());
|
|
1447
|
+
expression_count_ = output_frame->GetExpressionCount(deoptimizer);
|
|
1448
|
+
parameters_count_ = output_frame->ComputeParametersCount();
|
|
1449
|
+
parameters_ = new Object*[parameters_count_];
|
|
1450
|
+
for (int i = 0; i < parameters_count_; i++) {
|
|
1451
|
+
SetParameter(i, output_frame->GetParameter(deoptimizer, i));
|
|
1452
|
+
}
|
|
1453
|
+
expression_stack_ = new Object*[expression_count_];
|
|
1454
|
+
for (int i = 0; i < expression_count_; i++) {
|
|
1455
|
+
SetExpression(i, output_frame->GetExpression(deoptimizer, i));
|
|
1456
|
+
}
|
|
1457
|
+
}
|
|
1458
|
+
|
|
1459
|
+
|
|
1460
|
+
DeoptimizedFrameInfo::~DeoptimizedFrameInfo() {
|
|
1461
|
+
delete[] expression_stack_;
|
|
1462
|
+
delete[] parameters_;
|
|
1463
|
+
}
|
|
1464
|
+
|
|
1465
|
+
void DeoptimizedFrameInfo::Iterate(ObjectVisitor* v) {
|
|
1466
|
+
v->VisitPointer(BitCast<Object**>(&function_));
|
|
1467
|
+
v->VisitPointers(parameters_, parameters_ + parameters_count_);
|
|
1468
|
+
v->VisitPointers(expression_stack_, expression_stack_ + expression_count_);
|
|
1469
|
+
}
|
|
1470
|
+
|
|
1471
|
+
#endif // ENABLE_DEBUGGER_SUPPORT
|
|
1255
1472
|
|
|
1256
1473
|
} } // namespace v8::internal
|
|
@@ -41,7 +41,7 @@ namespace internal {
|
|
|
41
41
|
class FrameDescription;
|
|
42
42
|
class TranslationIterator;
|
|
43
43
|
class DeoptimizingCodeListNode;
|
|
44
|
-
|
|
44
|
+
class DeoptimizedFrameInfo;
|
|
45
45
|
|
|
46
46
|
class HeapNumberMaterializationDescriptor BASE_EMBEDDED {
|
|
47
47
|
public:
|
|
@@ -81,11 +81,19 @@ class DeoptimizerData {
|
|
|
81
81
|
DeoptimizerData();
|
|
82
82
|
~DeoptimizerData();
|
|
83
83
|
|
|
84
|
+
#ifdef ENABLE_DEBUGGER_SUPPORT
|
|
85
|
+
void Iterate(ObjectVisitor* v);
|
|
86
|
+
#endif
|
|
87
|
+
|
|
84
88
|
private:
|
|
85
89
|
LargeObjectChunk* eager_deoptimization_entry_code_;
|
|
86
90
|
LargeObjectChunk* lazy_deoptimization_entry_code_;
|
|
87
91
|
Deoptimizer* current_;
|
|
88
92
|
|
|
93
|
+
#ifdef ENABLE_DEBUGGER_SUPPORT
|
|
94
|
+
DeoptimizedFrameInfo* deoptimized_frame_info_;
|
|
95
|
+
#endif
|
|
96
|
+
|
|
89
97
|
// List of deoptimized code which still have references from active stack
|
|
90
98
|
// frames. These code objects are needed by the deoptimizer when deoptimizing
|
|
91
99
|
// a frame for which the code object for the function function has been
|
|
@@ -103,7 +111,10 @@ class Deoptimizer : public Malloced {
|
|
|
103
111
|
enum BailoutType {
|
|
104
112
|
EAGER,
|
|
105
113
|
LAZY,
|
|
106
|
-
OSR
|
|
114
|
+
OSR,
|
|
115
|
+
// This last bailout type is not really a bailout, but used by the
|
|
116
|
+
// debugger to deoptimize stack frames to allow inspection.
|
|
117
|
+
DEBUGGER
|
|
107
118
|
};
|
|
108
119
|
|
|
109
120
|
int output_count() const { return output_count_; }
|
|
@@ -116,6 +127,16 @@ class Deoptimizer : public Malloced {
|
|
|
116
127
|
Isolate* isolate);
|
|
117
128
|
static Deoptimizer* Grab(Isolate* isolate);
|
|
118
129
|
|
|
130
|
+
#ifdef ENABLE_DEBUGGER_SUPPORT
|
|
131
|
+
// The returned object with information on the optimized frame needs to be
|
|
132
|
+
// freed before another one can be generated.
|
|
133
|
+
static DeoptimizedFrameInfo* DebuggerInspectableFrame(JavaScriptFrame* frame,
|
|
134
|
+
int frame_index,
|
|
135
|
+
Isolate* isolate);
|
|
136
|
+
static void DeleteDebuggerInspectableFrame(DeoptimizedFrameInfo* info,
|
|
137
|
+
Isolate* isolate);
|
|
138
|
+
#endif
|
|
139
|
+
|
|
119
140
|
// Makes sure that there is enough room in the relocation
|
|
120
141
|
// information of a code object to perform lazy deoptimization
|
|
121
142
|
// patching. If there is not enough room a new relocation
|
|
@@ -171,6 +192,10 @@ class Deoptimizer : public Malloced {
|
|
|
171
192
|
~Deoptimizer();
|
|
172
193
|
|
|
173
194
|
void MaterializeHeapNumbers();
|
|
195
|
+
#ifdef ENABLE_DEBUGGER_SUPPORT
|
|
196
|
+
void MaterializeHeapNumbersForDebuggerInspectableFrame(
|
|
197
|
+
Address top, uint32_t size, DeoptimizedFrameInfo* info);
|
|
198
|
+
#endif
|
|
174
199
|
|
|
175
200
|
static void ComputeOutputFrames(Deoptimizer* deoptimizer);
|
|
176
201
|
|
|
@@ -233,7 +258,8 @@ class Deoptimizer : public Malloced {
|
|
|
233
258
|
BailoutType type,
|
|
234
259
|
unsigned bailout_id,
|
|
235
260
|
Address from,
|
|
236
|
-
int fp_to_sp_delta
|
|
261
|
+
int fp_to_sp_delta,
|
|
262
|
+
Code* optimized_code);
|
|
237
263
|
void DeleteFrameDescriptions();
|
|
238
264
|
|
|
239
265
|
void DoComputeOutputFrames();
|
|
@@ -269,6 +295,11 @@ class Deoptimizer : public Malloced {
|
|
|
269
295
|
static Code* FindDeoptimizingCodeFromAddress(Address addr);
|
|
270
296
|
static void RemoveDeoptimizingCode(Code* code);
|
|
271
297
|
|
|
298
|
+
// Fill the input from from a JavaScript frame. This is used when
|
|
299
|
+
// the debugger needs to inspect an optimized frame. For normal
|
|
300
|
+
// deoptimizations the input frame is filled in generated code.
|
|
301
|
+
void FillInputFrame(Address tos, JavaScriptFrame* frame);
|
|
302
|
+
|
|
272
303
|
Isolate* isolate_;
|
|
273
304
|
JSFunction* function_;
|
|
274
305
|
Code* optimized_code_;
|
|
@@ -286,10 +317,11 @@ class Deoptimizer : public Malloced {
|
|
|
286
317
|
|
|
287
318
|
List<HeapNumberMaterializationDescriptor> deferred_heap_numbers_;
|
|
288
319
|
|
|
289
|
-
static int table_entry_size_;
|
|
320
|
+
static const int table_entry_size_;
|
|
290
321
|
|
|
291
322
|
friend class FrameDescription;
|
|
292
323
|
friend class DeoptimizingCodeListNode;
|
|
324
|
+
friend class DeoptimizedFrameInfo;
|
|
293
325
|
};
|
|
294
326
|
|
|
295
327
|
|
|
@@ -304,11 +336,18 @@ class FrameDescription {
|
|
|
304
336
|
return malloc(size + frame_size - kPointerSize);
|
|
305
337
|
}
|
|
306
338
|
|
|
339
|
+
void operator delete(void* pointer, uint32_t frame_size) {
|
|
340
|
+
free(pointer);
|
|
341
|
+
}
|
|
342
|
+
|
|
307
343
|
void operator delete(void* description) {
|
|
308
344
|
free(description);
|
|
309
345
|
}
|
|
310
346
|
|
|
311
|
-
|
|
347
|
+
uint32_t GetFrameSize() const {
|
|
348
|
+
ASSERT(static_cast<uint32_t>(frame_size_) == frame_size_);
|
|
349
|
+
return static_cast<uint32_t>(frame_size_);
|
|
350
|
+
}
|
|
312
351
|
|
|
313
352
|
JSFunction* GetFunction() const { return function_; }
|
|
314
353
|
|
|
@@ -360,6 +399,23 @@ class FrameDescription {
|
|
|
360
399
|
|
|
361
400
|
void SetContinuation(intptr_t pc) { continuation_ = pc; }
|
|
362
401
|
|
|
402
|
+
#ifdef DEBUG
|
|
403
|
+
Code::Kind GetKind() const { return kind_; }
|
|
404
|
+
void SetKind(Code::Kind kind) { kind_ = kind; }
|
|
405
|
+
#endif
|
|
406
|
+
|
|
407
|
+
// Get the incoming arguments count.
|
|
408
|
+
int ComputeParametersCount();
|
|
409
|
+
|
|
410
|
+
// Get a parameter value for an unoptimized frame.
|
|
411
|
+
Object* GetParameter(Deoptimizer* deoptimizer, int index);
|
|
412
|
+
|
|
413
|
+
// Get the expression stack height for a unoptimized frame.
|
|
414
|
+
unsigned GetExpressionCount(Deoptimizer* deoptimizer);
|
|
415
|
+
|
|
416
|
+
// Get the expression stack value for an unoptimized frame.
|
|
417
|
+
Object* GetExpression(Deoptimizer* deoptimizer, int index);
|
|
418
|
+
|
|
363
419
|
static int registers_offset() {
|
|
364
420
|
return OFFSET_OF(FrameDescription, registers_);
|
|
365
421
|
}
|
|
@@ -391,6 +447,9 @@ class FrameDescription {
|
|
|
391
447
|
private:
|
|
392
448
|
static const uint32_t kZapUint32 = 0xbeeddead;
|
|
393
449
|
|
|
450
|
+
// Frame_size_ must hold a uint32_t value. It is only a uintptr_t to
|
|
451
|
+
// keep the variable-size array frame_content_ of type intptr_t at
|
|
452
|
+
// the end of the structure aligned.
|
|
394
453
|
uintptr_t frame_size_; // Number of bytes.
|
|
395
454
|
JSFunction* function_;
|
|
396
455
|
intptr_t registers_[Register::kNumRegisters];
|
|
@@ -399,6 +458,9 @@ class FrameDescription {
|
|
|
399
458
|
intptr_t pc_;
|
|
400
459
|
intptr_t fp_;
|
|
401
460
|
Smi* state_;
|
|
461
|
+
#ifdef DEBUG
|
|
462
|
+
Code::Kind kind_;
|
|
463
|
+
#endif
|
|
402
464
|
|
|
403
465
|
// Continuation is the PC where the execution continues after
|
|
404
466
|
// deoptimizing.
|
|
@@ -439,9 +501,7 @@ class TranslationIterator BASE_EMBEDDED {
|
|
|
439
501
|
|
|
440
502
|
int32_t Next();
|
|
441
503
|
|
|
442
|
-
bool HasNext() const { return index_
|
|
443
|
-
|
|
444
|
-
void Done() { index_ = -1; }
|
|
504
|
+
bool HasNext() const { return index_ < buffer_->length(); }
|
|
445
505
|
|
|
446
506
|
void Skip(int n) {
|
|
447
507
|
for (int i = 0; i < n; i++) Next();
|
|
@@ -495,7 +555,7 @@ class Translation BASE_EMBEDDED {
|
|
|
495
555
|
|
|
496
556
|
static int NumberOfOperandsFor(Opcode opcode);
|
|
497
557
|
|
|
498
|
-
#
|
|
558
|
+
#if defined(OBJECT_PRINT) || defined(ENABLE_DISASSEMBLER)
|
|
499
559
|
static const char* StringFor(Opcode opcode);
|
|
500
560
|
#endif
|
|
501
561
|
|
|
@@ -597,6 +657,70 @@ class SlotRef BASE_EMBEDDED {
|
|
|
597
657
|
};
|
|
598
658
|
|
|
599
659
|
|
|
660
|
+
#ifdef ENABLE_DEBUGGER_SUPPORT
|
|
661
|
+
// Class used to represent an unoptimized frame when the debugger
|
|
662
|
+
// needs to inspect a frame that is part of an optimized frame. The
|
|
663
|
+
// internally used FrameDescription objects are not GC safe so for use
|
|
664
|
+
// by the debugger frame information is copied to an object of this type.
|
|
665
|
+
class DeoptimizedFrameInfo : public Malloced {
|
|
666
|
+
public:
|
|
667
|
+
DeoptimizedFrameInfo(Deoptimizer* deoptimizer, int frame_index);
|
|
668
|
+
virtual ~DeoptimizedFrameInfo();
|
|
669
|
+
|
|
670
|
+
// GC support.
|
|
671
|
+
void Iterate(ObjectVisitor* v);
|
|
672
|
+
|
|
673
|
+
// Return the number of incoming arguments.
|
|
674
|
+
int parameters_count() { return parameters_count_; }
|
|
675
|
+
|
|
676
|
+
// Return the height of the expression stack.
|
|
677
|
+
int expression_count() { return expression_count_; }
|
|
678
|
+
|
|
679
|
+
// Get the frame function.
|
|
680
|
+
JSFunction* GetFunction() {
|
|
681
|
+
return function_;
|
|
682
|
+
}
|
|
683
|
+
|
|
684
|
+
// Get an incoming argument.
|
|
685
|
+
Object* GetParameter(int index) {
|
|
686
|
+
ASSERT(0 <= index && index < parameters_count());
|
|
687
|
+
return parameters_[index];
|
|
688
|
+
}
|
|
689
|
+
|
|
690
|
+
// Get an expression from the expression stack.
|
|
691
|
+
Object* GetExpression(int index) {
|
|
692
|
+
ASSERT(0 <= index && index < expression_count());
|
|
693
|
+
return expression_stack_[index];
|
|
694
|
+
}
|
|
695
|
+
|
|
696
|
+
private:
|
|
697
|
+
// Set the frame function.
|
|
698
|
+
void SetFunction(JSFunction* function) {
|
|
699
|
+
function_ = function;
|
|
700
|
+
}
|
|
701
|
+
|
|
702
|
+
// Set an incoming argument.
|
|
703
|
+
void SetParameter(int index, Object* obj) {
|
|
704
|
+
ASSERT(0 <= index && index < parameters_count());
|
|
705
|
+
parameters_[index] = obj;
|
|
706
|
+
}
|
|
707
|
+
|
|
708
|
+
// Set an expression on the expression stack.
|
|
709
|
+
void SetExpression(int index, Object* obj) {
|
|
710
|
+
ASSERT(0 <= index && index < expression_count());
|
|
711
|
+
expression_stack_[index] = obj;
|
|
712
|
+
}
|
|
713
|
+
|
|
714
|
+
JSFunction* function_;
|
|
715
|
+
int parameters_count_;
|
|
716
|
+
int expression_count_;
|
|
717
|
+
Object** parameters_;
|
|
718
|
+
Object** expression_stack_;
|
|
719
|
+
|
|
720
|
+
friend class Deoptimizer;
|
|
721
|
+
};
|
|
722
|
+
#endif
|
|
723
|
+
|
|
600
724
|
} } // namespace v8::internal
|
|
601
725
|
|
|
602
726
|
#endif // V8_DEOPTIMIZER_H_
|