libv8 3.3.10.4 → 3.5.10.beta1
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/libv8/scons/CHANGES.txt +24 -231
- data/lib/libv8/scons/LICENSE.txt +1 -1
- data/lib/libv8/scons/MANIFEST +0 -1
- data/lib/libv8/scons/PKG-INFO +1 -1
- data/lib/libv8/scons/README.txt +9 -9
- data/lib/libv8/scons/RELEASE.txt +75 -77
- data/lib/libv8/scons/engine/SCons/Action.py +6 -22
- data/lib/libv8/scons/engine/SCons/Builder.py +2 -2
- data/lib/libv8/scons/engine/SCons/CacheDir.py +2 -2
- data/lib/libv8/scons/engine/SCons/Debug.py +2 -2
- data/lib/libv8/scons/engine/SCons/Defaults.py +10 -24
- data/lib/libv8/scons/engine/SCons/Environment.py +19 -118
- data/lib/libv8/scons/engine/SCons/Errors.py +2 -2
- data/lib/libv8/scons/engine/SCons/Executor.py +2 -2
- data/lib/libv8/scons/engine/SCons/Job.py +2 -2
- data/lib/libv8/scons/engine/SCons/Memoize.py +2 -2
- data/lib/libv8/scons/engine/SCons/Node/Alias.py +2 -2
- data/lib/libv8/scons/engine/SCons/Node/FS.py +121 -281
- data/lib/libv8/scons/engine/SCons/Node/Python.py +2 -2
- data/lib/libv8/scons/engine/SCons/Node/__init__.py +5 -6
- data/lib/libv8/scons/engine/SCons/Options/BoolOption.py +2 -2
- data/lib/libv8/scons/engine/SCons/Options/EnumOption.py +2 -2
- data/lib/libv8/scons/engine/SCons/Options/ListOption.py +2 -2
- data/lib/libv8/scons/engine/SCons/Options/PackageOption.py +2 -2
- data/lib/libv8/scons/engine/SCons/Options/PathOption.py +2 -2
- data/lib/libv8/scons/engine/SCons/Options/__init__.py +2 -2
- data/lib/libv8/scons/engine/SCons/PathList.py +2 -2
- data/lib/libv8/scons/engine/SCons/Platform/__init__.py +2 -2
- data/lib/libv8/scons/engine/SCons/Platform/aix.py +2 -2
- data/lib/libv8/scons/engine/SCons/Platform/cygwin.py +2 -2
- data/lib/libv8/scons/engine/SCons/Platform/darwin.py +3 -27
- data/lib/libv8/scons/engine/SCons/Platform/hpux.py +2 -2
- data/lib/libv8/scons/engine/SCons/Platform/irix.py +2 -2
- data/lib/libv8/scons/engine/SCons/Platform/os2.py +2 -2
- data/lib/libv8/scons/engine/SCons/Platform/posix.py +2 -2
- data/lib/libv8/scons/engine/SCons/Platform/sunos.py +2 -2
- data/lib/libv8/scons/engine/SCons/Platform/win32.py +2 -2
- data/lib/libv8/scons/engine/SCons/SConf.py +2 -2
- data/lib/libv8/scons/engine/SCons/SConsign.py +3 -9
- data/lib/libv8/scons/engine/SCons/Scanner/C.py +2 -2
- data/lib/libv8/scons/engine/SCons/Scanner/D.py +2 -2
- data/lib/libv8/scons/engine/SCons/Scanner/Dir.py +2 -2
- data/lib/libv8/scons/engine/SCons/Scanner/Fortran.py +2 -2
- data/lib/libv8/scons/engine/SCons/Scanner/IDL.py +2 -2
- data/lib/libv8/scons/engine/SCons/Scanner/LaTeX.py +2 -5
- data/lib/libv8/scons/engine/SCons/Scanner/Prog.py +2 -2
- data/lib/libv8/scons/engine/SCons/Scanner/RC.py +3 -3
- data/lib/libv8/scons/engine/SCons/Scanner/__init__.py +2 -2
- data/lib/libv8/scons/engine/SCons/Script/Interactive.py +2 -2
- data/lib/libv8/scons/engine/SCons/Script/Main.py +11 -82
- data/lib/libv8/scons/engine/SCons/Script/SConsOptions.py +5 -5
- data/lib/libv8/scons/engine/SCons/Script/SConscript.py +2 -2
- data/lib/libv8/scons/engine/SCons/Script/__init__.py +2 -2
- data/lib/libv8/scons/engine/SCons/Sig.py +2 -2
- data/lib/libv8/scons/engine/SCons/Subst.py +2 -2
- data/lib/libv8/scons/engine/SCons/Taskmaster.py +2 -10
- data/lib/libv8/scons/engine/SCons/Tool/386asm.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/BitKeeper.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/CVS.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/FortranCommon.py +2 -19
- data/lib/libv8/scons/engine/SCons/Tool/JavaCommon.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/MSCommon/__init__.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/MSCommon/arch.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/MSCommon/common.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/MSCommon/netframework.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/MSCommon/sdk.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/MSCommon/vc.py +6 -9
- data/lib/libv8/scons/engine/SCons/Tool/MSCommon/vs.py +2 -29
- data/lib/libv8/scons/engine/SCons/Tool/Perforce.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/PharLapCommon.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/RCS.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/SCCS.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/Subversion.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/__init__.py +3 -3
- data/lib/libv8/scons/engine/SCons/Tool/aixc++.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/aixcc.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/aixf77.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/aixlink.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/applelink.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/ar.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/as.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/bcc32.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/c++.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/cc.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/cvf.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/default.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/dmd.py +7 -24
- data/lib/libv8/scons/engine/SCons/Tool/dvi.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/dvipdf.py +2 -3
- data/lib/libv8/scons/engine/SCons/Tool/dvips.py +2 -3
- data/lib/libv8/scons/engine/SCons/Tool/f77.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/f90.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/f95.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/filesystem.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/fortran.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/g++.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/g77.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/gas.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/gcc.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/gfortran.py +3 -3
- data/lib/libv8/scons/engine/SCons/Tool/gnulink.py +3 -2
- data/lib/libv8/scons/engine/SCons/Tool/gs.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/hpc++.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/hpcc.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/hplink.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/icc.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/icl.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/ifl.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/ifort.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/ilink.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/ilink32.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/install.py +3 -57
- data/lib/libv8/scons/engine/SCons/Tool/intelc.py +25 -65
- data/lib/libv8/scons/engine/SCons/Tool/ipkg.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/jar.py +3 -9
- data/lib/libv8/scons/engine/SCons/Tool/javac.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/javah.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/latex.py +2 -3
- data/lib/libv8/scons/engine/SCons/Tool/lex.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/link.py +5 -6
- data/lib/libv8/scons/engine/SCons/Tool/linkloc.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/m4.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/masm.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/midl.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/mingw.py +10 -31
- data/lib/libv8/scons/engine/SCons/Tool/mslib.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/mslink.py +9 -61
- data/lib/libv8/scons/engine/SCons/Tool/mssdk.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/msvc.py +11 -21
- data/lib/libv8/scons/engine/SCons/Tool/msvs.py +59 -477
- data/lib/libv8/scons/engine/SCons/Tool/mwcc.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/mwld.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/nasm.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/packaging/__init__.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/packaging/ipk.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/packaging/msi.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/packaging/rpm.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/packaging/src_tarbz2.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/packaging/src_targz.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/packaging/src_zip.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/packaging/tarbz2.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/packaging/targz.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/packaging/zip.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/pdf.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/pdflatex.py +2 -3
- data/lib/libv8/scons/engine/SCons/Tool/pdftex.py +2 -3
- data/lib/libv8/scons/engine/SCons/Tool/qt.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/rmic.py +3 -9
- data/lib/libv8/scons/engine/SCons/Tool/rpcgen.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/rpm.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/sgiar.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/sgic++.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/sgicc.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/sgilink.py +3 -2
- data/lib/libv8/scons/engine/SCons/Tool/sunar.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/sunc++.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/suncc.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/sunf77.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/sunf90.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/sunf95.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/sunlink.py +3 -2
- data/lib/libv8/scons/engine/SCons/Tool/swig.py +5 -6
- data/lib/libv8/scons/engine/SCons/Tool/tar.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/tex.py +43 -96
- data/lib/libv8/scons/engine/SCons/Tool/textfile.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/tlib.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/wix.py +2 -2
- data/lib/libv8/scons/engine/SCons/Tool/yacc.py +2 -12
- data/lib/libv8/scons/engine/SCons/Tool/zip.py +2 -2
- data/lib/libv8/scons/engine/SCons/Util.py +3 -3
- data/lib/libv8/scons/engine/SCons/Variables/BoolVariable.py +2 -2
- data/lib/libv8/scons/engine/SCons/Variables/EnumVariable.py +3 -3
- data/lib/libv8/scons/engine/SCons/Variables/ListVariable.py +2 -2
- data/lib/libv8/scons/engine/SCons/Variables/PackageVariable.py +2 -2
- data/lib/libv8/scons/engine/SCons/Variables/PathVariable.py +2 -2
- data/lib/libv8/scons/engine/SCons/Variables/__init__.py +2 -2
- data/lib/libv8/scons/engine/SCons/Warnings.py +2 -2
- data/lib/libv8/scons/engine/SCons/__init__.py +6 -6
- data/lib/libv8/scons/engine/SCons/compat/__init__.py +2 -2
- data/lib/libv8/scons/engine/SCons/compat/_scons_builtins.py +2 -2
- data/lib/libv8/scons/engine/SCons/compat/_scons_collections.py +2 -2
- data/lib/libv8/scons/engine/SCons/compat/_scons_dbm.py +2 -2
- data/lib/libv8/scons/engine/SCons/compat/_scons_hashlib.py +2 -2
- data/lib/libv8/scons/engine/SCons/compat/_scons_io.py +2 -2
- data/lib/libv8/scons/engine/SCons/cpp.py +2 -2
- data/lib/libv8/scons/engine/SCons/dblite.py +1 -4
- data/lib/libv8/scons/engine/SCons/exitfuncs.py +2 -2
- data/lib/libv8/scons/scons-time.1 +3 -3
- data/lib/libv8/scons/scons.1 +1164 -1170
- data/lib/libv8/scons/sconsign.1 +3 -3
- data/lib/libv8/scons/script/scons +22 -22
- data/lib/libv8/scons/script/scons-time +2 -2
- data/lib/libv8/scons/script/scons.bat +4 -7
- data/lib/libv8/scons/script/sconsign +20 -21
- data/lib/libv8/scons/setup.cfg +1 -0
- data/lib/libv8/scons/setup.py +40 -38
- data/lib/libv8/v8/.gitignore +1 -1
- data/lib/libv8/v8/AUTHORS +2 -0
- data/lib/libv8/v8/ChangeLog +387 -0
- data/lib/libv8/v8/Makefile +171 -0
- data/lib/libv8/v8/SConstruct +124 -51
- data/lib/libv8/v8/build/README.txt +31 -14
- data/lib/libv8/v8/build/all.gyp +11 -4
- data/lib/libv8/v8/build/armu.gypi +6 -2
- data/lib/libv8/v8/build/common.gypi +240 -94
- data/lib/libv8/v8/build/gyp_v8 +32 -4
- data/lib/libv8/v8/build/standalone.gypi +200 -0
- data/lib/libv8/v8/include/v8-debug.h +0 -0
- data/lib/libv8/v8/include/v8-profiler.h +8 -11
- data/lib/libv8/v8/include/v8.h +191 -108
- data/lib/libv8/v8/preparser/SConscript +2 -2
- data/lib/libv8/v8/preparser/preparser-process.cc +3 -3
- data/lib/libv8/v8/preparser/preparser.gyp +42 -0
- data/lib/libv8/v8/src/SConscript +33 -8
- data/lib/libv8/v8/src/accessors.cc +77 -43
- data/lib/libv8/v8/src/api.cc +393 -191
- data/lib/libv8/v8/src/api.h +4 -8
- data/lib/libv8/v8/src/apinatives.js +15 -3
- data/lib/libv8/v8/src/arguments.h +8 -0
- data/lib/libv8/v8/src/arm/assembler-arm.cc +120 -120
- data/lib/libv8/v8/src/arm/assembler-arm.h +92 -43
- data/lib/libv8/v8/src/arm/builtins-arm.cc +32 -39
- data/lib/libv8/v8/src/arm/code-stubs-arm.cc +572 -351
- data/lib/libv8/v8/src/arm/code-stubs-arm.h +8 -77
- data/lib/libv8/v8/src/arm/codegen-arm.h +0 -2
- data/lib/libv8/v8/src/arm/deoptimizer-arm.cc +50 -30
- data/lib/libv8/v8/src/arm/disasm-arm.cc +1 -1
- data/lib/libv8/v8/src/arm/frames-arm.h +9 -5
- data/lib/libv8/v8/src/arm/full-codegen-arm.cc +331 -432
- data/lib/libv8/v8/src/arm/ic-arm.cc +192 -124
- data/lib/libv8/v8/src/arm/lithium-arm.cc +216 -232
- data/lib/libv8/v8/src/arm/lithium-arm.h +106 -259
- data/lib/libv8/v8/src/arm/lithium-codegen-arm.cc +633 -642
- data/lib/libv8/v8/src/arm/lithium-codegen-arm.h +4 -4
- data/lib/libv8/v8/src/arm/lithium-gap-resolver-arm.cc +1 -3
- data/lib/libv8/v8/src/arm/macro-assembler-arm.cc +260 -185
- data/lib/libv8/v8/src/arm/macro-assembler-arm.h +45 -25
- data/lib/libv8/v8/src/arm/regexp-macro-assembler-arm.cc +25 -13
- data/lib/libv8/v8/src/arm/regexp-macro-assembler-arm.h +3 -0
- data/lib/libv8/v8/src/arm/stub-cache-arm.cc +413 -226
- data/lib/libv8/v8/src/array.js +38 -18
- data/lib/libv8/v8/src/assembler.cc +12 -5
- data/lib/libv8/v8/src/assembler.h +15 -9
- data/lib/libv8/v8/src/ast-inl.h +34 -25
- data/lib/libv8/v8/src/ast.cc +141 -72
- data/lib/libv8/v8/src/ast.h +255 -181
- data/lib/libv8/v8/src/bignum.cc +3 -4
- data/lib/libv8/v8/src/bootstrapper.cc +55 -11
- data/lib/libv8/v8/src/bootstrapper.h +3 -2
- data/lib/libv8/v8/src/builtins.cc +8 -2
- data/lib/libv8/v8/src/builtins.h +4 -0
- data/lib/libv8/v8/src/cached-powers.cc +8 -4
- data/lib/libv8/v8/src/checks.h +3 -3
- data/lib/libv8/v8/src/code-stubs.cc +173 -28
- data/lib/libv8/v8/src/code-stubs.h +104 -148
- data/lib/libv8/v8/src/codegen.cc +8 -8
- data/lib/libv8/v8/src/compilation-cache.cc +2 -47
- data/lib/libv8/v8/src/compilation-cache.h +0 -10
- data/lib/libv8/v8/src/compiler.cc +27 -16
- data/lib/libv8/v8/src/compiler.h +13 -18
- data/lib/libv8/v8/src/contexts.cc +107 -72
- data/lib/libv8/v8/src/contexts.h +70 -34
- data/lib/libv8/v8/src/conversions-inl.h +572 -14
- data/lib/libv8/v8/src/conversions.cc +9 -707
- data/lib/libv8/v8/src/conversions.h +23 -12
- data/lib/libv8/v8/src/cpu-profiler-inl.h +2 -19
- data/lib/libv8/v8/src/cpu-profiler.cc +4 -21
- data/lib/libv8/v8/src/cpu-profiler.h +8 -17
- data/lib/libv8/v8/src/d8-debug.cc +5 -3
- data/lib/libv8/v8/src/d8-debug.h +6 -7
- data/lib/libv8/v8/src/d8-posix.cc +1 -10
- data/lib/libv8/v8/src/d8.cc +721 -219
- data/lib/libv8/v8/src/d8.gyp +37 -12
- data/lib/libv8/v8/src/d8.h +141 -19
- data/lib/libv8/v8/src/d8.js +17 -8
- data/lib/libv8/v8/src/date.js +16 -5
- data/lib/libv8/v8/src/dateparser-inl.h +242 -39
- data/lib/libv8/v8/src/dateparser.cc +38 -4
- data/lib/libv8/v8/src/dateparser.h +170 -28
- data/lib/libv8/v8/src/debug-agent.cc +5 -3
- data/lib/libv8/v8/src/debug-agent.h +11 -7
- data/lib/libv8/v8/src/debug-debugger.js +65 -34
- data/lib/libv8/v8/src/debug.cc +30 -60
- data/lib/libv8/v8/src/debug.h +5 -3
- data/lib/libv8/v8/src/deoptimizer.cc +227 -10
- data/lib/libv8/v8/src/deoptimizer.h +133 -9
- data/lib/libv8/v8/src/disassembler.cc +22 -14
- data/lib/libv8/v8/src/diy-fp.cc +4 -3
- data/lib/libv8/v8/src/diy-fp.h +3 -3
- data/lib/libv8/v8/src/elements.cc +634 -0
- data/lib/libv8/v8/src/elements.h +95 -0
- data/lib/libv8/v8/src/execution.cc +5 -21
- data/lib/libv8/v8/src/extensions/experimental/break-iterator.cc +3 -1
- data/lib/libv8/v8/src/extensions/experimental/break-iterator.h +1 -1
- data/lib/libv8/v8/src/extensions/experimental/collator.cc +6 -2
- data/lib/libv8/v8/src/extensions/experimental/collator.h +1 -2
- data/lib/libv8/v8/src/extensions/experimental/datetime-format.cc +384 -0
- data/lib/libv8/v8/src/extensions/experimental/datetime-format.h +83 -0
- data/lib/libv8/v8/src/extensions/experimental/experimental.gyp +18 -7
- data/lib/libv8/v8/src/extensions/experimental/i18n-extension.cc +12 -16
- data/lib/libv8/v8/src/extensions/experimental/i18n-extension.h +1 -1
- data/lib/libv8/v8/src/extensions/experimental/i18n-js2c.py +126 -0
- data/lib/libv8/v8/src/extensions/experimental/i18n-locale.cc +3 -4
- data/lib/libv8/v8/src/extensions/experimental/i18n-locale.h +1 -1
- data/lib/libv8/v8/src/{shell.h → extensions/experimental/i18n-natives.h} +8 -20
- data/lib/libv8/v8/src/extensions/experimental/i18n-utils.cc +45 -1
- data/lib/libv8/v8/src/extensions/experimental/i18n-utils.h +21 -1
- data/lib/libv8/v8/src/extensions/experimental/i18n.js +211 -11
- data/lib/libv8/v8/src/extensions/experimental/language-matcher.cc +4 -3
- data/lib/libv8/v8/src/extensions/experimental/language-matcher.h +1 -1
- data/lib/libv8/v8/src/extensions/experimental/number-format.cc +374 -0
- data/lib/libv8/v8/src/extensions/experimental/number-format.h +71 -0
- data/lib/libv8/v8/src/factory.cc +89 -18
- data/lib/libv8/v8/src/factory.h +36 -8
- data/lib/libv8/v8/src/flag-definitions.h +11 -44
- data/lib/libv8/v8/src/frames-inl.h +8 -1
- data/lib/libv8/v8/src/frames.cc +39 -3
- data/lib/libv8/v8/src/frames.h +10 -3
- data/lib/libv8/v8/src/full-codegen.cc +311 -293
- data/lib/libv8/v8/src/full-codegen.h +183 -143
- data/lib/libv8/v8/src/func-name-inferrer.cc +29 -15
- data/lib/libv8/v8/src/func-name-inferrer.h +19 -9
- data/lib/libv8/v8/src/gdb-jit.cc +658 -55
- data/lib/libv8/v8/src/gdb-jit.h +6 -2
- data/lib/libv8/v8/src/global-handles.cc +368 -312
- data/lib/libv8/v8/src/global-handles.h +29 -36
- data/lib/libv8/v8/src/globals.h +3 -1
- data/lib/libv8/v8/src/handles.cc +43 -69
- data/lib/libv8/v8/src/handles.h +21 -16
- data/lib/libv8/v8/src/heap-inl.h +11 -13
- data/lib/libv8/v8/src/heap-profiler.cc +0 -999
- data/lib/libv8/v8/src/heap-profiler.h +0 -303
- data/lib/libv8/v8/src/heap.cc +366 -141
- data/lib/libv8/v8/src/heap.h +87 -26
- data/lib/libv8/v8/src/hydrogen-instructions.cc +192 -81
- data/lib/libv8/v8/src/hydrogen-instructions.h +711 -482
- data/lib/libv8/v8/src/hydrogen.cc +1146 -629
- data/lib/libv8/v8/src/hydrogen.h +100 -64
- data/lib/libv8/v8/src/ia32/assembler-ia32.cc +19 -0
- data/lib/libv8/v8/src/ia32/assembler-ia32.h +15 -2
- data/lib/libv8/v8/src/ia32/builtins-ia32.cc +34 -39
- data/lib/libv8/v8/src/ia32/code-stubs-ia32.cc +675 -377
- data/lib/libv8/v8/src/ia32/code-stubs-ia32.h +8 -69
- data/lib/libv8/v8/src/ia32/codegen-ia32.cc +1 -0
- data/lib/libv8/v8/src/ia32/codegen-ia32.h +0 -2
- data/lib/libv8/v8/src/ia32/cpu-ia32.cc +3 -2
- data/lib/libv8/v8/src/ia32/deoptimizer-ia32.cc +28 -3
- data/lib/libv8/v8/src/ia32/disasm-ia32.cc +21 -10
- data/lib/libv8/v8/src/ia32/frames-ia32.h +6 -5
- data/lib/libv8/v8/src/ia32/full-codegen-ia32.cc +459 -465
- data/lib/libv8/v8/src/ia32/ic-ia32.cc +196 -147
- data/lib/libv8/v8/src/ia32/lithium-codegen-ia32.cc +575 -650
- data/lib/libv8/v8/src/ia32/lithium-codegen-ia32.h +19 -21
- data/lib/libv8/v8/src/ia32/lithium-gap-resolver-ia32.cc +7 -2
- data/lib/libv8/v8/src/ia32/lithium-ia32.cc +261 -256
- data/lib/libv8/v8/src/ia32/lithium-ia32.h +234 -335
- data/lib/libv8/v8/src/ia32/macro-assembler-ia32.cc +224 -67
- data/lib/libv8/v8/src/ia32/macro-assembler-ia32.h +63 -19
- data/lib/libv8/v8/src/ia32/regexp-macro-assembler-ia32.cc +22 -8
- data/lib/libv8/v8/src/ia32/regexp-macro-assembler-ia32.h +3 -0
- data/lib/libv8/v8/src/ia32/stub-cache-ia32.cc +380 -239
- data/lib/libv8/v8/src/ic.cc +198 -234
- data/lib/libv8/v8/src/ic.h +32 -30
- data/lib/libv8/v8/src/interpreter-irregexp.cc +6 -4
- data/lib/libv8/v8/src/isolate.cc +112 -95
- data/lib/libv8/v8/src/isolate.h +55 -71
- data/lib/libv8/v8/src/json-parser.h +486 -48
- data/lib/libv8/v8/src/json.js +28 -23
- data/lib/libv8/v8/src/jsregexp.cc +163 -208
- data/lib/libv8/v8/src/jsregexp.h +0 -1
- data/lib/libv8/v8/src/lithium-allocator-inl.h +29 -27
- data/lib/libv8/v8/src/lithium-allocator.cc +22 -17
- data/lib/libv8/v8/src/lithium-allocator.h +8 -8
- data/lib/libv8/v8/src/lithium.cc +16 -11
- data/lib/libv8/v8/src/lithium.h +31 -34
- data/lib/libv8/v8/src/liveedit.cc +111 -15
- data/lib/libv8/v8/src/liveedit.h +3 -4
- data/lib/libv8/v8/src/liveobjectlist.cc +116 -80
- data/lib/libv8/v8/src/liveobjectlist.h +2 -2
- data/lib/libv8/v8/src/log-inl.h +0 -4
- data/lib/libv8/v8/src/log-utils.cc +25 -143
- data/lib/libv8/v8/src/log-utils.h +13 -92
- data/lib/libv8/v8/src/log.cc +26 -249
- data/lib/libv8/v8/src/log.h +6 -17
- data/lib/libv8/v8/src/macros.py +9 -6
- data/lib/libv8/v8/src/mark-compact.cc +276 -56
- data/lib/libv8/v8/src/mark-compact.h +20 -0
- data/lib/libv8/v8/src/messages.js +93 -39
- data/lib/libv8/v8/src/mips/assembler-mips-inl.h +9 -3
- data/lib/libv8/v8/src/mips/assembler-mips.cc +297 -189
- data/lib/libv8/v8/src/mips/assembler-mips.h +121 -54
- data/lib/libv8/v8/src/mips/builtins-mips.cc +23 -24
- data/lib/libv8/v8/src/mips/code-stubs-mips.cc +484 -263
- data/lib/libv8/v8/src/mips/code-stubs-mips.h +8 -83
- data/lib/libv8/v8/src/mips/codegen-mips.h +0 -2
- data/lib/libv8/v8/src/mips/constants-mips.h +37 -11
- data/lib/libv8/v8/src/mips/deoptimizer-mips.cc +6 -1
- data/lib/libv8/v8/src/mips/frames-mips.h +8 -7
- data/lib/libv8/v8/src/mips/full-codegen-mips.cc +258 -419
- data/lib/libv8/v8/src/mips/ic-mips.cc +181 -121
- data/lib/libv8/v8/src/mips/macro-assembler-mips.cc +640 -382
- data/lib/libv8/v8/src/mips/macro-assembler-mips.h +94 -89
- data/lib/libv8/v8/src/mips/regexp-macro-assembler-mips.cc +23 -10
- data/lib/libv8/v8/src/mips/regexp-macro-assembler-mips.h +6 -1
- data/lib/libv8/v8/src/mips/simulator-mips.cc +249 -49
- data/lib/libv8/v8/src/mips/simulator-mips.h +25 -1
- data/lib/libv8/v8/src/mips/stub-cache-mips.cc +373 -161
- data/lib/libv8/v8/src/mirror-debugger.js +55 -8
- data/lib/libv8/v8/src/misc-intrinsics.h +89 -0
- data/lib/libv8/v8/src/mksnapshot.cc +36 -4
- data/lib/libv8/v8/src/natives.h +5 -2
- data/lib/libv8/v8/src/objects-debug.cc +73 -6
- data/lib/libv8/v8/src/objects-inl.h +529 -164
- data/lib/libv8/v8/src/objects-printer.cc +67 -12
- data/lib/libv8/v8/src/objects-visiting.cc +13 -2
- data/lib/libv8/v8/src/objects-visiting.h +41 -1
- data/lib/libv8/v8/src/objects.cc +2200 -1177
- data/lib/libv8/v8/src/objects.h +912 -283
- data/lib/libv8/v8/src/parser.cc +566 -371
- data/lib/libv8/v8/src/parser.h +35 -33
- data/lib/libv8/v8/src/platform-cygwin.cc +10 -25
- data/lib/libv8/v8/src/platform-freebsd.cc +4 -29
- data/lib/libv8/v8/src/platform-linux.cc +60 -57
- data/lib/libv8/v8/src/platform-macos.cc +4 -27
- data/lib/libv8/v8/src/platform-nullos.cc +3 -16
- data/lib/libv8/v8/src/platform-openbsd.cc +247 -85
- data/lib/libv8/v8/src/platform-posix.cc +43 -1
- data/lib/libv8/v8/src/platform-solaris.cc +151 -112
- data/lib/libv8/v8/src/platform-tls.h +1 -1
- data/lib/libv8/v8/src/platform-win32.cc +65 -39
- data/lib/libv8/v8/src/platform.h +17 -14
- data/lib/libv8/v8/src/preparse-data-format.h +2 -2
- data/lib/libv8/v8/src/preparse-data.h +8 -2
- data/lib/libv8/v8/src/preparser-api.cc +2 -18
- data/lib/libv8/v8/src/preparser.cc +106 -65
- data/lib/libv8/v8/src/preparser.h +26 -5
- data/lib/libv8/v8/src/prettyprinter.cc +25 -43
- data/lib/libv8/v8/src/profile-generator-inl.h +0 -4
- data/lib/libv8/v8/src/profile-generator.cc +213 -34
- data/lib/libv8/v8/src/profile-generator.h +9 -9
- data/lib/libv8/v8/src/property.h +1 -0
- data/lib/libv8/v8/src/proxy.js +74 -4
- data/lib/libv8/v8/src/regexp-macro-assembler.cc +10 -6
- data/lib/libv8/v8/src/regexp.js +16 -11
- data/lib/libv8/v8/src/rewriter.cc +24 -133
- data/lib/libv8/v8/src/runtime-profiler.cc +27 -151
- data/lib/libv8/v8/src/runtime-profiler.h +5 -31
- data/lib/libv8/v8/src/runtime.cc +1450 -681
- data/lib/libv8/v8/src/runtime.h +47 -31
- data/lib/libv8/v8/src/runtime.js +2 -1
- data/lib/libv8/v8/src/scanner-base.cc +358 -220
- data/lib/libv8/v8/src/scanner-base.h +30 -138
- data/lib/libv8/v8/src/scanner.cc +0 -18
- data/lib/libv8/v8/src/scanner.h +0 -15
- data/lib/libv8/v8/src/scopeinfo.cc +3 -1
- data/lib/libv8/v8/src/scopeinfo.h +1 -6
- data/lib/libv8/v8/src/scopes.cc +243 -253
- data/lib/libv8/v8/src/scopes.h +58 -109
- data/lib/libv8/v8/src/serialize.cc +12 -54
- data/lib/libv8/v8/src/serialize.h +47 -0
- data/lib/libv8/v8/src/small-pointer-list.h +25 -0
- data/lib/libv8/v8/src/spaces-inl.h +4 -50
- data/lib/libv8/v8/src/spaces.cc +64 -131
- data/lib/libv8/v8/src/spaces.h +19 -70
- data/lib/libv8/v8/src/string-stream.cc +3 -1
- data/lib/libv8/v8/src/string.js +10 -6
- data/lib/libv8/v8/src/strtod.cc +7 -3
- data/lib/libv8/v8/src/stub-cache.cc +59 -129
- data/lib/libv8/v8/src/stub-cache.h +42 -54
- data/lib/libv8/v8/src/third_party/valgrind/valgrind.h +1447 -1339
- data/lib/libv8/v8/src/token.cc +4 -4
- data/lib/libv8/v8/src/token.h +6 -5
- data/lib/libv8/v8/src/type-info.cc +173 -129
- data/lib/libv8/v8/src/type-info.h +40 -22
- data/lib/libv8/v8/src/utils.cc +25 -304
- data/lib/libv8/v8/src/utils.h +118 -3
- data/lib/libv8/v8/src/v8-counters.h +3 -6
- data/lib/libv8/v8/src/v8.cc +34 -27
- data/lib/libv8/v8/src/v8.h +7 -7
- data/lib/libv8/v8/src/v8conversions.cc +129 -0
- data/lib/libv8/v8/src/v8conversions.h +60 -0
- data/lib/libv8/v8/src/v8globals.h +15 -6
- data/lib/libv8/v8/src/v8natives.js +300 -78
- data/lib/libv8/v8/src/v8threads.cc +14 -6
- data/lib/libv8/v8/src/v8threads.h +4 -1
- data/lib/libv8/v8/src/v8utils.cc +360 -0
- data/lib/libv8/v8/src/v8utils.h +17 -66
- data/lib/libv8/v8/src/variables.cc +7 -12
- data/lib/libv8/v8/src/variables.h +12 -10
- data/lib/libv8/v8/src/version.cc +2 -2
- data/lib/libv8/v8/src/vm-state-inl.h +0 -41
- data/lib/libv8/v8/src/vm-state.h +0 -11
- data/lib/libv8/v8/src/weakmap.js +103 -0
- data/lib/libv8/v8/src/x64/assembler-x64.h +6 -3
- data/lib/libv8/v8/src/x64/builtins-x64.cc +25 -22
- data/lib/libv8/v8/src/x64/code-stubs-x64.cc +523 -250
- data/lib/libv8/v8/src/x64/code-stubs-x64.h +8 -71
- data/lib/libv8/v8/src/x64/codegen-x64.cc +1 -0
- data/lib/libv8/v8/src/x64/codegen-x64.h +0 -2
- data/lib/libv8/v8/src/x64/cpu-x64.cc +2 -1
- data/lib/libv8/v8/src/x64/deoptimizer-x64.cc +40 -8
- data/lib/libv8/v8/src/x64/disasm-x64.cc +12 -10
- data/lib/libv8/v8/src/x64/frames-x64.h +7 -6
- data/lib/libv8/v8/src/x64/full-codegen-x64.cc +310 -415
- data/lib/libv8/v8/src/x64/ic-x64.cc +180 -117
- data/lib/libv8/v8/src/x64/lithium-codegen-x64.cc +411 -523
- data/lib/libv8/v8/src/x64/lithium-codegen-x64.h +11 -6
- data/lib/libv8/v8/src/x64/lithium-x64.cc +191 -216
- data/lib/libv8/v8/src/x64/lithium-x64.h +112 -263
- data/lib/libv8/v8/src/x64/macro-assembler-x64.cc +177 -61
- data/lib/libv8/v8/src/x64/macro-assembler-x64.h +23 -7
- data/lib/libv8/v8/src/x64/regexp-macro-assembler-x64.cc +21 -9
- data/lib/libv8/v8/src/x64/regexp-macro-assembler-x64.h +6 -0
- data/lib/libv8/v8/src/x64/stub-cache-x64.cc +273 -107
- data/lib/libv8/v8/src/zone.cc +31 -22
- data/lib/libv8/v8/src/zone.h +12 -6
- data/lib/libv8/v8/tools/codemap.js +8 -0
- data/lib/libv8/v8/tools/gcmole/Makefile +43 -0
- data/lib/libv8/v8/tools/gcmole/gcmole.lua +0 -2
- data/lib/libv8/v8/tools/gdb-v8-support.py +154 -0
- data/lib/libv8/v8/tools/grokdump.py +44 -35
- data/lib/libv8/v8/tools/gyp/v8.gyp +94 -248
- data/lib/libv8/v8/tools/js2c.py +83 -52
- data/lib/libv8/v8/tools/linux-tick-processor +4 -6
- data/lib/libv8/v8/tools/ll_prof.py +3 -3
- data/lib/libv8/v8/tools/oom_dump/README +3 -1
- data/lib/libv8/v8/tools/presubmit.py +11 -4
- data/lib/libv8/v8/tools/profile.js +46 -2
- data/lib/libv8/v8/tools/splaytree.js +11 -0
- data/lib/libv8/v8/tools/stats-viewer.py +15 -11
- data/lib/libv8/v8/tools/test-wrapper-gypbuild.py +227 -0
- data/lib/libv8/v8/tools/test.py +28 -8
- data/lib/libv8/v8/tools/tickprocessor.js +0 -16
- data/lib/libv8/version.rb +1 -1
- data/libv8.gemspec +2 -2
- metadata +31 -19
- data/lib/libv8/scons/engine/SCons/Tool/f03.py +0 -63
- data/lib/libv8/v8/src/json-parser.cc +0 -504
@@ -195,7 +195,8 @@ ScopeType = { Global: 0,
|
|
195
195
|
Local: 1,
|
196
196
|
With: 2,
|
197
197
|
Closure: 3,
|
198
|
-
Catch: 4
|
198
|
+
Catch: 4,
|
199
|
+
Block: 5 };
|
199
200
|
|
200
201
|
|
201
202
|
// Mirror hierarchy:
|
@@ -1243,13 +1244,17 @@ const kFrameDetailsLocalCountIndex = 4;
|
|
1243
1244
|
const kFrameDetailsSourcePositionIndex = 5;
|
1244
1245
|
const kFrameDetailsConstructCallIndex = 6;
|
1245
1246
|
const kFrameDetailsAtReturnIndex = 7;
|
1246
|
-
const
|
1247
|
+
const kFrameDetailsFlagsIndex = 8;
|
1247
1248
|
const kFrameDetailsFirstDynamicIndex = 9;
|
1248
1249
|
|
1249
1250
|
const kFrameDetailsNameIndex = 0;
|
1250
1251
|
const kFrameDetailsValueIndex = 1;
|
1251
1252
|
const kFrameDetailsNameValueSize = 2;
|
1252
1253
|
|
1254
|
+
const kFrameDetailsFlagDebuggerFrameMask = 1 << 0;
|
1255
|
+
const kFrameDetailsFlagOptimizedFrameMask = 1 << 1;
|
1256
|
+
const kFrameDetailsFlagInlinedFrameIndexMask = 7 << 2;
|
1257
|
+
|
1253
1258
|
/**
|
1254
1259
|
* Wrapper for the frame details information retreived from the VM. The frame
|
1255
1260
|
* details from the VM is an array with the following content. See runtime.cc
|
@@ -1262,7 +1267,7 @@ const kFrameDetailsNameValueSize = 2;
|
|
1262
1267
|
* 5: Source position
|
1263
1268
|
* 6: Construct call
|
1264
1269
|
* 7: Is at return
|
1265
|
-
* 8:
|
1270
|
+
* 8: Flags (debugger frame, optimized frame, inlined frame index)
|
1266
1271
|
* Arguments name, value
|
1267
1272
|
* Locals name, value
|
1268
1273
|
* Return value if any
|
@@ -1308,7 +1313,27 @@ FrameDetails.prototype.isAtReturn = function() {
|
|
1308
1313
|
|
1309
1314
|
FrameDetails.prototype.isDebuggerFrame = function() {
|
1310
1315
|
%CheckExecutionState(this.break_id_);
|
1311
|
-
|
1316
|
+
var f = kFrameDetailsFlagDebuggerFrameMask;
|
1317
|
+
return (this.details_[kFrameDetailsFlagsIndex] & f) == f;
|
1318
|
+
}
|
1319
|
+
|
1320
|
+
|
1321
|
+
FrameDetails.prototype.isOptimizedFrame = function() {
|
1322
|
+
%CheckExecutionState(this.break_id_);
|
1323
|
+
var f = kFrameDetailsFlagOptimizedFrameMask;
|
1324
|
+
return (this.details_[kFrameDetailsFlagsIndex] & f) == f;
|
1325
|
+
}
|
1326
|
+
|
1327
|
+
|
1328
|
+
FrameDetails.prototype.isInlinedFrame = function() {
|
1329
|
+
return this.inlinedFrameIndex() > 0;
|
1330
|
+
}
|
1331
|
+
|
1332
|
+
|
1333
|
+
FrameDetails.prototype.inlinedFrameIndex = function() {
|
1334
|
+
%CheckExecutionState(this.break_id_);
|
1335
|
+
var f = kFrameDetailsFlagInlinedFrameIndexMask;
|
1336
|
+
return (this.details_[kFrameDetailsFlagsIndex] & f) >> 2
|
1312
1337
|
}
|
1313
1338
|
|
1314
1339
|
|
@@ -1447,6 +1472,21 @@ FrameMirror.prototype.isDebuggerFrame = function() {
|
|
1447
1472
|
};
|
1448
1473
|
|
1449
1474
|
|
1475
|
+
FrameMirror.prototype.isOptimizedFrame = function() {
|
1476
|
+
return this.details_.isOptimizedFrame();
|
1477
|
+
};
|
1478
|
+
|
1479
|
+
|
1480
|
+
FrameMirror.prototype.isInlinedFrame = function() {
|
1481
|
+
return this.details_.isInlinedFrame();
|
1482
|
+
};
|
1483
|
+
|
1484
|
+
|
1485
|
+
FrameMirror.prototype.inlinedFrameIndex = function() {
|
1486
|
+
return this.details_.inlinedFrameIndex();
|
1487
|
+
};
|
1488
|
+
|
1489
|
+
|
1450
1490
|
FrameMirror.prototype.argumentCount = function() {
|
1451
1491
|
return this.details_.argumentCount();
|
1452
1492
|
};
|
@@ -1536,8 +1576,12 @@ FrameMirror.prototype.scope = function(index) {
|
|
1536
1576
|
|
1537
1577
|
|
1538
1578
|
FrameMirror.prototype.evaluate = function(source, disable_break, opt_context_object) {
|
1539
|
-
var result = %DebugEvaluate(this.break_id_,
|
1540
|
-
|
1579
|
+
var result = %DebugEvaluate(this.break_id_,
|
1580
|
+
this.details_.frameId(),
|
1581
|
+
this.details_.inlinedFrameIndex(),
|
1582
|
+
source,
|
1583
|
+
Boolean(disable_break),
|
1584
|
+
opt_context_object);
|
1541
1585
|
return MakeMirror(result);
|
1542
1586
|
};
|
1543
1587
|
|
@@ -1562,8 +1606,10 @@ FrameMirror.prototype.invocationText = function() {
|
|
1562
1606
|
// Try to find the function as a property in the receiver. Include the
|
1563
1607
|
// prototype chain in the lookup.
|
1564
1608
|
var property = GetUndefinedMirror();
|
1565
|
-
if (
|
1566
|
-
for (var r = receiver;
|
1609
|
+
if (receiver.isObject()) {
|
1610
|
+
for (var r = receiver;
|
1611
|
+
!r.isNull() && property.isUndefined();
|
1612
|
+
r = r.protoObject()) {
|
1567
1613
|
property = r.lookupProperty(func);
|
1568
1614
|
}
|
1569
1615
|
}
|
@@ -1690,6 +1736,7 @@ function ScopeDetails(frame, index) {
|
|
1690
1736
|
this.break_id_ = frame.break_id_;
|
1691
1737
|
this.details_ = %GetScopeDetails(frame.break_id_,
|
1692
1738
|
frame.details_.frameId(),
|
1739
|
+
frame.details_.inlinedFrameIndex(),
|
1693
1740
|
index);
|
1694
1741
|
}
|
1695
1742
|
|
@@ -0,0 +1,89 @@
|
|
1
|
+
// Copyright 2011 the V8 project authors. All rights reserved.
|
2
|
+
// Redistribution and use in source and binary forms, with or without
|
3
|
+
// modification, are permitted provided that the following conditions are
|
4
|
+
// met:
|
5
|
+
//
|
6
|
+
// * Redistributions of source code must retain the above copyright
|
7
|
+
// notice, this list of conditions and the following disclaimer.
|
8
|
+
// * Redistributions in binary form must reproduce the above
|
9
|
+
// copyright notice, this list of conditions and the following
|
10
|
+
// disclaimer in the documentation and/or other materials provided
|
11
|
+
// with the distribution.
|
12
|
+
// * Neither the name of Google Inc. nor the names of its
|
13
|
+
// contributors may be used to endorse or promote products derived
|
14
|
+
// from this software without specific prior written permission.
|
15
|
+
//
|
16
|
+
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
17
|
+
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
18
|
+
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
19
|
+
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
20
|
+
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
21
|
+
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
22
|
+
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
23
|
+
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
24
|
+
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
25
|
+
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
26
|
+
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
27
|
+
|
28
|
+
#ifndef V8_MISC_INTRINSICS_H_
|
29
|
+
#define V8_MISC_INTRINSICS_H_
|
30
|
+
|
31
|
+
#include "../include/v8.h"
|
32
|
+
#include "globals.h"
|
33
|
+
|
34
|
+
namespace v8 {
|
35
|
+
namespace internal {
|
36
|
+
|
37
|
+
// Returns the index of the leading 1 bit, counting the least significant bit at
|
38
|
+
// index 0. (1 << IntegerLog2(x)) is a mask for the most significant bit of x.
|
39
|
+
// Result is undefined if input is zero.
|
40
|
+
int IntegerLog2(uint32_t value);
|
41
|
+
|
42
|
+
#if defined(__GNUC__)
|
43
|
+
|
44
|
+
inline int IntegerLog2(uint32_t value) {
|
45
|
+
return 31 - __builtin_clz(value);
|
46
|
+
}
|
47
|
+
|
48
|
+
#elif defined(_MSC_VER)
|
49
|
+
|
50
|
+
#pragma intrinsic(_BitScanReverse)
|
51
|
+
|
52
|
+
inline int IntegerLog2(uint32_t value) {
|
53
|
+
unsigned long result; // NOLINT: MSVC intrinsic demands this type.
|
54
|
+
_BitScanReverse(&result, value);
|
55
|
+
return result;
|
56
|
+
}
|
57
|
+
|
58
|
+
#else
|
59
|
+
|
60
|
+
// Default version using regular operations. Code taken from:
|
61
|
+
// http://graphics.stanford.edu/~seander/bithacks.html#IntegerLog
|
62
|
+
inline int IntegerLog2(uint32_t value) {
|
63
|
+
int result, shift;
|
64
|
+
|
65
|
+
shift = (value > 0xFFFF) << 4;
|
66
|
+
value >>= shift;
|
67
|
+
result = shift;
|
68
|
+
|
69
|
+
shift = (value > 0xFF) << 3;
|
70
|
+
value >>= shift;
|
71
|
+
result |= shift;
|
72
|
+
|
73
|
+
shift = (value > 0xF) << 2;
|
74
|
+
value >>= shift;
|
75
|
+
result |= shift;
|
76
|
+
|
77
|
+
shift = (value > 0x3) << 1;
|
78
|
+
value >>= shift;
|
79
|
+
result |= shift;
|
80
|
+
|
81
|
+
result |= (value >> 1);
|
82
|
+
|
83
|
+
return result;
|
84
|
+
}
|
85
|
+
#endif
|
86
|
+
|
87
|
+
} } // namespace v8::internal
|
88
|
+
|
89
|
+
#endif // V8_MISC_INTRINSICS_H_
|
@@ -40,8 +40,6 @@
|
|
40
40
|
#include "serialize.h"
|
41
41
|
#include "list.h"
|
42
42
|
|
43
|
-
// use explicit namespace to avoid clashing with types in namespace v8
|
44
|
-
namespace i = v8::internal;
|
45
43
|
using namespace v8;
|
46
44
|
|
47
45
|
static const unsigned int kMaxCounters = 256;
|
@@ -136,6 +134,7 @@ class PartialSnapshotSink : public i::SnapshotByteSink {
|
|
136
134
|
return true;
|
137
135
|
}
|
138
136
|
int raw_size() { return raw_size_; }
|
137
|
+
|
139
138
|
private:
|
140
139
|
i::List<char> data_;
|
141
140
|
int raw_size_;
|
@@ -265,14 +264,39 @@ class BZip2Compressor : public Compressor {
|
|
265
264
|
private:
|
266
265
|
i::ScopedVector<char>* output_;
|
267
266
|
};
|
267
|
+
|
268
|
+
|
269
|
+
class BZip2Decompressor : public StartupDataDecompressor {
|
270
|
+
public:
|
271
|
+
virtual ~BZip2Decompressor() { }
|
272
|
+
|
273
|
+
protected:
|
274
|
+
virtual int DecompressData(char* raw_data,
|
275
|
+
int* raw_data_size,
|
276
|
+
const char* compressed_data,
|
277
|
+
int compressed_data_size) {
|
278
|
+
ASSERT_EQ(StartupData::kBZip2,
|
279
|
+
V8::GetCompressedStartupDataAlgorithm());
|
280
|
+
unsigned int decompressed_size = *raw_data_size;
|
281
|
+
int result =
|
282
|
+
BZ2_bzBuffToBuffDecompress(raw_data,
|
283
|
+
&decompressed_size,
|
284
|
+
const_cast<char*>(compressed_data),
|
285
|
+
compressed_data_size,
|
286
|
+
0, 1);
|
287
|
+
if (result == BZ_OK) {
|
288
|
+
*raw_data_size = decompressed_size;
|
289
|
+
}
|
290
|
+
return result;
|
291
|
+
}
|
292
|
+
};
|
268
293
|
#endif
|
269
294
|
|
270
295
|
|
271
296
|
int main(int argc, char** argv) {
|
272
|
-
#ifdef ENABLE_LOGGING_AND_PROFILING
|
273
297
|
// By default, log code create information in the snapshot.
|
274
298
|
i::FLAG_log_code = true;
|
275
|
-
|
299
|
+
|
276
300
|
// Print the usage if an error occurs when parsing the command line
|
277
301
|
// flags or if the help flag is set.
|
278
302
|
int result = i::FlagList::SetFlagsFromCommandLine(&argc, argv, true);
|
@@ -281,6 +305,14 @@ int main(int argc, char** argv) {
|
|
281
305
|
i::FlagList::PrintHelp();
|
282
306
|
return !i::FLAG_help;
|
283
307
|
}
|
308
|
+
#ifdef COMPRESS_STARTUP_DATA_BZ2
|
309
|
+
BZip2Decompressor natives_decompressor;
|
310
|
+
int bz2_result = natives_decompressor.Decompress();
|
311
|
+
if (bz2_result != BZ_OK) {
|
312
|
+
fprintf(stderr, "bzip error code: %d\n", bz2_result);
|
313
|
+
exit(1);
|
314
|
+
}
|
315
|
+
#endif
|
284
316
|
i::Serializer::Enable();
|
285
317
|
Persistent<Context> context = v8::Context::New();
|
286
318
|
ASSERT(!context.IsEmpty());
|
data/lib/libv8/v8/src/natives.h
CHANGED
@@ -36,7 +36,7 @@ typedef bool (*NativeSourceCallback)(Vector<const char> name,
|
|
36
36
|
int index);
|
37
37
|
|
38
38
|
enum NativeType {
|
39
|
-
CORE, EXPERIMENTAL, D8,
|
39
|
+
CORE, EXPERIMENTAL, D8, TEST
|
40
40
|
};
|
41
41
|
|
42
42
|
template <NativeType type>
|
@@ -52,8 +52,11 @@ class NativesCollection {
|
|
52
52
|
// non-debugger scripts have an index in the interval [GetDebuggerCount(),
|
53
53
|
// GetNativesCount()).
|
54
54
|
static int GetIndex(const char* name);
|
55
|
-
static
|
55
|
+
static int GetRawScriptsSize();
|
56
|
+
static Vector<const char> GetRawScriptSource(int index);
|
56
57
|
static Vector<const char> GetScriptName(int index);
|
58
|
+
static Vector<const byte> GetScriptsSource();
|
59
|
+
static void SetRawScriptsSource(Vector<const char> raw_source);
|
57
60
|
};
|
58
61
|
|
59
62
|
typedef NativesCollection<CORE> Natives;
|
@@ -88,6 +88,9 @@ void HeapObject::HeapObjectVerify() {
|
|
88
88
|
case FIXED_ARRAY_TYPE:
|
89
89
|
FixedArray::cast(this)->FixedArrayVerify();
|
90
90
|
break;
|
91
|
+
case FIXED_DOUBLE_ARRAY_TYPE:
|
92
|
+
FixedDoubleArray::cast(this)->FixedDoubleArrayVerify();
|
93
|
+
break;
|
91
94
|
case BYTE_ARRAY_TYPE:
|
92
95
|
ByteArray::cast(this)->ByteArrayVerify();
|
93
96
|
break;
|
@@ -150,6 +153,9 @@ void HeapObject::HeapObjectVerify() {
|
|
150
153
|
case JS_ARRAY_TYPE:
|
151
154
|
JSArray::cast(this)->JSArrayVerify();
|
152
155
|
break;
|
156
|
+
case JS_WEAK_MAP_TYPE:
|
157
|
+
JSWeakMap::cast(this)->JSWeakMapVerify();
|
158
|
+
break;
|
153
159
|
case JS_REGEXP_TYPE:
|
154
160
|
JSRegExp::cast(this)->JSRegExpVerify();
|
155
161
|
break;
|
@@ -289,6 +295,12 @@ void CodeCache::CodeCacheVerify() {
|
|
289
295
|
}
|
290
296
|
|
291
297
|
|
298
|
+
void PolymorphicCodeCache::PolymorphicCodeCacheVerify() {
|
299
|
+
VerifyHeapPointer(cache());
|
300
|
+
ASSERT(cache()->IsUndefined() || cache()->IsPolymorphicCodeCacheHashTable());
|
301
|
+
}
|
302
|
+
|
303
|
+
|
292
304
|
void FixedArray::FixedArrayVerify() {
|
293
305
|
for (int i = 0; i < length(); i++) {
|
294
306
|
Object* e = get(i);
|
@@ -301,6 +313,18 @@ void FixedArray::FixedArrayVerify() {
|
|
301
313
|
}
|
302
314
|
|
303
315
|
|
316
|
+
void FixedDoubleArray::FixedDoubleArrayVerify() {
|
317
|
+
for (int i = 0; i < length(); i++) {
|
318
|
+
if (!is_the_hole(i)) {
|
319
|
+
double value = get_scalar(i);
|
320
|
+
ASSERT(!isnan(value) ||
|
321
|
+
(BitCast<uint64_t>(value) ==
|
322
|
+
BitCast<uint64_t>(canonical_not_the_hole_nan_as_double())));
|
323
|
+
}
|
324
|
+
}
|
325
|
+
}
|
326
|
+
|
327
|
+
|
304
328
|
void JSValue::JSValueVerify() {
|
305
329
|
Object* v = value();
|
306
330
|
if (v->IsHeapObject()) {
|
@@ -328,6 +352,31 @@ void String::StringVerify() {
|
|
328
352
|
if (IsSymbol()) {
|
329
353
|
CHECK(!HEAP->InNewSpace(this));
|
330
354
|
}
|
355
|
+
if (IsConsString()) {
|
356
|
+
ConsString::cast(this)->ConsStringVerify();
|
357
|
+
} else if (IsSlicedString()) {
|
358
|
+
SlicedString::cast(this)->SlicedStringVerify();
|
359
|
+
}
|
360
|
+
}
|
361
|
+
|
362
|
+
|
363
|
+
void ConsString::ConsStringVerify() {
|
364
|
+
CHECK(this->first()->IsString());
|
365
|
+
CHECK(this->second() == GetHeap()->empty_string() ||
|
366
|
+
this->second()->IsString());
|
367
|
+
CHECK(this->length() >= String::kMinNonFlatLength);
|
368
|
+
if (this->IsFlat()) {
|
369
|
+
// A flat cons can only be created by String::SlowTryFlatten.
|
370
|
+
// Afterwards, the first part may be externalized.
|
371
|
+
CHECK(this->first()->IsSeqString() || this->first()->IsExternalString());
|
372
|
+
}
|
373
|
+
}
|
374
|
+
|
375
|
+
|
376
|
+
void SlicedString::SlicedStringVerify() {
|
377
|
+
CHECK(!this->parent()->IsConsString());
|
378
|
+
CHECK(!this->parent()->IsSlicedString());
|
379
|
+
CHECK(this->length() >= SlicedString::kMinLength);
|
331
380
|
}
|
332
381
|
|
333
382
|
|
@@ -426,7 +475,17 @@ void Code::CodeVerify() {
|
|
426
475
|
void JSArray::JSArrayVerify() {
|
427
476
|
JSObjectVerify();
|
428
477
|
ASSERT(length()->IsNumber() || length()->IsUndefined());
|
429
|
-
ASSERT(elements()->IsUndefined() ||
|
478
|
+
ASSERT(elements()->IsUndefined() ||
|
479
|
+
elements()->IsFixedArray() ||
|
480
|
+
elements()->IsFixedDoubleArray());
|
481
|
+
}
|
482
|
+
|
483
|
+
|
484
|
+
void JSWeakMap::JSWeakMapVerify() {
|
485
|
+
CHECK(IsJSWeakMap());
|
486
|
+
JSObjectVerify();
|
487
|
+
VerifyHeapPointer(table());
|
488
|
+
ASSERT(table()->IsHashTable());
|
430
489
|
}
|
431
490
|
|
432
491
|
|
@@ -444,14 +503,22 @@ void JSRegExp::JSRegExpVerify() {
|
|
444
503
|
|
445
504
|
FixedArray* arr = FixedArray::cast(data());
|
446
505
|
Object* ascii_data = arr->get(JSRegExp::kIrregexpASCIICodeIndex);
|
447
|
-
//
|
506
|
+
// Smi : Not compiled yet (-1) or code prepared for flushing.
|
448
507
|
// JSObject: Compilation error.
|
449
508
|
// Code/ByteArray: Compiled code.
|
450
|
-
ASSERT(ascii_data->
|
451
|
-
|
509
|
+
ASSERT(ascii_data->IsSmi() ||
|
510
|
+
(is_native ? ascii_data->IsCode() : ascii_data->IsByteArray()));
|
452
511
|
Object* uc16_data = arr->get(JSRegExp::kIrregexpUC16CodeIndex);
|
453
|
-
ASSERT(uc16_data->
|
454
|
-
|
512
|
+
ASSERT(uc16_data->IsSmi() ||
|
513
|
+
(is_native ? uc16_data->IsCode() : uc16_data->IsByteArray()));
|
514
|
+
|
515
|
+
Object* ascii_saved = arr->get(JSRegExp::kIrregexpASCIICodeSavedIndex);
|
516
|
+
ASSERT(ascii_saved->IsSmi() || ascii_saved->IsString() ||
|
517
|
+
ascii_saved->IsCode());
|
518
|
+
Object* uc16_saved = arr->get(JSRegExp::kIrregexpUC16CodeSavedIndex);
|
519
|
+
ASSERT(uc16_saved->IsSmi() || uc16_saved->IsString() ||
|
520
|
+
uc16_saved->IsCode());
|
521
|
+
|
455
522
|
ASSERT(arr->get(JSRegExp::kIrregexpCaptureCountIndex)->IsSmi());
|
456
523
|
ASSERT(arr->get(JSRegExp::kIrregexpMaxRegisterCountIndex)->IsSmi());
|
457
524
|
break;
|
@@ -35,6 +35,7 @@
|
|
35
35
|
#ifndef V8_OBJECTS_INL_H_
|
36
36
|
#define V8_OBJECTS_INL_H_
|
37
37
|
|
38
|
+
#include "elements.h"
|
38
39
|
#include "objects.h"
|
39
40
|
#include "contexts.h"
|
40
41
|
#include "conversions-inl.h"
|
@@ -158,23 +159,33 @@ bool Object::IsString() {
|
|
158
159
|
}
|
159
160
|
|
160
161
|
|
162
|
+
bool Object::IsSpecObject() {
|
163
|
+
return Object::IsHeapObject()
|
164
|
+
&& HeapObject::cast(this)->map()->instance_type() >= FIRST_SPEC_OBJECT_TYPE;
|
165
|
+
}
|
166
|
+
|
167
|
+
|
161
168
|
bool Object::IsSymbol() {
|
162
169
|
if (!this->IsHeapObject()) return false;
|
163
170
|
uint32_t type = HeapObject::cast(this)->map()->instance_type();
|
164
171
|
// Because the symbol tag is non-zero and no non-string types have the
|
165
172
|
// symbol bit set we can test for symbols with a very simple test
|
166
173
|
// operation.
|
167
|
-
|
174
|
+
STATIC_ASSERT(kSymbolTag != 0);
|
168
175
|
ASSERT(kNotStringTag + kIsSymbolMask > LAST_TYPE);
|
169
176
|
return (type & kIsSymbolMask) != 0;
|
170
177
|
}
|
171
178
|
|
172
179
|
|
173
180
|
bool Object::IsConsString() {
|
174
|
-
if (!
|
175
|
-
|
176
|
-
|
177
|
-
|
181
|
+
if (!IsString()) return false;
|
182
|
+
return StringShape(String::cast(this)).IsCons();
|
183
|
+
}
|
184
|
+
|
185
|
+
|
186
|
+
bool Object::IsSlicedString() {
|
187
|
+
if (!IsString()) return false;
|
188
|
+
return StringShape(String::cast(this)).IsSliced();
|
178
189
|
}
|
179
190
|
|
180
191
|
|
@@ -217,6 +228,10 @@ bool Object::IsExternalTwoByteString() {
|
|
217
228
|
String::cast(this)->IsTwoByteRepresentation();
|
218
229
|
}
|
219
230
|
|
231
|
+
bool Object::HasValidElements() {
|
232
|
+
// Dictionary is covered under FixedArray.
|
233
|
+
return IsFixedArray() || IsFixedDoubleArray() || IsExternalArray();
|
234
|
+
}
|
220
235
|
|
221
236
|
StringShape::StringShape(String* str)
|
222
237
|
: type_(str->map()->instance_type()) {
|
@@ -241,7 +256,7 @@ StringShape::StringShape(InstanceType t)
|
|
241
256
|
|
242
257
|
bool StringShape::IsSymbol() {
|
243
258
|
ASSERT(valid());
|
244
|
-
|
259
|
+
STATIC_ASSERT(kSymbolTag != 0);
|
245
260
|
return (type_ & kIsSymbolMask) != 0;
|
246
261
|
}
|
247
262
|
|
@@ -258,6 +273,38 @@ bool String::IsTwoByteRepresentation() {
|
|
258
273
|
}
|
259
274
|
|
260
275
|
|
276
|
+
bool String::IsAsciiRepresentationUnderneath() {
|
277
|
+
uint32_t type = map()->instance_type();
|
278
|
+
STATIC_ASSERT(kIsIndirectStringTag != 0);
|
279
|
+
STATIC_ASSERT((kIsIndirectStringMask & kStringEncodingMask) == 0);
|
280
|
+
ASSERT(IsFlat());
|
281
|
+
switch (type & (kIsIndirectStringMask | kStringEncodingMask)) {
|
282
|
+
case kAsciiStringTag:
|
283
|
+
return true;
|
284
|
+
case kTwoByteStringTag:
|
285
|
+
return false;
|
286
|
+
default: // Cons or sliced string. Need to go deeper.
|
287
|
+
return GetUnderlying()->IsAsciiRepresentation();
|
288
|
+
}
|
289
|
+
}
|
290
|
+
|
291
|
+
|
292
|
+
bool String::IsTwoByteRepresentationUnderneath() {
|
293
|
+
uint32_t type = map()->instance_type();
|
294
|
+
STATIC_ASSERT(kIsIndirectStringTag != 0);
|
295
|
+
STATIC_ASSERT((kIsIndirectStringMask & kStringEncodingMask) == 0);
|
296
|
+
ASSERT(IsFlat());
|
297
|
+
switch (type & (kIsIndirectStringMask | kStringEncodingMask)) {
|
298
|
+
case kAsciiStringTag:
|
299
|
+
return false;
|
300
|
+
case kTwoByteStringTag:
|
301
|
+
return true;
|
302
|
+
default: // Cons or sliced string. Need to go deeper.
|
303
|
+
return GetUnderlying()->IsTwoByteRepresentation();
|
304
|
+
}
|
305
|
+
}
|
306
|
+
|
307
|
+
|
261
308
|
bool String::HasOnlyAsciiChars() {
|
262
309
|
uint32_t type = map()->instance_type();
|
263
310
|
return (type & kStringEncodingMask) == kAsciiStringTag ||
|
@@ -270,6 +317,16 @@ bool StringShape::IsCons() {
|
|
270
317
|
}
|
271
318
|
|
272
319
|
|
320
|
+
bool StringShape::IsSliced() {
|
321
|
+
return (type_ & kStringRepresentationMask) == kSlicedStringTag;
|
322
|
+
}
|
323
|
+
|
324
|
+
|
325
|
+
bool StringShape::IsIndirect() {
|
326
|
+
return (type_ & kIsIndirectStringMask) == kIsIndirectStringTag;
|
327
|
+
}
|
328
|
+
|
329
|
+
|
273
330
|
bool StringShape::IsExternal() {
|
274
331
|
return (type_ & kStringRepresentationMask) == kExternalStringTag;
|
275
332
|
}
|
@@ -286,6 +343,11 @@ StringRepresentationTag StringShape::representation_tag() {
|
|
286
343
|
}
|
287
344
|
|
288
345
|
|
346
|
+
uint32_t StringShape::encoding_tag() {
|
347
|
+
return type_ & kStringEncodingMask;
|
348
|
+
}
|
349
|
+
|
350
|
+
|
289
351
|
uint32_t StringShape::full_representation_tag() {
|
290
352
|
return (type_ & (kStringRepresentationMask | kStringEncodingMask));
|
291
353
|
}
|
@@ -446,9 +508,33 @@ Failure* Failure::cast(MaybeObject* obj) {
|
|
446
508
|
}
|
447
509
|
|
448
510
|
|
511
|
+
bool Object::IsJSReceiver() {
|
512
|
+
return IsHeapObject() &&
|
513
|
+
HeapObject::cast(this)->map()->instance_type() >= FIRST_JS_RECEIVER_TYPE;
|
514
|
+
}
|
515
|
+
|
516
|
+
|
449
517
|
bool Object::IsJSObject() {
|
450
|
-
return
|
451
|
-
|
518
|
+
return IsJSReceiver() && !IsJSProxy();
|
519
|
+
}
|
520
|
+
|
521
|
+
|
522
|
+
bool Object::IsJSProxy() {
|
523
|
+
return Object::IsHeapObject() &&
|
524
|
+
(HeapObject::cast(this)->map()->instance_type() == JS_PROXY_TYPE ||
|
525
|
+
HeapObject::cast(this)->map()->instance_type() == JS_FUNCTION_PROXY_TYPE);
|
526
|
+
}
|
527
|
+
|
528
|
+
|
529
|
+
bool Object::IsJSFunctionProxy() {
|
530
|
+
return Object::IsHeapObject() &&
|
531
|
+
HeapObject::cast(this)->map()->instance_type() == JS_FUNCTION_PROXY_TYPE;
|
532
|
+
}
|
533
|
+
|
534
|
+
|
535
|
+
bool Object::IsJSWeakMap() {
|
536
|
+
return Object::IsJSObject() &&
|
537
|
+
HeapObject::cast(this)->map()->instance_type() == JS_WEAK_MAP_TYPE;
|
452
538
|
}
|
453
539
|
|
454
540
|
|
@@ -471,6 +557,13 @@ bool Object::IsFixedArray() {
|
|
471
557
|
}
|
472
558
|
|
473
559
|
|
560
|
+
bool Object::IsFixedDoubleArray() {
|
561
|
+
return Object::IsHeapObject()
|
562
|
+
&& HeapObject::cast(this)->map()->instance_type() ==
|
563
|
+
FIXED_DOUBLE_ARRAY_TYPE;
|
564
|
+
}
|
565
|
+
|
566
|
+
|
474
567
|
bool Object::IsDescriptorArray() {
|
475
568
|
return IsFixedArray();
|
476
569
|
}
|
@@ -505,26 +598,29 @@ bool Object::IsDeoptimizationOutputData() {
|
|
505
598
|
|
506
599
|
bool Object::IsContext() {
|
507
600
|
if (Object::IsHeapObject()) {
|
508
|
-
|
509
|
-
|
510
|
-
|
511
|
-
|
601
|
+
Map* map = HeapObject::cast(this)->map();
|
602
|
+
Heap* heap = map->GetHeap();
|
603
|
+
return (map == heap->function_context_map() ||
|
604
|
+
map == heap->catch_context_map() ||
|
605
|
+
map == heap->with_context_map() ||
|
606
|
+
map == heap->global_context_map() ||
|
607
|
+
map == heap->block_context_map());
|
512
608
|
}
|
513
609
|
return false;
|
514
610
|
}
|
515
611
|
|
516
612
|
|
517
|
-
bool Object::
|
613
|
+
bool Object::IsGlobalContext() {
|
518
614
|
return Object::IsHeapObject() &&
|
519
615
|
HeapObject::cast(this)->map() ==
|
520
|
-
HeapObject::cast(this)->GetHeap()->
|
616
|
+
HeapObject::cast(this)->GetHeap()->global_context_map();
|
521
617
|
}
|
522
618
|
|
523
619
|
|
524
|
-
bool Object::
|
620
|
+
bool Object::IsSerializedScopeInfo() {
|
525
621
|
return Object::IsHeapObject() &&
|
526
622
|
HeapObject::cast(this)->map() ==
|
527
|
-
HeapObject::cast(this)->GetHeap()->
|
623
|
+
HeapObject::cast(this)->GetHeap()->serialized_scope_info_map();
|
528
624
|
}
|
529
625
|
|
530
626
|
|
@@ -584,12 +680,6 @@ bool Object::IsStringWrapper() {
|
|
584
680
|
}
|
585
681
|
|
586
682
|
|
587
|
-
bool Object::IsJSProxy() {
|
588
|
-
return Object::IsHeapObject()
|
589
|
-
&& HeapObject::cast(this)->map()->instance_type() == JS_PROXY_TYPE;
|
590
|
-
}
|
591
|
-
|
592
|
-
|
593
683
|
bool Object::IsForeign() {
|
594
684
|
return Object::IsHeapObject()
|
595
685
|
&& HeapObject::cast(this)->map()->instance_type() == FOREIGN_TYPE;
|
@@ -627,8 +717,8 @@ bool Object::IsHashTable() {
|
|
627
717
|
|
628
718
|
|
629
719
|
bool Object::IsDictionary() {
|
630
|
-
return IsHashTable() &&
|
631
|
-
|
720
|
+
return IsHashTable() &&
|
721
|
+
this != HeapObject::cast(this)->GetHeap()->symbol_table();
|
632
722
|
}
|
633
723
|
|
634
724
|
|
@@ -676,6 +766,11 @@ bool Object::IsCodeCacheHashTable() {
|
|
676
766
|
}
|
677
767
|
|
678
768
|
|
769
|
+
bool Object::IsPolymorphicCodeCacheHashTable() {
|
770
|
+
return IsHashTable();
|
771
|
+
}
|
772
|
+
|
773
|
+
|
679
774
|
bool Object::IsMapCache() {
|
680
775
|
return IsHashTable();
|
681
776
|
}
|
@@ -867,7 +962,7 @@ MaybeObject* Object::GetProperty(String* key, PropertyAttributes* attributes) {
|
|
867
962
|
#else // V8_TARGET_ARCH_MIPS
|
868
963
|
// Prevent gcc from using load-double (mips ldc1) on (possibly)
|
869
964
|
// non-64-bit aligned HeapNumber::value.
|
870
|
-
static inline double read_double_field(
|
965
|
+
static inline double read_double_field(void* p, int offset) {
|
871
966
|
union conversion {
|
872
967
|
double d;
|
873
968
|
uint32_t u[2];
|
@@ -886,7 +981,7 @@ MaybeObject* Object::GetProperty(String* key, PropertyAttributes* attributes) {
|
|
886
981
|
#else // V8_TARGET_ARCH_MIPS
|
887
982
|
// Prevent gcc from using store-double (mips sdc1) on (possibly)
|
888
983
|
// non-64-bit aligned HeapNumber::value.
|
889
|
-
static inline void write_double_field(
|
984
|
+
static inline void write_double_field(void* p, int offset,
|
890
985
|
double value) {
|
891
986
|
union conversion {
|
892
987
|
double d;
|
@@ -1299,20 +1394,20 @@ int HeapNumber::get_sign() {
|
|
1299
1394
|
ACCESSORS(JSObject, properties, FixedArray, kPropertiesOffset)
|
1300
1395
|
|
1301
1396
|
|
1302
|
-
|
1397
|
+
FixedArrayBase* JSObject::elements() {
|
1303
1398
|
Object* array = READ_FIELD(this, kElementsOffset);
|
1304
|
-
|
1305
|
-
|
1306
|
-
return reinterpret_cast<HeapObject*>(array);
|
1399
|
+
ASSERT(array->HasValidElements());
|
1400
|
+
return static_cast<FixedArrayBase*>(array);
|
1307
1401
|
}
|
1308
1402
|
|
1309
1403
|
|
1310
|
-
void JSObject::set_elements(
|
1404
|
+
void JSObject::set_elements(FixedArrayBase* value, WriteBarrierMode mode) {
|
1311
1405
|
ASSERT(map()->has_fast_elements() ==
|
1312
1406
|
(value->map() == GetHeap()->fixed_array_map() ||
|
1313
1407
|
value->map() == GetHeap()->fixed_cow_array_map()));
|
1314
|
-
|
1315
|
-
|
1408
|
+
ASSERT(map()->has_fast_double_elements() ==
|
1409
|
+
value->IsFixedDoubleArray());
|
1410
|
+
ASSERT(value->HasValidElements());
|
1316
1411
|
WRITE_FIELD(this, kElementsOffset, value);
|
1317
1412
|
CONDITIONAL_WRITE_BARRIER(GetHeap(), this, kElementsOffset, mode);
|
1318
1413
|
}
|
@@ -1387,6 +1482,8 @@ int JSObject::GetHeaderSize() {
|
|
1387
1482
|
return JSValue::kSize;
|
1388
1483
|
case JS_ARRAY_TYPE:
|
1389
1484
|
return JSValue::kSize;
|
1485
|
+
case JS_WEAK_MAP_TYPE:
|
1486
|
+
return JSWeakMap::kSize;
|
1390
1487
|
case JS_REGEXP_TYPE:
|
1391
1488
|
return JSValue::kSize;
|
1392
1489
|
case JS_CONTEXT_EXTENSION_OBJECT_TYPE:
|
@@ -1560,6 +1657,12 @@ bool Object::IsStringObjectWithCharacterAt(uint32_t index) {
|
|
1560
1657
|
}
|
1561
1658
|
|
1562
1659
|
|
1660
|
+
FixedArrayBase* FixedArrayBase::cast(Object* object) {
|
1661
|
+
ASSERT(object->IsFixedArray() || object->IsFixedDoubleArray());
|
1662
|
+
return reinterpret_cast<FixedArrayBase*>(object);
|
1663
|
+
}
|
1664
|
+
|
1665
|
+
|
1563
1666
|
Object* FixedArray::get(int index) {
|
1564
1667
|
ASSERT(index >= 0 && index < this->length());
|
1565
1668
|
return READ_FIELD(this, kHeaderSize + index * kPointerSize);
|
@@ -1568,6 +1671,7 @@ Object* FixedArray::get(int index) {
|
|
1568
1671
|
|
1569
1672
|
void FixedArray::set(int index, Smi* value) {
|
1570
1673
|
ASSERT(map() != HEAP->fixed_cow_array_map());
|
1674
|
+
ASSERT(index >= 0 && index < this->length());
|
1571
1675
|
ASSERT(reinterpret_cast<Object*>(value)->IsSmi());
|
1572
1676
|
int offset = kHeaderSize + index * kPointerSize;
|
1573
1677
|
WRITE_FIELD(this, offset, value);
|
@@ -1583,6 +1687,114 @@ void FixedArray::set(int index, Object* value) {
|
|
1583
1687
|
}
|
1584
1688
|
|
1585
1689
|
|
1690
|
+
inline bool FixedDoubleArray::is_the_hole_nan(double value) {
|
1691
|
+
return BitCast<uint64_t, double>(value) == kHoleNanInt64;
|
1692
|
+
}
|
1693
|
+
|
1694
|
+
|
1695
|
+
inline double FixedDoubleArray::hole_nan_as_double() {
|
1696
|
+
return BitCast<double, uint64_t>(kHoleNanInt64);
|
1697
|
+
}
|
1698
|
+
|
1699
|
+
|
1700
|
+
inline double FixedDoubleArray::canonical_not_the_hole_nan_as_double() {
|
1701
|
+
ASSERT(BitCast<uint64_t>(OS::nan_value()) != kHoleNanInt64);
|
1702
|
+
ASSERT((BitCast<uint64_t>(OS::nan_value()) >> 32) != kHoleNanUpper32);
|
1703
|
+
return OS::nan_value();
|
1704
|
+
}
|
1705
|
+
|
1706
|
+
|
1707
|
+
double FixedDoubleArray::get_scalar(int index) {
|
1708
|
+
ASSERT(map() != HEAP->fixed_cow_array_map() &&
|
1709
|
+
map() != HEAP->fixed_array_map());
|
1710
|
+
ASSERT(index >= 0 && index < this->length());
|
1711
|
+
double result = READ_DOUBLE_FIELD(this, kHeaderSize + index * kDoubleSize);
|
1712
|
+
ASSERT(!is_the_hole_nan(result));
|
1713
|
+
return result;
|
1714
|
+
}
|
1715
|
+
|
1716
|
+
|
1717
|
+
MaybeObject* FixedDoubleArray::get(int index) {
|
1718
|
+
if (is_the_hole(index)) {
|
1719
|
+
return GetHeap()->the_hole_value();
|
1720
|
+
} else {
|
1721
|
+
return GetHeap()->NumberFromDouble(get_scalar(index));
|
1722
|
+
}
|
1723
|
+
}
|
1724
|
+
|
1725
|
+
|
1726
|
+
void FixedDoubleArray::set(int index, double value) {
|
1727
|
+
ASSERT(map() != HEAP->fixed_cow_array_map() &&
|
1728
|
+
map() != HEAP->fixed_array_map());
|
1729
|
+
int offset = kHeaderSize + index * kDoubleSize;
|
1730
|
+
if (isnan(value)) value = canonical_not_the_hole_nan_as_double();
|
1731
|
+
WRITE_DOUBLE_FIELD(this, offset, value);
|
1732
|
+
}
|
1733
|
+
|
1734
|
+
|
1735
|
+
void FixedDoubleArray::set_the_hole(int index) {
|
1736
|
+
ASSERT(map() != HEAP->fixed_cow_array_map() &&
|
1737
|
+
map() != HEAP->fixed_array_map());
|
1738
|
+
int offset = kHeaderSize + index * kDoubleSize;
|
1739
|
+
WRITE_DOUBLE_FIELD(this, offset, hole_nan_as_double());
|
1740
|
+
}
|
1741
|
+
|
1742
|
+
|
1743
|
+
bool FixedDoubleArray::is_the_hole(int index) {
|
1744
|
+
int offset = kHeaderSize + index * kDoubleSize;
|
1745
|
+
return is_the_hole_nan(READ_DOUBLE_FIELD(this, offset));
|
1746
|
+
}
|
1747
|
+
|
1748
|
+
|
1749
|
+
void FixedDoubleArray::Initialize(FixedDoubleArray* from) {
|
1750
|
+
int old_length = from->length();
|
1751
|
+
ASSERT(old_length < length());
|
1752
|
+
OS::MemCopy(FIELD_ADDR(this, kHeaderSize),
|
1753
|
+
FIELD_ADDR(from, kHeaderSize),
|
1754
|
+
old_length * kDoubleSize);
|
1755
|
+
int offset = kHeaderSize + old_length * kDoubleSize;
|
1756
|
+
for (int current = from->length(); current < length(); ++current) {
|
1757
|
+
WRITE_DOUBLE_FIELD(this, offset, hole_nan_as_double());
|
1758
|
+
offset += kDoubleSize;
|
1759
|
+
}
|
1760
|
+
}
|
1761
|
+
|
1762
|
+
|
1763
|
+
void FixedDoubleArray::Initialize(FixedArray* from) {
|
1764
|
+
int old_length = from->length();
|
1765
|
+
ASSERT(old_length < length());
|
1766
|
+
for (int i = 0; i < old_length; i++) {
|
1767
|
+
Object* hole_or_object = from->get(i);
|
1768
|
+
if (hole_or_object->IsTheHole()) {
|
1769
|
+
set_the_hole(i);
|
1770
|
+
} else {
|
1771
|
+
set(i, hole_or_object->Number());
|
1772
|
+
}
|
1773
|
+
}
|
1774
|
+
int offset = kHeaderSize + old_length * kDoubleSize;
|
1775
|
+
for (int current = from->length(); current < length(); ++current) {
|
1776
|
+
WRITE_DOUBLE_FIELD(this, offset, hole_nan_as_double());
|
1777
|
+
offset += kDoubleSize;
|
1778
|
+
}
|
1779
|
+
}
|
1780
|
+
|
1781
|
+
|
1782
|
+
void FixedDoubleArray::Initialize(NumberDictionary* from) {
|
1783
|
+
int offset = kHeaderSize;
|
1784
|
+
for (int current = 0; current < length(); ++current) {
|
1785
|
+
WRITE_DOUBLE_FIELD(this, offset, hole_nan_as_double());
|
1786
|
+
offset += kDoubleSize;
|
1787
|
+
}
|
1788
|
+
for (int i = 0; i < from->Capacity(); i++) {
|
1789
|
+
Object* key = from->KeyAt(i);
|
1790
|
+
if (key->IsNumber()) {
|
1791
|
+
uint32_t entry = static_cast<uint32_t>(key->Number());
|
1792
|
+
set(entry, from->ValueAt(i)->Number());
|
1793
|
+
}
|
1794
|
+
}
|
1795
|
+
}
|
1796
|
+
|
1797
|
+
|
1586
1798
|
WriteBarrierMode HeapObject::GetWriteBarrierMode(const AssertNoAllocation&) {
|
1587
1799
|
if (GetHeap()->InNewSpace(this)) return SKIP_WRITE_BARRIER;
|
1588
1800
|
return UPDATE_WRITE_BARRIER;
|
@@ -1834,6 +2046,17 @@ void DescriptorArray::Swap(int first, int second) {
|
|
1834
2046
|
}
|
1835
2047
|
|
1836
2048
|
|
2049
|
+
template<typename Shape, typename Key>
|
2050
|
+
int HashTable<Shape, Key>::ComputeCapacity(int at_least_space_for) {
|
2051
|
+
const int kMinCapacity = 32;
|
2052
|
+
int capacity = RoundUpToPowerOf2(at_least_space_for * 2);
|
2053
|
+
if (capacity < kMinCapacity) {
|
2054
|
+
capacity = kMinCapacity; // Guarantee min capacity.
|
2055
|
+
}
|
2056
|
+
return capacity;
|
2057
|
+
}
|
2058
|
+
|
2059
|
+
|
1837
2060
|
template<typename Shape, typename Key>
|
1838
2061
|
int HashTable<Shape, Key>::FindEntry(Key key) {
|
1839
2062
|
return FindEntry(GetIsolate(), key);
|
@@ -1883,6 +2106,7 @@ void NumberDictionary::set_requires_slow_elements() {
|
|
1883
2106
|
|
1884
2107
|
|
1885
2108
|
CAST_ACCESSOR(FixedArray)
|
2109
|
+
CAST_ACCESSOR(FixedDoubleArray)
|
1886
2110
|
CAST_ACCESSOR(DescriptorArray)
|
1887
2111
|
CAST_ACCESSOR(DeoptimizationInputData)
|
1888
2112
|
CAST_ACCESSOR(DeoptimizationOutputData)
|
@@ -1891,15 +2115,18 @@ CAST_ACCESSOR(JSFunctionResultCache)
|
|
1891
2115
|
CAST_ACCESSOR(NormalizedMapCache)
|
1892
2116
|
CAST_ACCESSOR(CompilationCacheTable)
|
1893
2117
|
CAST_ACCESSOR(CodeCacheHashTable)
|
2118
|
+
CAST_ACCESSOR(PolymorphicCodeCacheHashTable)
|
1894
2119
|
CAST_ACCESSOR(MapCache)
|
1895
2120
|
CAST_ACCESSOR(String)
|
1896
2121
|
CAST_ACCESSOR(SeqString)
|
1897
2122
|
CAST_ACCESSOR(SeqAsciiString)
|
1898
2123
|
CAST_ACCESSOR(SeqTwoByteString)
|
2124
|
+
CAST_ACCESSOR(SlicedString)
|
1899
2125
|
CAST_ACCESSOR(ConsString)
|
1900
2126
|
CAST_ACCESSOR(ExternalString)
|
1901
2127
|
CAST_ACCESSOR(ExternalAsciiString)
|
1902
2128
|
CAST_ACCESSOR(ExternalTwoByteString)
|
2129
|
+
CAST_ACCESSOR(JSReceiver)
|
1903
2130
|
CAST_ACCESSOR(JSObject)
|
1904
2131
|
CAST_ACCESSOR(Smi)
|
1905
2132
|
CAST_ACCESSOR(HeapObject)
|
@@ -1917,6 +2144,8 @@ CAST_ACCESSOR(Code)
|
|
1917
2144
|
CAST_ACCESSOR(JSArray)
|
1918
2145
|
CAST_ACCESSOR(JSRegExp)
|
1919
2146
|
CAST_ACCESSOR(JSProxy)
|
2147
|
+
CAST_ACCESSOR(JSFunctionProxy)
|
2148
|
+
CAST_ACCESSOR(JSWeakMap)
|
1920
2149
|
CAST_ACCESSOR(Foreign)
|
1921
2150
|
CAST_ACCESSOR(ByteArray)
|
1922
2151
|
CAST_ACCESSOR(ExternalArray)
|
@@ -1944,11 +2173,7 @@ HashTable<Shape, Key>* HashTable<Shape, Key>::cast(Object* obj) {
|
|
1944
2173
|
}
|
1945
2174
|
|
1946
2175
|
|
1947
|
-
SMI_ACCESSORS(
|
1948
|
-
SMI_ACCESSORS(ByteArray, length, kLengthOffset)
|
1949
|
-
|
1950
|
-
INT_ACCESSORS(ExternalArray, length, kLengthOffset)
|
1951
|
-
|
2176
|
+
SMI_ACCESSORS(FixedArrayBase, length, kLengthOffset)
|
1952
2177
|
|
1953
2178
|
SMI_ACCESSORS(String, length, kLengthOffset)
|
1954
2179
|
|
@@ -1978,7 +2203,7 @@ bool String::Equals(String* other) {
|
|
1978
2203
|
MaybeObject* String::TryFlatten(PretenureFlag pretenure) {
|
1979
2204
|
if (!StringShape(this).IsCons()) return this;
|
1980
2205
|
ConsString* cons = ConsString::cast(this);
|
1981
|
-
if (cons->
|
2206
|
+
if (cons->IsFlat()) return cons->first();
|
1982
2207
|
return SlowTryFlatten(pretenure);
|
1983
2208
|
}
|
1984
2209
|
|
@@ -1986,10 +2211,8 @@ MaybeObject* String::TryFlatten(PretenureFlag pretenure) {
|
|
1986
2211
|
String* String::TryFlattenGetString(PretenureFlag pretenure) {
|
1987
2212
|
MaybeObject* flat = TryFlatten(pretenure);
|
1988
2213
|
Object* successfully_flattened;
|
1989
|
-
if (flat->ToObject(&successfully_flattened))
|
1990
|
-
|
1991
|
-
}
|
1992
|
-
return this;
|
2214
|
+
if (!flat->ToObject(&successfully_flattened)) return this;
|
2215
|
+
return String::cast(successfully_flattened);
|
1993
2216
|
}
|
1994
2217
|
|
1995
2218
|
|
@@ -2007,6 +2230,9 @@ uint16_t String::Get(int index) {
|
|
2007
2230
|
return ExternalAsciiString::cast(this)->ExternalAsciiStringGet(index);
|
2008
2231
|
case kExternalStringTag | kTwoByteStringTag:
|
2009
2232
|
return ExternalTwoByteString::cast(this)->ExternalTwoByteStringGet(index);
|
2233
|
+
case kSlicedStringTag | kAsciiStringTag:
|
2234
|
+
case kSlicedStringTag | kTwoByteStringTag:
|
2235
|
+
return SlicedString::cast(this)->SlicedStringGet(index);
|
2010
2236
|
default:
|
2011
2237
|
break;
|
2012
2238
|
}
|
@@ -2027,15 +2253,19 @@ void String::Set(int index, uint16_t value) {
|
|
2027
2253
|
|
2028
2254
|
|
2029
2255
|
bool String::IsFlat() {
|
2030
|
-
|
2031
|
-
|
2032
|
-
|
2033
|
-
|
2034
|
-
|
2035
|
-
|
2036
|
-
|
2037
|
-
|
2038
|
-
|
2256
|
+
if (!StringShape(this).IsCons()) return true;
|
2257
|
+
return ConsString::cast(this)->second()->length() == 0;
|
2258
|
+
}
|
2259
|
+
|
2260
|
+
|
2261
|
+
String* String::GetUnderlying() {
|
2262
|
+
// Giving direct access to underlying string only makes sense if the
|
2263
|
+
// wrapping string is already flattened.
|
2264
|
+
ASSERT(this->IsFlat());
|
2265
|
+
ASSERT(StringShape(this).IsIndirect());
|
2266
|
+
STATIC_ASSERT(ConsString::kFirstOffset == SlicedString::kParentOffset);
|
2267
|
+
const int kUnderlyingOffset = SlicedString::kParentOffset;
|
2268
|
+
return String::cast(READ_FIELD(this, kUnderlyingOffset));
|
2039
2269
|
}
|
2040
2270
|
|
2041
2271
|
|
@@ -2094,6 +2324,20 @@ int SeqAsciiString::SeqAsciiStringSize(InstanceType instance_type) {
|
|
2094
2324
|
}
|
2095
2325
|
|
2096
2326
|
|
2327
|
+
String* SlicedString::parent() {
|
2328
|
+
return String::cast(READ_FIELD(this, kParentOffset));
|
2329
|
+
}
|
2330
|
+
|
2331
|
+
|
2332
|
+
void SlicedString::set_parent(String* parent) {
|
2333
|
+
ASSERT(parent->IsSeqString());
|
2334
|
+
WRITE_FIELD(this, kParentOffset, parent);
|
2335
|
+
}
|
2336
|
+
|
2337
|
+
|
2338
|
+
SMI_ACCESSORS(SlicedString, offset, kOffsetOffset)
|
2339
|
+
|
2340
|
+
|
2097
2341
|
String* ConsString::first() {
|
2098
2342
|
return String::cast(READ_FIELD(this, kFirstOffset));
|
2099
2343
|
}
|
@@ -2218,13 +2462,18 @@ uint8_t* ExternalPixelArray::external_pixel_pointer() {
|
|
2218
2462
|
}
|
2219
2463
|
|
2220
2464
|
|
2221
|
-
uint8_t ExternalPixelArray::
|
2465
|
+
uint8_t ExternalPixelArray::get_scalar(int index) {
|
2222
2466
|
ASSERT((index >= 0) && (index < this->length()));
|
2223
2467
|
uint8_t* ptr = external_pixel_pointer();
|
2224
2468
|
return ptr[index];
|
2225
2469
|
}
|
2226
2470
|
|
2227
2471
|
|
2472
|
+
MaybeObject* ExternalPixelArray::get(int index) {
|
2473
|
+
return Smi::FromInt(static_cast<int>(get_scalar(index)));
|
2474
|
+
}
|
2475
|
+
|
2476
|
+
|
2228
2477
|
void ExternalPixelArray::set(int index, uint8_t value) {
|
2229
2478
|
ASSERT((index >= 0) && (index < this->length()));
|
2230
2479
|
uint8_t* ptr = external_pixel_pointer();
|
@@ -2244,13 +2493,18 @@ void ExternalArray::set_external_pointer(void* value, WriteBarrierMode mode) {
|
|
2244
2493
|
}
|
2245
2494
|
|
2246
2495
|
|
2247
|
-
int8_t ExternalByteArray::
|
2496
|
+
int8_t ExternalByteArray::get_scalar(int index) {
|
2248
2497
|
ASSERT((index >= 0) && (index < this->length()));
|
2249
2498
|
int8_t* ptr = static_cast<int8_t*>(external_pointer());
|
2250
2499
|
return ptr[index];
|
2251
2500
|
}
|
2252
2501
|
|
2253
2502
|
|
2503
|
+
MaybeObject* ExternalByteArray::get(int index) {
|
2504
|
+
return Smi::FromInt(static_cast<int>(get_scalar(index)));
|
2505
|
+
}
|
2506
|
+
|
2507
|
+
|
2254
2508
|
void ExternalByteArray::set(int index, int8_t value) {
|
2255
2509
|
ASSERT((index >= 0) && (index < this->length()));
|
2256
2510
|
int8_t* ptr = static_cast<int8_t*>(external_pointer());
|
@@ -2258,13 +2512,18 @@ void ExternalByteArray::set(int index, int8_t value) {
|
|
2258
2512
|
}
|
2259
2513
|
|
2260
2514
|
|
2261
|
-
uint8_t ExternalUnsignedByteArray::
|
2515
|
+
uint8_t ExternalUnsignedByteArray::get_scalar(int index) {
|
2262
2516
|
ASSERT((index >= 0) && (index < this->length()));
|
2263
2517
|
uint8_t* ptr = static_cast<uint8_t*>(external_pointer());
|
2264
2518
|
return ptr[index];
|
2265
2519
|
}
|
2266
2520
|
|
2267
2521
|
|
2522
|
+
MaybeObject* ExternalUnsignedByteArray::get(int index) {
|
2523
|
+
return Smi::FromInt(static_cast<int>(get_scalar(index)));
|
2524
|
+
}
|
2525
|
+
|
2526
|
+
|
2268
2527
|
void ExternalUnsignedByteArray::set(int index, uint8_t value) {
|
2269
2528
|
ASSERT((index >= 0) && (index < this->length()));
|
2270
2529
|
uint8_t* ptr = static_cast<uint8_t*>(external_pointer());
|
@@ -2272,13 +2531,18 @@ void ExternalUnsignedByteArray::set(int index, uint8_t value) {
|
|
2272
2531
|
}
|
2273
2532
|
|
2274
2533
|
|
2275
|
-
int16_t ExternalShortArray::
|
2534
|
+
int16_t ExternalShortArray::get_scalar(int index) {
|
2276
2535
|
ASSERT((index >= 0) && (index < this->length()));
|
2277
2536
|
int16_t* ptr = static_cast<int16_t*>(external_pointer());
|
2278
2537
|
return ptr[index];
|
2279
2538
|
}
|
2280
2539
|
|
2281
2540
|
|
2541
|
+
MaybeObject* ExternalShortArray::get(int index) {
|
2542
|
+
return Smi::FromInt(static_cast<int>(get_scalar(index)));
|
2543
|
+
}
|
2544
|
+
|
2545
|
+
|
2282
2546
|
void ExternalShortArray::set(int index, int16_t value) {
|
2283
2547
|
ASSERT((index >= 0) && (index < this->length()));
|
2284
2548
|
int16_t* ptr = static_cast<int16_t*>(external_pointer());
|
@@ -2286,13 +2550,18 @@ void ExternalShortArray::set(int index, int16_t value) {
|
|
2286
2550
|
}
|
2287
2551
|
|
2288
2552
|
|
2289
|
-
uint16_t ExternalUnsignedShortArray::
|
2553
|
+
uint16_t ExternalUnsignedShortArray::get_scalar(int index) {
|
2290
2554
|
ASSERT((index >= 0) && (index < this->length()));
|
2291
2555
|
uint16_t* ptr = static_cast<uint16_t*>(external_pointer());
|
2292
2556
|
return ptr[index];
|
2293
2557
|
}
|
2294
2558
|
|
2295
2559
|
|
2560
|
+
MaybeObject* ExternalUnsignedShortArray::get(int index) {
|
2561
|
+
return Smi::FromInt(static_cast<int>(get_scalar(index)));
|
2562
|
+
}
|
2563
|
+
|
2564
|
+
|
2296
2565
|
void ExternalUnsignedShortArray::set(int index, uint16_t value) {
|
2297
2566
|
ASSERT((index >= 0) && (index < this->length()));
|
2298
2567
|
uint16_t* ptr = static_cast<uint16_t*>(external_pointer());
|
@@ -2300,13 +2569,18 @@ void ExternalUnsignedShortArray::set(int index, uint16_t value) {
|
|
2300
2569
|
}
|
2301
2570
|
|
2302
2571
|
|
2303
|
-
int32_t ExternalIntArray::
|
2572
|
+
int32_t ExternalIntArray::get_scalar(int index) {
|
2304
2573
|
ASSERT((index >= 0) && (index < this->length()));
|
2305
2574
|
int32_t* ptr = static_cast<int32_t*>(external_pointer());
|
2306
2575
|
return ptr[index];
|
2307
2576
|
}
|
2308
2577
|
|
2309
2578
|
|
2579
|
+
MaybeObject* ExternalIntArray::get(int index) {
|
2580
|
+
return GetHeap()->NumberFromInt32(get_scalar(index));
|
2581
|
+
}
|
2582
|
+
|
2583
|
+
|
2310
2584
|
void ExternalIntArray::set(int index, int32_t value) {
|
2311
2585
|
ASSERT((index >= 0) && (index < this->length()));
|
2312
2586
|
int32_t* ptr = static_cast<int32_t*>(external_pointer());
|
@@ -2314,13 +2588,18 @@ void ExternalIntArray::set(int index, int32_t value) {
|
|
2314
2588
|
}
|
2315
2589
|
|
2316
2590
|
|
2317
|
-
uint32_t ExternalUnsignedIntArray::
|
2591
|
+
uint32_t ExternalUnsignedIntArray::get_scalar(int index) {
|
2318
2592
|
ASSERT((index >= 0) && (index < this->length()));
|
2319
2593
|
uint32_t* ptr = static_cast<uint32_t*>(external_pointer());
|
2320
2594
|
return ptr[index];
|
2321
2595
|
}
|
2322
2596
|
|
2323
2597
|
|
2598
|
+
MaybeObject* ExternalUnsignedIntArray::get(int index) {
|
2599
|
+
return GetHeap()->NumberFromUint32(get_scalar(index));
|
2600
|
+
}
|
2601
|
+
|
2602
|
+
|
2324
2603
|
void ExternalUnsignedIntArray::set(int index, uint32_t value) {
|
2325
2604
|
ASSERT((index >= 0) && (index < this->length()));
|
2326
2605
|
uint32_t* ptr = static_cast<uint32_t*>(external_pointer());
|
@@ -2328,13 +2607,18 @@ void ExternalUnsignedIntArray::set(int index, uint32_t value) {
|
|
2328
2607
|
}
|
2329
2608
|
|
2330
2609
|
|
2331
|
-
float ExternalFloatArray::
|
2610
|
+
float ExternalFloatArray::get_scalar(int index) {
|
2332
2611
|
ASSERT((index >= 0) && (index < this->length()));
|
2333
2612
|
float* ptr = static_cast<float*>(external_pointer());
|
2334
2613
|
return ptr[index];
|
2335
2614
|
}
|
2336
2615
|
|
2337
2616
|
|
2617
|
+
MaybeObject* ExternalFloatArray::get(int index) {
|
2618
|
+
return GetHeap()->NumberFromDouble(get_scalar(index));
|
2619
|
+
}
|
2620
|
+
|
2621
|
+
|
2338
2622
|
void ExternalFloatArray::set(int index, float value) {
|
2339
2623
|
ASSERT((index >= 0) && (index < this->length()));
|
2340
2624
|
float* ptr = static_cast<float*>(external_pointer());
|
@@ -2342,13 +2626,18 @@ void ExternalFloatArray::set(int index, float value) {
|
|
2342
2626
|
}
|
2343
2627
|
|
2344
2628
|
|
2345
|
-
double ExternalDoubleArray::
|
2629
|
+
double ExternalDoubleArray::get_scalar(int index) {
|
2346
2630
|
ASSERT((index >= 0) && (index < this->length()));
|
2347
2631
|
double* ptr = static_cast<double*>(external_pointer());
|
2348
2632
|
return ptr[index];
|
2349
2633
|
}
|
2350
2634
|
|
2351
2635
|
|
2636
|
+
MaybeObject* ExternalDoubleArray::get(int index) {
|
2637
|
+
return GetHeap()->NumberFromDouble(get_scalar(index));
|
2638
|
+
}
|
2639
|
+
|
2640
|
+
|
2352
2641
|
void ExternalDoubleArray::set(int index, double value) {
|
2353
2642
|
ASSERT((index >= 0) && (index < this->length()));
|
2354
2643
|
double* ptr = static_cast<double*>(external_pointer());
|
@@ -2403,6 +2692,10 @@ int HeapObject::SizeFromMap(Map* map) {
|
|
2403
2692
|
return SeqTwoByteString::SizeFor(
|
2404
2693
|
reinterpret_cast<SeqTwoByteString*>(this)->length());
|
2405
2694
|
}
|
2695
|
+
if (instance_type == FIXED_DOUBLE_ARRAY_TYPE) {
|
2696
|
+
return FixedDoubleArray::SizeFor(
|
2697
|
+
reinterpret_cast<FixedDoubleArray*>(this)->length());
|
2698
|
+
}
|
2406
2699
|
ASSERT(instance_type == CODE_TYPE);
|
2407
2700
|
return reinterpret_cast<Code*>(this)->CodeSize();
|
2408
2701
|
}
|
@@ -2621,7 +2914,8 @@ int Code::major_key() {
|
|
2621
2914
|
ASSERT(kind() == STUB ||
|
2622
2915
|
kind() == UNARY_OP_IC ||
|
2623
2916
|
kind() == BINARY_OP_IC ||
|
2624
|
-
kind() == COMPARE_IC
|
2917
|
+
kind() == COMPARE_IC ||
|
2918
|
+
kind() == TO_BOOLEAN_IC);
|
2625
2919
|
return READ_BYTE_FIELD(this, kStubMajorKeyOffset);
|
2626
2920
|
}
|
2627
2921
|
|
@@ -2630,7 +2924,8 @@ void Code::set_major_key(int major) {
|
|
2630
2924
|
ASSERT(kind() == STUB ||
|
2631
2925
|
kind() == UNARY_OP_IC ||
|
2632
2926
|
kind() == BINARY_OP_IC ||
|
2633
|
-
kind() == COMPARE_IC
|
2927
|
+
kind() == COMPARE_IC ||
|
2928
|
+
kind() == TO_BOOLEAN_IC);
|
2634
2929
|
ASSERT(0 <= major && major < 256);
|
2635
2930
|
WRITE_BYTE_FIELD(this, kStubMajorKeyOffset, major);
|
2636
2931
|
}
|
@@ -2724,19 +3019,6 @@ void Code::set_check_type(CheckType value) {
|
|
2724
3019
|
}
|
2725
3020
|
|
2726
3021
|
|
2727
|
-
ExternalArrayType Code::external_array_type() {
|
2728
|
-
ASSERT(is_keyed_load_stub() || is_keyed_store_stub());
|
2729
|
-
byte type = READ_BYTE_FIELD(this, kExternalArrayTypeOffset);
|
2730
|
-
return static_cast<ExternalArrayType>(type);
|
2731
|
-
}
|
2732
|
-
|
2733
|
-
|
2734
|
-
void Code::set_external_array_type(ExternalArrayType value) {
|
2735
|
-
ASSERT(is_keyed_load_stub() || is_keyed_store_stub());
|
2736
|
-
WRITE_BYTE_FIELD(this, kExternalArrayTypeOffset, value);
|
2737
|
-
}
|
2738
|
-
|
2739
|
-
|
2740
3022
|
byte Code::unary_op_type() {
|
2741
3023
|
ASSERT(is_unary_op_stub());
|
2742
3024
|
return READ_BYTE_FIELD(this, kUnaryOpTypeOffset);
|
@@ -2785,6 +3067,17 @@ void Code::set_compare_state(byte value) {
|
|
2785
3067
|
}
|
2786
3068
|
|
2787
3069
|
|
3070
|
+
byte Code::to_boolean_state() {
|
3071
|
+
ASSERT(is_to_boolean_ic_stub());
|
3072
|
+
return READ_BYTE_FIELD(this, kToBooleanTypeOffset);
|
3073
|
+
}
|
3074
|
+
|
3075
|
+
|
3076
|
+
void Code::set_to_boolean_state(byte value) {
|
3077
|
+
ASSERT(is_to_boolean_ic_stub());
|
3078
|
+
WRITE_BYTE_FIELD(this, kToBooleanTypeOffset, value);
|
3079
|
+
}
|
3080
|
+
|
2788
3081
|
bool Code::is_inline_cache_stub() {
|
2789
3082
|
Kind kind = this->kind();
|
2790
3083
|
return kind >= FIRST_IC_KIND && kind <= LAST_IC_KIND;
|
@@ -2947,7 +3240,7 @@ Object* Map::prototype() {
|
|
2947
3240
|
|
2948
3241
|
|
2949
3242
|
void Map::set_prototype(Object* value, WriteBarrierMode mode) {
|
2950
|
-
ASSERT(value->IsNull() || value->
|
3243
|
+
ASSERT(value->IsNull() || value->IsJSReceiver());
|
2951
3244
|
WRITE_FIELD(this, kPrototypeOffset, value);
|
2952
3245
|
CONDITIONAL_WRITE_BARRIER(GetHeap(), this, kPrototypeOffset, mode);
|
2953
3246
|
}
|
@@ -2960,21 +3253,34 @@ MaybeObject* Map::GetFastElementsMap() {
|
|
2960
3253
|
if (!maybe_obj->ToObject(&obj)) return maybe_obj;
|
2961
3254
|
}
|
2962
3255
|
Map* new_map = Map::cast(obj);
|
2963
|
-
new_map->
|
2964
|
-
isolate()->counters()->
|
3256
|
+
new_map->set_elements_kind(JSObject::FAST_ELEMENTS);
|
3257
|
+
isolate()->counters()->map_to_fast_elements()->Increment();
|
3258
|
+
return new_map;
|
3259
|
+
}
|
3260
|
+
|
3261
|
+
|
3262
|
+
MaybeObject* Map::GetFastDoubleElementsMap() {
|
3263
|
+
if (has_fast_double_elements()) return this;
|
3264
|
+
Object* obj;
|
3265
|
+
{ MaybeObject* maybe_obj = CopyDropTransitions();
|
3266
|
+
if (!maybe_obj->ToObject(&obj)) return maybe_obj;
|
3267
|
+
}
|
3268
|
+
Map* new_map = Map::cast(obj);
|
3269
|
+
new_map->set_elements_kind(JSObject::FAST_DOUBLE_ELEMENTS);
|
3270
|
+
isolate()->counters()->map_to_fast_double_elements()->Increment();
|
2965
3271
|
return new_map;
|
2966
3272
|
}
|
2967
3273
|
|
2968
3274
|
|
2969
3275
|
MaybeObject* Map::GetSlowElementsMap() {
|
2970
|
-
if (!has_fast_elements()) return this;
|
3276
|
+
if (!has_fast_elements() && !has_fast_double_elements()) return this;
|
2971
3277
|
Object* obj;
|
2972
3278
|
{ MaybeObject* maybe_obj = CopyDropTransitions();
|
2973
3279
|
if (!maybe_obj->ToObject(&obj)) return maybe_obj;
|
2974
3280
|
}
|
2975
3281
|
Map* new_map = Map::cast(obj);
|
2976
|
-
new_map->
|
2977
|
-
isolate()->counters()->
|
3282
|
+
new_map->set_elements_kind(JSObject::DICTIONARY_ELEMENTS);
|
3283
|
+
isolate()->counters()->map_to_slow_elements()->Increment();
|
2978
3284
|
return new_map;
|
2979
3285
|
}
|
2980
3286
|
|
@@ -3167,17 +3473,28 @@ BOOL_ACCESSORS(FunctionTemplateInfo, flag, hidden_prototype,
|
|
3167
3473
|
BOOL_ACCESSORS(FunctionTemplateInfo, flag, undetectable, kUndetectableBit)
|
3168
3474
|
BOOL_ACCESSORS(FunctionTemplateInfo, flag, needs_access_check,
|
3169
3475
|
kNeedsAccessCheckBit)
|
3476
|
+
BOOL_ACCESSORS(FunctionTemplateInfo, flag, read_only_prototype,
|
3477
|
+
kReadOnlyPrototypeBit)
|
3170
3478
|
BOOL_ACCESSORS(SharedFunctionInfo, start_position_and_type, is_expression,
|
3171
3479
|
kIsExpressionBit)
|
3172
3480
|
BOOL_ACCESSORS(SharedFunctionInfo, start_position_and_type, is_toplevel,
|
3173
3481
|
kIsTopLevelBit)
|
3174
|
-
BOOL_GETTER(SharedFunctionInfo,
|
3482
|
+
BOOL_GETTER(SharedFunctionInfo,
|
3483
|
+
compiler_hints,
|
3175
3484
|
has_only_simple_this_property_assignments,
|
3176
3485
|
kHasOnlySimpleThisPropertyAssignments)
|
3177
3486
|
BOOL_ACCESSORS(SharedFunctionInfo,
|
3178
3487
|
compiler_hints,
|
3179
3488
|
allows_lazy_compilation,
|
3180
3489
|
kAllowLazyCompilation)
|
3490
|
+
BOOL_ACCESSORS(SharedFunctionInfo,
|
3491
|
+
compiler_hints,
|
3492
|
+
uses_arguments,
|
3493
|
+
kUsesArguments)
|
3494
|
+
BOOL_ACCESSORS(SharedFunctionInfo,
|
3495
|
+
compiler_hints,
|
3496
|
+
has_duplicate_parameters,
|
3497
|
+
kHasDuplicateParameters)
|
3181
3498
|
|
3182
3499
|
|
3183
3500
|
#if V8_HOST_ARCH_32_BIT
|
@@ -3261,18 +3578,10 @@ void SharedFunctionInfo::set_construction_count(int value) {
|
|
3261
3578
|
}
|
3262
3579
|
|
3263
3580
|
|
3264
|
-
|
3265
|
-
|
3266
|
-
|
3267
|
-
|
3268
|
-
|
3269
|
-
void SharedFunctionInfo::set_live_objects_may_exist(bool value) {
|
3270
|
-
if (value) {
|
3271
|
-
set_compiler_hints(compiler_hints() | (1 << kLiveObjectsMayExist));
|
3272
|
-
} else {
|
3273
|
-
set_compiler_hints(compiler_hints() & ~(1 << kLiveObjectsMayExist));
|
3274
|
-
}
|
3275
|
-
}
|
3581
|
+
BOOL_ACCESSORS(SharedFunctionInfo,
|
3582
|
+
compiler_hints,
|
3583
|
+
live_objects_may_exist,
|
3584
|
+
kLiveObjectsMayExist)
|
3276
3585
|
|
3277
3586
|
|
3278
3587
|
bool SharedFunctionInfo::IsInobjectSlackTrackingInProgress() {
|
@@ -3280,9 +3589,10 @@ bool SharedFunctionInfo::IsInobjectSlackTrackingInProgress() {
|
|
3280
3589
|
}
|
3281
3590
|
|
3282
3591
|
|
3283
|
-
|
3284
|
-
|
3285
|
-
|
3592
|
+
BOOL_GETTER(SharedFunctionInfo,
|
3593
|
+
compiler_hints,
|
3594
|
+
optimization_disabled,
|
3595
|
+
kOptimizationDisabled)
|
3286
3596
|
|
3287
3597
|
|
3288
3598
|
void SharedFunctionInfo::set_optimization_disabled(bool disable) {
|
@@ -3297,33 +3607,20 @@ void SharedFunctionInfo::set_optimization_disabled(bool disable) {
|
|
3297
3607
|
}
|
3298
3608
|
|
3299
3609
|
|
3300
|
-
|
3301
|
-
|
3302
|
-
|
3303
|
-
|
3304
|
-
|
3305
|
-
|
3306
|
-
|
3307
|
-
|
3308
|
-
value));
|
3309
|
-
}
|
3310
|
-
|
3311
|
-
|
3312
|
-
bool SharedFunctionInfo::es5_native() {
|
3313
|
-
return BooleanBit::get(compiler_hints(), kES5Native);
|
3314
|
-
}
|
3315
|
-
|
3316
|
-
|
3317
|
-
void SharedFunctionInfo::set_es5_native(bool value) {
|
3318
|
-
set_compiler_hints(BooleanBit::set(compiler_hints(),
|
3319
|
-
kES5Native,
|
3320
|
-
value));
|
3321
|
-
}
|
3322
|
-
|
3610
|
+
BOOL_ACCESSORS(SharedFunctionInfo, compiler_hints, strict_mode,
|
3611
|
+
kStrictModeFunction)
|
3612
|
+
BOOL_ACCESSORS(SharedFunctionInfo, compiler_hints, native, kNative)
|
3613
|
+
BOOL_ACCESSORS(SharedFunctionInfo, compiler_hints,
|
3614
|
+
name_should_print_as_anonymous,
|
3615
|
+
kNameShouldPrintAsAnonymous)
|
3616
|
+
BOOL_ACCESSORS(SharedFunctionInfo, compiler_hints, bound, kBoundFunction)
|
3617
|
+
BOOL_ACCESSORS(SharedFunctionInfo, compiler_hints, is_anonymous, kIsAnonymous)
|
3323
3618
|
|
3324
3619
|
ACCESSORS(CodeCache, default_cache, FixedArray, kDefaultCacheOffset)
|
3325
3620
|
ACCESSORS(CodeCache, normal_type_cache, Object, kNormalTypeCacheOffset)
|
3326
3621
|
|
3622
|
+
ACCESSORS(PolymorphicCodeCache, cache, Object, kCacheOffset)
|
3623
|
+
|
3327
3624
|
bool Script::HasValidSource() {
|
3328
3625
|
Object* src = this->source();
|
3329
3626
|
if (!src->IsString()) return true;
|
@@ -3613,6 +3910,16 @@ void JSBuiltinsObject::set_javascript_builtin_code(Builtins::JavaScript id,
|
|
3613
3910
|
|
3614
3911
|
|
3615
3912
|
ACCESSORS(JSProxy, handler, Object, kHandlerOffset)
|
3913
|
+
ACCESSORS(JSProxy, padding, Object, kPaddingOffset)
|
3914
|
+
|
3915
|
+
|
3916
|
+
ACCESSORS(JSWeakMap, table, ObjectHashTable, kTableOffset)
|
3917
|
+
ACCESSORS_GCSAFE(JSWeakMap, next, Object, kNextOffset)
|
3918
|
+
|
3919
|
+
|
3920
|
+
ObjectHashTable* JSWeakMap::unchecked_table() {
|
3921
|
+
return reinterpret_cast<ObjectHashTable*>(READ_FIELD(this, kTableOffset));
|
3922
|
+
}
|
3616
3923
|
|
3617
3924
|
|
3618
3925
|
Address Foreign::address() {
|
@@ -3719,6 +4026,12 @@ JSRegExp::Type JSRegExp::TypeTag() {
|
|
3719
4026
|
}
|
3720
4027
|
|
3721
4028
|
|
4029
|
+
JSRegExp::Type JSRegExp::TypeTagUnchecked() {
|
4030
|
+
Smi* smi = Smi::cast(DataAtUnchecked(kTagIndex));
|
4031
|
+
return static_cast<JSRegExp::Type>(smi->value());
|
4032
|
+
}
|
4033
|
+
|
4034
|
+
|
3722
4035
|
int JSRegExp::CaptureCount() {
|
3723
4036
|
switch (TypeTag()) {
|
3724
4037
|
case ATOM:
|
@@ -3754,6 +4067,13 @@ Object* JSRegExp::DataAt(int index) {
|
|
3754
4067
|
}
|
3755
4068
|
|
3756
4069
|
|
4070
|
+
Object* JSRegExp::DataAtUnchecked(int index) {
|
4071
|
+
FixedArray* fa = reinterpret_cast<FixedArray*>(data());
|
4072
|
+
int offset = FixedArray::kHeaderSize + index * kPointerSize;
|
4073
|
+
return READ_FIELD(fa, offset);
|
4074
|
+
}
|
4075
|
+
|
4076
|
+
|
3757
4077
|
void JSRegExp::SetDataAt(int index, Object* value) {
|
3758
4078
|
ASSERT(TypeTag() != NOT_COMPILED);
|
3759
4079
|
ASSERT(index >= kDataIndex); // Only implementation data can be set this way.
|
@@ -3761,46 +4081,34 @@ void JSRegExp::SetDataAt(int index, Object* value) {
|
|
3761
4081
|
}
|
3762
4082
|
|
3763
4083
|
|
3764
|
-
|
3765
|
-
|
3766
|
-
|
3767
|
-
|
3768
|
-
|
3769
|
-
}
|
3770
|
-
|
3771
|
-
if (array->IsFixedArray()) {
|
3772
|
-
// FAST_ELEMENTS or DICTIONARY_ELEMENTS are both stored in a
|
3773
|
-
// FixedArray, but FAST_ELEMENTS is already handled above.
|
3774
|
-
ASSERT(array->IsDictionary());
|
3775
|
-
return DICTIONARY_ELEMENTS;
|
3776
|
-
}
|
3777
|
-
ASSERT(!map()->has_fast_elements());
|
3778
|
-
if (array->IsExternalArray()) {
|
3779
|
-
switch (array->map()->instance_type()) {
|
3780
|
-
case EXTERNAL_BYTE_ARRAY_TYPE:
|
3781
|
-
return EXTERNAL_BYTE_ELEMENTS;
|
3782
|
-
case EXTERNAL_UNSIGNED_BYTE_ARRAY_TYPE:
|
3783
|
-
return EXTERNAL_UNSIGNED_BYTE_ELEMENTS;
|
3784
|
-
case EXTERNAL_SHORT_ARRAY_TYPE:
|
3785
|
-
return EXTERNAL_SHORT_ELEMENTS;
|
3786
|
-
case EXTERNAL_UNSIGNED_SHORT_ARRAY_TYPE:
|
3787
|
-
return EXTERNAL_UNSIGNED_SHORT_ELEMENTS;
|
3788
|
-
case EXTERNAL_INT_ARRAY_TYPE:
|
3789
|
-
return EXTERNAL_INT_ELEMENTS;
|
3790
|
-
case EXTERNAL_UNSIGNED_INT_ARRAY_TYPE:
|
3791
|
-
return EXTERNAL_UNSIGNED_INT_ELEMENTS;
|
3792
|
-
case EXTERNAL_FLOAT_ARRAY_TYPE:
|
3793
|
-
return EXTERNAL_FLOAT_ELEMENTS;
|
3794
|
-
case EXTERNAL_DOUBLE_ARRAY_TYPE:
|
3795
|
-
return EXTERNAL_DOUBLE_ELEMENTS;
|
3796
|
-
case EXTERNAL_PIXEL_ARRAY_TYPE:
|
3797
|
-
return EXTERNAL_PIXEL_ELEMENTS;
|
3798
|
-
default:
|
3799
|
-
break;
|
3800
|
-
}
|
4084
|
+
void JSRegExp::SetDataAtUnchecked(int index, Object* value, Heap* heap) {
|
4085
|
+
ASSERT(index >= kDataIndex); // Only implementation data can be set this way.
|
4086
|
+
FixedArray* fa = reinterpret_cast<FixedArray*>(data());
|
4087
|
+
if (value->IsSmi()) {
|
4088
|
+
fa->set_unchecked(index, Smi::cast(value));
|
4089
|
+
} else {
|
4090
|
+
fa->set_unchecked(heap, index, value, SKIP_WRITE_BARRIER);
|
3801
4091
|
}
|
3802
|
-
|
3803
|
-
|
4092
|
+
}
|
4093
|
+
|
4094
|
+
|
4095
|
+
JSObject::ElementsKind JSObject::GetElementsKind() {
|
4096
|
+
ElementsKind kind = map()->elements_kind();
|
4097
|
+
ASSERT((kind == FAST_ELEMENTS &&
|
4098
|
+
(elements()->map() == GetHeap()->fixed_array_map() ||
|
4099
|
+
elements()->map() == GetHeap()->fixed_cow_array_map())) ||
|
4100
|
+
(kind == FAST_DOUBLE_ELEMENTS &&
|
4101
|
+
elements()->IsFixedDoubleArray()) ||
|
4102
|
+
(kind == DICTIONARY_ELEMENTS &&
|
4103
|
+
elements()->IsFixedArray() &&
|
4104
|
+
elements()->IsDictionary()) ||
|
4105
|
+
(kind > DICTIONARY_ELEMENTS));
|
4106
|
+
return kind;
|
4107
|
+
}
|
4108
|
+
|
4109
|
+
|
4110
|
+
ElementsAccessor* JSObject::GetElementsAccessor() {
|
4111
|
+
return ElementsAccessor::ForKind(GetElementsKind());
|
3804
4112
|
}
|
3805
4113
|
|
3806
4114
|
|
@@ -3809,6 +4117,11 @@ bool JSObject::HasFastElements() {
|
|
3809
4117
|
}
|
3810
4118
|
|
3811
4119
|
|
4120
|
+
bool JSObject::HasFastDoubleElements() {
|
4121
|
+
return GetElementsKind() == FAST_DOUBLE_ELEMENTS;
|
4122
|
+
}
|
4123
|
+
|
4124
|
+
|
3812
4125
|
bool JSObject::HasDictionaryElements() {
|
3813
4126
|
return GetElementsKind() == DICTIONARY_ELEMENTS;
|
3814
4127
|
}
|
@@ -3857,7 +4170,8 @@ bool JSObject::HasIndexedInterceptor() {
|
|
3857
4170
|
|
3858
4171
|
|
3859
4172
|
bool JSObject::AllowsSetElementsLength() {
|
3860
|
-
bool result = elements()->IsFixedArray()
|
4173
|
+
bool result = elements()->IsFixedArray() ||
|
4174
|
+
elements()->IsFixedDoubleArray();
|
3861
4175
|
ASSERT(result == !HasExternalArrayElements());
|
3862
4176
|
return result;
|
3863
4177
|
}
|
@@ -4002,12 +4316,28 @@ bool String::AsArrayIndex(uint32_t* index) {
|
|
4002
4316
|
}
|
4003
4317
|
|
4004
4318
|
|
4005
|
-
Object*
|
4006
|
-
return
|
4319
|
+
Object* JSReceiver::GetPrototype() {
|
4320
|
+
return HeapObject::cast(this)->map()->prototype();
|
4007
4321
|
}
|
4008
4322
|
|
4009
4323
|
|
4010
|
-
|
4324
|
+
bool JSReceiver::HasProperty(String* name) {
|
4325
|
+
if (IsJSProxy()) {
|
4326
|
+
return JSProxy::cast(this)->HasPropertyWithHandler(name);
|
4327
|
+
}
|
4328
|
+
return GetPropertyAttribute(name) != ABSENT;
|
4329
|
+
}
|
4330
|
+
|
4331
|
+
|
4332
|
+
bool JSReceiver::HasLocalProperty(String* name) {
|
4333
|
+
if (IsJSProxy()) {
|
4334
|
+
return JSProxy::cast(this)->HasPropertyWithHandler(name);
|
4335
|
+
}
|
4336
|
+
return GetLocalPropertyAttribute(name) != ABSENT;
|
4337
|
+
}
|
4338
|
+
|
4339
|
+
|
4340
|
+
PropertyAttributes JSReceiver::GetPropertyAttribute(String* key) {
|
4011
4341
|
return GetPropertyAttributeWithReceiver(this, key);
|
4012
4342
|
}
|
4013
4343
|
|
@@ -4055,6 +4385,11 @@ MaybeObject* JSObject::SetHiddenPropertiesObject(Object* hidden_obj) {
|
|
4055
4385
|
}
|
4056
4386
|
|
4057
4387
|
|
4388
|
+
bool JSObject::HasHiddenProperties() {
|
4389
|
+
return !GetHiddenProperties(OMIT_CREATION)->ToObjectChecked()->IsUndefined();
|
4390
|
+
}
|
4391
|
+
|
4392
|
+
|
4058
4393
|
bool JSObject::HasElement(uint32_t index) {
|
4059
4394
|
return HasElementWithReceiver(this, index);
|
4060
4395
|
}
|
@@ -4170,6 +4505,36 @@ MaybeObject* StringDictionaryShape::AsObject(String* key) {
|
|
4170
4505
|
}
|
4171
4506
|
|
4172
4507
|
|
4508
|
+
bool ObjectHashTableShape::IsMatch(JSObject* key, Object* other) {
|
4509
|
+
return key == JSObject::cast(other);
|
4510
|
+
}
|
4511
|
+
|
4512
|
+
|
4513
|
+
uint32_t ObjectHashTableShape::Hash(JSObject* key) {
|
4514
|
+
MaybeObject* maybe_hash = key->GetIdentityHash(JSObject::OMIT_CREATION);
|
4515
|
+
ASSERT(!maybe_hash->IsFailure());
|
4516
|
+
return Smi::cast(maybe_hash->ToObjectUnchecked())->value();
|
4517
|
+
}
|
4518
|
+
|
4519
|
+
|
4520
|
+
uint32_t ObjectHashTableShape::HashForObject(JSObject* key, Object* other) {
|
4521
|
+
MaybeObject* maybe_hash = JSObject::cast(other)->GetIdentityHash(
|
4522
|
+
JSObject::OMIT_CREATION);
|
4523
|
+
ASSERT(!maybe_hash->IsFailure());
|
4524
|
+
return Smi::cast(maybe_hash->ToObjectUnchecked())->value();
|
4525
|
+
}
|
4526
|
+
|
4527
|
+
|
4528
|
+
MaybeObject* ObjectHashTableShape::AsObject(JSObject* key) {
|
4529
|
+
return key;
|
4530
|
+
}
|
4531
|
+
|
4532
|
+
|
4533
|
+
void ObjectHashTable::RemoveEntry(int entry) {
|
4534
|
+
RemoveEntry(entry, GetHeap());
|
4535
|
+
}
|
4536
|
+
|
4537
|
+
|
4173
4538
|
void Map::ClearCodeCache(Heap* heap) {
|
4174
4539
|
// No write barrier is needed since empty_fixed_array is not in new space.
|
4175
4540
|
// Please note this function is used during marking:
|