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
|
@@ -72,17 +72,16 @@ static void GenerateStringDictionaryReceiverCheck(MacroAssembler* masm,
|
|
|
72
72
|
// r1: used to hold receivers map.
|
|
73
73
|
|
|
74
74
|
// Check that the receiver isn't a smi.
|
|
75
|
-
__
|
|
76
|
-
__ j(zero, miss);
|
|
75
|
+
__ JumpIfSmi(receiver, miss);
|
|
77
76
|
|
|
78
77
|
// Check that the receiver is a valid JS object.
|
|
79
78
|
__ mov(r1, FieldOperand(receiver, HeapObject::kMapOffset));
|
|
80
79
|
__ movzx_b(r0, FieldOperand(r1, Map::kInstanceTypeOffset));
|
|
81
|
-
__ cmp(r0,
|
|
80
|
+
__ cmp(r0, FIRST_SPEC_OBJECT_TYPE);
|
|
82
81
|
__ j(below, miss);
|
|
83
82
|
|
|
84
83
|
// If this assert fails, we have to check upper bound too.
|
|
85
|
-
|
|
84
|
+
STATIC_ASSERT(LAST_TYPE == LAST_SPEC_OBJECT_TYPE);
|
|
86
85
|
|
|
87
86
|
GenerateGlobalInstanceTypeCheck(masm, r0, miss);
|
|
88
87
|
|
|
@@ -217,105 +216,6 @@ static void GenerateDictionaryStore(MacroAssembler* masm,
|
|
|
217
216
|
}
|
|
218
217
|
|
|
219
218
|
|
|
220
|
-
static void GenerateNumberDictionaryLoad(MacroAssembler* masm,
|
|
221
|
-
Label* miss,
|
|
222
|
-
Register elements,
|
|
223
|
-
Register key,
|
|
224
|
-
Register r0,
|
|
225
|
-
Register r1,
|
|
226
|
-
Register r2,
|
|
227
|
-
Register result) {
|
|
228
|
-
// Register use:
|
|
229
|
-
//
|
|
230
|
-
// elements - holds the slow-case elements of the receiver and is unchanged.
|
|
231
|
-
//
|
|
232
|
-
// key - holds the smi key on entry and is unchanged.
|
|
233
|
-
//
|
|
234
|
-
// Scratch registers:
|
|
235
|
-
//
|
|
236
|
-
// r0 - holds the untagged key on entry and holds the hash once computed.
|
|
237
|
-
//
|
|
238
|
-
// r1 - used to hold the capacity mask of the dictionary
|
|
239
|
-
//
|
|
240
|
-
// r2 - used for the index into the dictionary.
|
|
241
|
-
//
|
|
242
|
-
// result - holds the result on exit if the load succeeds and we fall through.
|
|
243
|
-
|
|
244
|
-
Label done;
|
|
245
|
-
|
|
246
|
-
// Compute the hash code from the untagged key. This must be kept in sync
|
|
247
|
-
// with ComputeIntegerHash in utils.h.
|
|
248
|
-
//
|
|
249
|
-
// hash = ~hash + (hash << 15);
|
|
250
|
-
__ mov(r1, r0);
|
|
251
|
-
__ not_(r0);
|
|
252
|
-
__ shl(r1, 15);
|
|
253
|
-
__ add(r0, Operand(r1));
|
|
254
|
-
// hash = hash ^ (hash >> 12);
|
|
255
|
-
__ mov(r1, r0);
|
|
256
|
-
__ shr(r1, 12);
|
|
257
|
-
__ xor_(r0, Operand(r1));
|
|
258
|
-
// hash = hash + (hash << 2);
|
|
259
|
-
__ lea(r0, Operand(r0, r0, times_4, 0));
|
|
260
|
-
// hash = hash ^ (hash >> 4);
|
|
261
|
-
__ mov(r1, r0);
|
|
262
|
-
__ shr(r1, 4);
|
|
263
|
-
__ xor_(r0, Operand(r1));
|
|
264
|
-
// hash = hash * 2057;
|
|
265
|
-
__ imul(r0, r0, 2057);
|
|
266
|
-
// hash = hash ^ (hash >> 16);
|
|
267
|
-
__ mov(r1, r0);
|
|
268
|
-
__ shr(r1, 16);
|
|
269
|
-
__ xor_(r0, Operand(r1));
|
|
270
|
-
|
|
271
|
-
// Compute capacity mask.
|
|
272
|
-
__ mov(r1, FieldOperand(elements, NumberDictionary::kCapacityOffset));
|
|
273
|
-
__ shr(r1, kSmiTagSize); // convert smi to int
|
|
274
|
-
__ dec(r1);
|
|
275
|
-
|
|
276
|
-
// Generate an unrolled loop that performs a few probes before giving up.
|
|
277
|
-
const int kProbes = 4;
|
|
278
|
-
for (int i = 0; i < kProbes; i++) {
|
|
279
|
-
// Use r2 for index calculations and keep the hash intact in r0.
|
|
280
|
-
__ mov(r2, r0);
|
|
281
|
-
// Compute the masked index: (hash + i + i * i) & mask.
|
|
282
|
-
if (i > 0) {
|
|
283
|
-
__ add(Operand(r2), Immediate(NumberDictionary::GetProbeOffset(i)));
|
|
284
|
-
}
|
|
285
|
-
__ and_(r2, Operand(r1));
|
|
286
|
-
|
|
287
|
-
// Scale the index by multiplying by the entry size.
|
|
288
|
-
ASSERT(NumberDictionary::kEntrySize == 3);
|
|
289
|
-
__ lea(r2, Operand(r2, r2, times_2, 0)); // r2 = r2 * 3
|
|
290
|
-
|
|
291
|
-
// Check if the key matches.
|
|
292
|
-
__ cmp(key, FieldOperand(elements,
|
|
293
|
-
r2,
|
|
294
|
-
times_pointer_size,
|
|
295
|
-
NumberDictionary::kElementsStartOffset));
|
|
296
|
-
if (i != (kProbes - 1)) {
|
|
297
|
-
__ j(equal, &done);
|
|
298
|
-
} else {
|
|
299
|
-
__ j(not_equal, miss);
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
__ bind(&done);
|
|
304
|
-
// Check that the value is a normal propety.
|
|
305
|
-
const int kDetailsOffset =
|
|
306
|
-
NumberDictionary::kElementsStartOffset + 2 * kPointerSize;
|
|
307
|
-
ASSERT_EQ(NORMAL, 0);
|
|
308
|
-
__ test(FieldOperand(elements, r2, times_pointer_size, kDetailsOffset),
|
|
309
|
-
Immediate(PropertyDetails::TypeField::mask() << kSmiTagSize));
|
|
310
|
-
__ j(not_zero, miss);
|
|
311
|
-
|
|
312
|
-
// Get the value at the masked, scaled index.
|
|
313
|
-
const int kValueOffset =
|
|
314
|
-
NumberDictionary::kElementsStartOffset + kPointerSize;
|
|
315
|
-
__ mov(result, FieldOperand(elements, r2, times_pointer_size, kValueOffset));
|
|
316
|
-
}
|
|
317
|
-
|
|
318
|
-
|
|
319
219
|
void LoadIC::GenerateArrayLength(MacroAssembler* masm) {
|
|
320
220
|
// ----------- S t a t e -------------
|
|
321
221
|
// -- eax : receiver
|
|
@@ -373,8 +273,7 @@ static void GenerateKeyedLoadReceiverCheck(MacroAssembler* masm,
|
|
|
373
273
|
// map - used to hold the map of the receiver.
|
|
374
274
|
|
|
375
275
|
// Check that the object isn't a smi.
|
|
376
|
-
__
|
|
377
|
-
__ j(zero, slow);
|
|
276
|
+
__ JumpIfSmi(receiver, slow);
|
|
378
277
|
|
|
379
278
|
// Get the map of the receiver.
|
|
380
279
|
__ mov(map, FieldOperand(receiver, HeapObject::kMapOffset));
|
|
@@ -425,7 +324,7 @@ static void GenerateFastArrayLoad(MacroAssembler* masm,
|
|
|
425
324
|
__ cmp(key, FieldOperand(scratch, FixedArray::kLengthOffset));
|
|
426
325
|
__ j(above_equal, out_of_range);
|
|
427
326
|
// Fast case: Do the load.
|
|
428
|
-
|
|
327
|
+
STATIC_ASSERT((kPointerSize == 4) && (kSmiTagSize == 1) && (kSmiTag == 0));
|
|
429
328
|
__ mov(scratch, FieldOperand(scratch, key, times_2, FixedArray::kHeaderSize));
|
|
430
329
|
__ cmp(Operand(scratch), Immediate(FACTORY->the_hole_value()));
|
|
431
330
|
// In case the loaded value is the_hole we have to consult GetProperty
|
|
@@ -459,12 +358,89 @@ static void GenerateKeyStringCheck(MacroAssembler* masm,
|
|
|
459
358
|
__ j(zero, index_string);
|
|
460
359
|
|
|
461
360
|
// Is the string a symbol?
|
|
462
|
-
|
|
361
|
+
STATIC_ASSERT(kSymbolTag != 0);
|
|
463
362
|
__ test_b(FieldOperand(map, Map::kInstanceTypeOffset), kIsSymbolMask);
|
|
464
363
|
__ j(zero, not_symbol);
|
|
465
364
|
}
|
|
466
365
|
|
|
467
366
|
|
|
367
|
+
static Operand GenerateMappedArgumentsLookup(MacroAssembler* masm,
|
|
368
|
+
Register object,
|
|
369
|
+
Register key,
|
|
370
|
+
Register scratch1,
|
|
371
|
+
Register scratch2,
|
|
372
|
+
Label* unmapped_case,
|
|
373
|
+
Label* slow_case) {
|
|
374
|
+
Heap* heap = masm->isolate()->heap();
|
|
375
|
+
Factory* factory = masm->isolate()->factory();
|
|
376
|
+
|
|
377
|
+
// Check that the receiver is a JSObject. Because of the elements
|
|
378
|
+
// map check later, we do not need to check for interceptors or
|
|
379
|
+
// whether it requires access checks.
|
|
380
|
+
__ JumpIfSmi(object, slow_case);
|
|
381
|
+
// Check that the object is some kind of JSObject.
|
|
382
|
+
__ CmpObjectType(object, FIRST_JS_RECEIVER_TYPE, scratch1);
|
|
383
|
+
__ j(below, slow_case);
|
|
384
|
+
|
|
385
|
+
// Check that the key is a positive smi.
|
|
386
|
+
__ test(key, Immediate(0x8000001));
|
|
387
|
+
__ j(not_zero, slow_case);
|
|
388
|
+
|
|
389
|
+
// Load the elements into scratch1 and check its map.
|
|
390
|
+
Handle<Map> arguments_map(heap->non_strict_arguments_elements_map());
|
|
391
|
+
__ mov(scratch1, FieldOperand(object, JSObject::kElementsOffset));
|
|
392
|
+
__ CheckMap(scratch1, arguments_map, slow_case, DONT_DO_SMI_CHECK);
|
|
393
|
+
|
|
394
|
+
// Check if element is in the range of mapped arguments. If not, jump
|
|
395
|
+
// to the unmapped lookup with the parameter map in scratch1.
|
|
396
|
+
__ mov(scratch2, FieldOperand(scratch1, FixedArray::kLengthOffset));
|
|
397
|
+
__ sub(Operand(scratch2), Immediate(Smi::FromInt(2)));
|
|
398
|
+
__ cmp(key, Operand(scratch2));
|
|
399
|
+
__ j(greater_equal, unmapped_case);
|
|
400
|
+
|
|
401
|
+
// Load element index and check whether it is the hole.
|
|
402
|
+
const int kHeaderSize = FixedArray::kHeaderSize + 2 * kPointerSize;
|
|
403
|
+
__ mov(scratch2, FieldOperand(scratch1,
|
|
404
|
+
key,
|
|
405
|
+
times_half_pointer_size,
|
|
406
|
+
kHeaderSize));
|
|
407
|
+
__ cmp(scratch2, factory->the_hole_value());
|
|
408
|
+
__ j(equal, unmapped_case);
|
|
409
|
+
|
|
410
|
+
// Load value from context and return it. We can reuse scratch1 because
|
|
411
|
+
// we do not jump to the unmapped lookup (which requires the parameter
|
|
412
|
+
// map in scratch1).
|
|
413
|
+
const int kContextOffset = FixedArray::kHeaderSize;
|
|
414
|
+
__ mov(scratch1, FieldOperand(scratch1, kContextOffset));
|
|
415
|
+
return FieldOperand(scratch1,
|
|
416
|
+
scratch2,
|
|
417
|
+
times_half_pointer_size,
|
|
418
|
+
Context::kHeaderSize);
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
|
|
422
|
+
static Operand GenerateUnmappedArgumentsLookup(MacroAssembler* masm,
|
|
423
|
+
Register key,
|
|
424
|
+
Register parameter_map,
|
|
425
|
+
Register scratch,
|
|
426
|
+
Label* slow_case) {
|
|
427
|
+
// Element is in arguments backing store, which is referenced by the
|
|
428
|
+
// second element of the parameter_map.
|
|
429
|
+
const int kBackingStoreOffset = FixedArray::kHeaderSize + kPointerSize;
|
|
430
|
+
Register backing_store = parameter_map;
|
|
431
|
+
__ mov(backing_store, FieldOperand(parameter_map, kBackingStoreOffset));
|
|
432
|
+
Handle<Map> fixed_array_map(masm->isolate()->heap()->fixed_array_map());
|
|
433
|
+
__ CheckMap(backing_store, fixed_array_map, slow_case, DONT_DO_SMI_CHECK);
|
|
434
|
+
__ mov(scratch, FieldOperand(backing_store, FixedArray::kLengthOffset));
|
|
435
|
+
__ cmp(key, Operand(scratch));
|
|
436
|
+
__ j(greater_equal, slow_case);
|
|
437
|
+
return FieldOperand(backing_store,
|
|
438
|
+
key,
|
|
439
|
+
times_half_pointer_size,
|
|
440
|
+
FixedArray::kHeaderSize);
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
|
|
468
444
|
void KeyedLoadIC::GenerateGeneric(MacroAssembler* masm) {
|
|
469
445
|
// ----------- S t a t e -------------
|
|
470
446
|
// -- eax : key
|
|
@@ -475,8 +451,7 @@ void KeyedLoadIC::GenerateGeneric(MacroAssembler* masm) {
|
|
|
475
451
|
Label probe_dictionary, check_number_dictionary;
|
|
476
452
|
|
|
477
453
|
// Check that the key is a smi.
|
|
478
|
-
__
|
|
479
|
-
__ j(not_zero, &check_string);
|
|
454
|
+
__ JumpIfNotSmi(eax, &check_string);
|
|
480
455
|
__ bind(&index_smi);
|
|
481
456
|
// Now the key is known to be a smi. This place is also jumped to from
|
|
482
457
|
// where a numeric string is converted to a smi.
|
|
@@ -484,11 +459,8 @@ void KeyedLoadIC::GenerateGeneric(MacroAssembler* masm) {
|
|
|
484
459
|
GenerateKeyedLoadReceiverCheck(
|
|
485
460
|
masm, edx, ecx, Map::kHasIndexedInterceptor, &slow);
|
|
486
461
|
|
|
487
|
-
// Check the
|
|
488
|
-
|
|
489
|
-
__ test_b(FieldOperand(ecx, Map::kBitField2Offset),
|
|
490
|
-
1 << Map::kHasFastElements);
|
|
491
|
-
__ j(zero, &check_number_dictionary);
|
|
462
|
+
// Check the receiver's map to see if it has fast elements.
|
|
463
|
+
__ CheckFastElements(ecx, &check_number_dictionary);
|
|
492
464
|
|
|
493
465
|
GenerateFastArrayLoad(masm,
|
|
494
466
|
edx,
|
|
@@ -520,14 +492,13 @@ void KeyedLoadIC::GenerateGeneric(MacroAssembler* masm) {
|
|
|
520
492
|
// Push receiver on the stack to free up a register for the dictionary
|
|
521
493
|
// probing.
|
|
522
494
|
__ push(edx);
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
eax);
|
|
495
|
+
__ LoadFromNumberDictionary(&slow_pop_receiver,
|
|
496
|
+
ecx,
|
|
497
|
+
eax,
|
|
498
|
+
ebx,
|
|
499
|
+
edx,
|
|
500
|
+
edi,
|
|
501
|
+
eax);
|
|
531
502
|
// Pop receiver before returning.
|
|
532
503
|
__ pop(edx);
|
|
533
504
|
__ ret(0);
|
|
@@ -668,8 +639,7 @@ void KeyedLoadIC::GenerateIndexedInterceptor(MacroAssembler* masm) {
|
|
|
668
639
|
Label slow;
|
|
669
640
|
|
|
670
641
|
// Check that the receiver isn't a smi.
|
|
671
|
-
__
|
|
672
|
-
__ j(zero, &slow);
|
|
642
|
+
__ JumpIfSmi(edx, &slow);
|
|
673
643
|
|
|
674
644
|
// Check that the key is an array index, that is Uint32.
|
|
675
645
|
__ test(eax, Immediate(kSmiTagMask | kSmiSignMask));
|
|
@@ -702,6 +672,60 @@ void KeyedLoadIC::GenerateIndexedInterceptor(MacroAssembler* masm) {
|
|
|
702
672
|
}
|
|
703
673
|
|
|
704
674
|
|
|
675
|
+
void KeyedLoadIC::GenerateNonStrictArguments(MacroAssembler* masm) {
|
|
676
|
+
// ----------- S t a t e -------------
|
|
677
|
+
// -- eax : key
|
|
678
|
+
// -- edx : receiver
|
|
679
|
+
// -- esp[0] : return address
|
|
680
|
+
// -----------------------------------
|
|
681
|
+
Label slow, notin;
|
|
682
|
+
Factory* factory = masm->isolate()->factory();
|
|
683
|
+
Operand mapped_location =
|
|
684
|
+
GenerateMappedArgumentsLookup(masm, edx, eax, ebx, ecx, ¬in, &slow);
|
|
685
|
+
__ mov(eax, mapped_location);
|
|
686
|
+
__ Ret();
|
|
687
|
+
__ bind(¬in);
|
|
688
|
+
// The unmapped lookup expects that the parameter map is in ebx.
|
|
689
|
+
Operand unmapped_location =
|
|
690
|
+
GenerateUnmappedArgumentsLookup(masm, eax, ebx, ecx, &slow);
|
|
691
|
+
__ cmp(unmapped_location, factory->the_hole_value());
|
|
692
|
+
__ j(equal, &slow);
|
|
693
|
+
__ mov(eax, unmapped_location);
|
|
694
|
+
__ Ret();
|
|
695
|
+
__ bind(&slow);
|
|
696
|
+
GenerateMiss(masm, false);
|
|
697
|
+
}
|
|
698
|
+
|
|
699
|
+
|
|
700
|
+
void KeyedStoreIC::GenerateNonStrictArguments(MacroAssembler* masm) {
|
|
701
|
+
// ----------- S t a t e -------------
|
|
702
|
+
// -- eax : value
|
|
703
|
+
// -- ecx : key
|
|
704
|
+
// -- edx : receiver
|
|
705
|
+
// -- esp[0] : return address
|
|
706
|
+
// -----------------------------------
|
|
707
|
+
Label slow, notin;
|
|
708
|
+
Operand mapped_location =
|
|
709
|
+
GenerateMappedArgumentsLookup(masm, edx, ecx, ebx, edi, ¬in, &slow);
|
|
710
|
+
__ mov(mapped_location, eax);
|
|
711
|
+
__ lea(ecx, mapped_location);
|
|
712
|
+
__ mov(edx, eax);
|
|
713
|
+
__ RecordWrite(ebx, ecx, edx);
|
|
714
|
+
__ Ret();
|
|
715
|
+
__ bind(¬in);
|
|
716
|
+
// The unmapped lookup expects that the parameter map is in ebx.
|
|
717
|
+
Operand unmapped_location =
|
|
718
|
+
GenerateUnmappedArgumentsLookup(masm, ecx, ebx, edi, &slow);
|
|
719
|
+
__ mov(unmapped_location, eax);
|
|
720
|
+
__ lea(edi, unmapped_location);
|
|
721
|
+
__ mov(edx, eax);
|
|
722
|
+
__ RecordWrite(ebx, edi, edx);
|
|
723
|
+
__ Ret();
|
|
724
|
+
__ bind(&slow);
|
|
725
|
+
GenerateMiss(masm, false);
|
|
726
|
+
}
|
|
727
|
+
|
|
728
|
+
|
|
705
729
|
void KeyedStoreIC::GenerateGeneric(MacroAssembler* masm,
|
|
706
730
|
StrictModeFlag strict_mode) {
|
|
707
731
|
// ----------- S t a t e -------------
|
|
@@ -713,8 +737,7 @@ void KeyedStoreIC::GenerateGeneric(MacroAssembler* masm,
|
|
|
713
737
|
Label slow, fast, array, extra;
|
|
714
738
|
|
|
715
739
|
// Check that the object isn't a smi.
|
|
716
|
-
__
|
|
717
|
-
__ j(zero, &slow);
|
|
740
|
+
__ JumpIfSmi(edx, &slow);
|
|
718
741
|
// Get the map from the receiver.
|
|
719
742
|
__ mov(edi, FieldOperand(edx, HeapObject::kMapOffset));
|
|
720
743
|
// Check that the receiver does not require access checks. We need
|
|
@@ -723,13 +746,16 @@ void KeyedStoreIC::GenerateGeneric(MacroAssembler* masm,
|
|
|
723
746
|
1 << Map::kIsAccessCheckNeeded);
|
|
724
747
|
__ j(not_zero, &slow);
|
|
725
748
|
// Check that the key is a smi.
|
|
726
|
-
__
|
|
727
|
-
__ j(not_zero, &slow);
|
|
749
|
+
__ JumpIfNotSmi(ecx, &slow);
|
|
728
750
|
__ CmpInstanceType(edi, JS_ARRAY_TYPE);
|
|
729
751
|
__ j(equal, &array);
|
|
730
|
-
// Check that the object is some kind of
|
|
731
|
-
__ CmpInstanceType(edi,
|
|
752
|
+
// Check that the object is some kind of JSObject.
|
|
753
|
+
__ CmpInstanceType(edi, FIRST_JS_RECEIVER_TYPE);
|
|
732
754
|
__ j(below, &slow);
|
|
755
|
+
__ CmpInstanceType(edi, JS_PROXY_TYPE);
|
|
756
|
+
__ j(equal, &slow);
|
|
757
|
+
__ CmpInstanceType(edi, JS_FUNCTION_PROXY_TYPE);
|
|
758
|
+
__ j(equal, &slow);
|
|
733
759
|
|
|
734
760
|
// Object case: Check key against length in the elements array.
|
|
735
761
|
// eax: value
|
|
@@ -820,8 +846,7 @@ static void GenerateMonomorphicCacheProbe(MacroAssembler* masm,
|
|
|
820
846
|
// to probe.
|
|
821
847
|
//
|
|
822
848
|
// Check for number.
|
|
823
|
-
__
|
|
824
|
-
__ j(zero, &number);
|
|
849
|
+
__ JumpIfSmi(edx, &number);
|
|
825
850
|
__ CmpObjectType(edx, HEAP_NUMBER_TYPE, ebx);
|
|
826
851
|
__ j(not_equal, &non_number);
|
|
827
852
|
__ bind(&number);
|
|
@@ -868,8 +893,7 @@ static void GenerateFunctionTailCall(MacroAssembler* masm,
|
|
|
868
893
|
// -----------------------------------
|
|
869
894
|
|
|
870
895
|
// Check that the result is not a smi.
|
|
871
|
-
__
|
|
872
|
-
__ j(zero, miss);
|
|
896
|
+
__ JumpIfSmi(edi, miss);
|
|
873
897
|
|
|
874
898
|
// Check that the value is a JavaScript function, fetching its map into eax.
|
|
875
899
|
__ CmpObjectType(edi, JS_FUNCTION_TYPE, eax);
|
|
@@ -877,7 +901,8 @@ static void GenerateFunctionTailCall(MacroAssembler* masm,
|
|
|
877
901
|
|
|
878
902
|
// Invoke the function.
|
|
879
903
|
ParameterCount actual(argc);
|
|
880
|
-
__ InvokeFunction(edi, actual, JUMP_FUNCTION
|
|
904
|
+
__ InvokeFunction(edi, actual, JUMP_FUNCTION,
|
|
905
|
+
NullCallWrapper(), CALL_AS_METHOD);
|
|
881
906
|
}
|
|
882
907
|
|
|
883
908
|
// The generated code falls through if the call should be handled by runtime.
|
|
@@ -949,8 +974,7 @@ static void GenerateCallMiss(MacroAssembler* masm,
|
|
|
949
974
|
if (id == IC::kCallIC_Miss) {
|
|
950
975
|
Label invoke, global;
|
|
951
976
|
__ mov(edx, Operand(esp, (argc + 1) * kPointerSize)); // receiver
|
|
952
|
-
__
|
|
953
|
-
__ j(zero, &invoke, Label::kNear);
|
|
977
|
+
__ JumpIfSmi(edx, &invoke, Label::kNear);
|
|
954
978
|
__ mov(ebx, FieldOperand(edx, HeapObject::kMapOffset));
|
|
955
979
|
__ movzx_b(ebx, FieldOperand(ebx, Map::kInstanceTypeOffset));
|
|
956
980
|
__ cmp(ebx, JS_GLOBAL_OBJECT_TYPE);
|
|
@@ -1043,8 +1067,7 @@ void KeyedCallIC::GenerateMegamorphic(MacroAssembler* masm, int argc) {
|
|
|
1043
1067
|
Label index_smi, index_string;
|
|
1044
1068
|
|
|
1045
1069
|
// Check that the key is a smi.
|
|
1046
|
-
__
|
|
1047
|
-
__ j(not_zero, &check_string);
|
|
1070
|
+
__ JumpIfNotSmi(ecx, &check_string);
|
|
1048
1071
|
|
|
1049
1072
|
__ bind(&index_smi);
|
|
1050
1073
|
// Now the key is known to be a smi. This place is also jumped to from
|
|
@@ -1077,8 +1100,8 @@ void KeyedCallIC::GenerateMegamorphic(MacroAssembler* masm, int argc) {
|
|
|
1077
1100
|
__ SmiUntag(ebx);
|
|
1078
1101
|
// ebx: untagged index
|
|
1079
1102
|
// Receiver in edx will be clobbered, need to reload it on miss.
|
|
1080
|
-
|
|
1081
|
-
|
|
1103
|
+
__ LoadFromNumberDictionary(
|
|
1104
|
+
&slow_reload_receiver, eax, ecx, ebx, edx, edi, edi);
|
|
1082
1105
|
__ IncrementCounter(counters->keyed_call_generic_smi_dict(), 1);
|
|
1083
1106
|
__ jmp(&do_call);
|
|
1084
1107
|
|
|
@@ -1144,6 +1167,35 @@ void KeyedCallIC::GenerateMegamorphic(MacroAssembler* masm, int argc) {
|
|
|
1144
1167
|
}
|
|
1145
1168
|
|
|
1146
1169
|
|
|
1170
|
+
void KeyedCallIC::GenerateNonStrictArguments(MacroAssembler* masm,
|
|
1171
|
+
int argc) {
|
|
1172
|
+
// ----------- S t a t e -------------
|
|
1173
|
+
// -- ecx : name
|
|
1174
|
+
// -- esp[0] : return address
|
|
1175
|
+
// -- esp[(argc - n) * 4] : arg[n] (zero-based)
|
|
1176
|
+
// -- ...
|
|
1177
|
+
// -- esp[(argc + 1) * 4] : receiver
|
|
1178
|
+
// -----------------------------------
|
|
1179
|
+
Label slow, notin;
|
|
1180
|
+
Factory* factory = masm->isolate()->factory();
|
|
1181
|
+
__ mov(edx, Operand(esp, (argc + 1) * kPointerSize));
|
|
1182
|
+
Operand mapped_location =
|
|
1183
|
+
GenerateMappedArgumentsLookup(masm, edx, ecx, ebx, eax, ¬in, &slow);
|
|
1184
|
+
__ mov(edi, mapped_location);
|
|
1185
|
+
GenerateFunctionTailCall(masm, argc, &slow);
|
|
1186
|
+
__ bind(¬in);
|
|
1187
|
+
// The unmapped lookup expects that the parameter map is in ebx.
|
|
1188
|
+
Operand unmapped_location =
|
|
1189
|
+
GenerateUnmappedArgumentsLookup(masm, ecx, ebx, eax, &slow);
|
|
1190
|
+
__ cmp(unmapped_location, factory->the_hole_value());
|
|
1191
|
+
__ j(equal, &slow);
|
|
1192
|
+
__ mov(edi, unmapped_location);
|
|
1193
|
+
GenerateFunctionTailCall(masm, argc, &slow);
|
|
1194
|
+
__ bind(&slow);
|
|
1195
|
+
GenerateMiss(masm, argc);
|
|
1196
|
+
}
|
|
1197
|
+
|
|
1198
|
+
|
|
1147
1199
|
void KeyedCallIC::GenerateNormal(MacroAssembler* masm, int argc) {
|
|
1148
1200
|
// ----------- S t a t e -------------
|
|
1149
1201
|
// -- ecx : name
|
|
@@ -1155,8 +1207,7 @@ void KeyedCallIC::GenerateNormal(MacroAssembler* masm, int argc) {
|
|
|
1155
1207
|
|
|
1156
1208
|
// Check if the name is a string.
|
|
1157
1209
|
Label miss;
|
|
1158
|
-
__
|
|
1159
|
-
__ j(zero, &miss);
|
|
1210
|
+
__ JumpIfSmi(ecx, &miss);
|
|
1160
1211
|
Condition cond = masm->IsObjectStringType(ecx, eax, eax);
|
|
1161
1212
|
__ j(NegateCondition(cond), &miss);
|
|
1162
1213
|
GenerateCallNormal(masm, argc);
|
|
@@ -1341,8 +1392,7 @@ void StoreIC::GenerateArrayLength(MacroAssembler* masm) {
|
|
|
1341
1392
|
Register scratch = ebx;
|
|
1342
1393
|
|
|
1343
1394
|
// Check that the receiver isn't a smi.
|
|
1344
|
-
__
|
|
1345
|
-
__ j(zero, &miss);
|
|
1395
|
+
__ JumpIfSmi(receiver, &miss);
|
|
1346
1396
|
|
|
1347
1397
|
// Check that the object is a JS array.
|
|
1348
1398
|
__ CmpObjectType(receiver, JS_ARRAY_TYPE, scratch);
|
|
@@ -1356,8 +1406,7 @@ void StoreIC::GenerateArrayLength(MacroAssembler* masm) {
|
|
|
1356
1406
|
__ j(not_equal, &miss);
|
|
1357
1407
|
|
|
1358
1408
|
// Check that value is a smi.
|
|
1359
|
-
__
|
|
1360
|
-
__ j(not_zero, &miss);
|
|
1409
|
+
__ JumpIfNotSmi(value, &miss);
|
|
1361
1410
|
|
|
1362
1411
|
// Prepare tail call to StoreIC_ArrayLength.
|
|
1363
1412
|
__ pop(scratch);
|