libv8 3.3.10.4 → 3.5.10.beta1
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/libv8/scons/CHANGES.txt +24 -231
- data/lib/libv8/scons/LICENSE.txt +1 -1
- data/lib/libv8/scons/MANIFEST +0 -1
- data/lib/libv8/scons/PKG-INFO +1 -1
- data/lib/libv8/scons/README.txt +9 -9
- data/lib/libv8/scons/RELEASE.txt +75 -77
- data/lib/libv8/scons/engine/SCons/Action.py +6 -22
- data/lib/libv8/scons/engine/SCons/Builder.py +2 -2
- data/lib/libv8/scons/engine/SCons/CacheDir.py +2 -2
- data/lib/libv8/scons/engine/SCons/Debug.py +2 -2
- data/lib/libv8/scons/engine/SCons/Defaults.py +10 -24
- data/lib/libv8/scons/engine/SCons/Environment.py +19 -118
- data/lib/libv8/scons/engine/SCons/Errors.py +2 -2
- data/lib/libv8/scons/engine/SCons/Executor.py +2 -2
- data/lib/libv8/scons/engine/SCons/Job.py +2 -2
- data/lib/libv8/scons/engine/SCons/Memoize.py +2 -2
- data/lib/libv8/scons/engine/SCons/Node/Alias.py +2 -2
- data/lib/libv8/scons/engine/SCons/Node/FS.py +121 -281
- data/lib/libv8/scons/engine/SCons/Node/Python.py +2 -2
- data/lib/libv8/scons/engine/SCons/Node/__init__.py +5 -6
- data/lib/libv8/scons/engine/SCons/Options/BoolOption.py +2 -2
- data/lib/libv8/scons/engine/SCons/Options/EnumOption.py +2 -2
- data/lib/libv8/scons/engine/SCons/Options/ListOption.py +2 -2
- data/lib/libv8/scons/engine/SCons/Options/PackageOption.py +2 -2
- data/lib/libv8/scons/engine/SCons/Options/PathOption.py +2 -2
- data/lib/libv8/scons/engine/SCons/Options/__init__.py +2 -2
- data/lib/libv8/scons/engine/SCons/PathList.py +2 -2
- data/lib/libv8/scons/engine/SCons/Platform/__init__.py +2 -2
- data/lib/libv8/scons/engine/SCons/Platform/aix.py +2 -2
- data/lib/libv8/scons/engine/SCons/Platform/cygwin.py +2 -2
- data/lib/libv8/scons/engine/SCons/Platform/darwin.py +3 -27
- data/lib/libv8/scons/engine/SCons/Platform/hpux.py +2 -2
- data/lib/libv8/scons/engine/SCons/Platform/irix.py +2 -2
- data/lib/libv8/scons/engine/SCons/Platform/os2.py +2 -2
- data/lib/libv8/scons/engine/SCons/Platform/posix.py +2 -2
- data/lib/libv8/scons/engine/SCons/Platform/sunos.py +2 -2
- data/lib/libv8/scons/engine/SCons/Platform/win32.py +2 -2
- data/lib/libv8/scons/engine/SCons/SConf.py +2 -2
- data/lib/libv8/scons/engine/SCons/SConsign.py +3 -9
- data/lib/libv8/scons/engine/SCons/Scanner/C.py +2 -2
- data/lib/libv8/scons/engine/SCons/Scanner/D.py +2 -2
- data/lib/libv8/scons/engine/SCons/Scanner/Dir.py +2 -2
- data/lib/libv8/scons/engine/SCons/Scanner/Fortran.py +2 -2
- data/lib/libv8/scons/engine/SCons/Scanner/IDL.py +2 -2
- data/lib/libv8/scons/engine/SCons/Scanner/LaTeX.py +2 -5
- data/lib/libv8/scons/engine/SCons/Scanner/Prog.py +2 -2
- data/lib/libv8/scons/engine/SCons/Scanner/RC.py +3 -3
- data/lib/libv8/scons/engine/SCons/Scanner/__init__.py +2 -2
- data/lib/libv8/scons/engine/SCons/Script/Interactive.py +2 -2
- data/lib/libv8/scons/engine/SCons/Script/Main.py +11 -82
- data/lib/libv8/scons/engine/SCons/Script/SConsOptions.py +5 -5
- data/lib/libv8/scons/engine/SCons/Script/SConscript.py +2 -2
- data/lib/libv8/scons/engine/SCons/Script/__init__.py +2 -2
- data/lib/libv8/scons/engine/SCons/Sig.py +2 -2
- data/lib/libv8/scons/engine/SCons/Subst.py +2 -2
- data/lib/libv8/scons/engine/SCons/Taskmaster.py +2 -10
- data/lib/libv8/scons/engine/SCons/Tool/386asm.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/BitKeeper.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/CVS.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/FortranCommon.py +2 -19
- data/lib/libv8/scons/engine/SCons/Tool/JavaCommon.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/MSCommon/__init__.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/MSCommon/arch.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/MSCommon/common.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/MSCommon/netframework.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/MSCommon/sdk.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/MSCommon/vc.py +6 -9
- data/lib/libv8/scons/engine/SCons/Tool/MSCommon/vs.py +2 -29
- data/lib/libv8/scons/engine/SCons/Tool/Perforce.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/PharLapCommon.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/RCS.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/SCCS.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/Subversion.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/__init__.py +3 -3
- data/lib/libv8/scons/engine/SCons/Tool/aixc++.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/aixcc.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/aixf77.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/aixlink.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/applelink.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/ar.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/as.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/bcc32.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/c++.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/cc.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/cvf.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/default.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/dmd.py +7 -24
- data/lib/libv8/scons/engine/SCons/Tool/dvi.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/dvipdf.py +2 -3
- data/lib/libv8/scons/engine/SCons/Tool/dvips.py +2 -3
- data/lib/libv8/scons/engine/SCons/Tool/f77.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/f90.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/f95.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/filesystem.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/fortran.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/g++.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/g77.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/gas.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/gcc.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/gfortran.py +3 -3
- data/lib/libv8/scons/engine/SCons/Tool/gnulink.py +3 -2
- data/lib/libv8/scons/engine/SCons/Tool/gs.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/hpc++.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/hpcc.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/hplink.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/icc.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/icl.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/ifl.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/ifort.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/ilink.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/ilink32.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/install.py +3 -57
- data/lib/libv8/scons/engine/SCons/Tool/intelc.py +25 -65
- data/lib/libv8/scons/engine/SCons/Tool/ipkg.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/jar.py +3 -9
- data/lib/libv8/scons/engine/SCons/Tool/javac.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/javah.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/latex.py +2 -3
- data/lib/libv8/scons/engine/SCons/Tool/lex.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/link.py +5 -6
- data/lib/libv8/scons/engine/SCons/Tool/linkloc.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/m4.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/masm.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/midl.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/mingw.py +10 -31
- data/lib/libv8/scons/engine/SCons/Tool/mslib.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/mslink.py +9 -61
- data/lib/libv8/scons/engine/SCons/Tool/mssdk.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/msvc.py +11 -21
- data/lib/libv8/scons/engine/SCons/Tool/msvs.py +59 -477
- data/lib/libv8/scons/engine/SCons/Tool/mwcc.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/mwld.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/nasm.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/packaging/__init__.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/packaging/ipk.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/packaging/msi.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/packaging/rpm.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/packaging/src_tarbz2.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/packaging/src_targz.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/packaging/src_zip.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/packaging/tarbz2.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/packaging/targz.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/packaging/zip.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/pdf.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/pdflatex.py +2 -3
- data/lib/libv8/scons/engine/SCons/Tool/pdftex.py +2 -3
- data/lib/libv8/scons/engine/SCons/Tool/qt.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/rmic.py +3 -9
- data/lib/libv8/scons/engine/SCons/Tool/rpcgen.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/rpm.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/sgiar.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/sgic++.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/sgicc.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/sgilink.py +3 -2
- data/lib/libv8/scons/engine/SCons/Tool/sunar.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/sunc++.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/suncc.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/sunf77.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/sunf90.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/sunf95.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/sunlink.py +3 -2
- data/lib/libv8/scons/engine/SCons/Tool/swig.py +5 -6
- data/lib/libv8/scons/engine/SCons/Tool/tar.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/tex.py +43 -96
- data/lib/libv8/scons/engine/SCons/Tool/textfile.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/tlib.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/wix.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/yacc.py +2 -12
- data/lib/libv8/scons/engine/SCons/Tool/zip.py +2 -2
- data/lib/libv8/scons/engine/SCons/Util.py +3 -3
- data/lib/libv8/scons/engine/SCons/Variables/BoolVariable.py +2 -2
- data/lib/libv8/scons/engine/SCons/Variables/EnumVariable.py +3 -3
- data/lib/libv8/scons/engine/SCons/Variables/ListVariable.py +2 -2
- data/lib/libv8/scons/engine/SCons/Variables/PackageVariable.py +2 -2
- data/lib/libv8/scons/engine/SCons/Variables/PathVariable.py +2 -2
- data/lib/libv8/scons/engine/SCons/Variables/__init__.py +2 -2
- data/lib/libv8/scons/engine/SCons/Warnings.py +2 -2
- data/lib/libv8/scons/engine/SCons/__init__.py +6 -6
- data/lib/libv8/scons/engine/SCons/compat/__init__.py +2 -2
- data/lib/libv8/scons/engine/SCons/compat/_scons_builtins.py +2 -2
- data/lib/libv8/scons/engine/SCons/compat/_scons_collections.py +2 -2
- data/lib/libv8/scons/engine/SCons/compat/_scons_dbm.py +2 -2
- data/lib/libv8/scons/engine/SCons/compat/_scons_hashlib.py +2 -2
- data/lib/libv8/scons/engine/SCons/compat/_scons_io.py +2 -2
- data/lib/libv8/scons/engine/SCons/cpp.py +2 -2
- data/lib/libv8/scons/engine/SCons/dblite.py +1 -4
- data/lib/libv8/scons/engine/SCons/exitfuncs.py +2 -2
- data/lib/libv8/scons/scons-time.1 +3 -3
- data/lib/libv8/scons/scons.1 +1164 -1170
- data/lib/libv8/scons/sconsign.1 +3 -3
- data/lib/libv8/scons/script/scons +22 -22
- data/lib/libv8/scons/script/scons-time +2 -2
- data/lib/libv8/scons/script/scons.bat +4 -7
- data/lib/libv8/scons/script/sconsign +20 -21
- data/lib/libv8/scons/setup.cfg +1 -0
- data/lib/libv8/scons/setup.py +40 -38
- data/lib/libv8/v8/.gitignore +1 -1
- data/lib/libv8/v8/AUTHORS +2 -0
- data/lib/libv8/v8/ChangeLog +387 -0
- data/lib/libv8/v8/Makefile +171 -0
- data/lib/libv8/v8/SConstruct +124 -51
- data/lib/libv8/v8/build/README.txt +31 -14
- data/lib/libv8/v8/build/all.gyp +11 -4
- data/lib/libv8/v8/build/armu.gypi +6 -2
- data/lib/libv8/v8/build/common.gypi +240 -94
- data/lib/libv8/v8/build/gyp_v8 +32 -4
- data/lib/libv8/v8/build/standalone.gypi +200 -0
- data/lib/libv8/v8/include/v8-debug.h +0 -0
- data/lib/libv8/v8/include/v8-profiler.h +8 -11
- data/lib/libv8/v8/include/v8.h +191 -108
- data/lib/libv8/v8/preparser/SConscript +2 -2
- data/lib/libv8/v8/preparser/preparser-process.cc +3 -3
- data/lib/libv8/v8/preparser/preparser.gyp +42 -0
- data/lib/libv8/v8/src/SConscript +33 -8
- data/lib/libv8/v8/src/accessors.cc +77 -43
- data/lib/libv8/v8/src/api.cc +393 -191
- data/lib/libv8/v8/src/api.h +4 -8
- data/lib/libv8/v8/src/apinatives.js +15 -3
- data/lib/libv8/v8/src/arguments.h +8 -0
- data/lib/libv8/v8/src/arm/assembler-arm.cc +120 -120
- data/lib/libv8/v8/src/arm/assembler-arm.h +92 -43
- data/lib/libv8/v8/src/arm/builtins-arm.cc +32 -39
- data/lib/libv8/v8/src/arm/code-stubs-arm.cc +572 -351
- data/lib/libv8/v8/src/arm/code-stubs-arm.h +8 -77
- data/lib/libv8/v8/src/arm/codegen-arm.h +0 -2
- data/lib/libv8/v8/src/arm/deoptimizer-arm.cc +50 -30
- data/lib/libv8/v8/src/arm/disasm-arm.cc +1 -1
- data/lib/libv8/v8/src/arm/frames-arm.h +9 -5
- data/lib/libv8/v8/src/arm/full-codegen-arm.cc +331 -432
- data/lib/libv8/v8/src/arm/ic-arm.cc +192 -124
- data/lib/libv8/v8/src/arm/lithium-arm.cc +216 -232
- data/lib/libv8/v8/src/arm/lithium-arm.h +106 -259
- data/lib/libv8/v8/src/arm/lithium-codegen-arm.cc +633 -642
- data/lib/libv8/v8/src/arm/lithium-codegen-arm.h +4 -4
- data/lib/libv8/v8/src/arm/lithium-gap-resolver-arm.cc +1 -3
- data/lib/libv8/v8/src/arm/macro-assembler-arm.cc +260 -185
- data/lib/libv8/v8/src/arm/macro-assembler-arm.h +45 -25
- data/lib/libv8/v8/src/arm/regexp-macro-assembler-arm.cc +25 -13
- data/lib/libv8/v8/src/arm/regexp-macro-assembler-arm.h +3 -0
- data/lib/libv8/v8/src/arm/stub-cache-arm.cc +413 -226
- data/lib/libv8/v8/src/array.js +38 -18
- data/lib/libv8/v8/src/assembler.cc +12 -5
- data/lib/libv8/v8/src/assembler.h +15 -9
- data/lib/libv8/v8/src/ast-inl.h +34 -25
- data/lib/libv8/v8/src/ast.cc +141 -72
- data/lib/libv8/v8/src/ast.h +255 -181
- data/lib/libv8/v8/src/bignum.cc +3 -4
- data/lib/libv8/v8/src/bootstrapper.cc +55 -11
- data/lib/libv8/v8/src/bootstrapper.h +3 -2
- data/lib/libv8/v8/src/builtins.cc +8 -2
- data/lib/libv8/v8/src/builtins.h +4 -0
- data/lib/libv8/v8/src/cached-powers.cc +8 -4
- data/lib/libv8/v8/src/checks.h +3 -3
- data/lib/libv8/v8/src/code-stubs.cc +173 -28
- data/lib/libv8/v8/src/code-stubs.h +104 -148
- data/lib/libv8/v8/src/codegen.cc +8 -8
- data/lib/libv8/v8/src/compilation-cache.cc +2 -47
- data/lib/libv8/v8/src/compilation-cache.h +0 -10
- data/lib/libv8/v8/src/compiler.cc +27 -16
- data/lib/libv8/v8/src/compiler.h +13 -18
- data/lib/libv8/v8/src/contexts.cc +107 -72
- data/lib/libv8/v8/src/contexts.h +70 -34
- data/lib/libv8/v8/src/conversions-inl.h +572 -14
- data/lib/libv8/v8/src/conversions.cc +9 -707
- data/lib/libv8/v8/src/conversions.h +23 -12
- data/lib/libv8/v8/src/cpu-profiler-inl.h +2 -19
- data/lib/libv8/v8/src/cpu-profiler.cc +4 -21
- data/lib/libv8/v8/src/cpu-profiler.h +8 -17
- data/lib/libv8/v8/src/d8-debug.cc +5 -3
- data/lib/libv8/v8/src/d8-debug.h +6 -7
- data/lib/libv8/v8/src/d8-posix.cc +1 -10
- data/lib/libv8/v8/src/d8.cc +721 -219
- data/lib/libv8/v8/src/d8.gyp +37 -12
- data/lib/libv8/v8/src/d8.h +141 -19
- data/lib/libv8/v8/src/d8.js +17 -8
- data/lib/libv8/v8/src/date.js +16 -5
- data/lib/libv8/v8/src/dateparser-inl.h +242 -39
- data/lib/libv8/v8/src/dateparser.cc +38 -4
- data/lib/libv8/v8/src/dateparser.h +170 -28
- data/lib/libv8/v8/src/debug-agent.cc +5 -3
- data/lib/libv8/v8/src/debug-agent.h +11 -7
- data/lib/libv8/v8/src/debug-debugger.js +65 -34
- data/lib/libv8/v8/src/debug.cc +30 -60
- data/lib/libv8/v8/src/debug.h +5 -3
- data/lib/libv8/v8/src/deoptimizer.cc +227 -10
- data/lib/libv8/v8/src/deoptimizer.h +133 -9
- data/lib/libv8/v8/src/disassembler.cc +22 -14
- data/lib/libv8/v8/src/diy-fp.cc +4 -3
- data/lib/libv8/v8/src/diy-fp.h +3 -3
- data/lib/libv8/v8/src/elements.cc +634 -0
- data/lib/libv8/v8/src/elements.h +95 -0
- data/lib/libv8/v8/src/execution.cc +5 -21
- data/lib/libv8/v8/src/extensions/experimental/break-iterator.cc +3 -1
- data/lib/libv8/v8/src/extensions/experimental/break-iterator.h +1 -1
- data/lib/libv8/v8/src/extensions/experimental/collator.cc +6 -2
- data/lib/libv8/v8/src/extensions/experimental/collator.h +1 -2
- data/lib/libv8/v8/src/extensions/experimental/datetime-format.cc +384 -0
- data/lib/libv8/v8/src/extensions/experimental/datetime-format.h +83 -0
- data/lib/libv8/v8/src/extensions/experimental/experimental.gyp +18 -7
- data/lib/libv8/v8/src/extensions/experimental/i18n-extension.cc +12 -16
- data/lib/libv8/v8/src/extensions/experimental/i18n-extension.h +1 -1
- data/lib/libv8/v8/src/extensions/experimental/i18n-js2c.py +126 -0
- data/lib/libv8/v8/src/extensions/experimental/i18n-locale.cc +3 -4
- data/lib/libv8/v8/src/extensions/experimental/i18n-locale.h +1 -1
- data/lib/libv8/v8/src/{shell.h → extensions/experimental/i18n-natives.h} +8 -20
- data/lib/libv8/v8/src/extensions/experimental/i18n-utils.cc +45 -1
- data/lib/libv8/v8/src/extensions/experimental/i18n-utils.h +21 -1
- data/lib/libv8/v8/src/extensions/experimental/i18n.js +211 -11
- data/lib/libv8/v8/src/extensions/experimental/language-matcher.cc +4 -3
- data/lib/libv8/v8/src/extensions/experimental/language-matcher.h +1 -1
- data/lib/libv8/v8/src/extensions/experimental/number-format.cc +374 -0
- data/lib/libv8/v8/src/extensions/experimental/number-format.h +71 -0
- data/lib/libv8/v8/src/factory.cc +89 -18
- data/lib/libv8/v8/src/factory.h +36 -8
- data/lib/libv8/v8/src/flag-definitions.h +11 -44
- data/lib/libv8/v8/src/frames-inl.h +8 -1
- data/lib/libv8/v8/src/frames.cc +39 -3
- data/lib/libv8/v8/src/frames.h +10 -3
- data/lib/libv8/v8/src/full-codegen.cc +311 -293
- data/lib/libv8/v8/src/full-codegen.h +183 -143
- data/lib/libv8/v8/src/func-name-inferrer.cc +29 -15
- data/lib/libv8/v8/src/func-name-inferrer.h +19 -9
- data/lib/libv8/v8/src/gdb-jit.cc +658 -55
- data/lib/libv8/v8/src/gdb-jit.h +6 -2
- data/lib/libv8/v8/src/global-handles.cc +368 -312
- data/lib/libv8/v8/src/global-handles.h +29 -36
- data/lib/libv8/v8/src/globals.h +3 -1
- data/lib/libv8/v8/src/handles.cc +43 -69
- data/lib/libv8/v8/src/handles.h +21 -16
- data/lib/libv8/v8/src/heap-inl.h +11 -13
- data/lib/libv8/v8/src/heap-profiler.cc +0 -999
- data/lib/libv8/v8/src/heap-profiler.h +0 -303
- data/lib/libv8/v8/src/heap.cc +366 -141
- data/lib/libv8/v8/src/heap.h +87 -26
- data/lib/libv8/v8/src/hydrogen-instructions.cc +192 -81
- data/lib/libv8/v8/src/hydrogen-instructions.h +711 -482
- data/lib/libv8/v8/src/hydrogen.cc +1146 -629
- data/lib/libv8/v8/src/hydrogen.h +100 -64
- data/lib/libv8/v8/src/ia32/assembler-ia32.cc +19 -0
- data/lib/libv8/v8/src/ia32/assembler-ia32.h +15 -2
- data/lib/libv8/v8/src/ia32/builtins-ia32.cc +34 -39
- data/lib/libv8/v8/src/ia32/code-stubs-ia32.cc +675 -377
- data/lib/libv8/v8/src/ia32/code-stubs-ia32.h +8 -69
- data/lib/libv8/v8/src/ia32/codegen-ia32.cc +1 -0
- data/lib/libv8/v8/src/ia32/codegen-ia32.h +0 -2
- data/lib/libv8/v8/src/ia32/cpu-ia32.cc +3 -2
- data/lib/libv8/v8/src/ia32/deoptimizer-ia32.cc +28 -3
- data/lib/libv8/v8/src/ia32/disasm-ia32.cc +21 -10
- data/lib/libv8/v8/src/ia32/frames-ia32.h +6 -5
- data/lib/libv8/v8/src/ia32/full-codegen-ia32.cc +459 -465
- data/lib/libv8/v8/src/ia32/ic-ia32.cc +196 -147
- data/lib/libv8/v8/src/ia32/lithium-codegen-ia32.cc +575 -650
- data/lib/libv8/v8/src/ia32/lithium-codegen-ia32.h +19 -21
- data/lib/libv8/v8/src/ia32/lithium-gap-resolver-ia32.cc +7 -2
- data/lib/libv8/v8/src/ia32/lithium-ia32.cc +261 -256
- data/lib/libv8/v8/src/ia32/lithium-ia32.h +234 -335
- data/lib/libv8/v8/src/ia32/macro-assembler-ia32.cc +224 -67
- data/lib/libv8/v8/src/ia32/macro-assembler-ia32.h +63 -19
- data/lib/libv8/v8/src/ia32/regexp-macro-assembler-ia32.cc +22 -8
- data/lib/libv8/v8/src/ia32/regexp-macro-assembler-ia32.h +3 -0
- data/lib/libv8/v8/src/ia32/stub-cache-ia32.cc +380 -239
- data/lib/libv8/v8/src/ic.cc +198 -234
- data/lib/libv8/v8/src/ic.h +32 -30
- data/lib/libv8/v8/src/interpreter-irregexp.cc +6 -4
- data/lib/libv8/v8/src/isolate.cc +112 -95
- data/lib/libv8/v8/src/isolate.h +55 -71
- data/lib/libv8/v8/src/json-parser.h +486 -48
- data/lib/libv8/v8/src/json.js +28 -23
- data/lib/libv8/v8/src/jsregexp.cc +163 -208
- data/lib/libv8/v8/src/jsregexp.h +0 -1
- data/lib/libv8/v8/src/lithium-allocator-inl.h +29 -27
- data/lib/libv8/v8/src/lithium-allocator.cc +22 -17
- data/lib/libv8/v8/src/lithium-allocator.h +8 -8
- data/lib/libv8/v8/src/lithium.cc +16 -11
- data/lib/libv8/v8/src/lithium.h +31 -34
- data/lib/libv8/v8/src/liveedit.cc +111 -15
- data/lib/libv8/v8/src/liveedit.h +3 -4
- data/lib/libv8/v8/src/liveobjectlist.cc +116 -80
- data/lib/libv8/v8/src/liveobjectlist.h +2 -2
- data/lib/libv8/v8/src/log-inl.h +0 -4
- data/lib/libv8/v8/src/log-utils.cc +25 -143
- data/lib/libv8/v8/src/log-utils.h +13 -92
- data/lib/libv8/v8/src/log.cc +26 -249
- data/lib/libv8/v8/src/log.h +6 -17
- data/lib/libv8/v8/src/macros.py +9 -6
- data/lib/libv8/v8/src/mark-compact.cc +276 -56
- data/lib/libv8/v8/src/mark-compact.h +20 -0
- data/lib/libv8/v8/src/messages.js +93 -39
- data/lib/libv8/v8/src/mips/assembler-mips-inl.h +9 -3
- data/lib/libv8/v8/src/mips/assembler-mips.cc +297 -189
- data/lib/libv8/v8/src/mips/assembler-mips.h +121 -54
- data/lib/libv8/v8/src/mips/builtins-mips.cc +23 -24
- data/lib/libv8/v8/src/mips/code-stubs-mips.cc +484 -263
- data/lib/libv8/v8/src/mips/code-stubs-mips.h +8 -83
- data/lib/libv8/v8/src/mips/codegen-mips.h +0 -2
- data/lib/libv8/v8/src/mips/constants-mips.h +37 -11
- data/lib/libv8/v8/src/mips/deoptimizer-mips.cc +6 -1
- data/lib/libv8/v8/src/mips/frames-mips.h +8 -7
- data/lib/libv8/v8/src/mips/full-codegen-mips.cc +258 -419
- data/lib/libv8/v8/src/mips/ic-mips.cc +181 -121
- data/lib/libv8/v8/src/mips/macro-assembler-mips.cc +640 -382
- data/lib/libv8/v8/src/mips/macro-assembler-mips.h +94 -89
- data/lib/libv8/v8/src/mips/regexp-macro-assembler-mips.cc +23 -10
- data/lib/libv8/v8/src/mips/regexp-macro-assembler-mips.h +6 -1
- data/lib/libv8/v8/src/mips/simulator-mips.cc +249 -49
- data/lib/libv8/v8/src/mips/simulator-mips.h +25 -1
- data/lib/libv8/v8/src/mips/stub-cache-mips.cc +373 -161
- data/lib/libv8/v8/src/mirror-debugger.js +55 -8
- data/lib/libv8/v8/src/misc-intrinsics.h +89 -0
- data/lib/libv8/v8/src/mksnapshot.cc +36 -4
- data/lib/libv8/v8/src/natives.h +5 -2
- data/lib/libv8/v8/src/objects-debug.cc +73 -6
- data/lib/libv8/v8/src/objects-inl.h +529 -164
- data/lib/libv8/v8/src/objects-printer.cc +67 -12
- data/lib/libv8/v8/src/objects-visiting.cc +13 -2
- data/lib/libv8/v8/src/objects-visiting.h +41 -1
- data/lib/libv8/v8/src/objects.cc +2200 -1177
- data/lib/libv8/v8/src/objects.h +912 -283
- data/lib/libv8/v8/src/parser.cc +566 -371
- data/lib/libv8/v8/src/parser.h +35 -33
- data/lib/libv8/v8/src/platform-cygwin.cc +10 -25
- data/lib/libv8/v8/src/platform-freebsd.cc +4 -29
- data/lib/libv8/v8/src/platform-linux.cc +60 -57
- data/lib/libv8/v8/src/platform-macos.cc +4 -27
- data/lib/libv8/v8/src/platform-nullos.cc +3 -16
- data/lib/libv8/v8/src/platform-openbsd.cc +247 -85
- data/lib/libv8/v8/src/platform-posix.cc +43 -1
- data/lib/libv8/v8/src/platform-solaris.cc +151 -112
- data/lib/libv8/v8/src/platform-tls.h +1 -1
- data/lib/libv8/v8/src/platform-win32.cc +65 -39
- data/lib/libv8/v8/src/platform.h +17 -14
- data/lib/libv8/v8/src/preparse-data-format.h +2 -2
- data/lib/libv8/v8/src/preparse-data.h +8 -2
- data/lib/libv8/v8/src/preparser-api.cc +2 -18
- data/lib/libv8/v8/src/preparser.cc +106 -65
- data/lib/libv8/v8/src/preparser.h +26 -5
- data/lib/libv8/v8/src/prettyprinter.cc +25 -43
- data/lib/libv8/v8/src/profile-generator-inl.h +0 -4
- data/lib/libv8/v8/src/profile-generator.cc +213 -34
- data/lib/libv8/v8/src/profile-generator.h +9 -9
- data/lib/libv8/v8/src/property.h +1 -0
- data/lib/libv8/v8/src/proxy.js +74 -4
- data/lib/libv8/v8/src/regexp-macro-assembler.cc +10 -6
- data/lib/libv8/v8/src/regexp.js +16 -11
- data/lib/libv8/v8/src/rewriter.cc +24 -133
- data/lib/libv8/v8/src/runtime-profiler.cc +27 -151
- data/lib/libv8/v8/src/runtime-profiler.h +5 -31
- data/lib/libv8/v8/src/runtime.cc +1450 -681
- data/lib/libv8/v8/src/runtime.h +47 -31
- data/lib/libv8/v8/src/runtime.js +2 -1
- data/lib/libv8/v8/src/scanner-base.cc +358 -220
- data/lib/libv8/v8/src/scanner-base.h +30 -138
- data/lib/libv8/v8/src/scanner.cc +0 -18
- data/lib/libv8/v8/src/scanner.h +0 -15
- data/lib/libv8/v8/src/scopeinfo.cc +3 -1
- data/lib/libv8/v8/src/scopeinfo.h +1 -6
- data/lib/libv8/v8/src/scopes.cc +243 -253
- data/lib/libv8/v8/src/scopes.h +58 -109
- data/lib/libv8/v8/src/serialize.cc +12 -54
- data/lib/libv8/v8/src/serialize.h +47 -0
- data/lib/libv8/v8/src/small-pointer-list.h +25 -0
- data/lib/libv8/v8/src/spaces-inl.h +4 -50
- data/lib/libv8/v8/src/spaces.cc +64 -131
- data/lib/libv8/v8/src/spaces.h +19 -70
- data/lib/libv8/v8/src/string-stream.cc +3 -1
- data/lib/libv8/v8/src/string.js +10 -6
- data/lib/libv8/v8/src/strtod.cc +7 -3
- data/lib/libv8/v8/src/stub-cache.cc +59 -129
- data/lib/libv8/v8/src/stub-cache.h +42 -54
- data/lib/libv8/v8/src/third_party/valgrind/valgrind.h +1447 -1339
- data/lib/libv8/v8/src/token.cc +4 -4
- data/lib/libv8/v8/src/token.h +6 -5
- data/lib/libv8/v8/src/type-info.cc +173 -129
- data/lib/libv8/v8/src/type-info.h +40 -22
- data/lib/libv8/v8/src/utils.cc +25 -304
- data/lib/libv8/v8/src/utils.h +118 -3
- data/lib/libv8/v8/src/v8-counters.h +3 -6
- data/lib/libv8/v8/src/v8.cc +34 -27
- data/lib/libv8/v8/src/v8.h +7 -7
- data/lib/libv8/v8/src/v8conversions.cc +129 -0
- data/lib/libv8/v8/src/v8conversions.h +60 -0
- data/lib/libv8/v8/src/v8globals.h +15 -6
- data/lib/libv8/v8/src/v8natives.js +300 -78
- data/lib/libv8/v8/src/v8threads.cc +14 -6
- data/lib/libv8/v8/src/v8threads.h +4 -1
- data/lib/libv8/v8/src/v8utils.cc +360 -0
- data/lib/libv8/v8/src/v8utils.h +17 -66
- data/lib/libv8/v8/src/variables.cc +7 -12
- data/lib/libv8/v8/src/variables.h +12 -10
- data/lib/libv8/v8/src/version.cc +2 -2
- data/lib/libv8/v8/src/vm-state-inl.h +0 -41
- data/lib/libv8/v8/src/vm-state.h +0 -11
- data/lib/libv8/v8/src/weakmap.js +103 -0
- data/lib/libv8/v8/src/x64/assembler-x64.h +6 -3
- data/lib/libv8/v8/src/x64/builtins-x64.cc +25 -22
- data/lib/libv8/v8/src/x64/code-stubs-x64.cc +523 -250
- data/lib/libv8/v8/src/x64/code-stubs-x64.h +8 -71
- data/lib/libv8/v8/src/x64/codegen-x64.cc +1 -0
- data/lib/libv8/v8/src/x64/codegen-x64.h +0 -2
- data/lib/libv8/v8/src/x64/cpu-x64.cc +2 -1
- data/lib/libv8/v8/src/x64/deoptimizer-x64.cc +40 -8
- data/lib/libv8/v8/src/x64/disasm-x64.cc +12 -10
- data/lib/libv8/v8/src/x64/frames-x64.h +7 -6
- data/lib/libv8/v8/src/x64/full-codegen-x64.cc +310 -415
- data/lib/libv8/v8/src/x64/ic-x64.cc +180 -117
- data/lib/libv8/v8/src/x64/lithium-codegen-x64.cc +411 -523
- data/lib/libv8/v8/src/x64/lithium-codegen-x64.h +11 -6
- data/lib/libv8/v8/src/x64/lithium-x64.cc +191 -216
- data/lib/libv8/v8/src/x64/lithium-x64.h +112 -263
- data/lib/libv8/v8/src/x64/macro-assembler-x64.cc +177 -61
- data/lib/libv8/v8/src/x64/macro-assembler-x64.h +23 -7
- data/lib/libv8/v8/src/x64/regexp-macro-assembler-x64.cc +21 -9
- data/lib/libv8/v8/src/x64/regexp-macro-assembler-x64.h +6 -0
- data/lib/libv8/v8/src/x64/stub-cache-x64.cc +273 -107
- data/lib/libv8/v8/src/zone.cc +31 -22
- data/lib/libv8/v8/src/zone.h +12 -6
- data/lib/libv8/v8/tools/codemap.js +8 -0
- data/lib/libv8/v8/tools/gcmole/Makefile +43 -0
- data/lib/libv8/v8/tools/gcmole/gcmole.lua +0 -2
- data/lib/libv8/v8/tools/gdb-v8-support.py +154 -0
- data/lib/libv8/v8/tools/grokdump.py +44 -35
- data/lib/libv8/v8/tools/gyp/v8.gyp +94 -248
- data/lib/libv8/v8/tools/js2c.py +83 -52
- data/lib/libv8/v8/tools/linux-tick-processor +4 -6
- data/lib/libv8/v8/tools/ll_prof.py +3 -3
- data/lib/libv8/v8/tools/oom_dump/README +3 -1
- data/lib/libv8/v8/tools/presubmit.py +11 -4
- data/lib/libv8/v8/tools/profile.js +46 -2
- data/lib/libv8/v8/tools/splaytree.js +11 -0
- data/lib/libv8/v8/tools/stats-viewer.py +15 -11
- data/lib/libv8/v8/tools/test-wrapper-gypbuild.py +227 -0
- data/lib/libv8/v8/tools/test.py +28 -8
- data/lib/libv8/v8/tools/tickprocessor.js +0 -16
- data/lib/libv8/version.rb +1 -1
- data/libv8.gemspec +2 -2
- metadata +31 -19
- data/lib/libv8/scons/engine/SCons/Tool/f03.py +0 -63
- data/lib/libv8/v8/src/json-parser.cc +0 -504
@@ -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_
|