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
|
@@ -69,8 +69,8 @@ void MacroAssembler::RecordWriteHelper(Register object,
|
|
|
69
69
|
|
|
70
70
|
// Compute number of region covering addr. See Page::GetRegionNumberForAddress
|
|
71
71
|
// method for more details.
|
|
72
|
-
and_(addr, Page::kPageAlignmentMask);
|
|
73
72
|
shr(addr, Page::kRegionSizeLog2);
|
|
73
|
+
and_(addr, Page::kPageAlignmentMask >> Page::kRegionSizeLog2);
|
|
74
74
|
|
|
75
75
|
// Set dirty mark for region.
|
|
76
76
|
// Bit tests with a memory operand should be avoided on Intel processors,
|
|
@@ -148,9 +148,8 @@ void MacroAssembler::RecordWrite(Register object,
|
|
|
148
148
|
Label done;
|
|
149
149
|
|
|
150
150
|
// Skip barrier if writing a smi.
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
j(zero, &done, Label::kNear);
|
|
151
|
+
STATIC_ASSERT(kSmiTag == 0);
|
|
152
|
+
JumpIfSmi(value, &done, Label::kNear);
|
|
154
153
|
|
|
155
154
|
InNewSpace(object, value, equal, &done, Label::kNear);
|
|
156
155
|
|
|
@@ -167,8 +166,8 @@ void MacroAssembler::RecordWrite(Register object,
|
|
|
167
166
|
// Array access: calculate the destination address in the same manner as
|
|
168
167
|
// KeyedStoreIC::GenerateGeneric. Multiply a smi by 2 to get an offset
|
|
169
168
|
// into an array of words.
|
|
170
|
-
|
|
171
|
-
|
|
169
|
+
STATIC_ASSERT(kSmiTagSize == 1);
|
|
170
|
+
STATIC_ASSERT(kSmiTag == 0);
|
|
172
171
|
lea(dst, Operand(object, dst, times_half_pointer_size,
|
|
173
172
|
FixedArray::kHeaderSize - kHeapObjectTag));
|
|
174
173
|
}
|
|
@@ -194,9 +193,8 @@ void MacroAssembler::RecordWrite(Register object,
|
|
|
194
193
|
Label done;
|
|
195
194
|
|
|
196
195
|
// Skip barrier if writing a smi.
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
j(zero, &done);
|
|
196
|
+
STATIC_ASSERT(kSmiTag == 0);
|
|
197
|
+
JumpIfSmi(value, &done, Label::kNear);
|
|
200
198
|
|
|
201
199
|
InNewSpace(object, value, equal, &done);
|
|
202
200
|
|
|
@@ -265,6 +263,13 @@ void MacroAssembler::SafePush(const Immediate& x) {
|
|
|
265
263
|
}
|
|
266
264
|
|
|
267
265
|
|
|
266
|
+
void MacroAssembler::CompareRoot(Register with, Heap::RootListIndex index) {
|
|
267
|
+
// see ROOT_ACCESSOR macro in factory.h
|
|
268
|
+
Handle<Object> value(&isolate()->heap()->roots_address()[index]);
|
|
269
|
+
cmp(with, value);
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
|
|
268
273
|
void MacroAssembler::CmpObjectType(Register heap_object,
|
|
269
274
|
InstanceType type,
|
|
270
275
|
Register map) {
|
|
@@ -279,6 +284,16 @@ void MacroAssembler::CmpInstanceType(Register map, InstanceType type) {
|
|
|
279
284
|
}
|
|
280
285
|
|
|
281
286
|
|
|
287
|
+
void MacroAssembler::CheckFastElements(Register map,
|
|
288
|
+
Label* fail,
|
|
289
|
+
Label::Distance distance) {
|
|
290
|
+
STATIC_ASSERT(JSObject::FAST_ELEMENTS == 0);
|
|
291
|
+
cmpb(FieldOperand(map, Map::kBitField2Offset),
|
|
292
|
+
Map::kMaximumBitField2FastElementValue);
|
|
293
|
+
j(above, fail, distance);
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
|
|
282
297
|
void MacroAssembler::CheckMap(Register obj,
|
|
283
298
|
Handle<Map> map,
|
|
284
299
|
Label* fail,
|
|
@@ -311,7 +326,7 @@ Condition MacroAssembler::IsObjectStringType(Register heap_object,
|
|
|
311
326
|
Register instance_type) {
|
|
312
327
|
mov(map, FieldOperand(heap_object, HeapObject::kMapOffset));
|
|
313
328
|
movzx_b(instance_type, FieldOperand(map, Map::kInstanceTypeOffset));
|
|
314
|
-
|
|
329
|
+
STATIC_ASSERT(kNotStringTag != 0);
|
|
315
330
|
test(instance_type, Immediate(kIsNotStringMask));
|
|
316
331
|
return zero;
|
|
317
332
|
}
|
|
@@ -330,8 +345,9 @@ void MacroAssembler::IsInstanceJSObjectType(Register map,
|
|
|
330
345
|
Register scratch,
|
|
331
346
|
Label* fail) {
|
|
332
347
|
movzx_b(scratch, FieldOperand(map, Map::kInstanceTypeOffset));
|
|
333
|
-
sub(Operand(scratch), Immediate(
|
|
334
|
-
cmp(scratch,
|
|
348
|
+
sub(Operand(scratch), Immediate(FIRST_NONCALLABLE_SPEC_OBJECT_TYPE));
|
|
349
|
+
cmp(scratch,
|
|
350
|
+
LAST_NONCALLABLE_SPEC_OBJECT_TYPE - FIRST_NONCALLABLE_SPEC_OBJECT_TYPE);
|
|
335
351
|
j(above, fail);
|
|
336
352
|
}
|
|
337
353
|
|
|
@@ -353,8 +369,7 @@ void MacroAssembler::FCmp() {
|
|
|
353
369
|
|
|
354
370
|
void MacroAssembler::AbortIfNotNumber(Register object) {
|
|
355
371
|
Label ok;
|
|
356
|
-
|
|
357
|
-
j(zero, &ok);
|
|
372
|
+
JumpIfSmi(object, &ok);
|
|
358
373
|
cmp(FieldOperand(object, HeapObject::kMapOffset),
|
|
359
374
|
isolate()->factory()->heap_number_map());
|
|
360
375
|
Assert(equal, "Operand not a number");
|
|
@@ -527,7 +542,12 @@ void MacroAssembler::LeaveApiExitFrame() {
|
|
|
527
542
|
void MacroAssembler::PushTryHandler(CodeLocation try_location,
|
|
528
543
|
HandlerType type) {
|
|
529
544
|
// Adjust this code if not the case.
|
|
530
|
-
|
|
545
|
+
STATIC_ASSERT(StackHandlerConstants::kSize == 5 * kPointerSize);
|
|
546
|
+
STATIC_ASSERT(StackHandlerConstants::kNextOffset == 0);
|
|
547
|
+
STATIC_ASSERT(StackHandlerConstants::kContextOffset == 1 * kPointerSize);
|
|
548
|
+
STATIC_ASSERT(StackHandlerConstants::kFPOffset == 2 * kPointerSize);
|
|
549
|
+
STATIC_ASSERT(StackHandlerConstants::kStateOffset == 3 * kPointerSize);
|
|
550
|
+
STATIC_ASSERT(StackHandlerConstants::kPCOffset == 4 * kPointerSize);
|
|
531
551
|
// The pc (return address) is already on TOS.
|
|
532
552
|
if (try_location == IN_JAVASCRIPT) {
|
|
533
553
|
if (type == TRY_CATCH_HANDLER) {
|
|
@@ -536,6 +556,7 @@ void MacroAssembler::PushTryHandler(CodeLocation try_location,
|
|
|
536
556
|
push(Immediate(StackHandler::TRY_FINALLY));
|
|
537
557
|
}
|
|
538
558
|
push(ebp);
|
|
559
|
+
push(esi);
|
|
539
560
|
} else {
|
|
540
561
|
ASSERT(try_location == IN_JS_ENTRY);
|
|
541
562
|
// The frame pointer does not point to a JS frame so we save NULL
|
|
@@ -543,6 +564,7 @@ void MacroAssembler::PushTryHandler(CodeLocation try_location,
|
|
|
543
564
|
// before dereferencing it to restore the context.
|
|
544
565
|
push(Immediate(StackHandler::ENTRY));
|
|
545
566
|
push(Immediate(0)); // NULL frame pointer.
|
|
567
|
+
push(Immediate(Smi::FromInt(0))); // No context.
|
|
546
568
|
}
|
|
547
569
|
// Save the current handler as the next handler.
|
|
548
570
|
push(Operand::StaticVariable(ExternalReference(Isolate::k_handler_address,
|
|
@@ -555,7 +577,7 @@ void MacroAssembler::PushTryHandler(CodeLocation try_location,
|
|
|
555
577
|
|
|
556
578
|
|
|
557
579
|
void MacroAssembler::PopTryHandler() {
|
|
558
|
-
|
|
580
|
+
STATIC_ASSERT(StackHandlerConstants::kNextOffset == 0);
|
|
559
581
|
pop(Operand::StaticVariable(ExternalReference(Isolate::k_handler_address,
|
|
560
582
|
isolate())));
|
|
561
583
|
add(Operand(esp), Immediate(StackHandlerConstants::kSize - kPointerSize));
|
|
@@ -564,8 +586,12 @@ void MacroAssembler::PopTryHandler() {
|
|
|
564
586
|
|
|
565
587
|
void MacroAssembler::Throw(Register value) {
|
|
566
588
|
// Adjust this code if not the case.
|
|
567
|
-
STATIC_ASSERT(StackHandlerConstants::kSize ==
|
|
568
|
-
|
|
589
|
+
STATIC_ASSERT(StackHandlerConstants::kSize == 5 * kPointerSize);
|
|
590
|
+
STATIC_ASSERT(StackHandlerConstants::kNextOffset == 0);
|
|
591
|
+
STATIC_ASSERT(StackHandlerConstants::kContextOffset == 1 * kPointerSize);
|
|
592
|
+
STATIC_ASSERT(StackHandlerConstants::kFPOffset == 2 * kPointerSize);
|
|
593
|
+
STATIC_ASSERT(StackHandlerConstants::kStateOffset == 3 * kPointerSize);
|
|
594
|
+
STATIC_ASSERT(StackHandlerConstants::kPCOffset == 4 * kPointerSize);
|
|
569
595
|
// eax must hold the exception.
|
|
570
596
|
if (!value.is(eax)) {
|
|
571
597
|
mov(eax, value);
|
|
@@ -576,24 +602,21 @@ void MacroAssembler::Throw(Register value) {
|
|
|
576
602
|
isolate());
|
|
577
603
|
mov(esp, Operand::StaticVariable(handler_address));
|
|
578
604
|
|
|
579
|
-
// Restore next handler and frame pointer
|
|
580
|
-
STATIC_ASSERT(StackHandlerConstants::kNextOffset == 0);
|
|
605
|
+
// Restore next handler, context, and frame pointer; discard handler state.
|
|
581
606
|
pop(Operand::StaticVariable(handler_address));
|
|
582
|
-
|
|
583
|
-
pop(ebp);
|
|
584
|
-
pop(edx); //
|
|
607
|
+
pop(esi); // Context.
|
|
608
|
+
pop(ebp); // Frame pointer.
|
|
609
|
+
pop(edx); // State.
|
|
585
610
|
|
|
586
|
-
//
|
|
587
|
-
//
|
|
588
|
-
//
|
|
589
|
-
Set(esi, Immediate(0)); // Tentatively set context pointer to NULL.
|
|
611
|
+
// If the handler is a JS frame, restore the context to the frame.
|
|
612
|
+
// (edx == ENTRY) == (ebp == 0) == (esi == 0), so we could test any
|
|
613
|
+
// of them.
|
|
590
614
|
Label skip;
|
|
591
|
-
cmp(
|
|
615
|
+
cmp(Operand(edx), Immediate(StackHandler::ENTRY));
|
|
592
616
|
j(equal, &skip, Label::kNear);
|
|
593
|
-
mov(
|
|
617
|
+
mov(Operand(ebp, StandardFrameConstants::kContextOffset), esi);
|
|
594
618
|
bind(&skip);
|
|
595
619
|
|
|
596
|
-
STATIC_ASSERT(StackHandlerConstants::kPCOffset == 3 * kPointerSize);
|
|
597
620
|
ret(0);
|
|
598
621
|
}
|
|
599
622
|
|
|
@@ -601,7 +624,12 @@ void MacroAssembler::Throw(Register value) {
|
|
|
601
624
|
void MacroAssembler::ThrowUncatchable(UncatchableExceptionType type,
|
|
602
625
|
Register value) {
|
|
603
626
|
// Adjust this code if not the case.
|
|
604
|
-
STATIC_ASSERT(StackHandlerConstants::kSize ==
|
|
627
|
+
STATIC_ASSERT(StackHandlerConstants::kSize == 5 * kPointerSize);
|
|
628
|
+
STATIC_ASSERT(StackHandlerConstants::kNextOffset == 0);
|
|
629
|
+
STATIC_ASSERT(StackHandlerConstants::kContextOffset == 1 * kPointerSize);
|
|
630
|
+
STATIC_ASSERT(StackHandlerConstants::kFPOffset == 2 * kPointerSize);
|
|
631
|
+
STATIC_ASSERT(StackHandlerConstants::kStateOffset == 3 * kPointerSize);
|
|
632
|
+
STATIC_ASSERT(StackHandlerConstants::kPCOffset == 4 * kPointerSize);
|
|
605
633
|
|
|
606
634
|
// eax must hold the exception.
|
|
607
635
|
if (!value.is(eax)) {
|
|
@@ -627,7 +655,6 @@ void MacroAssembler::ThrowUncatchable(UncatchableExceptionType type,
|
|
|
627
655
|
bind(&done);
|
|
628
656
|
|
|
629
657
|
// Set the top handler address to next handler past the current ENTRY handler.
|
|
630
|
-
STATIC_ASSERT(StackHandlerConstants::kNextOffset == 0);
|
|
631
658
|
pop(Operand::StaticVariable(handler_address));
|
|
632
659
|
|
|
633
660
|
if (type == OUT_OF_MEMORY) {
|
|
@@ -645,15 +672,14 @@ void MacroAssembler::ThrowUncatchable(UncatchableExceptionType type,
|
|
|
645
672
|
mov(Operand::StaticVariable(pending_exception), eax);
|
|
646
673
|
}
|
|
647
674
|
|
|
648
|
-
//
|
|
675
|
+
// Discard the context saved in the handler and clear the context pointer.
|
|
676
|
+
pop(edx);
|
|
649
677
|
Set(esi, Immediate(0));
|
|
650
678
|
|
|
651
679
|
// Restore fp from handler and discard handler state.
|
|
652
|
-
STATIC_ASSERT(StackHandlerConstants::kFPOffset == 1 * kPointerSize);
|
|
653
680
|
pop(ebp);
|
|
654
681
|
pop(edx); // State.
|
|
655
682
|
|
|
656
|
-
STATIC_ASSERT(StackHandlerConstants::kPCOffset == 3 * kPointerSize);
|
|
657
683
|
ret(0);
|
|
658
684
|
}
|
|
659
685
|
|
|
@@ -726,6 +752,104 @@ void MacroAssembler::CheckAccessGlobalProxy(Register holder_reg,
|
|
|
726
752
|
}
|
|
727
753
|
|
|
728
754
|
|
|
755
|
+
void MacroAssembler::LoadFromNumberDictionary(Label* miss,
|
|
756
|
+
Register elements,
|
|
757
|
+
Register key,
|
|
758
|
+
Register r0,
|
|
759
|
+
Register r1,
|
|
760
|
+
Register r2,
|
|
761
|
+
Register result) {
|
|
762
|
+
// Register use:
|
|
763
|
+
//
|
|
764
|
+
// elements - holds the slow-case elements of the receiver and is unchanged.
|
|
765
|
+
//
|
|
766
|
+
// key - holds the smi key on entry and is unchanged.
|
|
767
|
+
//
|
|
768
|
+
// Scratch registers:
|
|
769
|
+
//
|
|
770
|
+
// r0 - holds the untagged key on entry and holds the hash once computed.
|
|
771
|
+
//
|
|
772
|
+
// r1 - used to hold the capacity mask of the dictionary
|
|
773
|
+
//
|
|
774
|
+
// r2 - used for the index into the dictionary.
|
|
775
|
+
//
|
|
776
|
+
// result - holds the result on exit if the load succeeds and we fall through.
|
|
777
|
+
|
|
778
|
+
Label done;
|
|
779
|
+
|
|
780
|
+
// Compute the hash code from the untagged key. This must be kept in sync
|
|
781
|
+
// with ComputeIntegerHash in utils.h.
|
|
782
|
+
//
|
|
783
|
+
// hash = ~hash + (hash << 15);
|
|
784
|
+
mov(r1, r0);
|
|
785
|
+
not_(r0);
|
|
786
|
+
shl(r1, 15);
|
|
787
|
+
add(r0, Operand(r1));
|
|
788
|
+
// hash = hash ^ (hash >> 12);
|
|
789
|
+
mov(r1, r0);
|
|
790
|
+
shr(r1, 12);
|
|
791
|
+
xor_(r0, Operand(r1));
|
|
792
|
+
// hash = hash + (hash << 2);
|
|
793
|
+
lea(r0, Operand(r0, r0, times_4, 0));
|
|
794
|
+
// hash = hash ^ (hash >> 4);
|
|
795
|
+
mov(r1, r0);
|
|
796
|
+
shr(r1, 4);
|
|
797
|
+
xor_(r0, Operand(r1));
|
|
798
|
+
// hash = hash * 2057;
|
|
799
|
+
imul(r0, r0, 2057);
|
|
800
|
+
// hash = hash ^ (hash >> 16);
|
|
801
|
+
mov(r1, r0);
|
|
802
|
+
shr(r1, 16);
|
|
803
|
+
xor_(r0, Operand(r1));
|
|
804
|
+
|
|
805
|
+
// Compute capacity mask.
|
|
806
|
+
mov(r1, FieldOperand(elements, NumberDictionary::kCapacityOffset));
|
|
807
|
+
shr(r1, kSmiTagSize); // convert smi to int
|
|
808
|
+
dec(r1);
|
|
809
|
+
|
|
810
|
+
// Generate an unrolled loop that performs a few probes before giving up.
|
|
811
|
+
const int kProbes = 4;
|
|
812
|
+
for (int i = 0; i < kProbes; i++) {
|
|
813
|
+
// Use r2 for index calculations and keep the hash intact in r0.
|
|
814
|
+
mov(r2, r0);
|
|
815
|
+
// Compute the masked index: (hash + i + i * i) & mask.
|
|
816
|
+
if (i > 0) {
|
|
817
|
+
add(Operand(r2), Immediate(NumberDictionary::GetProbeOffset(i)));
|
|
818
|
+
}
|
|
819
|
+
and_(r2, Operand(r1));
|
|
820
|
+
|
|
821
|
+
// Scale the index by multiplying by the entry size.
|
|
822
|
+
ASSERT(NumberDictionary::kEntrySize == 3);
|
|
823
|
+
lea(r2, Operand(r2, r2, times_2, 0)); // r2 = r2 * 3
|
|
824
|
+
|
|
825
|
+
// Check if the key matches.
|
|
826
|
+
cmp(key, FieldOperand(elements,
|
|
827
|
+
r2,
|
|
828
|
+
times_pointer_size,
|
|
829
|
+
NumberDictionary::kElementsStartOffset));
|
|
830
|
+
if (i != (kProbes - 1)) {
|
|
831
|
+
j(equal, &done);
|
|
832
|
+
} else {
|
|
833
|
+
j(not_equal, miss);
|
|
834
|
+
}
|
|
835
|
+
}
|
|
836
|
+
|
|
837
|
+
bind(&done);
|
|
838
|
+
// Check that the value is a normal propety.
|
|
839
|
+
const int kDetailsOffset =
|
|
840
|
+
NumberDictionary::kElementsStartOffset + 2 * kPointerSize;
|
|
841
|
+
ASSERT_EQ(NORMAL, 0);
|
|
842
|
+
test(FieldOperand(elements, r2, times_pointer_size, kDetailsOffset),
|
|
843
|
+
Immediate(PropertyDetails::TypeField::mask() << kSmiTagSize));
|
|
844
|
+
j(not_zero, miss);
|
|
845
|
+
|
|
846
|
+
// Get the value at the masked, scaled index.
|
|
847
|
+
const int kValueOffset =
|
|
848
|
+
NumberDictionary::kElementsStartOffset + kPointerSize;
|
|
849
|
+
mov(result, FieldOperand(elements, r2, times_pointer_size, kValueOffset));
|
|
850
|
+
}
|
|
851
|
+
|
|
852
|
+
|
|
729
853
|
void MacroAssembler::LoadAllocationTopHelper(Register result,
|
|
730
854
|
Register scratch,
|
|
731
855
|
AllocationFlags flags) {
|
|
@@ -1084,6 +1208,42 @@ void MacroAssembler::AllocateAsciiConsString(Register result,
|
|
|
1084
1208
|
}
|
|
1085
1209
|
|
|
1086
1210
|
|
|
1211
|
+
void MacroAssembler::AllocateSlicedString(Register result,
|
|
1212
|
+
Register scratch1,
|
|
1213
|
+
Register scratch2,
|
|
1214
|
+
Label* gc_required) {
|
|
1215
|
+
// Allocate heap number in new space.
|
|
1216
|
+
AllocateInNewSpace(SlicedString::kSize,
|
|
1217
|
+
result,
|
|
1218
|
+
scratch1,
|
|
1219
|
+
scratch2,
|
|
1220
|
+
gc_required,
|
|
1221
|
+
TAG_OBJECT);
|
|
1222
|
+
|
|
1223
|
+
// Set the map. The other fields are left uninitialized.
|
|
1224
|
+
mov(FieldOperand(result, HeapObject::kMapOffset),
|
|
1225
|
+
Immediate(isolate()->factory()->sliced_string_map()));
|
|
1226
|
+
}
|
|
1227
|
+
|
|
1228
|
+
|
|
1229
|
+
void MacroAssembler::AllocateAsciiSlicedString(Register result,
|
|
1230
|
+
Register scratch1,
|
|
1231
|
+
Register scratch2,
|
|
1232
|
+
Label* gc_required) {
|
|
1233
|
+
// Allocate heap number in new space.
|
|
1234
|
+
AllocateInNewSpace(SlicedString::kSize,
|
|
1235
|
+
result,
|
|
1236
|
+
scratch1,
|
|
1237
|
+
scratch2,
|
|
1238
|
+
gc_required,
|
|
1239
|
+
TAG_OBJECT);
|
|
1240
|
+
|
|
1241
|
+
// Set the map. The other fields are left uninitialized.
|
|
1242
|
+
mov(FieldOperand(result, HeapObject::kMapOffset),
|
|
1243
|
+
Immediate(isolate()->factory()->sliced_ascii_string_map()));
|
|
1244
|
+
}
|
|
1245
|
+
|
|
1246
|
+
|
|
1087
1247
|
// Copy memory, byte-by-byte, from source to destination. Not optimized for
|
|
1088
1248
|
// long or aligned copies. The contents of scratch and length are destroyed.
|
|
1089
1249
|
// Source and destination are incremented by length.
|
|
@@ -1165,8 +1325,7 @@ void MacroAssembler::TryGetFunctionPrototype(Register function,
|
|
|
1165
1325
|
Register scratch,
|
|
1166
1326
|
Label* miss) {
|
|
1167
1327
|
// Check that the receiver isn't a smi.
|
|
1168
|
-
|
|
1169
|
-
j(zero, miss);
|
|
1328
|
+
JumpIfSmi(function, miss);
|
|
1170
1329
|
|
|
1171
1330
|
// Check that the function really is a function.
|
|
1172
1331
|
CmpObjectType(function, JS_FUNCTION_TYPE, result);
|
|
@@ -1405,32 +1564,30 @@ Operand ApiParameterOperand(int index) {
|
|
|
1405
1564
|
}
|
|
1406
1565
|
|
|
1407
1566
|
|
|
1408
|
-
void MacroAssembler::PrepareCallApiFunction(int argc
|
|
1567
|
+
void MacroAssembler::PrepareCallApiFunction(int argc) {
|
|
1409
1568
|
if (kReturnHandlesDirectly) {
|
|
1410
1569
|
EnterApiExitFrame(argc);
|
|
1411
1570
|
// When handles are returned directly we don't have to allocate extra
|
|
1412
1571
|
// space for and pass an out parameter.
|
|
1572
|
+
if (emit_debug_code()) {
|
|
1573
|
+
mov(esi, Immediate(BitCast<int32_t>(kZapValue)));
|
|
1574
|
+
}
|
|
1413
1575
|
} else {
|
|
1414
1576
|
// We allocate two additional slots: return value and pointer to it.
|
|
1415
1577
|
EnterApiExitFrame(argc + 2);
|
|
1416
1578
|
|
|
1417
1579
|
// The argument slots are filled as follows:
|
|
1418
1580
|
//
|
|
1419
|
-
// n + 1: output
|
|
1581
|
+
// n + 1: output slot
|
|
1420
1582
|
// n: arg n
|
|
1421
1583
|
// ...
|
|
1422
1584
|
// 1: arg1
|
|
1423
|
-
// 0: pointer to the output
|
|
1424
|
-
//
|
|
1425
|
-
// Note that this is one more "argument" than the function expects
|
|
1426
|
-
// so the out cell will have to be popped explicitly after returning
|
|
1427
|
-
// from the function. The out cell contains Handle.
|
|
1585
|
+
// 0: pointer to the output slot
|
|
1428
1586
|
|
|
1429
|
-
|
|
1430
|
-
|
|
1431
|
-
mov(Operand(esp, 0 * kPointerSize), scratch); // output.
|
|
1587
|
+
lea(esi, Operand(esp, (argc + 1) * kPointerSize));
|
|
1588
|
+
mov(Operand(esp, 0 * kPointerSize), esi);
|
|
1432
1589
|
if (emit_debug_code()) {
|
|
1433
|
-
mov(Operand(
|
|
1590
|
+
mov(Operand(esi, 0), Immediate(0));
|
|
1434
1591
|
}
|
|
1435
1592
|
}
|
|
1436
1593
|
}
|
|
@@ -1454,9 +1611,9 @@ MaybeObject* MacroAssembler::TryCallApiFunctionAndReturn(ApiFunction* function,
|
|
|
1454
1611
|
call(function->address(), RelocInfo::RUNTIME_ENTRY);
|
|
1455
1612
|
|
|
1456
1613
|
if (!kReturnHandlesDirectly) {
|
|
1457
|
-
//
|
|
1458
|
-
//
|
|
1459
|
-
mov(eax, Operand(
|
|
1614
|
+
// PrepareCallApiFunction saved pointer to the output slot into
|
|
1615
|
+
// callee-save register esi.
|
|
1616
|
+
mov(eax, Operand(esi, 0));
|
|
1460
1617
|
}
|
|
1461
1618
|
|
|
1462
1619
|
Label empty_handle;
|
|
@@ -1690,7 +1847,8 @@ void MacroAssembler::InvokeFunction(Register fun,
|
|
|
1690
1847
|
void MacroAssembler::InvokeFunction(JSFunction* function,
|
|
1691
1848
|
const ParameterCount& actual,
|
|
1692
1849
|
InvokeFlag flag,
|
|
1693
|
-
const CallWrapper& call_wrapper
|
|
1850
|
+
const CallWrapper& call_wrapper,
|
|
1851
|
+
CallKind call_kind) {
|
|
1694
1852
|
ASSERT(function->is_compiled());
|
|
1695
1853
|
// Get the function and setup the context.
|
|
1696
1854
|
mov(edi, Immediate(Handle<JSFunction>(function)));
|
|
@@ -1702,11 +1860,11 @@ void MacroAssembler::InvokeFunction(JSFunction* function,
|
|
|
1702
1860
|
// code field in the function to allow recompilation to take effect
|
|
1703
1861
|
// without changing any of the call sites.
|
|
1704
1862
|
InvokeCode(FieldOperand(edi, JSFunction::kCodeEntryOffset),
|
|
1705
|
-
expected, actual, flag, call_wrapper);
|
|
1863
|
+
expected, actual, flag, call_wrapper, call_kind);
|
|
1706
1864
|
} else {
|
|
1707
1865
|
Handle<Code> code(function->code());
|
|
1708
1866
|
InvokeCode(code, expected, actual, RelocInfo::CODE_TARGET,
|
|
1709
|
-
flag, call_wrapper);
|
|
1867
|
+
flag, call_wrapper, call_kind);
|
|
1710
1868
|
}
|
|
1711
1869
|
}
|
|
1712
1870
|
|
|
@@ -1723,7 +1881,7 @@ void MacroAssembler::InvokeBuiltin(Builtins::JavaScript id,
|
|
|
1723
1881
|
ParameterCount expected(0);
|
|
1724
1882
|
GetBuiltinFunction(edi, id);
|
|
1725
1883
|
InvokeCode(FieldOperand(edi, JSFunction::kCodeEntryOffset),
|
|
1726
|
-
expected, expected, flag, call_wrapper);
|
|
1884
|
+
expected, expected, flag, call_wrapper, CALL_AS_METHOD);
|
|
1727
1885
|
}
|
|
1728
1886
|
|
|
1729
1887
|
void MacroAssembler::GetBuiltinFunction(Register target,
|
|
@@ -1747,12 +1905,9 @@ void MacroAssembler::GetBuiltinEntry(Register target, Builtins::JavaScript id) {
|
|
|
1747
1905
|
void MacroAssembler::LoadContext(Register dst, int context_chain_length) {
|
|
1748
1906
|
if (context_chain_length > 0) {
|
|
1749
1907
|
// Move up the chain of contexts to the context containing the slot.
|
|
1750
|
-
mov(dst, Operand(esi, Context::SlotOffset(Context::
|
|
1751
|
-
// Load the function context (which is the incoming, outer context).
|
|
1752
|
-
mov(dst, FieldOperand(dst, JSFunction::kContextOffset));
|
|
1908
|
+
mov(dst, Operand(esi, Context::SlotOffset(Context::PREVIOUS_INDEX)));
|
|
1753
1909
|
for (int i = 1; i < context_chain_length; i++) {
|
|
1754
|
-
mov(dst, Operand(dst, Context::SlotOffset(Context::
|
|
1755
|
-
mov(dst, FieldOperand(dst, JSFunction::kContextOffset));
|
|
1910
|
+
mov(dst, Operand(dst, Context::SlotOffset(Context::PREVIOUS_INDEX)));
|
|
1756
1911
|
}
|
|
1757
1912
|
} else {
|
|
1758
1913
|
// Slot is in the current function context. Move it into the
|
|
@@ -1761,14 +1916,14 @@ void MacroAssembler::LoadContext(Register dst, int context_chain_length) {
|
|
|
1761
1916
|
mov(dst, esi);
|
|
1762
1917
|
}
|
|
1763
1918
|
|
|
1764
|
-
// We should not have found a
|
|
1919
|
+
// We should not have found a with context by walking the context chain
|
|
1765
1920
|
// (i.e., the static scope chain and runtime context chain do not agree).
|
|
1766
1921
|
// A variable occurring in such a scope should have slot type LOOKUP and
|
|
1767
1922
|
// not CONTEXT.
|
|
1768
1923
|
if (emit_debug_code()) {
|
|
1769
|
-
cmp(
|
|
1770
|
-
|
|
1771
|
-
|
|
1924
|
+
cmp(FieldOperand(dst, HeapObject::kMapOffset),
|
|
1925
|
+
isolate()->factory()->with_context_map());
|
|
1926
|
+
Check(not_equal, "Variable resolved to with context.");
|
|
1772
1927
|
}
|
|
1773
1928
|
}
|
|
1774
1929
|
|
|
@@ -1942,6 +2097,9 @@ void MacroAssembler::AssertFastElements(Register elements) {
|
|
|
1942
2097
|
cmp(FieldOperand(elements, HeapObject::kMapOffset),
|
|
1943
2098
|
Immediate(factory->fixed_array_map()));
|
|
1944
2099
|
j(equal, &ok);
|
|
2100
|
+
cmp(FieldOperand(elements, HeapObject::kMapOffset),
|
|
2101
|
+
Immediate(factory->fixed_double_array_map()));
|
|
2102
|
+
j(equal, &ok);
|
|
1945
2103
|
cmp(FieldOperand(elements, HeapObject::kMapOffset),
|
|
1946
2104
|
Immediate(factory->fixed_cow_array_map()));
|
|
1947
2105
|
j(equal, &ok);
|
|
@@ -2044,11 +2202,10 @@ void MacroAssembler::JumpIfNotBothSequentialAsciiStrings(Register object1,
|
|
|
2044
2202
|
Register scratch2,
|
|
2045
2203
|
Label* failure) {
|
|
2046
2204
|
// Check that both objects are not smis.
|
|
2047
|
-
|
|
2205
|
+
STATIC_ASSERT(kSmiTag == 0);
|
|
2048
2206
|
mov(scratch1, Operand(object1));
|
|
2049
2207
|
and_(scratch1, Operand(object2));
|
|
2050
|
-
|
|
2051
|
-
j(zero, failure);
|
|
2208
|
+
JumpIfSmi(scratch1, failure);
|
|
2052
2209
|
|
|
2053
2210
|
// Load instance type for both strings.
|
|
2054
2211
|
mov(scratch1, FieldOperand(object1, HeapObject::kMapOffset));
|