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
data/lib/libv8/v8/src/array.js
CHANGED
|
@@ -631,7 +631,9 @@ function ArraySlice(start, end) {
|
|
|
631
631
|
|
|
632
632
|
if (end_i < start_i) return result;
|
|
633
633
|
|
|
634
|
-
if (IS_ARRAY(this)
|
|
634
|
+
if (IS_ARRAY(this) &&
|
|
635
|
+
(end_i > 1000) &&
|
|
636
|
+
(%EstimateNumberOfElements(this) < end_i)) {
|
|
635
637
|
SmartSlice(this, start_i, end_i - start_i, len, result);
|
|
636
638
|
} else {
|
|
637
639
|
SimpleSlice(this, start_i, end_i - start_i, len, result);
|
|
@@ -740,14 +742,14 @@ function ArraySort(comparefn) {
|
|
|
740
742
|
else return x < y ? -1 : 1;
|
|
741
743
|
};
|
|
742
744
|
}
|
|
743
|
-
var
|
|
745
|
+
var receiver = %GetDefaultReceiver(comparefn);
|
|
744
746
|
|
|
745
747
|
function InsertionSort(a, from, to) {
|
|
746
748
|
for (var i = from + 1; i < to; i++) {
|
|
747
749
|
var element = a[i];
|
|
748
750
|
for (var j = i - 1; j >= from; j--) {
|
|
749
751
|
var tmp = a[j];
|
|
750
|
-
var order = %_CallFunction(
|
|
752
|
+
var order = %_CallFunction(receiver, tmp, element, comparefn);
|
|
751
753
|
if (order > 0) {
|
|
752
754
|
a[j + 1] = tmp;
|
|
753
755
|
} else {
|
|
@@ -769,14 +771,14 @@ function ArraySort(comparefn) {
|
|
|
769
771
|
var v1 = a[to - 1];
|
|
770
772
|
var middle_index = from + ((to - from) >> 1);
|
|
771
773
|
var v2 = a[middle_index];
|
|
772
|
-
var c01 = %_CallFunction(
|
|
774
|
+
var c01 = %_CallFunction(receiver, v0, v1, comparefn);
|
|
773
775
|
if (c01 > 0) {
|
|
774
776
|
// v1 < v0, so swap them.
|
|
775
777
|
var tmp = v0;
|
|
776
778
|
v0 = v1;
|
|
777
779
|
v1 = tmp;
|
|
778
780
|
} // v0 <= v1.
|
|
779
|
-
var c02 = %_CallFunction(
|
|
781
|
+
var c02 = %_CallFunction(receiver, v0, v2, comparefn);
|
|
780
782
|
if (c02 >= 0) {
|
|
781
783
|
// v2 <= v0 <= v1.
|
|
782
784
|
var tmp = v0;
|
|
@@ -785,7 +787,7 @@ function ArraySort(comparefn) {
|
|
|
785
787
|
v1 = tmp;
|
|
786
788
|
} else {
|
|
787
789
|
// v0 <= v1 && v0 < v2
|
|
788
|
-
var c12 = %_CallFunction(
|
|
790
|
+
var c12 = %_CallFunction(receiver, v1, v2, comparefn);
|
|
789
791
|
if (c12 > 0) {
|
|
790
792
|
// v0 <= v2 < v1
|
|
791
793
|
var tmp = v1;
|
|
@@ -806,7 +808,7 @@ function ArraySort(comparefn) {
|
|
|
806
808
|
// From i to high_start are elements that haven't been compared yet.
|
|
807
809
|
partition: for (var i = low_end + 1; i < high_start; i++) {
|
|
808
810
|
var element = a[i];
|
|
809
|
-
var order = %_CallFunction(
|
|
811
|
+
var order = %_CallFunction(receiver, element, pivot, comparefn);
|
|
810
812
|
if (order < 0) {
|
|
811
813
|
%_SwapElements(a, i, low_end);
|
|
812
814
|
low_end++;
|
|
@@ -815,7 +817,7 @@ function ArraySort(comparefn) {
|
|
|
815
817
|
high_start--;
|
|
816
818
|
if (high_start == i) break partition;
|
|
817
819
|
var top_elem = a[high_start];
|
|
818
|
-
order = %_CallFunction(
|
|
820
|
+
order = %_CallFunction(receiver, top_elem, pivot, comparefn);
|
|
819
821
|
} while (order > 0);
|
|
820
822
|
%_SwapElements(a, i, high_start);
|
|
821
823
|
if (order < 0) {
|
|
@@ -994,15 +996,18 @@ function ArrayFilter(f, receiver) {
|
|
|
994
996
|
if (!IS_FUNCTION(f)) {
|
|
995
997
|
throw MakeTypeError('called_non_callable', [ f ]);
|
|
996
998
|
}
|
|
999
|
+
if (IS_NULL_OR_UNDEFINED(receiver)) {
|
|
1000
|
+
receiver = %GetDefaultReceiver(f) || receiver;
|
|
1001
|
+
}
|
|
997
1002
|
// Pull out the length so that modifications to the length in the
|
|
998
1003
|
// loop will not affect the looping.
|
|
999
|
-
var length = this.length;
|
|
1004
|
+
var length = ToUint32(this.length);
|
|
1000
1005
|
var result = [];
|
|
1001
1006
|
var result_length = 0;
|
|
1002
1007
|
for (var i = 0; i < length; i++) {
|
|
1003
1008
|
var current = this[i];
|
|
1004
1009
|
if (!IS_UNDEFINED(current) || i in this) {
|
|
1005
|
-
if (
|
|
1010
|
+
if (%_CallFunction(receiver, current, i, this, f)) {
|
|
1006
1011
|
result[result_length++] = current;
|
|
1007
1012
|
}
|
|
1008
1013
|
}
|
|
@@ -1020,13 +1025,16 @@ function ArrayForEach(f, receiver) {
|
|
|
1020
1025
|
if (!IS_FUNCTION(f)) {
|
|
1021
1026
|
throw MakeTypeError('called_non_callable', [ f ]);
|
|
1022
1027
|
}
|
|
1028
|
+
if (IS_NULL_OR_UNDEFINED(receiver)) {
|
|
1029
|
+
receiver = %GetDefaultReceiver(f) || receiver;
|
|
1030
|
+
}
|
|
1023
1031
|
// Pull out the length so that modifications to the length in the
|
|
1024
1032
|
// loop will not affect the looping.
|
|
1025
1033
|
var length = TO_UINT32(this.length);
|
|
1026
1034
|
for (var i = 0; i < length; i++) {
|
|
1027
1035
|
var current = this[i];
|
|
1028
1036
|
if (!IS_UNDEFINED(current) || i in this) {
|
|
1029
|
-
|
|
1037
|
+
%_CallFunction(receiver, current, i, this, f);
|
|
1030
1038
|
}
|
|
1031
1039
|
}
|
|
1032
1040
|
}
|
|
@@ -1043,13 +1051,16 @@ function ArraySome(f, receiver) {
|
|
|
1043
1051
|
if (!IS_FUNCTION(f)) {
|
|
1044
1052
|
throw MakeTypeError('called_non_callable', [ f ]);
|
|
1045
1053
|
}
|
|
1054
|
+
if (IS_NULL_OR_UNDEFINED(receiver)) {
|
|
1055
|
+
receiver = %GetDefaultReceiver(f) || receiver;
|
|
1056
|
+
}
|
|
1046
1057
|
// Pull out the length so that modifications to the length in the
|
|
1047
1058
|
// loop will not affect the looping.
|
|
1048
1059
|
var length = TO_UINT32(this.length);
|
|
1049
1060
|
for (var i = 0; i < length; i++) {
|
|
1050
1061
|
var current = this[i];
|
|
1051
1062
|
if (!IS_UNDEFINED(current) || i in this) {
|
|
1052
|
-
if (
|
|
1063
|
+
if (%_CallFunction(receiver, current, i, this, f)) return true;
|
|
1053
1064
|
}
|
|
1054
1065
|
}
|
|
1055
1066
|
return false;
|
|
@@ -1065,13 +1076,16 @@ function ArrayEvery(f, receiver) {
|
|
|
1065
1076
|
if (!IS_FUNCTION(f)) {
|
|
1066
1077
|
throw MakeTypeError('called_non_callable', [ f ]);
|
|
1067
1078
|
}
|
|
1079
|
+
if (IS_NULL_OR_UNDEFINED(receiver)) {
|
|
1080
|
+
receiver = %GetDefaultReceiver(f) || receiver;
|
|
1081
|
+
}
|
|
1068
1082
|
// Pull out the length so that modifications to the length in the
|
|
1069
1083
|
// loop will not affect the looping.
|
|
1070
1084
|
var length = TO_UINT32(this.length);
|
|
1071
1085
|
for (var i = 0; i < length; i++) {
|
|
1072
1086
|
var current = this[i];
|
|
1073
1087
|
if (!IS_UNDEFINED(current) || i in this) {
|
|
1074
|
-
if (
|
|
1088
|
+
if (!%_CallFunction(receiver, current, i, this, f)) return false;
|
|
1075
1089
|
}
|
|
1076
1090
|
}
|
|
1077
1091
|
return true;
|
|
@@ -1086,6 +1100,9 @@ function ArrayMap(f, receiver) {
|
|
|
1086
1100
|
if (!IS_FUNCTION(f)) {
|
|
1087
1101
|
throw MakeTypeError('called_non_callable', [ f ]);
|
|
1088
1102
|
}
|
|
1103
|
+
if (IS_NULL_OR_UNDEFINED(receiver)) {
|
|
1104
|
+
receiver = %GetDefaultReceiver(f) || receiver;
|
|
1105
|
+
}
|
|
1089
1106
|
// Pull out the length so that modifications to the length in the
|
|
1090
1107
|
// loop will not affect the looping.
|
|
1091
1108
|
var length = TO_UINT32(this.length);
|
|
@@ -1094,7 +1111,7 @@ function ArrayMap(f, receiver) {
|
|
|
1094
1111
|
for (var i = 0; i < length; i++) {
|
|
1095
1112
|
var current = this[i];
|
|
1096
1113
|
if (!IS_UNDEFINED(current) || i in this) {
|
|
1097
|
-
accumulator[i] =
|
|
1114
|
+
accumulator[i] = %_CallFunction(receiver, current, i, this, f);
|
|
1098
1115
|
}
|
|
1099
1116
|
}
|
|
1100
1117
|
%MoveArrayContents(accumulator, result);
|
|
@@ -1231,9 +1248,10 @@ function ArrayReduce(callback, current) {
|
|
|
1231
1248
|
if (!IS_FUNCTION(callback)) {
|
|
1232
1249
|
throw MakeTypeError('called_non_callable', [callback]);
|
|
1233
1250
|
}
|
|
1251
|
+
|
|
1234
1252
|
// Pull out the length so that modifications to the length in the
|
|
1235
1253
|
// loop will not affect the looping.
|
|
1236
|
-
var length = this.length;
|
|
1254
|
+
var length = ToUint32(this.length);
|
|
1237
1255
|
var i = 0;
|
|
1238
1256
|
|
|
1239
1257
|
find_initial: if (%_ArgumentsLength() < 2) {
|
|
@@ -1247,10 +1265,11 @@ function ArrayReduce(callback, current) {
|
|
|
1247
1265
|
throw MakeTypeError('reduce_no_initial', []);
|
|
1248
1266
|
}
|
|
1249
1267
|
|
|
1268
|
+
var receiver = %GetDefaultReceiver(callback);
|
|
1250
1269
|
for (; i < length; i++) {
|
|
1251
1270
|
var element = this[i];
|
|
1252
1271
|
if (!IS_UNDEFINED(element) || i in this) {
|
|
1253
|
-
current =
|
|
1272
|
+
current = %_CallFunction(receiver, current, element, i, this, callback);
|
|
1254
1273
|
}
|
|
1255
1274
|
}
|
|
1256
1275
|
return current;
|
|
@@ -1265,7 +1284,7 @@ function ArrayReduceRight(callback, current) {
|
|
|
1265
1284
|
if (!IS_FUNCTION(callback)) {
|
|
1266
1285
|
throw MakeTypeError('called_non_callable', [callback]);
|
|
1267
1286
|
}
|
|
1268
|
-
var i = this.length - 1;
|
|
1287
|
+
var i = ToUint32(this.length) - 1;
|
|
1269
1288
|
|
|
1270
1289
|
find_initial: if (%_ArgumentsLength() < 2) {
|
|
1271
1290
|
for (; i >= 0; i--) {
|
|
@@ -1278,10 +1297,11 @@ function ArrayReduceRight(callback, current) {
|
|
|
1278
1297
|
throw MakeTypeError('reduce_no_initial', []);
|
|
1279
1298
|
}
|
|
1280
1299
|
|
|
1300
|
+
var receiver = %GetDefaultReceiver(callback);
|
|
1281
1301
|
for (; i >= 0; i--) {
|
|
1282
1302
|
var element = this[i];
|
|
1283
1303
|
if (!IS_UNDEFINED(element) || i in this) {
|
|
1284
|
-
current =
|
|
1304
|
+
current = %_CallFunction(receiver, current, element, i, this, callback);
|
|
1285
1305
|
}
|
|
1286
1306
|
}
|
|
1287
1307
|
return current;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Copyright (c)
|
|
1
|
+
// Copyright (c) 2011 Sun Microsystems Inc.
|
|
2
2
|
// All Rights Reserved.
|
|
3
3
|
//
|
|
4
4
|
// Redistribution and use in source and binary forms, with or without
|
|
@@ -71,9 +71,10 @@ const double DoubleConstant::one_half = 0.5;
|
|
|
71
71
|
const double DoubleConstant::minus_zero = -0.0;
|
|
72
72
|
const double DoubleConstant::uint8_max_value = 255;
|
|
73
73
|
const double DoubleConstant::zero = 0.0;
|
|
74
|
-
const double DoubleConstant::
|
|
74
|
+
const double DoubleConstant::canonical_non_hole_nan = OS::nan_value();
|
|
75
|
+
const double DoubleConstant::the_hole_nan = BitCast<double>(kHoleNanInt64);
|
|
75
76
|
const double DoubleConstant::negative_infinity = -V8_INFINITY;
|
|
76
|
-
const char* RelocInfo::kFillerCommentString = "DEOPTIMIZATION PADDING";
|
|
77
|
+
const char* const RelocInfo::kFillerCommentString = "DEOPTIMIZATION PADDING";
|
|
77
78
|
|
|
78
79
|
// -----------------------------------------------------------------------------
|
|
79
80
|
// Implementation of AssemblerBase
|
|
@@ -921,9 +922,15 @@ ExternalReference ExternalReference::address_of_negative_infinity() {
|
|
|
921
922
|
}
|
|
922
923
|
|
|
923
924
|
|
|
924
|
-
ExternalReference ExternalReference::
|
|
925
|
+
ExternalReference ExternalReference::address_of_canonical_non_hole_nan() {
|
|
925
926
|
return ExternalReference(reinterpret_cast<void*>(
|
|
926
|
-
const_cast<double*>(&DoubleConstant::
|
|
927
|
+
const_cast<double*>(&DoubleConstant::canonical_non_hole_nan)));
|
|
928
|
+
}
|
|
929
|
+
|
|
930
|
+
|
|
931
|
+
ExternalReference ExternalReference::address_of_the_hole_nan() {
|
|
932
|
+
return ExternalReference(reinterpret_cast<void*>(
|
|
933
|
+
const_cast<double*>(&DoubleConstant::the_hole_nan)));
|
|
927
934
|
}
|
|
928
935
|
|
|
929
936
|
|
|
@@ -70,7 +70,8 @@ class DoubleConstant: public AllStatic {
|
|
|
70
70
|
static const double zero;
|
|
71
71
|
static const double uint8_max_value;
|
|
72
72
|
static const double negative_infinity;
|
|
73
|
-
static const double
|
|
73
|
+
static const double canonical_non_hole_nan;
|
|
74
|
+
static const double the_hole_nan;
|
|
74
75
|
};
|
|
75
76
|
|
|
76
77
|
|
|
@@ -90,14 +91,18 @@ class Label BASE_EMBEDDED {
|
|
|
90
91
|
Unuse();
|
|
91
92
|
UnuseNear();
|
|
92
93
|
}
|
|
93
|
-
INLINE(~Label()) { ASSERT(!is_linked()); }
|
|
94
94
|
|
|
95
|
-
INLINE(
|
|
96
|
-
|
|
95
|
+
INLINE(~Label()) {
|
|
96
|
+
ASSERT(!is_linked());
|
|
97
|
+
ASSERT(!is_near_linked());
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
INLINE(void Unuse()) { pos_ = 0; }
|
|
101
|
+
INLINE(void UnuseNear()) { near_link_pos_ = 0; }
|
|
97
102
|
|
|
98
|
-
INLINE(bool is_bound() const)
|
|
99
|
-
INLINE(bool is_unused() const)
|
|
100
|
-
INLINE(bool is_linked() const)
|
|
103
|
+
INLINE(bool is_bound() const) { return pos_ < 0; }
|
|
104
|
+
INLINE(bool is_unused() const) { return pos_ == 0 && near_link_pos_ == 0; }
|
|
105
|
+
INLINE(bool is_linked() const) { return pos_ > 0; }
|
|
101
106
|
INLINE(bool is_near_linked() const) { return near_link_pos_ > 0; }
|
|
102
107
|
|
|
103
108
|
// Returns the position of bound or linked labels. Cannot be used
|
|
@@ -166,7 +171,7 @@ class RelocInfo BASE_EMBEDDED {
|
|
|
166
171
|
// where we are not sure to have enough space for patching in during
|
|
167
172
|
// lazy deoptimization. This is the case if we have indirect calls for which
|
|
168
173
|
// we do not normally record relocation info.
|
|
169
|
-
static const char* kFillerCommentString;
|
|
174
|
+
static const char* const kFillerCommentString;
|
|
170
175
|
|
|
171
176
|
// The minimum size of a comment is equal to three bytes for the extra tagged
|
|
172
177
|
// pc + the tag for the data, and kPointerSize for the actual pointer to the
|
|
@@ -625,7 +630,8 @@ class ExternalReference BASE_EMBEDDED {
|
|
|
625
630
|
static ExternalReference address_of_zero();
|
|
626
631
|
static ExternalReference address_of_uint8_max_value();
|
|
627
632
|
static ExternalReference address_of_negative_infinity();
|
|
628
|
-
static ExternalReference
|
|
633
|
+
static ExternalReference address_of_canonical_non_hole_nan();
|
|
634
|
+
static ExternalReference address_of_the_hole_nan();
|
|
629
635
|
|
|
630
636
|
static ExternalReference math_sin_double_function(Isolate* isolate);
|
|
631
637
|
static ExternalReference math_cos_double_function(Isolate* isolate);
|
data/lib/libv8/v8/src/ast-inl.h
CHANGED
|
@@ -37,68 +37,77 @@ namespace v8 {
|
|
|
37
37
|
namespace internal {
|
|
38
38
|
|
|
39
39
|
|
|
40
|
-
SwitchStatement::SwitchStatement(
|
|
41
|
-
|
|
40
|
+
SwitchStatement::SwitchStatement(Isolate* isolate,
|
|
41
|
+
ZoneStringList* labels)
|
|
42
|
+
: BreakableStatement(isolate, labels, TARGET_FOR_ANONYMOUS),
|
|
42
43
|
tag_(NULL), cases_(NULL) {
|
|
43
44
|
}
|
|
44
45
|
|
|
45
46
|
|
|
46
|
-
Block::Block(
|
|
47
|
-
|
|
47
|
+
Block::Block(Isolate* isolate,
|
|
48
|
+
ZoneStringList* labels,
|
|
49
|
+
int capacity,
|
|
50
|
+
bool is_initializer_block)
|
|
51
|
+
: BreakableStatement(isolate, labels, TARGET_FOR_NAMED_ONLY),
|
|
48
52
|
statements_(capacity),
|
|
49
|
-
is_initializer_block_(is_initializer_block)
|
|
53
|
+
is_initializer_block_(is_initializer_block),
|
|
54
|
+
block_scope_(NULL) {
|
|
50
55
|
}
|
|
51
56
|
|
|
52
57
|
|
|
53
|
-
BreakableStatement::BreakableStatement(
|
|
58
|
+
BreakableStatement::BreakableStatement(Isolate* isolate,
|
|
59
|
+
ZoneStringList* labels,
|
|
60
|
+
Type type)
|
|
54
61
|
: labels_(labels),
|
|
55
62
|
type_(type),
|
|
56
|
-
entry_id_(GetNextId()),
|
|
57
|
-
exit_id_(GetNextId()) {
|
|
63
|
+
entry_id_(GetNextId(isolate)),
|
|
64
|
+
exit_id_(GetNextId(isolate)) {
|
|
58
65
|
ASSERT(labels == NULL || labels->length() > 0);
|
|
59
66
|
}
|
|
60
67
|
|
|
61
68
|
|
|
62
|
-
IterationStatement::IterationStatement(ZoneStringList* labels)
|
|
63
|
-
: BreakableStatement(labels, TARGET_FOR_ANONYMOUS),
|
|
69
|
+
IterationStatement::IterationStatement(Isolate* isolate, ZoneStringList* labels)
|
|
70
|
+
: BreakableStatement(isolate, labels, TARGET_FOR_ANONYMOUS),
|
|
64
71
|
body_(NULL),
|
|
65
72
|
continue_target_(),
|
|
66
|
-
osr_entry_id_(GetNextId()) {
|
|
73
|
+
osr_entry_id_(GetNextId(isolate)) {
|
|
67
74
|
}
|
|
68
75
|
|
|
69
76
|
|
|
70
|
-
DoWhileStatement::DoWhileStatement(ZoneStringList* labels)
|
|
71
|
-
: IterationStatement(labels),
|
|
77
|
+
DoWhileStatement::DoWhileStatement(Isolate* isolate, ZoneStringList* labels)
|
|
78
|
+
: IterationStatement(isolate, labels),
|
|
72
79
|
cond_(NULL),
|
|
73
80
|
condition_position_(-1),
|
|
74
|
-
continue_id_(GetNextId()),
|
|
75
|
-
back_edge_id_(GetNextId()) {
|
|
81
|
+
continue_id_(GetNextId(isolate)),
|
|
82
|
+
back_edge_id_(GetNextId(isolate)) {
|
|
76
83
|
}
|
|
77
84
|
|
|
78
85
|
|
|
79
|
-
WhileStatement::WhileStatement(ZoneStringList* labels)
|
|
80
|
-
: IterationStatement(labels),
|
|
86
|
+
WhileStatement::WhileStatement(Isolate* isolate, ZoneStringList* labels)
|
|
87
|
+
: IterationStatement(isolate, labels),
|
|
81
88
|
cond_(NULL),
|
|
82
89
|
may_have_function_literal_(true),
|
|
83
|
-
body_id_(GetNextId()) {
|
|
90
|
+
body_id_(GetNextId(isolate)) {
|
|
84
91
|
}
|
|
85
92
|
|
|
86
93
|
|
|
87
|
-
ForStatement::ForStatement(ZoneStringList* labels)
|
|
88
|
-
: IterationStatement(labels),
|
|
94
|
+
ForStatement::ForStatement(Isolate* isolate, ZoneStringList* labels)
|
|
95
|
+
: IterationStatement(isolate, labels),
|
|
89
96
|
init_(NULL),
|
|
90
97
|
cond_(NULL),
|
|
91
98
|
next_(NULL),
|
|
92
99
|
may_have_function_literal_(true),
|
|
93
100
|
loop_variable_(NULL),
|
|
94
|
-
continue_id_(GetNextId()),
|
|
95
|
-
body_id_(GetNextId()) {
|
|
101
|
+
continue_id_(GetNextId(isolate)),
|
|
102
|
+
body_id_(GetNextId(isolate)) {
|
|
96
103
|
}
|
|
97
104
|
|
|
98
105
|
|
|
99
|
-
ForInStatement::ForInStatement(ZoneStringList* labels)
|
|
100
|
-
: IterationStatement(
|
|
101
|
-
|
|
106
|
+
ForInStatement::ForInStatement(Isolate* isolate, ZoneStringList* labels)
|
|
107
|
+
: IterationStatement(isolate, labels),
|
|
108
|
+
each_(NULL),
|
|
109
|
+
enumerable_(NULL),
|
|
110
|
+
assignment_id_(GetNextId(isolate)) {
|
|
102
111
|
}
|
|
103
112
|
|
|
104
113
|
|
data/lib/libv8/v8/src/ast.cc
CHANGED
|
@@ -37,11 +37,11 @@ namespace v8 {
|
|
|
37
37
|
namespace internal {
|
|
38
38
|
|
|
39
39
|
AstSentinels::AstSentinels()
|
|
40
|
-
: this_proxy_(true),
|
|
41
|
-
identifier_proxy_(false),
|
|
42
|
-
valid_left_hand_side_sentinel_(),
|
|
43
|
-
this_property_(&this_proxy_, NULL, 0),
|
|
44
|
-
call_sentinel_(NULL, NULL, 0) {
|
|
40
|
+
: this_proxy_(Isolate::Current(), true),
|
|
41
|
+
identifier_proxy_(Isolate::Current(), false),
|
|
42
|
+
valid_left_hand_side_sentinel_(Isolate::Current()),
|
|
43
|
+
this_property_(Isolate::Current(), &this_proxy_, NULL, 0),
|
|
44
|
+
call_sentinel_(Isolate::Current(), NULL, NULL, 0) {
|
|
45
45
|
}
|
|
46
46
|
|
|
47
47
|
|
|
@@ -72,8 +72,9 @@ CountOperation* ExpressionStatement::StatementAsCountOperation() {
|
|
|
72
72
|
}
|
|
73
73
|
|
|
74
74
|
|
|
75
|
-
VariableProxy::VariableProxy(Variable* var)
|
|
76
|
-
:
|
|
75
|
+
VariableProxy::VariableProxy(Isolate* isolate, Variable* var)
|
|
76
|
+
: Expression(isolate),
|
|
77
|
+
name_(var->name()),
|
|
77
78
|
var_(NULL), // Will be set by the call to BindTo.
|
|
78
79
|
is_this_(var->is_this()),
|
|
79
80
|
inside_with_(false),
|
|
@@ -83,26 +84,29 @@ VariableProxy::VariableProxy(Variable* var)
|
|
|
83
84
|
}
|
|
84
85
|
|
|
85
86
|
|
|
86
|
-
VariableProxy::VariableProxy(
|
|
87
|
+
VariableProxy::VariableProxy(Isolate* isolate,
|
|
88
|
+
Handle<String> name,
|
|
87
89
|
bool is_this,
|
|
88
90
|
bool inside_with,
|
|
89
91
|
int position)
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
92
|
+
: Expression(isolate),
|
|
93
|
+
name_(name),
|
|
94
|
+
var_(NULL),
|
|
95
|
+
is_this_(is_this),
|
|
96
|
+
inside_with_(inside_with),
|
|
97
|
+
is_trivial_(false),
|
|
98
|
+
position_(position) {
|
|
96
99
|
// Names must be canonicalized for fast equality checks.
|
|
97
100
|
ASSERT(name->IsSymbol());
|
|
98
101
|
}
|
|
99
102
|
|
|
100
103
|
|
|
101
|
-
VariableProxy::VariableProxy(bool is_this)
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
104
|
+
VariableProxy::VariableProxy(Isolate* isolate, bool is_this)
|
|
105
|
+
: Expression(isolate),
|
|
106
|
+
var_(NULL),
|
|
107
|
+
is_this_(is_this),
|
|
108
|
+
inside_with_(false),
|
|
109
|
+
is_trivial_(false) {
|
|
106
110
|
}
|
|
107
111
|
|
|
108
112
|
|
|
@@ -120,26 +124,31 @@ void VariableProxy::BindTo(Variable* var) {
|
|
|
120
124
|
}
|
|
121
125
|
|
|
122
126
|
|
|
123
|
-
Assignment::Assignment(
|
|
127
|
+
Assignment::Assignment(Isolate* isolate,
|
|
128
|
+
Token::Value op,
|
|
124
129
|
Expression* target,
|
|
125
130
|
Expression* value,
|
|
126
131
|
int pos)
|
|
127
|
-
:
|
|
132
|
+
: Expression(isolate),
|
|
133
|
+
op_(op),
|
|
128
134
|
target_(target),
|
|
129
135
|
value_(value),
|
|
130
136
|
pos_(pos),
|
|
131
137
|
binary_operation_(NULL),
|
|
132
138
|
compound_load_id_(kNoNumber),
|
|
133
|
-
assignment_id_(GetNextId()),
|
|
139
|
+
assignment_id_(GetNextId(isolate)),
|
|
134
140
|
block_start_(false),
|
|
135
141
|
block_end_(false),
|
|
136
|
-
is_monomorphic_(false)
|
|
137
|
-
receiver_types_(NULL) {
|
|
142
|
+
is_monomorphic_(false) {
|
|
138
143
|
ASSERT(Token::IsAssignmentOp(op));
|
|
139
144
|
if (is_compound()) {
|
|
140
145
|
binary_operation_ =
|
|
141
|
-
new
|
|
142
|
-
|
|
146
|
+
new(isolate->zone()) BinaryOperation(isolate,
|
|
147
|
+
binary_op(),
|
|
148
|
+
target,
|
|
149
|
+
value,
|
|
150
|
+
pos + 1);
|
|
151
|
+
compound_load_id_ = GetNextId(isolate);
|
|
143
152
|
}
|
|
144
153
|
}
|
|
145
154
|
|
|
@@ -186,8 +195,9 @@ ObjectLiteral::Property::Property(Literal* key, Expression* value) {
|
|
|
186
195
|
|
|
187
196
|
|
|
188
197
|
ObjectLiteral::Property::Property(bool is_getter, FunctionLiteral* value) {
|
|
198
|
+
Isolate* isolate = Isolate::Current();
|
|
189
199
|
emit_store_ = true;
|
|
190
|
-
key_ = new Literal(value->name());
|
|
200
|
+
key_ = new(isolate->zone()) Literal(isolate, value->name());
|
|
191
201
|
value_ = value;
|
|
192
202
|
kind_ = is_getter ? GETTER : SETTER;
|
|
193
203
|
}
|
|
@@ -293,11 +303,11 @@ void ObjectLiteral::CalculateEmitStore() {
|
|
|
293
303
|
|
|
294
304
|
void TargetCollector::AddTarget(Label* target) {
|
|
295
305
|
// Add the label to the collector, but discard duplicates.
|
|
296
|
-
int length = targets_
|
|
306
|
+
int length = targets_.length();
|
|
297
307
|
for (int i = 0; i < length; i++) {
|
|
298
|
-
if (targets_
|
|
308
|
+
if (targets_[i] == target) return;
|
|
299
309
|
}
|
|
300
|
-
targets_
|
|
310
|
+
targets_.Add(target);
|
|
301
311
|
}
|
|
302
312
|
|
|
303
313
|
|
|
@@ -337,12 +347,64 @@ bool BinaryOperation::ResultOverwriteAllowed() {
|
|
|
337
347
|
}
|
|
338
348
|
|
|
339
349
|
|
|
350
|
+
bool CompareOperation::IsLiteralCompareTypeof(Expression** expr,
|
|
351
|
+
Handle<String>* check) {
|
|
352
|
+
if (op_ != Token::EQ && op_ != Token::EQ_STRICT) return false;
|
|
353
|
+
|
|
354
|
+
UnaryOperation* left_unary = left_->AsUnaryOperation();
|
|
355
|
+
UnaryOperation* right_unary = right_->AsUnaryOperation();
|
|
356
|
+
Literal* left_literal = left_->AsLiteral();
|
|
357
|
+
Literal* right_literal = right_->AsLiteral();
|
|
358
|
+
|
|
359
|
+
// Check for the pattern: typeof <expression> == <string literal>.
|
|
360
|
+
if (left_unary != NULL && left_unary->op() == Token::TYPEOF &&
|
|
361
|
+
right_literal != NULL && right_literal->handle()->IsString()) {
|
|
362
|
+
*expr = left_unary->expression();
|
|
363
|
+
*check = Handle<String>::cast(right_literal->handle());
|
|
364
|
+
return true;
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
// Check for the pattern: <string literal> == typeof <expression>.
|
|
368
|
+
if (right_unary != NULL && right_unary->op() == Token::TYPEOF &&
|
|
369
|
+
left_literal != NULL && left_literal->handle()->IsString()) {
|
|
370
|
+
*expr = right_unary->expression();
|
|
371
|
+
*check = Handle<String>::cast(left_literal->handle());
|
|
372
|
+
return true;
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
return false;
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
|
|
379
|
+
bool CompareOperation::IsLiteralCompareUndefined(Expression** expr) {
|
|
380
|
+
if (op_ != Token::EQ_STRICT) return false;
|
|
381
|
+
|
|
382
|
+
UnaryOperation* left_unary = left_->AsUnaryOperation();
|
|
383
|
+
UnaryOperation* right_unary = right_->AsUnaryOperation();
|
|
384
|
+
|
|
385
|
+
// Check for the pattern: <expression> === void <literal>.
|
|
386
|
+
if (right_unary != NULL && right_unary->op() == Token::VOID &&
|
|
387
|
+
right_unary->expression()->AsLiteral() != NULL) {
|
|
388
|
+
*expr = left_;
|
|
389
|
+
return true;
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
// Check for the pattern: void <literal> === <expression>.
|
|
393
|
+
if (left_unary != NULL && left_unary->op() == Token::VOID &&
|
|
394
|
+
left_unary->expression()->AsLiteral() != NULL) {
|
|
395
|
+
*expr = right_;
|
|
396
|
+
return true;
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
return false;
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
|
|
340
403
|
// ----------------------------------------------------------------------------
|
|
341
404
|
// Inlining support
|
|
342
405
|
|
|
343
406
|
bool Declaration::IsInlineable() const {
|
|
344
|
-
|
|
345
|
-
return false;
|
|
407
|
+
return proxy()->var()->IsStackAllocated() && fun() == NULL;
|
|
346
408
|
}
|
|
347
409
|
|
|
348
410
|
|
|
@@ -363,12 +425,12 @@ bool ForInStatement::IsInlineable() const {
|
|
|
363
425
|
}
|
|
364
426
|
|
|
365
427
|
|
|
366
|
-
bool
|
|
428
|
+
bool WithStatement::IsInlineable() const {
|
|
367
429
|
return false;
|
|
368
430
|
}
|
|
369
431
|
|
|
370
432
|
|
|
371
|
-
bool
|
|
433
|
+
bool ExitContextStatement::IsInlineable() const {
|
|
372
434
|
return false;
|
|
373
435
|
}
|
|
374
436
|
|
|
@@ -393,11 +455,6 @@ bool TryFinallyStatement::IsInlineable() const {
|
|
|
393
455
|
}
|
|
394
456
|
|
|
395
457
|
|
|
396
|
-
bool CatchExtensionObject::IsInlineable() const {
|
|
397
|
-
return false;
|
|
398
|
-
}
|
|
399
|
-
|
|
400
|
-
|
|
401
458
|
bool DebuggerStatement::IsInlineable() const {
|
|
402
459
|
return false;
|
|
403
460
|
}
|
|
@@ -544,6 +601,17 @@ bool CallNew::IsInlineable() const {
|
|
|
544
601
|
|
|
545
602
|
|
|
546
603
|
bool CallRuntime::IsInlineable() const {
|
|
604
|
+
// Don't try to inline JS runtime calls because we don't (currently) even
|
|
605
|
+
// optimize them.
|
|
606
|
+
if (is_jsruntime()) return false;
|
|
607
|
+
// Don't inline the %_ArgumentsLength or %_Arguments because their
|
|
608
|
+
// implementation will not work. There is no stack frame to get them
|
|
609
|
+
// from.
|
|
610
|
+
if (function()->intrinsic_type == Runtime::INLINE &&
|
|
611
|
+
(name()->IsEqualTo(CStrVector("_ArgumentsLength")) ||
|
|
612
|
+
name()->IsEqualTo(CStrVector("_Arguments")))) {
|
|
613
|
+
return false;
|
|
614
|
+
}
|
|
547
615
|
const int count = arguments()->length();
|
|
548
616
|
for (int i = 0; i < count; ++i) {
|
|
549
617
|
if (!arguments()->at(i)->IsInlineable()) return false;
|
|
@@ -582,7 +650,8 @@ bool CountOperation::IsInlineable() const {
|
|
|
582
650
|
|
|
583
651
|
void Property::RecordTypeFeedback(TypeFeedbackOracle* oracle) {
|
|
584
652
|
// Record type feedback from the oracle in the AST.
|
|
585
|
-
is_monomorphic_ = oracle->
|
|
653
|
+
is_monomorphic_ = oracle->LoadIsMonomorphicNormal(this);
|
|
654
|
+
receiver_types_.Clear();
|
|
586
655
|
if (key()->IsPropertyName()) {
|
|
587
656
|
if (oracle->LoadIsBuiltin(this, Builtins::kLoadIC_ArrayLength)) {
|
|
588
657
|
is_array_length_ = true;
|
|
@@ -595,16 +664,15 @@ void Property::RecordTypeFeedback(TypeFeedbackOracle* oracle) {
|
|
|
595
664
|
Literal* lit_key = key()->AsLiteral();
|
|
596
665
|
ASSERT(lit_key != NULL && lit_key->handle()->IsString());
|
|
597
666
|
Handle<String> name = Handle<String>::cast(lit_key->handle());
|
|
598
|
-
|
|
599
|
-
receiver_types_ = types;
|
|
667
|
+
oracle->LoadReceiverTypes(this, name, &receiver_types_);
|
|
600
668
|
}
|
|
601
669
|
} else if (oracle->LoadIsBuiltin(this, Builtins::kKeyedLoadIC_String)) {
|
|
602
670
|
is_string_access_ = true;
|
|
603
671
|
} else if (is_monomorphic_) {
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
672
|
+
receiver_types_.Add(oracle->LoadMonomorphicReceiverType(this));
|
|
673
|
+
} else if (oracle->LoadIsMegamorphicWithTypeInfo(this)) {
|
|
674
|
+
receiver_types_.Reserve(kMaxKeyedPolymorphism);
|
|
675
|
+
oracle->CollectKeyedReceiverTypes(this->id(), &receiver_types_);
|
|
608
676
|
}
|
|
609
677
|
}
|
|
610
678
|
|
|
@@ -612,31 +680,32 @@ void Property::RecordTypeFeedback(TypeFeedbackOracle* oracle) {
|
|
|
612
680
|
void Assignment::RecordTypeFeedback(TypeFeedbackOracle* oracle) {
|
|
613
681
|
Property* prop = target()->AsProperty();
|
|
614
682
|
ASSERT(prop != NULL);
|
|
615
|
-
is_monomorphic_ = oracle->
|
|
683
|
+
is_monomorphic_ = oracle->StoreIsMonomorphicNormal(this);
|
|
684
|
+
receiver_types_.Clear();
|
|
616
685
|
if (prop->key()->IsPropertyName()) {
|
|
617
686
|
Literal* lit_key = prop->key()->AsLiteral();
|
|
618
687
|
ASSERT(lit_key != NULL && lit_key->handle()->IsString());
|
|
619
688
|
Handle<String> name = Handle<String>::cast(lit_key->handle());
|
|
620
|
-
|
|
621
|
-
receiver_types_ = types;
|
|
689
|
+
oracle->StoreReceiverTypes(this, name, &receiver_types_);
|
|
622
690
|
} else if (is_monomorphic_) {
|
|
623
|
-
// Record receiver type for monomorphic keyed
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
691
|
+
// Record receiver type for monomorphic keyed stores.
|
|
692
|
+
receiver_types_.Add(oracle->StoreMonomorphicReceiverType(this));
|
|
693
|
+
} else if (oracle->StoreIsMegamorphicWithTypeInfo(this)) {
|
|
694
|
+
receiver_types_.Reserve(kMaxKeyedPolymorphism);
|
|
695
|
+
oracle->CollectKeyedReceiverTypes(this->id(), &receiver_types_);
|
|
628
696
|
}
|
|
629
697
|
}
|
|
630
698
|
|
|
631
699
|
|
|
632
700
|
void CountOperation::RecordTypeFeedback(TypeFeedbackOracle* oracle) {
|
|
633
|
-
is_monomorphic_ = oracle->
|
|
701
|
+
is_monomorphic_ = oracle->StoreIsMonomorphicNormal(this);
|
|
702
|
+
receiver_types_.Clear();
|
|
634
703
|
if (is_monomorphic_) {
|
|
635
|
-
// Record receiver type for monomorphic keyed
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
704
|
+
// Record receiver type for monomorphic keyed stores.
|
|
705
|
+
receiver_types_.Add(oracle->StoreMonomorphicReceiverType(this));
|
|
706
|
+
} else if (oracle->StoreIsMegamorphicWithTypeInfo(this)) {
|
|
707
|
+
receiver_types_.Reserve(kMaxKeyedPolymorphism);
|
|
708
|
+
oracle->CollectKeyedReceiverTypes(this->id(), &receiver_types_);
|
|
640
709
|
}
|
|
641
710
|
}
|
|
642
711
|
|
|
@@ -720,15 +789,14 @@ void Call::RecordTypeFeedback(TypeFeedbackOracle* oracle,
|
|
|
720
789
|
Literal* key = property->key()->AsLiteral();
|
|
721
790
|
ASSERT(key != NULL && key->handle()->IsString());
|
|
722
791
|
Handle<String> name = Handle<String>::cast(key->handle());
|
|
723
|
-
receiver_types_
|
|
792
|
+
receiver_types_.Clear();
|
|
793
|
+
oracle->CallReceiverTypes(this, name, call_kind, &receiver_types_);
|
|
724
794
|
#ifdef DEBUG
|
|
725
795
|
if (FLAG_enable_slow_asserts) {
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
ASSERT(!map.is_null() && *map != NULL);
|
|
731
|
-
}
|
|
796
|
+
int length = receiver_types_.length();
|
|
797
|
+
for (int i = 0; i < length; i++) {
|
|
798
|
+
Handle<Map> map = receiver_types_.at(i);
|
|
799
|
+
ASSERT(!map.is_null() && *map != NULL);
|
|
732
800
|
}
|
|
733
801
|
}
|
|
734
802
|
#endif
|
|
@@ -736,9 +804,9 @@ void Call::RecordTypeFeedback(TypeFeedbackOracle* oracle,
|
|
|
736
804
|
check_type_ = oracle->GetCallCheckType(this);
|
|
737
805
|
if (is_monomorphic_) {
|
|
738
806
|
Handle<Map> map;
|
|
739
|
-
if (receiver_types_
|
|
807
|
+
if (receiver_types_.length() > 0) {
|
|
740
808
|
ASSERT(check_type_ == RECEIVER_MAP_CHECK);
|
|
741
|
-
map = receiver_types_
|
|
809
|
+
map = receiver_types_.at(0);
|
|
742
810
|
} else {
|
|
743
811
|
ASSERT(check_type_ != RECEIVER_MAP_CHECK);
|
|
744
812
|
holder_ = Handle<JSObject>(
|
|
@@ -1132,15 +1200,16 @@ RegExpAlternative::RegExpAlternative(ZoneList<RegExpTree*>* nodes)
|
|
|
1132
1200
|
}
|
|
1133
1201
|
|
|
1134
1202
|
|
|
1135
|
-
CaseClause::CaseClause(
|
|
1203
|
+
CaseClause::CaseClause(Isolate* isolate,
|
|
1204
|
+
Expression* label,
|
|
1136
1205
|
ZoneList<Statement*>* statements,
|
|
1137
1206
|
int pos)
|
|
1138
1207
|
: label_(label),
|
|
1139
1208
|
statements_(statements),
|
|
1140
1209
|
position_(pos),
|
|
1141
1210
|
compare_type_(NONE),
|
|
1142
|
-
compare_id_(AstNode::GetNextId()),
|
|
1143
|
-
entry_id_(AstNode::GetNextId()) {
|
|
1211
|
+
compare_id_(AstNode::GetNextId(isolate)),
|
|
1212
|
+
entry_id_(AstNode::GetNextId(isolate)) {
|
|
1144
1213
|
}
|
|
1145
1214
|
|
|
1146
1215
|
} } // namespace v8::internal
|