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/objects.h
CHANGED
|
@@ -48,41 +48,48 @@
|
|
|
48
48
|
// - Object
|
|
49
49
|
// - Smi (immediate small integer)
|
|
50
50
|
// - HeapObject (superclass for everything allocated in the heap)
|
|
51
|
-
// -
|
|
52
|
-
// -
|
|
53
|
-
//
|
|
54
|
-
//
|
|
55
|
-
//
|
|
56
|
-
// -
|
|
57
|
-
// -
|
|
58
|
-
//
|
|
59
|
-
//
|
|
60
|
-
//
|
|
61
|
-
//
|
|
62
|
-
//
|
|
63
|
-
// -
|
|
64
|
-
//
|
|
65
|
-
//
|
|
66
|
-
// -
|
|
67
|
-
// -
|
|
68
|
-
//
|
|
69
|
-
//
|
|
70
|
-
//
|
|
71
|
-
//
|
|
72
|
-
//
|
|
73
|
-
//
|
|
74
|
-
//
|
|
75
|
-
// -
|
|
76
|
-
// -
|
|
77
|
-
// -
|
|
78
|
-
//
|
|
79
|
-
// -
|
|
80
|
-
//
|
|
81
|
-
//
|
|
51
|
+
// - JSReceiver (suitable for property access)
|
|
52
|
+
// - JSObject
|
|
53
|
+
// - JSArray
|
|
54
|
+
// - JSWeakMap
|
|
55
|
+
// - JSRegExp
|
|
56
|
+
// - JSFunction
|
|
57
|
+
// - GlobalObject
|
|
58
|
+
// - JSGlobalObject
|
|
59
|
+
// - JSBuiltinsObject
|
|
60
|
+
// - JSGlobalProxy
|
|
61
|
+
// - JSValue
|
|
62
|
+
// - JSMessageObject
|
|
63
|
+
// - JSProxy
|
|
64
|
+
// - JSFunctionProxy
|
|
65
|
+
// - FixedArrayBase
|
|
66
|
+
// - ByteArray
|
|
67
|
+
// - FixedArray
|
|
68
|
+
// - DescriptorArray
|
|
69
|
+
// - HashTable
|
|
70
|
+
// - Dictionary
|
|
71
|
+
// - SymbolTable
|
|
72
|
+
// - CompilationCacheTable
|
|
73
|
+
// - CodeCacheHashTable
|
|
74
|
+
// - MapCache
|
|
75
|
+
// - Context
|
|
76
|
+
// - JSFunctionResultCache
|
|
77
|
+
// - SerializedScopeInfo
|
|
78
|
+
// - FixedDoubleArray
|
|
79
|
+
// - ExternalArray
|
|
80
|
+
// - ExternalPixelArray
|
|
81
|
+
// - ExternalByteArray
|
|
82
|
+
// - ExternalUnsignedByteArray
|
|
83
|
+
// - ExternalShortArray
|
|
84
|
+
// - ExternalUnsignedShortArray
|
|
85
|
+
// - ExternalIntArray
|
|
86
|
+
// - ExternalUnsignedIntArray
|
|
87
|
+
// - ExternalFloatArray
|
|
82
88
|
// - String
|
|
83
89
|
// - SeqString
|
|
84
90
|
// - SeqAsciiString
|
|
85
91
|
// - SeqTwoByteString
|
|
92
|
+
// - SlicedString
|
|
86
93
|
// - ConsString
|
|
87
94
|
// - ExternalString
|
|
88
95
|
// - ExternalAsciiString
|
|
@@ -91,7 +98,6 @@
|
|
|
91
98
|
// - Code
|
|
92
99
|
// - Map
|
|
93
100
|
// - Oddball
|
|
94
|
-
// - JSProxy
|
|
95
101
|
// - Foreign
|
|
96
102
|
// - SharedFunctionInfo
|
|
97
103
|
// - Struct
|
|
@@ -134,7 +140,6 @@ namespace internal {
|
|
|
134
140
|
// They are used both in property dictionaries and instance descriptors.
|
|
135
141
|
class PropertyDetails BASE_EMBEDDED {
|
|
136
142
|
public:
|
|
137
|
-
|
|
138
143
|
PropertyDetails(PropertyAttributes attributes,
|
|
139
144
|
PropertyType type,
|
|
140
145
|
int index = 0) {
|
|
@@ -214,6 +219,7 @@ class PropertyDetails BASE_EMBEDDED {
|
|
|
214
219
|
class StorageField: public BitField<uint32_t, 8, 32-8> {};
|
|
215
220
|
|
|
216
221
|
static const int kInitialIndex = 1;
|
|
222
|
+
|
|
217
223
|
private:
|
|
218
224
|
uint32_t value_;
|
|
219
225
|
};
|
|
@@ -278,6 +284,7 @@ static const int kVariableSizeSentinel = 0;
|
|
|
278
284
|
V(ASCII_STRING_TYPE) \
|
|
279
285
|
V(CONS_STRING_TYPE) \
|
|
280
286
|
V(CONS_ASCII_STRING_TYPE) \
|
|
287
|
+
V(SLICED_STRING_TYPE) \
|
|
281
288
|
V(EXTERNAL_STRING_TYPE) \
|
|
282
289
|
V(EXTERNAL_STRING_WITH_ASCII_DATA_TYPE) \
|
|
283
290
|
V(EXTERNAL_ASCII_STRING_TYPE) \
|
|
@@ -289,7 +296,6 @@ static const int kVariableSizeSentinel = 0;
|
|
|
289
296
|
V(JS_GLOBAL_PROPERTY_CELL_TYPE) \
|
|
290
297
|
\
|
|
291
298
|
V(HEAP_NUMBER_TYPE) \
|
|
292
|
-
V(JS_PROXY_TYPE) \
|
|
293
299
|
V(FOREIGN_TYPE) \
|
|
294
300
|
V(BYTE_ARRAY_TYPE) \
|
|
295
301
|
/* Note: the order of these external array */ \
|
|
@@ -315,8 +321,10 @@ static const int kVariableSizeSentinel = 0;
|
|
|
315
321
|
V(TYPE_SWITCH_INFO_TYPE) \
|
|
316
322
|
V(SCRIPT_TYPE) \
|
|
317
323
|
V(CODE_CACHE_TYPE) \
|
|
324
|
+
V(POLYMORPHIC_CODE_CACHE_TYPE) \
|
|
318
325
|
\
|
|
319
326
|
V(FIXED_ARRAY_TYPE) \
|
|
327
|
+
V(FIXED_DOUBLE_ARRAY_TYPE) \
|
|
320
328
|
V(SHARED_FUNCTION_INFO_TYPE) \
|
|
321
329
|
\
|
|
322
330
|
V(JS_MESSAGE_OBJECT_TYPE) \
|
|
@@ -328,9 +336,12 @@ static const int kVariableSizeSentinel = 0;
|
|
|
328
336
|
V(JS_BUILTINS_OBJECT_TYPE) \
|
|
329
337
|
V(JS_GLOBAL_PROXY_TYPE) \
|
|
330
338
|
V(JS_ARRAY_TYPE) \
|
|
339
|
+
V(JS_PROXY_TYPE) \
|
|
340
|
+
V(JS_WEAK_MAP_TYPE) \
|
|
331
341
|
V(JS_REGEXP_TYPE) \
|
|
332
342
|
\
|
|
333
343
|
V(JS_FUNCTION_TYPE) \
|
|
344
|
+
V(JS_FUNCTION_PROXY_TYPE) \
|
|
334
345
|
|
|
335
346
|
#ifdef ENABLE_DEBUGGER_SUPPORT
|
|
336
347
|
#define INSTANCE_TYPE_LIST_DEBUGGER(V) \
|
|
@@ -392,6 +403,14 @@ static const int kVariableSizeSentinel = 0;
|
|
|
392
403
|
ConsString::kSize, \
|
|
393
404
|
cons_ascii_string, \
|
|
394
405
|
ConsAsciiString) \
|
|
406
|
+
V(SLICED_STRING_TYPE, \
|
|
407
|
+
SlicedString::kSize, \
|
|
408
|
+
sliced_string, \
|
|
409
|
+
SlicedString) \
|
|
410
|
+
V(SLICED_ASCII_STRING_TYPE, \
|
|
411
|
+
SlicedString::kSize, \
|
|
412
|
+
sliced_ascii_string, \
|
|
413
|
+
SlicedAsciiString) \
|
|
395
414
|
V(EXTERNAL_STRING_TYPE, \
|
|
396
415
|
ExternalTwoByteString::kSize, \
|
|
397
416
|
external_string, \
|
|
@@ -424,7 +443,8 @@ static const int kVariableSizeSentinel = 0;
|
|
|
424
443
|
V(SIGNATURE_INFO, SignatureInfo, signature_info) \
|
|
425
444
|
V(TYPE_SWITCH_INFO, TypeSwitchInfo, type_switch_info) \
|
|
426
445
|
V(SCRIPT, Script, script) \
|
|
427
|
-
V(CODE_CACHE, CodeCache, code_cache)
|
|
446
|
+
V(CODE_CACHE, CodeCache, code_cache) \
|
|
447
|
+
V(POLYMORPHIC_CODE_CACHE, PolymorphicCodeCache, polymorphic_code_cache)
|
|
428
448
|
|
|
429
449
|
#ifdef ENABLE_DEBUGGER_SUPPORT
|
|
430
450
|
#define STRUCT_LIST_DEBUGGER(V) \
|
|
@@ -464,9 +484,22 @@ const uint32_t kStringRepresentationMask = 0x03;
|
|
|
464
484
|
enum StringRepresentationTag {
|
|
465
485
|
kSeqStringTag = 0x0,
|
|
466
486
|
kConsStringTag = 0x1,
|
|
467
|
-
kExternalStringTag = 0x2
|
|
487
|
+
kExternalStringTag = 0x2,
|
|
488
|
+
kSlicedStringTag = 0x3
|
|
468
489
|
};
|
|
469
|
-
const uint32_t
|
|
490
|
+
const uint32_t kIsIndirectStringMask = 0x1;
|
|
491
|
+
const uint32_t kIsIndirectStringTag = 0x1;
|
|
492
|
+
STATIC_ASSERT((kSeqStringTag & kIsIndirectStringMask) == 0);
|
|
493
|
+
STATIC_ASSERT((kExternalStringTag & kIsIndirectStringMask) == 0);
|
|
494
|
+
STATIC_ASSERT(
|
|
495
|
+
(kConsStringTag & kIsIndirectStringMask) == kIsIndirectStringTag);
|
|
496
|
+
STATIC_ASSERT(
|
|
497
|
+
(kSlicedStringTag & kIsIndirectStringMask) == kIsIndirectStringTag);
|
|
498
|
+
|
|
499
|
+
// Use this mask to distinguish between cons and slice only after making
|
|
500
|
+
// sure that the string is one of the two (an indirect string).
|
|
501
|
+
const uint32_t kSlicedNotConsMask = kSlicedStringTag & ~kConsStringTag;
|
|
502
|
+
STATIC_ASSERT(IS_POWER_OF_TWO(kSlicedNotConsMask) && kSlicedNotConsMask != 0);
|
|
470
503
|
|
|
471
504
|
// If bit 7 is clear, then bit 3 indicates whether this two-byte
|
|
472
505
|
// string actually contains ascii data.
|
|
@@ -501,6 +534,8 @@ enum InstanceType {
|
|
|
501
534
|
ASCII_STRING_TYPE = kAsciiStringTag | kSeqStringTag,
|
|
502
535
|
CONS_STRING_TYPE = kTwoByteStringTag | kConsStringTag,
|
|
503
536
|
CONS_ASCII_STRING_TYPE = kAsciiStringTag | kConsStringTag,
|
|
537
|
+
SLICED_STRING_TYPE = kTwoByteStringTag | kSlicedStringTag,
|
|
538
|
+
SLICED_ASCII_STRING_TYPE = kAsciiStringTag | kSlicedStringTag,
|
|
504
539
|
EXTERNAL_STRING_TYPE = kTwoByteStringTag | kExternalStringTag,
|
|
505
540
|
EXTERNAL_STRING_WITH_ASCII_DATA_TYPE =
|
|
506
541
|
kTwoByteStringTag | kExternalStringTag | kAsciiDataHintTag,
|
|
@@ -518,7 +553,6 @@ enum InstanceType {
|
|
|
518
553
|
// objects.
|
|
519
554
|
HEAP_NUMBER_TYPE,
|
|
520
555
|
FOREIGN_TYPE,
|
|
521
|
-
JS_PROXY_TYPE,
|
|
522
556
|
BYTE_ARRAY_TYPE,
|
|
523
557
|
EXTERNAL_BYTE_ARRAY_TYPE, // FIRST_EXTERNAL_ARRAY_TYPE
|
|
524
558
|
EXTERNAL_UNSIGNED_BYTE_ARRAY_TYPE,
|
|
@@ -529,6 +563,7 @@ enum InstanceType {
|
|
|
529
563
|
EXTERNAL_FLOAT_ARRAY_TYPE,
|
|
530
564
|
EXTERNAL_DOUBLE_ARRAY_TYPE,
|
|
531
565
|
EXTERNAL_PIXEL_ARRAY_TYPE, // LAST_EXTERNAL_ARRAY_TYPE
|
|
566
|
+
FIXED_DOUBLE_ARRAY_TYPE,
|
|
532
567
|
FILLER_TYPE, // LAST_DATA_TYPE
|
|
533
568
|
|
|
534
569
|
// Structs.
|
|
@@ -542,6 +577,7 @@ enum InstanceType {
|
|
|
542
577
|
TYPE_SWITCH_INFO_TYPE,
|
|
543
578
|
SCRIPT_TYPE,
|
|
544
579
|
CODE_CACHE_TYPE,
|
|
580
|
+
POLYMORPHIC_CODE_CACHE_TYPE,
|
|
545
581
|
// The following two instance types are only used when ENABLE_DEBUGGER_SUPPORT
|
|
546
582
|
// is defined. However as include/v8.h contain some of the instance type
|
|
547
583
|
// constants always having them avoids them getting different numbers
|
|
@@ -554,21 +590,24 @@ enum InstanceType {
|
|
|
554
590
|
|
|
555
591
|
JS_MESSAGE_OBJECT_TYPE,
|
|
556
592
|
|
|
557
|
-
JS_VALUE_TYPE, //
|
|
593
|
+
JS_VALUE_TYPE, // FIRST_NON_CALLABLE_OBJECT_TYPE, FIRST_JS_RECEIVER_TYPE
|
|
558
594
|
JS_OBJECT_TYPE,
|
|
559
595
|
JS_CONTEXT_EXTENSION_OBJECT_TYPE,
|
|
560
596
|
JS_GLOBAL_OBJECT_TYPE,
|
|
561
597
|
JS_BUILTINS_OBJECT_TYPE,
|
|
562
598
|
JS_GLOBAL_PROXY_TYPE,
|
|
563
599
|
JS_ARRAY_TYPE,
|
|
600
|
+
JS_PROXY_TYPE,
|
|
601
|
+
JS_WEAK_MAP_TYPE,
|
|
564
602
|
|
|
565
|
-
JS_REGEXP_TYPE, //
|
|
603
|
+
JS_REGEXP_TYPE, // LAST_NONCALLABLE_SPEC_OBJECT_TYPE
|
|
566
604
|
|
|
567
|
-
JS_FUNCTION_TYPE,
|
|
605
|
+
JS_FUNCTION_TYPE, // FIRST_CALLABLE_SPEC_OBJECT_TYPE
|
|
606
|
+
JS_FUNCTION_PROXY_TYPE, // LAST_CALLABLE_SPEC_OBJECT_TYPE
|
|
568
607
|
|
|
569
608
|
// Pseudo-types
|
|
570
609
|
FIRST_TYPE = 0x0,
|
|
571
|
-
LAST_TYPE =
|
|
610
|
+
LAST_TYPE = JS_FUNCTION_PROXY_TYPE,
|
|
572
611
|
INVALID_TYPE = FIRST_TYPE - 1,
|
|
573
612
|
FIRST_NONSTRING_TYPE = MAP_TYPE,
|
|
574
613
|
// Boundaries for testing for an external array.
|
|
@@ -576,14 +615,22 @@ enum InstanceType {
|
|
|
576
615
|
LAST_EXTERNAL_ARRAY_TYPE = EXTERNAL_PIXEL_ARRAY_TYPE,
|
|
577
616
|
// Boundary for promotion to old data space/old pointer space.
|
|
578
617
|
LAST_DATA_TYPE = FILLER_TYPE,
|
|
579
|
-
//
|
|
580
|
-
//
|
|
581
|
-
//
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
618
|
+
// Boundary for objects represented as JSReceiver (i.e. JSObject or JSProxy).
|
|
619
|
+
// Note that there is no range for JSObject or JSProxy, since their subtypes
|
|
620
|
+
// are not continuous in this enum! The enum ranges instead reflect the
|
|
621
|
+
// external class names, where proxies are treated as either ordinary objects,
|
|
622
|
+
// or functions.
|
|
623
|
+
FIRST_JS_RECEIVER_TYPE = JS_VALUE_TYPE,
|
|
624
|
+
LAST_JS_RECEIVER_TYPE = LAST_TYPE,
|
|
625
|
+
// Boundaries for testing the types for which typeof is "object".
|
|
626
|
+
FIRST_NONCALLABLE_SPEC_OBJECT_TYPE = JS_VALUE_TYPE,
|
|
627
|
+
LAST_NONCALLABLE_SPEC_OBJECT_TYPE = JS_REGEXP_TYPE,
|
|
628
|
+
// Boundaries for testing the types for which typeof is "function".
|
|
629
|
+
FIRST_CALLABLE_SPEC_OBJECT_TYPE = JS_FUNCTION_TYPE,
|
|
630
|
+
LAST_CALLABLE_SPEC_OBJECT_TYPE = JS_FUNCTION_PROXY_TYPE,
|
|
631
|
+
// Boundaries for testing whether the type is a JavaScript object.
|
|
632
|
+
FIRST_SPEC_OBJECT_TYPE = FIRST_NONCALLABLE_SPEC_OBJECT_TYPE,
|
|
633
|
+
LAST_SPEC_OBJECT_TYPE = LAST_CALLABLE_SPEC_OBJECT_TYPE
|
|
587
634
|
};
|
|
588
635
|
|
|
589
636
|
static const int kExternalArrayTypeCount = LAST_EXTERNAL_ARRAY_TYPE -
|
|
@@ -614,8 +661,11 @@ enum CompareResult {
|
|
|
614
661
|
WriteBarrierMode mode = UPDATE_WRITE_BARRIER); \
|
|
615
662
|
|
|
616
663
|
|
|
617
|
-
class
|
|
664
|
+
class DictionaryElementsAccessor;
|
|
665
|
+
class ElementsAccessor;
|
|
666
|
+
class FixedArrayBase;
|
|
618
667
|
class ObjectVisitor;
|
|
668
|
+
class StringStream;
|
|
619
669
|
|
|
620
670
|
struct ValueInfo : public Malloced {
|
|
621
671
|
ValueInfo() : type(FIRST_TYPE), ptr(NULL), str(NULL), number(0) { }
|
|
@@ -693,6 +743,7 @@ class MaybeObject BASE_EMBEDDED {
|
|
|
693
743
|
V(SeqString) \
|
|
694
744
|
V(ExternalString) \
|
|
695
745
|
V(ConsString) \
|
|
746
|
+
V(SlicedString) \
|
|
696
747
|
V(ExternalTwoByteString) \
|
|
697
748
|
V(ExternalAsciiString) \
|
|
698
749
|
V(SeqTwoByteString) \
|
|
@@ -709,6 +760,7 @@ class MaybeObject BASE_EMBEDDED {
|
|
|
709
760
|
V(ExternalDoubleArray) \
|
|
710
761
|
V(ExternalPixelArray) \
|
|
711
762
|
V(ByteArray) \
|
|
763
|
+
V(JSReceiver) \
|
|
712
764
|
V(JSObject) \
|
|
713
765
|
V(JSContextExtensionObject) \
|
|
714
766
|
V(Map) \
|
|
@@ -716,9 +768,10 @@ class MaybeObject BASE_EMBEDDED {
|
|
|
716
768
|
V(DeoptimizationInputData) \
|
|
717
769
|
V(DeoptimizationOutputData) \
|
|
718
770
|
V(FixedArray) \
|
|
771
|
+
V(FixedDoubleArray) \
|
|
719
772
|
V(Context) \
|
|
720
|
-
V(CatchContext) \
|
|
721
773
|
V(GlobalContext) \
|
|
774
|
+
V(SerializedScopeInfo) \
|
|
722
775
|
V(JSFunction) \
|
|
723
776
|
V(Code) \
|
|
724
777
|
V(Oddball) \
|
|
@@ -730,6 +783,8 @@ class MaybeObject BASE_EMBEDDED {
|
|
|
730
783
|
V(Boolean) \
|
|
731
784
|
V(JSArray) \
|
|
732
785
|
V(JSProxy) \
|
|
786
|
+
V(JSFunctionProxy) \
|
|
787
|
+
V(JSWeakMap) \
|
|
733
788
|
V(JSRegExp) \
|
|
734
789
|
V(HashTable) \
|
|
735
790
|
V(Dictionary) \
|
|
@@ -738,6 +793,7 @@ class MaybeObject BASE_EMBEDDED {
|
|
|
738
793
|
V(NormalizedMapCache) \
|
|
739
794
|
V(CompilationCacheTable) \
|
|
740
795
|
V(CodeCacheHashTable) \
|
|
796
|
+
V(PolymorphicCodeCacheHashTable) \
|
|
741
797
|
V(MapCache) \
|
|
742
798
|
V(Primitive) \
|
|
743
799
|
V(GlobalObject) \
|
|
@@ -771,6 +827,8 @@ class Object : public MaybeObject {
|
|
|
771
827
|
STRUCT_LIST(DECLARE_STRUCT_PREDICATE)
|
|
772
828
|
#undef DECLARE_STRUCT_PREDICATE
|
|
773
829
|
|
|
830
|
+
INLINE(bool IsSpecObject());
|
|
831
|
+
|
|
774
832
|
// Oddball testing.
|
|
775
833
|
INLINE(bool IsUndefined());
|
|
776
834
|
INLINE(bool IsNull());
|
|
@@ -782,6 +840,10 @@ class Object : public MaybeObject {
|
|
|
782
840
|
// Extract the number.
|
|
783
841
|
inline double Number();
|
|
784
842
|
|
|
843
|
+
// Returns true if the object is of the correct type to be used as a
|
|
844
|
+
// implementation of a JSObject's elements.
|
|
845
|
+
inline bool HasValidElements();
|
|
846
|
+
|
|
785
847
|
inline bool HasSpecificClassOf(String* name);
|
|
786
848
|
|
|
787
849
|
MUST_USE_RESULT MaybeObject* ToObject(); // ECMA-262 9.9.
|
|
@@ -1332,11 +1394,9 @@ class HeapNumber: public HeapObject {
|
|
|
1332
1394
|
};
|
|
1333
1395
|
|
|
1334
1396
|
|
|
1335
|
-
//
|
|
1336
|
-
//
|
|
1337
|
-
|
|
1338
|
-
// caching.
|
|
1339
|
-
class JSObject: public HeapObject {
|
|
1397
|
+
// JSReceiver includes types on which properties can be defined, i.e.,
|
|
1398
|
+
// JSObject and JSProxy.
|
|
1399
|
+
class JSReceiver: public HeapObject {
|
|
1340
1400
|
public:
|
|
1341
1401
|
enum DeleteMode {
|
|
1342
1402
|
NORMAL_DELETION,
|
|
@@ -1344,11 +1404,77 @@ class JSObject: public HeapObject {
|
|
|
1344
1404
|
FORCE_DELETION
|
|
1345
1405
|
};
|
|
1346
1406
|
|
|
1407
|
+
// Casting.
|
|
1408
|
+
static inline JSReceiver* cast(Object* obj);
|
|
1409
|
+
|
|
1410
|
+
// Can cause GC.
|
|
1411
|
+
MUST_USE_RESULT MaybeObject* SetProperty(String* key,
|
|
1412
|
+
Object* value,
|
|
1413
|
+
PropertyAttributes attributes,
|
|
1414
|
+
StrictModeFlag strict_mode);
|
|
1415
|
+
MUST_USE_RESULT MaybeObject* SetProperty(LookupResult* result,
|
|
1416
|
+
String* key,
|
|
1417
|
+
Object* value,
|
|
1418
|
+
PropertyAttributes attributes,
|
|
1419
|
+
StrictModeFlag strict_mode);
|
|
1420
|
+
|
|
1421
|
+
MUST_USE_RESULT MaybeObject* DeleteProperty(String* name, DeleteMode mode);
|
|
1422
|
+
|
|
1423
|
+
// Returns the class name ([[Class]] property in the specification).
|
|
1424
|
+
String* class_name();
|
|
1425
|
+
|
|
1426
|
+
// Returns the constructor name (the name (possibly, inferred name) of the
|
|
1427
|
+
// function that was used to instantiate the object).
|
|
1428
|
+
String* constructor_name();
|
|
1429
|
+
|
|
1430
|
+
inline PropertyAttributes GetPropertyAttribute(String* name);
|
|
1431
|
+
PropertyAttributes GetPropertyAttributeWithReceiver(JSReceiver* receiver,
|
|
1432
|
+
String* name);
|
|
1433
|
+
PropertyAttributes GetLocalPropertyAttribute(String* name);
|
|
1434
|
+
|
|
1435
|
+
// Can cause a GC.
|
|
1436
|
+
inline bool HasProperty(String* name);
|
|
1437
|
+
inline bool HasLocalProperty(String* name);
|
|
1438
|
+
|
|
1439
|
+
// Return the object's prototype (might be Heap::null_value()).
|
|
1440
|
+
inline Object* GetPrototype();
|
|
1441
|
+
|
|
1442
|
+
// Set the object's prototype (only JSReceiver and null are allowed).
|
|
1443
|
+
MUST_USE_RESULT MaybeObject* SetPrototype(Object* value,
|
|
1444
|
+
bool skip_hidden_prototypes);
|
|
1445
|
+
|
|
1446
|
+
// Lookup a property. If found, the result is valid and has
|
|
1447
|
+
// detailed information.
|
|
1448
|
+
void LocalLookup(String* name, LookupResult* result);
|
|
1449
|
+
void Lookup(String* name, LookupResult* result);
|
|
1450
|
+
|
|
1451
|
+
private:
|
|
1452
|
+
PropertyAttributes GetPropertyAttribute(JSReceiver* receiver,
|
|
1453
|
+
LookupResult* result,
|
|
1454
|
+
String* name,
|
|
1455
|
+
bool continue_search);
|
|
1456
|
+
|
|
1457
|
+
DISALLOW_IMPLICIT_CONSTRUCTORS(JSReceiver);
|
|
1458
|
+
};
|
|
1459
|
+
|
|
1460
|
+
// The JSObject describes real heap allocated JavaScript objects with
|
|
1461
|
+
// properties.
|
|
1462
|
+
// Note that the map of JSObject changes during execution to enable inline
|
|
1463
|
+
// caching.
|
|
1464
|
+
class JSObject: public JSReceiver {
|
|
1465
|
+
public:
|
|
1347
1466
|
enum ElementsKind {
|
|
1348
|
-
// The
|
|
1467
|
+
// The "fast" kind for tagged values. Must be first to make it possible
|
|
1468
|
+
// to efficiently check maps if they have fast elements.
|
|
1349
1469
|
FAST_ELEMENTS,
|
|
1350
|
-
|
|
1470
|
+
|
|
1471
|
+
// The "fast" kind for unwrapped, non-tagged double values.
|
|
1472
|
+
FAST_DOUBLE_ELEMENTS,
|
|
1473
|
+
|
|
1474
|
+
// The "slow" kind.
|
|
1351
1475
|
DICTIONARY_ELEMENTS,
|
|
1476
|
+
NON_STRICT_ARGUMENTS_ELEMENTS,
|
|
1477
|
+
// The "fast" kind for external arrays
|
|
1352
1478
|
EXTERNAL_BYTE_ELEMENTS,
|
|
1353
1479
|
EXTERNAL_UNSIGNED_BYTE_ELEMENTS,
|
|
1354
1480
|
EXTERNAL_SHORT_ELEMENTS,
|
|
@@ -1357,9 +1483,18 @@ class JSObject: public HeapObject {
|
|
|
1357
1483
|
EXTERNAL_UNSIGNED_INT_ELEMENTS,
|
|
1358
1484
|
EXTERNAL_FLOAT_ELEMENTS,
|
|
1359
1485
|
EXTERNAL_DOUBLE_ELEMENTS,
|
|
1360
|
-
EXTERNAL_PIXEL_ELEMENTS
|
|
1486
|
+
EXTERNAL_PIXEL_ELEMENTS,
|
|
1487
|
+
|
|
1488
|
+
// Derived constants from ElementsKind
|
|
1489
|
+
FIRST_EXTERNAL_ARRAY_ELEMENTS_KIND = EXTERNAL_BYTE_ELEMENTS,
|
|
1490
|
+
LAST_EXTERNAL_ARRAY_ELEMENTS_KIND = EXTERNAL_PIXEL_ELEMENTS,
|
|
1491
|
+
FIRST_ELEMENTS_KIND = FAST_ELEMENTS,
|
|
1492
|
+
LAST_ELEMENTS_KIND = EXTERNAL_PIXEL_ELEMENTS
|
|
1361
1493
|
};
|
|
1362
1494
|
|
|
1495
|
+
static const int kElementsKindCount =
|
|
1496
|
+
LAST_ELEMENTS_KIND - FIRST_ELEMENTS_KIND + 1;
|
|
1497
|
+
|
|
1363
1498
|
// [properties]: Backing storage for properties.
|
|
1364
1499
|
// properties is a FixedArray in the fast case and a Dictionary in the
|
|
1365
1500
|
// slow case.
|
|
@@ -1376,18 +1511,23 @@ class JSObject: public HeapObject {
|
|
|
1376
1511
|
//
|
|
1377
1512
|
// In the fast mode elements is a FixedArray and so each element can
|
|
1378
1513
|
// be quickly accessed. This fact is used in the generated code. The
|
|
1379
|
-
// elements array can have one of
|
|
1380
|
-
// fixed_array_map or
|
|
1381
|
-
// arrays). In the latter case
|
|
1382
|
-
//
|
|
1383
|
-
//
|
|
1514
|
+
// elements array can have one of three maps in this mode:
|
|
1515
|
+
// fixed_array_map, non_strict_arguments_elements_map or
|
|
1516
|
+
// fixed_cow_array_map (for copy-on-write arrays). In the latter case
|
|
1517
|
+
// the elements array may be shared by a few objects and so before
|
|
1518
|
+
// writing to any element the array must be copied. Use
|
|
1519
|
+
// EnsureWritableFastElements in this case.
|
|
1384
1520
|
//
|
|
1385
|
-
// In the slow mode elements is either a NumberDictionary
|
|
1386
|
-
|
|
1521
|
+
// In the slow mode the elements is either a NumberDictionary, an
|
|
1522
|
+
// ExternalArray, or a FixedArray parameter map for a (non-strict)
|
|
1523
|
+
// arguments object.
|
|
1524
|
+
DECL_ACCESSORS(elements, FixedArrayBase)
|
|
1387
1525
|
inline void initialize_elements();
|
|
1388
1526
|
MUST_USE_RESULT inline MaybeObject* ResetElements();
|
|
1389
1527
|
inline ElementsKind GetElementsKind();
|
|
1528
|
+
inline ElementsAccessor* GetElementsAccessor();
|
|
1390
1529
|
inline bool HasFastElements();
|
|
1530
|
+
inline bool HasFastDoubleElements();
|
|
1391
1531
|
inline bool HasDictionaryElements();
|
|
1392
1532
|
inline bool HasExternalPixelElements();
|
|
1393
1533
|
inline bool HasExternalArrayElements();
|
|
@@ -1399,9 +1539,12 @@ class JSObject: public HeapObject {
|
|
|
1399
1539
|
inline bool HasExternalUnsignedIntElements();
|
|
1400
1540
|
inline bool HasExternalFloatElements();
|
|
1401
1541
|
inline bool HasExternalDoubleElements();
|
|
1542
|
+
bool HasFastArgumentsElements();
|
|
1543
|
+
bool HasDictionaryArgumentsElements();
|
|
1402
1544
|
inline bool AllowsSetElementsLength();
|
|
1403
1545
|
inline NumberDictionary* element_dictionary(); // Gets slow elements.
|
|
1404
|
-
|
|
1546
|
+
|
|
1547
|
+
// Requires: HasFastElements().
|
|
1405
1548
|
MUST_USE_RESULT inline MaybeObject* EnsureWritableFastElements();
|
|
1406
1549
|
|
|
1407
1550
|
// Collects elements starting at index 0.
|
|
@@ -1412,11 +1555,7 @@ class JSObject: public HeapObject {
|
|
|
1412
1555
|
// a dictionary, and it will stay a dictionary.
|
|
1413
1556
|
MUST_USE_RESULT MaybeObject* PrepareSlowElementsForSort(uint32_t limit);
|
|
1414
1557
|
|
|
1415
|
-
MUST_USE_RESULT MaybeObject*
|
|
1416
|
-
Object* value,
|
|
1417
|
-
PropertyAttributes attributes,
|
|
1418
|
-
StrictModeFlag strict_mode);
|
|
1419
|
-
MUST_USE_RESULT MaybeObject* SetProperty(LookupResult* result,
|
|
1558
|
+
MUST_USE_RESULT MaybeObject* SetPropertyForResult(LookupResult* result,
|
|
1420
1559
|
String* key,
|
|
1421
1560
|
Object* value,
|
|
1422
1561
|
PropertyAttributes attributes,
|
|
@@ -1425,11 +1564,14 @@ class JSObject: public HeapObject {
|
|
|
1425
1564
|
LookupResult* result,
|
|
1426
1565
|
String* name,
|
|
1427
1566
|
Object* value,
|
|
1428
|
-
bool check_prototype
|
|
1429
|
-
|
|
1430
|
-
|
|
1431
|
-
|
|
1432
|
-
|
|
1567
|
+
bool check_prototype,
|
|
1568
|
+
StrictModeFlag strict_mode);
|
|
1569
|
+
MUST_USE_RESULT MaybeObject* SetPropertyWithCallback(
|
|
1570
|
+
Object* structure,
|
|
1571
|
+
String* name,
|
|
1572
|
+
Object* value,
|
|
1573
|
+
JSObject* holder,
|
|
1574
|
+
StrictModeFlag strict_mode);
|
|
1433
1575
|
MUST_USE_RESULT MaybeObject* SetPropertyWithDefinedSetter(JSFunction* setter,
|
|
1434
1576
|
Object* value);
|
|
1435
1577
|
MUST_USE_RESULT MaybeObject* SetPropertyWithInterceptor(
|
|
@@ -1465,21 +1607,22 @@ class JSObject: public HeapObject {
|
|
|
1465
1607
|
MUST_USE_RESULT MaybeObject* DeleteNormalizedProperty(String* name,
|
|
1466
1608
|
DeleteMode mode);
|
|
1467
1609
|
|
|
1468
|
-
// Returns the class name ([[Class]] property in the specification).
|
|
1469
|
-
String* class_name();
|
|
1470
|
-
|
|
1471
|
-
// Returns the constructor name (the name (possibly, inferred name) of the
|
|
1472
|
-
// function that was used to instantiate the object).
|
|
1473
|
-
String* constructor_name();
|
|
1474
|
-
|
|
1475
1610
|
// Retrieve interceptors.
|
|
1476
1611
|
InterceptorInfo* GetNamedInterceptor();
|
|
1477
1612
|
InterceptorInfo* GetIndexedInterceptor();
|
|
1478
1613
|
|
|
1479
|
-
|
|
1480
|
-
PropertyAttributes
|
|
1481
|
-
|
|
1482
|
-
|
|
1614
|
+
// Used from JSReceiver.
|
|
1615
|
+
PropertyAttributes GetPropertyAttributePostInterceptor(JSObject* receiver,
|
|
1616
|
+
String* name,
|
|
1617
|
+
bool continue_search);
|
|
1618
|
+
PropertyAttributes GetPropertyAttributeWithInterceptor(JSObject* receiver,
|
|
1619
|
+
String* name,
|
|
1620
|
+
bool continue_search);
|
|
1621
|
+
PropertyAttributes GetPropertyAttributeWithFailedAccessCheck(
|
|
1622
|
+
Object* receiver,
|
|
1623
|
+
LookupResult* result,
|
|
1624
|
+
String* name,
|
|
1625
|
+
bool continue_search);
|
|
1483
1626
|
|
|
1484
1627
|
MUST_USE_RESULT MaybeObject* DefineAccessor(String* name,
|
|
1485
1628
|
bool is_getter,
|
|
@@ -1496,14 +1639,14 @@ class JSObject: public HeapObject {
|
|
|
1496
1639
|
String* name,
|
|
1497
1640
|
PropertyAttributes* attributes);
|
|
1498
1641
|
MaybeObject* GetPropertyWithInterceptor(
|
|
1499
|
-
|
|
1642
|
+
JSReceiver* receiver,
|
|
1500
1643
|
String* name,
|
|
1501
1644
|
PropertyAttributes* attributes);
|
|
1502
1645
|
MaybeObject* GetPropertyPostInterceptor(
|
|
1503
|
-
|
|
1646
|
+
JSReceiver* receiver,
|
|
1504
1647
|
String* name,
|
|
1505
1648
|
PropertyAttributes* attributes);
|
|
1506
|
-
MaybeObject* GetLocalPropertyPostInterceptor(
|
|
1649
|
+
MaybeObject* GetLocalPropertyPostInterceptor(JSReceiver* receiver,
|
|
1507
1650
|
String* name,
|
|
1508
1651
|
PropertyAttributes* attributes);
|
|
1509
1652
|
|
|
@@ -1511,15 +1654,6 @@ class JSObject: public HeapObject {
|
|
|
1511
1654
|
// been modified since it was created. May give false positives.
|
|
1512
1655
|
bool IsDirty();
|
|
1513
1656
|
|
|
1514
|
-
bool HasProperty(String* name) {
|
|
1515
|
-
return GetPropertyAttribute(name) != ABSENT;
|
|
1516
|
-
}
|
|
1517
|
-
|
|
1518
|
-
// Can cause a GC if it hits an interceptor.
|
|
1519
|
-
bool HasLocalProperty(String* name) {
|
|
1520
|
-
return GetLocalPropertyAttribute(name) != ABSENT;
|
|
1521
|
-
}
|
|
1522
|
-
|
|
1523
1657
|
// If the receiver is a JSGlobalProxy this method will return its prototype,
|
|
1524
1658
|
// otherwise the result is the receiver itself.
|
|
1525
1659
|
inline Object* BypassGlobalProxy();
|
|
@@ -1542,6 +1676,23 @@ class JSObject: public HeapObject {
|
|
|
1542
1676
|
MUST_USE_RESULT inline MaybeObject* SetHiddenPropertiesObject(
|
|
1543
1677
|
Object* hidden_obj);
|
|
1544
1678
|
|
|
1679
|
+
// Indicates whether the hidden properties object should be created.
|
|
1680
|
+
enum HiddenPropertiesFlag { ALLOW_CREATION, OMIT_CREATION };
|
|
1681
|
+
|
|
1682
|
+
// Retrieves the hidden properties object.
|
|
1683
|
+
//
|
|
1684
|
+
// The undefined value might be returned in case no hidden properties object
|
|
1685
|
+
// is present and creation was omitted.
|
|
1686
|
+
inline bool HasHiddenProperties();
|
|
1687
|
+
MUST_USE_RESULT MaybeObject* GetHiddenProperties(HiddenPropertiesFlag flag);
|
|
1688
|
+
|
|
1689
|
+
// Retrieves a permanent object identity hash code.
|
|
1690
|
+
//
|
|
1691
|
+
// The identity hash is stored as a hidden property. The undefined value might
|
|
1692
|
+
// be returned in case no hidden properties object is present and creation was
|
|
1693
|
+
// omitted.
|
|
1694
|
+
MUST_USE_RESULT MaybeObject* GetIdentityHash(HiddenPropertiesFlag flag);
|
|
1695
|
+
|
|
1545
1696
|
MUST_USE_RESULT MaybeObject* DeleteProperty(String* name, DeleteMode mode);
|
|
1546
1697
|
MUST_USE_RESULT MaybeObject* DeleteElement(uint32_t index, DeleteMode mode);
|
|
1547
1698
|
|
|
@@ -1556,17 +1707,13 @@ class JSObject: public HeapObject {
|
|
|
1556
1707
|
// storage would. In that case the JSObject should have fast
|
|
1557
1708
|
// elements.
|
|
1558
1709
|
bool ShouldConvertToFastElements();
|
|
1559
|
-
|
|
1560
|
-
//
|
|
1561
|
-
|
|
1562
|
-
|
|
1563
|
-
// Set the object's prototype (only JSObject and null are allowed).
|
|
1564
|
-
MUST_USE_RESULT MaybeObject* SetPrototype(Object* value,
|
|
1565
|
-
bool skip_hidden_prototypes);
|
|
1710
|
+
// Returns true if the elements of JSObject contains only values that can be
|
|
1711
|
+
// represented in a FixedDoubleArray.
|
|
1712
|
+
bool CanConvertToFastDoubleElements();
|
|
1566
1713
|
|
|
1567
1714
|
// Tells whether the index'th element is present.
|
|
1568
1715
|
inline bool HasElement(uint32_t index);
|
|
1569
|
-
bool HasElementWithReceiver(
|
|
1716
|
+
bool HasElementWithReceiver(JSReceiver* receiver, uint32_t index);
|
|
1570
1717
|
|
|
1571
1718
|
// Computes the new capacity when expanding the elements of a JSObject.
|
|
1572
1719
|
static int NewElementsCapacity(int old_capacity) {
|
|
@@ -1594,33 +1741,43 @@ class JSObject: public HeapObject {
|
|
|
1594
1741
|
|
|
1595
1742
|
LocalElementType HasLocalElement(uint32_t index);
|
|
1596
1743
|
|
|
1597
|
-
bool HasElementWithInterceptor(
|
|
1598
|
-
bool HasElementPostInterceptor(
|
|
1744
|
+
bool HasElementWithInterceptor(JSReceiver* receiver, uint32_t index);
|
|
1745
|
+
bool HasElementPostInterceptor(JSReceiver* receiver, uint32_t index);
|
|
1599
1746
|
|
|
1600
1747
|
MUST_USE_RESULT MaybeObject* SetFastElement(uint32_t index,
|
|
1601
1748
|
Object* value,
|
|
1602
1749
|
StrictModeFlag strict_mode,
|
|
1603
|
-
bool check_prototype
|
|
1750
|
+
bool check_prototype);
|
|
1751
|
+
MUST_USE_RESULT MaybeObject* SetDictionaryElement(uint32_t index,
|
|
1752
|
+
Object* value,
|
|
1753
|
+
StrictModeFlag strict_mode,
|
|
1754
|
+
bool check_prototype);
|
|
1755
|
+
|
|
1756
|
+
MUST_USE_RESULT MaybeObject* SetFastDoubleElement(
|
|
1757
|
+
uint32_t index,
|
|
1758
|
+
Object* value,
|
|
1759
|
+
StrictModeFlag strict_mode,
|
|
1760
|
+
bool check_prototype = true);
|
|
1604
1761
|
|
|
1605
1762
|
// Set the index'th array element.
|
|
1606
1763
|
// A Failure object is returned if GC is needed.
|
|
1607
1764
|
MUST_USE_RESULT MaybeObject* SetElement(uint32_t index,
|
|
1608
1765
|
Object* value,
|
|
1609
1766
|
StrictModeFlag strict_mode,
|
|
1610
|
-
bool check_prototype
|
|
1767
|
+
bool check_prototype);
|
|
1611
1768
|
|
|
1612
1769
|
// Returns the index'th element.
|
|
1613
1770
|
// The undefined object if index is out of bounds.
|
|
1614
|
-
MaybeObject* GetElementWithReceiver(Object* receiver, uint32_t index);
|
|
1615
1771
|
MaybeObject* GetElementWithInterceptor(Object* receiver, uint32_t index);
|
|
1616
1772
|
|
|
1617
|
-
//
|
|
1618
|
-
//
|
|
1619
|
-
//
|
|
1620
|
-
MaybeObject* GetExternalElement(uint32_t index);
|
|
1621
|
-
|
|
1773
|
+
// Replace the elements' backing store with fast elements of the given
|
|
1774
|
+
// capacity. Update the length for JSArrays. Returns the new backing
|
|
1775
|
+
// store.
|
|
1622
1776
|
MUST_USE_RESULT MaybeObject* SetFastElementsCapacityAndLength(int capacity,
|
|
1623
1777
|
int length);
|
|
1778
|
+
MUST_USE_RESULT MaybeObject* SetFastDoubleElementsCapacityAndLength(
|
|
1779
|
+
int capacity,
|
|
1780
|
+
int length);
|
|
1624
1781
|
MUST_USE_RESULT MaybeObject* SetSlowElements(Object* length);
|
|
1625
1782
|
|
|
1626
1783
|
// Lookup interceptors are used for handling properties controlled by host
|
|
@@ -1648,7 +1805,6 @@ class JSObject: public HeapObject {
|
|
|
1648
1805
|
// Lookup a property. If found, the result is valid and has
|
|
1649
1806
|
// detailed information.
|
|
1650
1807
|
void LocalLookup(String* name, LookupResult* result);
|
|
1651
|
-
void Lookup(String* name, LookupResult* result);
|
|
1652
1808
|
|
|
1653
1809
|
// The following lookup functions skip interceptors.
|
|
1654
1810
|
void LocalLookupRealNamedProperty(String* name, LookupResult* result);
|
|
@@ -1656,7 +1812,7 @@ class JSObject: public HeapObject {
|
|
|
1656
1812
|
void LookupRealNamedPropertyInPrototypes(String* name, LookupResult* result);
|
|
1657
1813
|
void LookupCallbackSetterInPrototypes(String* name, LookupResult* result);
|
|
1658
1814
|
MUST_USE_RESULT MaybeObject* SetElementWithCallbackSetterInPrototypes(
|
|
1659
|
-
uint32_t index, Object* value, bool* found);
|
|
1815
|
+
uint32_t index, Object* value, bool* found, StrictModeFlag strict_mode);
|
|
1660
1816
|
void LookupCallback(String* name, LookupResult* result);
|
|
1661
1817
|
|
|
1662
1818
|
// Returns the number of properties on this object filtering out properties
|
|
@@ -1746,6 +1902,9 @@ class JSObject: public HeapObject {
|
|
|
1746
1902
|
MUST_USE_RESULT MaybeObject* NormalizeProperties(
|
|
1747
1903
|
PropertyNormalizationMode mode,
|
|
1748
1904
|
int expected_additional_properties);
|
|
1905
|
+
|
|
1906
|
+
// Convert and update the elements backing store to be a NumberDictionary
|
|
1907
|
+
// dictionary. Returns the backing after conversion.
|
|
1749
1908
|
MUST_USE_RESULT MaybeObject* NormalizeElements();
|
|
1750
1909
|
|
|
1751
1910
|
MUST_USE_RESULT MaybeObject* UpdateMapCodeCache(String* name, Code* code);
|
|
@@ -1838,8 +1997,21 @@ class JSObject: public HeapObject {
|
|
|
1838
1997
|
// Also maximal value of JSArray's length property.
|
|
1839
1998
|
static const uint32_t kMaxElementCount = 0xffffffffu;
|
|
1840
1999
|
|
|
2000
|
+
// Constants for heuristics controlling conversion of fast elements
|
|
2001
|
+
// to slow elements.
|
|
2002
|
+
|
|
2003
|
+
// Maximal gap that can be introduced by adding an element beyond
|
|
2004
|
+
// the current elements length.
|
|
1841
2005
|
static const uint32_t kMaxGap = 1024;
|
|
1842
|
-
|
|
2006
|
+
|
|
2007
|
+
// Maximal length of fast elements array that won't be checked for
|
|
2008
|
+
// being dense enough on expansion.
|
|
2009
|
+
static const int kMaxUncheckedFastElementsLength = 5000;
|
|
2010
|
+
|
|
2011
|
+
// Same as above but for old arrays. This limit is more strict. We
|
|
2012
|
+
// don't want to be wasteful with long lived objects.
|
|
2013
|
+
static const int kMaxUncheckedOldFastElementsLength = 500;
|
|
2014
|
+
|
|
1843
2015
|
static const int kInitialMaxFastElementArray = 100000;
|
|
1844
2016
|
static const int kMaxFastProperties = 12;
|
|
1845
2017
|
static const int kMaxInstanceSize = 255 * kPointerSize;
|
|
@@ -1861,6 +2033,8 @@ class JSObject: public HeapObject {
|
|
|
1861
2033
|
};
|
|
1862
2034
|
|
|
1863
2035
|
private:
|
|
2036
|
+
friend class DictionaryElementsAccessor;
|
|
2037
|
+
|
|
1864
2038
|
MUST_USE_RESULT MaybeObject* GetElementWithCallback(Object* receiver,
|
|
1865
2039
|
Object* structure,
|
|
1866
2040
|
uint32_t index,
|
|
@@ -1868,7 +2042,8 @@ class JSObject: public HeapObject {
|
|
|
1868
2042
|
MaybeObject* SetElementWithCallback(Object* structure,
|
|
1869
2043
|
uint32_t index,
|
|
1870
2044
|
Object* value,
|
|
1871
|
-
JSObject* holder
|
|
2045
|
+
JSObject* holder,
|
|
2046
|
+
StrictModeFlag strict_mode);
|
|
1872
2047
|
MUST_USE_RESULT MaybeObject* SetElementWithInterceptor(
|
|
1873
2048
|
uint32_t index,
|
|
1874
2049
|
Object* value,
|
|
@@ -1880,35 +2055,29 @@ class JSObject: public HeapObject {
|
|
|
1880
2055
|
StrictModeFlag strict_mode,
|
|
1881
2056
|
bool check_prototype);
|
|
1882
2057
|
|
|
1883
|
-
MaybeObject* GetElementPostInterceptor(Object* receiver, uint32_t index);
|
|
1884
|
-
|
|
1885
2058
|
MUST_USE_RESULT MaybeObject* DeletePropertyPostInterceptor(String* name,
|
|
1886
2059
|
DeleteMode mode);
|
|
1887
2060
|
MUST_USE_RESULT MaybeObject* DeletePropertyWithInterceptor(String* name);
|
|
1888
2061
|
|
|
1889
|
-
MUST_USE_RESULT MaybeObject* DeleteElementPostInterceptor(uint32_t index,
|
|
1890
|
-
DeleteMode mode);
|
|
1891
2062
|
MUST_USE_RESULT MaybeObject* DeleteElementWithInterceptor(uint32_t index);
|
|
1892
2063
|
|
|
1893
|
-
|
|
1894
|
-
|
|
1895
|
-
|
|
1896
|
-
|
|
1897
|
-
|
|
1898
|
-
|
|
1899
|
-
|
|
1900
|
-
|
|
1901
|
-
|
|
1902
|
-
|
|
1903
|
-
bool continue_search);
|
|
1904
|
-
PropertyAttributes GetPropertyAttribute(JSObject* receiver,
|
|
1905
|
-
LookupResult* result,
|
|
1906
|
-
String* name,
|
|
1907
|
-
bool continue_search);
|
|
2064
|
+
MUST_USE_RESULT MaybeObject* DeleteFastElement(uint32_t index);
|
|
2065
|
+
MUST_USE_RESULT MaybeObject* DeleteDictionaryElement(uint32_t index,
|
|
2066
|
+
DeleteMode mode);
|
|
2067
|
+
|
|
2068
|
+
bool ReferencesObjectFromElements(FixedArray* elements,
|
|
2069
|
+
ElementsKind kind,
|
|
2070
|
+
Object* object);
|
|
2071
|
+
bool HasElementInElements(FixedArray* elements,
|
|
2072
|
+
ElementsKind kind,
|
|
2073
|
+
uint32_t index);
|
|
1908
2074
|
|
|
1909
2075
|
// Returns true if most of the elements backing storage is used.
|
|
1910
2076
|
bool HasDenseElements();
|
|
1911
2077
|
|
|
2078
|
+
// Gets the current elements capacity and the number of used elements.
|
|
2079
|
+
void GetElementsCapacityAndUsage(int* capacity, int* used);
|
|
2080
|
+
|
|
1912
2081
|
bool CanSetCallback(String* name);
|
|
1913
2082
|
MUST_USE_RESULT MaybeObject* SetElementCallback(
|
|
1914
2083
|
uint32_t index,
|
|
@@ -1928,17 +2097,33 @@ class JSObject: public HeapObject {
|
|
|
1928
2097
|
};
|
|
1929
2098
|
|
|
1930
2099
|
|
|
1931
|
-
//
|
|
1932
|
-
|
|
2100
|
+
// Common superclass for FixedArrays that allow implementations to share
|
|
2101
|
+
// common accessors and some code paths.
|
|
2102
|
+
class FixedArrayBase: public HeapObject {
|
|
1933
2103
|
public:
|
|
1934
2104
|
// [length]: length of the array.
|
|
1935
2105
|
inline int length();
|
|
1936
2106
|
inline void set_length(int value);
|
|
1937
2107
|
|
|
2108
|
+
inline static FixedArrayBase* cast(Object* object);
|
|
2109
|
+
|
|
2110
|
+
// Layout description.
|
|
2111
|
+
// Length is smi tagged when it is stored.
|
|
2112
|
+
static const int kLengthOffset = HeapObject::kHeaderSize;
|
|
2113
|
+
static const int kHeaderSize = kLengthOffset + kPointerSize;
|
|
2114
|
+
};
|
|
2115
|
+
|
|
2116
|
+
|
|
2117
|
+
class FixedDoubleArray;
|
|
2118
|
+
|
|
2119
|
+
// FixedArray describes fixed-sized arrays with element type Object*.
|
|
2120
|
+
class FixedArray: public FixedArrayBase {
|
|
2121
|
+
public:
|
|
1938
2122
|
// Setter and getter for elements.
|
|
1939
2123
|
inline Object* get(int index);
|
|
1940
2124
|
// Setter that uses write barrier.
|
|
1941
2125
|
inline void set(int index, Object* value);
|
|
2126
|
+
inline bool is_the_hole(int index);
|
|
1942
2127
|
|
|
1943
2128
|
// Setter that doesn't need write barrier).
|
|
1944
2129
|
inline void set(int index, Smi* value);
|
|
@@ -1985,11 +2170,6 @@ class FixedArray: public HeapObject {
|
|
|
1985
2170
|
// Casting.
|
|
1986
2171
|
static inline FixedArray* cast(Object* obj);
|
|
1987
2172
|
|
|
1988
|
-
// Layout description.
|
|
1989
|
-
// Length is smi tagged when it is stored.
|
|
1990
|
-
static const int kLengthOffset = HeapObject::kHeaderSize;
|
|
1991
|
-
static const int kHeaderSize = kLengthOffset + kPointerSize;
|
|
1992
|
-
|
|
1993
2173
|
// Maximal allowed size, in bytes, of a single FixedArray.
|
|
1994
2174
|
// Prevents overflowing size computations, as well as extreme memory
|
|
1995
2175
|
// consumption.
|
|
@@ -2037,6 +2217,61 @@ class FixedArray: public HeapObject {
|
|
|
2037
2217
|
};
|
|
2038
2218
|
|
|
2039
2219
|
|
|
2220
|
+
// FixedDoubleArray describes fixed-sized arrays with element type double.
|
|
2221
|
+
class FixedDoubleArray: public FixedArrayBase {
|
|
2222
|
+
public:
|
|
2223
|
+
inline void Initialize(FixedArray* from);
|
|
2224
|
+
inline void Initialize(FixedDoubleArray* from);
|
|
2225
|
+
inline void Initialize(NumberDictionary* from);
|
|
2226
|
+
|
|
2227
|
+
// Setter and getter for elements.
|
|
2228
|
+
inline double get_scalar(int index);
|
|
2229
|
+
inline MaybeObject* get(int index);
|
|
2230
|
+
inline void set(int index, double value);
|
|
2231
|
+
inline void set_the_hole(int index);
|
|
2232
|
+
|
|
2233
|
+
// Checking for the hole.
|
|
2234
|
+
inline bool is_the_hole(int index);
|
|
2235
|
+
|
|
2236
|
+
// Garbage collection support.
|
|
2237
|
+
inline static int SizeFor(int length) {
|
|
2238
|
+
return kHeaderSize + length * kDoubleSize;
|
|
2239
|
+
}
|
|
2240
|
+
|
|
2241
|
+
// Code Generation support.
|
|
2242
|
+
static int OffsetOfElementAt(int index) { return SizeFor(index); }
|
|
2243
|
+
|
|
2244
|
+
inline static bool is_the_hole_nan(double value);
|
|
2245
|
+
inline static double hole_nan_as_double();
|
|
2246
|
+
inline static double canonical_not_the_hole_nan_as_double();
|
|
2247
|
+
|
|
2248
|
+
// Casting.
|
|
2249
|
+
static inline FixedDoubleArray* cast(Object* obj);
|
|
2250
|
+
|
|
2251
|
+
// Maximal allowed size, in bytes, of a single FixedDoubleArray.
|
|
2252
|
+
// Prevents overflowing size computations, as well as extreme memory
|
|
2253
|
+
// consumption.
|
|
2254
|
+
static const int kMaxSize = 512 * MB;
|
|
2255
|
+
// Maximally allowed length of a FixedArray.
|
|
2256
|
+
static const int kMaxLength = (kMaxSize - kHeaderSize) / kDoubleSize;
|
|
2257
|
+
|
|
2258
|
+
// Dispatched behavior.
|
|
2259
|
+
#ifdef OBJECT_PRINT
|
|
2260
|
+
inline void FixedDoubleArrayPrint() {
|
|
2261
|
+
FixedDoubleArrayPrint(stdout);
|
|
2262
|
+
}
|
|
2263
|
+
void FixedDoubleArrayPrint(FILE* out);
|
|
2264
|
+
#endif
|
|
2265
|
+
|
|
2266
|
+
#ifdef DEBUG
|
|
2267
|
+
void FixedDoubleArrayVerify();
|
|
2268
|
+
#endif
|
|
2269
|
+
|
|
2270
|
+
private:
|
|
2271
|
+
DISALLOW_IMPLICIT_CONSTRUCTORS(FixedDoubleArray);
|
|
2272
|
+
};
|
|
2273
|
+
|
|
2274
|
+
|
|
2040
2275
|
// DescriptorArrays are fixed arrays used to hold instance descriptors.
|
|
2041
2276
|
// The format of the these objects is:
|
|
2042
2277
|
// TODO(1399): It should be possible to make room for bit_field3 in the map
|
|
@@ -2318,6 +2553,10 @@ class HashTable: public FixedArray {
|
|
|
2318
2553
|
int at_least_space_for,
|
|
2319
2554
|
PretenureFlag pretenure = NOT_TENURED);
|
|
2320
2555
|
|
|
2556
|
+
// Computes the required capacity for a table holding the given
|
|
2557
|
+
// number of elements. May be more than HashTable::kMaxCapacity.
|
|
2558
|
+
static int ComputeCapacity(int at_least_space_for);
|
|
2559
|
+
|
|
2321
2560
|
// Returns the key at entry.
|
|
2322
2561
|
Object* KeyAt(int entry) { return get(EntryToIndex(entry)); }
|
|
2323
2562
|
|
|
@@ -2365,7 +2604,6 @@ class HashTable: public FixedArray {
|
|
|
2365
2604
|
int FindEntry(Isolate* isolate, Key key);
|
|
2366
2605
|
|
|
2367
2606
|
protected:
|
|
2368
|
-
|
|
2369
2607
|
// Find the entry at which to insert element with the given key that
|
|
2370
2608
|
// has the given hash value.
|
|
2371
2609
|
uint32_t FindInsertionEntry(uint32_t hash);
|
|
@@ -2410,6 +2648,12 @@ class HashTable: public FixedArray {
|
|
|
2410
2648
|
return (last + number) & (size - 1);
|
|
2411
2649
|
}
|
|
2412
2650
|
|
|
2651
|
+
// Rehashes this hash-table into the new table.
|
|
2652
|
+
MUST_USE_RESULT MaybeObject* Rehash(HashTable* new_table, Key key);
|
|
2653
|
+
|
|
2654
|
+
// Attempt to shrink hash table after removal of key.
|
|
2655
|
+
MUST_USE_RESULT MaybeObject* Shrink(Key key);
|
|
2656
|
+
|
|
2413
2657
|
// Ensure enough space for n additional elements.
|
|
2414
2658
|
MUST_USE_RESULT MaybeObject* EnsureCapacity(int n, Key key);
|
|
2415
2659
|
};
|
|
@@ -2532,7 +2776,6 @@ class MapCache: public HashTable<MapCacheShape, HashTableKey*> {
|
|
|
2532
2776
|
template <typename Shape, typename Key>
|
|
2533
2777
|
class Dictionary: public HashTable<Shape, Key> {
|
|
2534
2778
|
public:
|
|
2535
|
-
|
|
2536
2779
|
static inline Dictionary<Shape, Key>* cast(Object* obj) {
|
|
2537
2780
|
return reinterpret_cast<Dictionary<Shape, Key>*>(obj);
|
|
2538
2781
|
}
|
|
@@ -2575,6 +2818,9 @@ class Dictionary: public HashTable<Shape, Key> {
|
|
|
2575
2818
|
// Delete a property from the dictionary.
|
|
2576
2819
|
Object* DeleteProperty(int entry, JSObject::DeleteMode mode);
|
|
2577
2820
|
|
|
2821
|
+
// Attempt to shrink the dictionary after deletion of key.
|
|
2822
|
+
MUST_USE_RESULT MaybeObject* Shrink(Key key);
|
|
2823
|
+
|
|
2578
2824
|
// Returns the number of elements in the dictionary filtering out properties
|
|
2579
2825
|
// with the specified attributes.
|
|
2580
2826
|
int NumberOfElementsFilterAttributes(PropertyAttributes filter);
|
|
@@ -2582,10 +2828,13 @@ class Dictionary: public HashTable<Shape, Key> {
|
|
|
2582
2828
|
// Returns the number of enumerable elements in the dictionary.
|
|
2583
2829
|
int NumberOfEnumElements();
|
|
2584
2830
|
|
|
2831
|
+
enum SortMode { UNSORTED, SORTED };
|
|
2585
2832
|
// Copies keys to preallocated fixed array.
|
|
2586
|
-
void CopyKeysTo(FixedArray* storage,
|
|
2833
|
+
void CopyKeysTo(FixedArray* storage,
|
|
2834
|
+
PropertyAttributes filter,
|
|
2835
|
+
SortMode sort_mode);
|
|
2587
2836
|
// Fill in details for properties into storage.
|
|
2588
|
-
void CopyKeysTo(FixedArray* storage);
|
|
2837
|
+
void CopyKeysTo(FixedArray* storage, int index, SortMode sort_mode);
|
|
2589
2838
|
|
|
2590
2839
|
// Accessors for next enumeration index.
|
|
2591
2840
|
void SetNextEnumerationIndex(int index) {
|
|
@@ -2730,6 +2979,48 @@ class NumberDictionary: public Dictionary<NumberDictionaryShape, uint32_t> {
|
|
|
2730
2979
|
};
|
|
2731
2980
|
|
|
2732
2981
|
|
|
2982
|
+
class ObjectHashTableShape {
|
|
2983
|
+
public:
|
|
2984
|
+
static inline bool IsMatch(JSObject* key, Object* other);
|
|
2985
|
+
static inline uint32_t Hash(JSObject* key);
|
|
2986
|
+
static inline uint32_t HashForObject(JSObject* key, Object* object);
|
|
2987
|
+
MUST_USE_RESULT static inline MaybeObject* AsObject(JSObject* key);
|
|
2988
|
+
static const int kPrefixSize = 0;
|
|
2989
|
+
static const int kEntrySize = 2;
|
|
2990
|
+
};
|
|
2991
|
+
|
|
2992
|
+
|
|
2993
|
+
// ObjectHashTable maps keys that are JavaScript objects to object values by
|
|
2994
|
+
// using the identity hash of the key for hashing purposes.
|
|
2995
|
+
class ObjectHashTable: public HashTable<ObjectHashTableShape, JSObject*> {
|
|
2996
|
+
public:
|
|
2997
|
+
static inline ObjectHashTable* cast(Object* obj) {
|
|
2998
|
+
ASSERT(obj->IsHashTable());
|
|
2999
|
+
return reinterpret_cast<ObjectHashTable*>(obj);
|
|
3000
|
+
}
|
|
3001
|
+
|
|
3002
|
+
// Looks up the value associated with the given key. The undefined value is
|
|
3003
|
+
// returned in case the key is not present.
|
|
3004
|
+
Object* Lookup(JSObject* key);
|
|
3005
|
+
|
|
3006
|
+
// Adds (or overwrites) the value associated with the given key. Mapping a
|
|
3007
|
+
// key to the undefined value causes removal of the whole entry.
|
|
3008
|
+
MUST_USE_RESULT MaybeObject* Put(JSObject* key, Object* value);
|
|
3009
|
+
|
|
3010
|
+
private:
|
|
3011
|
+
friend class MarkCompactCollector;
|
|
3012
|
+
|
|
3013
|
+
void AddEntry(int entry, JSObject* key, Object* value);
|
|
3014
|
+
void RemoveEntry(int entry, Heap* heap);
|
|
3015
|
+
inline void RemoveEntry(int entry);
|
|
3016
|
+
|
|
3017
|
+
// Returns the index to the value of an entry.
|
|
3018
|
+
static inline int EntryToValueIndex(int entry) {
|
|
3019
|
+
return EntryToIndex(entry) + 1;
|
|
3020
|
+
}
|
|
3021
|
+
};
|
|
3022
|
+
|
|
3023
|
+
|
|
2733
3024
|
// JSFunctionResultCache caches results of some JSFunction invocation.
|
|
2734
3025
|
// It is a fixed array with fixed structure:
|
|
2735
3026
|
// [0]: factory function
|
|
@@ -2786,23 +3077,14 @@ class NormalizedMapCache: public FixedArray {
|
|
|
2786
3077
|
#ifdef DEBUG
|
|
2787
3078
|
void NormalizedMapCacheVerify();
|
|
2788
3079
|
#endif
|
|
2789
|
-
|
|
2790
|
-
private:
|
|
2791
|
-
static int Hash(Map* fast);
|
|
2792
|
-
|
|
2793
|
-
static bool CheckHit(Map* slow, Map* fast, PropertyNormalizationMode mode);
|
|
2794
3080
|
};
|
|
2795
3081
|
|
|
2796
3082
|
|
|
2797
3083
|
// ByteArray represents fixed sized byte arrays. Used by the outside world,
|
|
2798
3084
|
// such as PCRE, and also by the memory allocator and garbage collector to
|
|
2799
3085
|
// fill in free blocks in the heap.
|
|
2800
|
-
class ByteArray: public
|
|
3086
|
+
class ByteArray: public FixedArrayBase {
|
|
2801
3087
|
public:
|
|
2802
|
-
// [length]: length of the array.
|
|
2803
|
-
inline int length();
|
|
2804
|
-
inline void set_length(int value);
|
|
2805
|
-
|
|
2806
3088
|
// Setter and getter.
|
|
2807
3089
|
inline byte get(int index);
|
|
2808
3090
|
inline void set(int index, byte value);
|
|
@@ -2847,10 +3129,6 @@ class ByteArray: public HeapObject {
|
|
|
2847
3129
|
#endif
|
|
2848
3130
|
|
|
2849
3131
|
// Layout description.
|
|
2850
|
-
// Length is smi tagged when it is stored.
|
|
2851
|
-
static const int kLengthOffset = HeapObject::kHeaderSize;
|
|
2852
|
-
static const int kHeaderSize = kLengthOffset + kPointerSize;
|
|
2853
|
-
|
|
2854
3132
|
static const int kAlignedSize = OBJECT_POINTER_ALIGN(kHeaderSize);
|
|
2855
3133
|
|
|
2856
3134
|
// Maximal memory consumption for a single ByteArray.
|
|
@@ -2874,11 +3152,10 @@ class ByteArray: public HeapObject {
|
|
|
2874
3152
|
// Out-of-range values passed to the setter are converted via a C
|
|
2875
3153
|
// cast, not clamping. Out-of-range indices cause exceptions to be
|
|
2876
3154
|
// raised rather than being silently ignored.
|
|
2877
|
-
class ExternalArray: public
|
|
3155
|
+
class ExternalArray: public FixedArrayBase {
|
|
2878
3156
|
public:
|
|
2879
|
-
|
|
2880
|
-
inline int
|
|
2881
|
-
inline void set_length(int value);
|
|
3157
|
+
|
|
3158
|
+
inline bool is_the_hole(int index) { return false; }
|
|
2882
3159
|
|
|
2883
3160
|
// [external_pointer]: The pointer to the external memory area backing this
|
|
2884
3161
|
// external array.
|
|
@@ -2891,9 +3168,8 @@ class ExternalArray: public HeapObject {
|
|
|
2891
3168
|
static const int kMaxLength = 0x3fffffff;
|
|
2892
3169
|
|
|
2893
3170
|
// ExternalArray headers are not quadword aligned.
|
|
2894
|
-
static const int kLengthOffset = HeapObject::kHeaderSize;
|
|
2895
3171
|
static const int kExternalPointerOffset =
|
|
2896
|
-
POINTER_SIZE_ALIGN(kLengthOffset +
|
|
3172
|
+
POINTER_SIZE_ALIGN(FixedArrayBase::kLengthOffset + kPointerSize);
|
|
2897
3173
|
static const int kHeaderSize = kExternalPointerOffset + kPointerSize;
|
|
2898
3174
|
static const int kAlignedSize = OBJECT_POINTER_ALIGN(kHeaderSize);
|
|
2899
3175
|
|
|
@@ -2915,7 +3191,8 @@ class ExternalPixelArray: public ExternalArray {
|
|
|
2915
3191
|
inline uint8_t* external_pixel_pointer();
|
|
2916
3192
|
|
|
2917
3193
|
// Setter and getter.
|
|
2918
|
-
inline uint8_t
|
|
3194
|
+
inline uint8_t get_scalar(int index);
|
|
3195
|
+
inline MaybeObject* get(int index);
|
|
2919
3196
|
inline void set(int index, uint8_t value);
|
|
2920
3197
|
|
|
2921
3198
|
// This accessor applies the correct conversion from Smi, HeapNumber and
|
|
@@ -2943,7 +3220,8 @@ class ExternalPixelArray: public ExternalArray {
|
|
|
2943
3220
|
class ExternalByteArray: public ExternalArray {
|
|
2944
3221
|
public:
|
|
2945
3222
|
// Setter and getter.
|
|
2946
|
-
inline int8_t
|
|
3223
|
+
inline int8_t get_scalar(int index);
|
|
3224
|
+
inline MaybeObject* get(int index);
|
|
2947
3225
|
inline void set(int index, int8_t value);
|
|
2948
3226
|
|
|
2949
3227
|
// This accessor applies the correct conversion from Smi, HeapNumber
|
|
@@ -2971,7 +3249,8 @@ class ExternalByteArray: public ExternalArray {
|
|
|
2971
3249
|
class ExternalUnsignedByteArray: public ExternalArray {
|
|
2972
3250
|
public:
|
|
2973
3251
|
// Setter and getter.
|
|
2974
|
-
inline uint8_t
|
|
3252
|
+
inline uint8_t get_scalar(int index);
|
|
3253
|
+
inline MaybeObject* get(int index);
|
|
2975
3254
|
inline void set(int index, uint8_t value);
|
|
2976
3255
|
|
|
2977
3256
|
// This accessor applies the correct conversion from Smi, HeapNumber
|
|
@@ -2999,7 +3278,8 @@ class ExternalUnsignedByteArray: public ExternalArray {
|
|
|
2999
3278
|
class ExternalShortArray: public ExternalArray {
|
|
3000
3279
|
public:
|
|
3001
3280
|
// Setter and getter.
|
|
3002
|
-
inline int16_t
|
|
3281
|
+
inline int16_t get_scalar(int index);
|
|
3282
|
+
inline MaybeObject* get(int index);
|
|
3003
3283
|
inline void set(int index, int16_t value);
|
|
3004
3284
|
|
|
3005
3285
|
// This accessor applies the correct conversion from Smi, HeapNumber
|
|
@@ -3027,7 +3307,8 @@ class ExternalShortArray: public ExternalArray {
|
|
|
3027
3307
|
class ExternalUnsignedShortArray: public ExternalArray {
|
|
3028
3308
|
public:
|
|
3029
3309
|
// Setter and getter.
|
|
3030
|
-
inline uint16_t
|
|
3310
|
+
inline uint16_t get_scalar(int index);
|
|
3311
|
+
inline MaybeObject* get(int index);
|
|
3031
3312
|
inline void set(int index, uint16_t value);
|
|
3032
3313
|
|
|
3033
3314
|
// This accessor applies the correct conversion from Smi, HeapNumber
|
|
@@ -3055,7 +3336,8 @@ class ExternalUnsignedShortArray: public ExternalArray {
|
|
|
3055
3336
|
class ExternalIntArray: public ExternalArray {
|
|
3056
3337
|
public:
|
|
3057
3338
|
// Setter and getter.
|
|
3058
|
-
inline int32_t
|
|
3339
|
+
inline int32_t get_scalar(int index);
|
|
3340
|
+
inline MaybeObject* get(int index);
|
|
3059
3341
|
inline void set(int index, int32_t value);
|
|
3060
3342
|
|
|
3061
3343
|
// This accessor applies the correct conversion from Smi, HeapNumber
|
|
@@ -3083,7 +3365,8 @@ class ExternalIntArray: public ExternalArray {
|
|
|
3083
3365
|
class ExternalUnsignedIntArray: public ExternalArray {
|
|
3084
3366
|
public:
|
|
3085
3367
|
// Setter and getter.
|
|
3086
|
-
inline uint32_t
|
|
3368
|
+
inline uint32_t get_scalar(int index);
|
|
3369
|
+
inline MaybeObject* get(int index);
|
|
3087
3370
|
inline void set(int index, uint32_t value);
|
|
3088
3371
|
|
|
3089
3372
|
// This accessor applies the correct conversion from Smi, HeapNumber
|
|
@@ -3111,7 +3394,8 @@ class ExternalUnsignedIntArray: public ExternalArray {
|
|
|
3111
3394
|
class ExternalFloatArray: public ExternalArray {
|
|
3112
3395
|
public:
|
|
3113
3396
|
// Setter and getter.
|
|
3114
|
-
inline float
|
|
3397
|
+
inline float get_scalar(int index);
|
|
3398
|
+
inline MaybeObject* get(int index);
|
|
3115
3399
|
inline void set(int index, float value);
|
|
3116
3400
|
|
|
3117
3401
|
// This accessor applies the correct conversion from Smi, HeapNumber
|
|
@@ -3139,7 +3423,8 @@ class ExternalFloatArray: public ExternalArray {
|
|
|
3139
3423
|
class ExternalDoubleArray: public ExternalArray {
|
|
3140
3424
|
public:
|
|
3141
3425
|
// Setter and getter.
|
|
3142
|
-
inline double
|
|
3426
|
+
inline double get_scalar(int index);
|
|
3427
|
+
inline MaybeObject* get(int index);
|
|
3143
3428
|
inline void set(int index, double value);
|
|
3144
3429
|
|
|
3145
3430
|
// This accessor applies the correct conversion from Smi, HeapNumber
|
|
@@ -3235,7 +3520,7 @@ class DeoptimizationInputData: public FixedArray {
|
|
|
3235
3520
|
// Casting.
|
|
3236
3521
|
static inline DeoptimizationInputData* cast(Object* obj);
|
|
3237
3522
|
|
|
3238
|
-
#ifdef
|
|
3523
|
+
#ifdef ENABLE_DISASSEMBLER
|
|
3239
3524
|
void DeoptimizationInputDataPrint(FILE* out);
|
|
3240
3525
|
#endif
|
|
3241
3526
|
|
|
@@ -3274,7 +3559,7 @@ class DeoptimizationOutputData: public FixedArray {
|
|
|
3274
3559
|
// Casting.
|
|
3275
3560
|
static inline DeoptimizationOutputData* cast(Object* obj);
|
|
3276
3561
|
|
|
3277
|
-
#
|
|
3562
|
+
#if defined(OBJECT_PRINT) || defined(ENABLE_DISASSEMBLER)
|
|
3278
3563
|
void DeoptimizationOutputDataPrint(FILE* out);
|
|
3279
3564
|
#endif
|
|
3280
3565
|
};
|
|
@@ -3309,13 +3594,14 @@ class Code: public HeapObject {
|
|
|
3309
3594
|
UNARY_OP_IC,
|
|
3310
3595
|
BINARY_OP_IC,
|
|
3311
3596
|
COMPARE_IC,
|
|
3597
|
+
TO_BOOLEAN_IC,
|
|
3312
3598
|
// No more than 16 kinds. The value currently encoded in four bits in
|
|
3313
3599
|
// Flags.
|
|
3314
3600
|
|
|
3315
3601
|
// Pseudo-kinds.
|
|
3316
3602
|
REGEXP = BUILTIN,
|
|
3317
3603
|
FIRST_IC_KIND = LOAD_IC,
|
|
3318
|
-
LAST_IC_KIND =
|
|
3604
|
+
LAST_IC_KIND = TO_BOOLEAN_IC
|
|
3319
3605
|
};
|
|
3320
3606
|
|
|
3321
3607
|
enum {
|
|
@@ -3381,13 +3667,10 @@ class Code: public HeapObject {
|
|
|
3381
3667
|
inline bool is_keyed_store_stub() { return kind() == KEYED_STORE_IC; }
|
|
3382
3668
|
inline bool is_call_stub() { return kind() == CALL_IC; }
|
|
3383
3669
|
inline bool is_keyed_call_stub() { return kind() == KEYED_CALL_IC; }
|
|
3384
|
-
inline bool is_unary_op_stub() {
|
|
3385
|
-
|
|
3386
|
-
}
|
|
3387
|
-
inline bool is_binary_op_stub() {
|
|
3388
|
-
return kind() == BINARY_OP_IC;
|
|
3389
|
-
}
|
|
3670
|
+
inline bool is_unary_op_stub() { return kind() == UNARY_OP_IC; }
|
|
3671
|
+
inline bool is_binary_op_stub() { return kind() == BINARY_OP_IC; }
|
|
3390
3672
|
inline bool is_compare_ic_stub() { return kind() == COMPARE_IC; }
|
|
3673
|
+
inline bool is_to_boolean_ic_stub() { return kind() == TO_BOOLEAN_IC; }
|
|
3391
3674
|
|
|
3392
3675
|
// [major_key]: For kind STUB or BINARY_OP_IC, the major key.
|
|
3393
3676
|
inline int major_key();
|
|
@@ -3429,27 +3712,24 @@ class Code: public HeapObject {
|
|
|
3429
3712
|
inline CheckType check_type();
|
|
3430
3713
|
inline void set_check_type(CheckType value);
|
|
3431
3714
|
|
|
3432
|
-
// [
|
|
3433
|
-
// KEYED_EXTERNAL_ARRAY_STORE_IC, identifies the type of external
|
|
3434
|
-
// array that the code stub is specialized for.
|
|
3435
|
-
inline ExternalArrayType external_array_type();
|
|
3436
|
-
inline void set_external_array_type(ExternalArrayType value);
|
|
3437
|
-
|
|
3438
|
-
// [type-recording unary op type]: For all UNARY_OP_IC.
|
|
3715
|
+
// [type-recording unary op type]: For kind UNARY_OP_IC.
|
|
3439
3716
|
inline byte unary_op_type();
|
|
3440
3717
|
inline void set_unary_op_type(byte value);
|
|
3441
3718
|
|
|
3442
|
-
// [type-recording binary op type]: For
|
|
3719
|
+
// [type-recording binary op type]: For kind BINARY_OP_IC.
|
|
3443
3720
|
inline byte binary_op_type();
|
|
3444
3721
|
inline void set_binary_op_type(byte value);
|
|
3445
3722
|
inline byte binary_op_result_type();
|
|
3446
3723
|
inline void set_binary_op_result_type(byte value);
|
|
3447
3724
|
|
|
3448
|
-
// [compare state]: For kind
|
|
3449
|
-
// stub is in.
|
|
3725
|
+
// [compare state]: For kind COMPARE_IC, tells what state the stub is in.
|
|
3450
3726
|
inline byte compare_state();
|
|
3451
3727
|
inline void set_compare_state(byte value);
|
|
3452
3728
|
|
|
3729
|
+
// [to_boolean_foo]: For kind TO_BOOLEAN_IC tells what state the stub is in.
|
|
3730
|
+
inline byte to_boolean_state();
|
|
3731
|
+
inline void set_to_boolean_state(byte value);
|
|
3732
|
+
|
|
3453
3733
|
// Get the safepoint entry for the given pc.
|
|
3454
3734
|
SafepointEntry GetSafepointEntry(Address pc);
|
|
3455
3735
|
|
|
@@ -3590,11 +3870,11 @@ class Code: public HeapObject {
|
|
|
3590
3870
|
static const int kOptimizableOffset = kKindSpecificFlagsOffset;
|
|
3591
3871
|
static const int kStackSlotsOffset = kKindSpecificFlagsOffset;
|
|
3592
3872
|
static const int kCheckTypeOffset = kKindSpecificFlagsOffset;
|
|
3593
|
-
static const int kExternalArrayTypeOffset = kKindSpecificFlagsOffset;
|
|
3594
3873
|
|
|
3595
|
-
static const int kCompareStateOffset = kStubMajorKeyOffset + 1;
|
|
3596
3874
|
static const int kUnaryOpTypeOffset = kStubMajorKeyOffset + 1;
|
|
3597
3875
|
static const int kBinaryOpTypeOffset = kStubMajorKeyOffset + 1;
|
|
3876
|
+
static const int kCompareStateOffset = kStubMajorKeyOffset + 1;
|
|
3877
|
+
static const int kToBooleanTypeOffset = kStubMajorKeyOffset + 1;
|
|
3598
3878
|
static const int kHasDeoptimizationSupportOffset = kOptimizableOffset + 1;
|
|
3599
3879
|
|
|
3600
3880
|
static const int kBinaryOpReturnTypeOffset = kBinaryOpTypeOffset + 1;
|
|
@@ -3741,31 +4021,37 @@ class Map: public HeapObject {
|
|
|
3741
4021
|
inline void set_is_extensible(bool value);
|
|
3742
4022
|
inline bool is_extensible();
|
|
3743
4023
|
|
|
3744
|
-
|
|
3745
|
-
|
|
3746
|
-
|
|
3747
|
-
|
|
3748
|
-
|
|
3749
|
-
|
|
3750
|
-
|
|
3751
|
-
|
|
4024
|
+
inline void set_elements_kind(JSObject::ElementsKind elements_kind) {
|
|
4025
|
+
ASSERT(elements_kind < JSObject::kElementsKindCount);
|
|
4026
|
+
ASSERT(JSObject::kElementsKindCount <= (1 << kElementsKindBitCount));
|
|
4027
|
+
set_bit_field2((bit_field2() & ~kElementsKindMask) |
|
|
4028
|
+
(elements_kind << kElementsKindShift));
|
|
4029
|
+
ASSERT(this->elements_kind() == elements_kind);
|
|
4030
|
+
}
|
|
4031
|
+
|
|
4032
|
+
inline JSObject::ElementsKind elements_kind() {
|
|
4033
|
+
return static_cast<JSObject::ElementsKind>(
|
|
4034
|
+
(bit_field2() & kElementsKindMask) >> kElementsKindShift);
|
|
3752
4035
|
}
|
|
3753
4036
|
|
|
4037
|
+
// Tells whether the instance has fast elements.
|
|
4038
|
+
// Equivalent to instance->GetElementsKind() == FAST_ELEMENTS.
|
|
3754
4039
|
inline bool has_fast_elements() {
|
|
3755
|
-
return (
|
|
4040
|
+
return elements_kind() == JSObject::FAST_ELEMENTS;
|
|
3756
4041
|
}
|
|
3757
4042
|
|
|
3758
|
-
|
|
3759
|
-
|
|
3760
|
-
if (value) {
|
|
3761
|
-
set_bit_field2(bit_field2() | (1 << kHasExternalArrayElements));
|
|
3762
|
-
} else {
|
|
3763
|
-
set_bit_field2(bit_field2() & ~(1 << kHasExternalArrayElements));
|
|
3764
|
-
}
|
|
4043
|
+
inline bool has_fast_double_elements() {
|
|
4044
|
+
return elements_kind() == JSObject::FAST_DOUBLE_ELEMENTS;
|
|
3765
4045
|
}
|
|
3766
4046
|
|
|
3767
4047
|
inline bool has_external_array_elements() {
|
|
3768
|
-
|
|
4048
|
+
JSObject::ElementsKind kind(elements_kind());
|
|
4049
|
+
return kind >= JSObject::FIRST_EXTERNAL_ARRAY_ELEMENTS_KIND &&
|
|
4050
|
+
kind <= JSObject::LAST_EXTERNAL_ARRAY_ELEMENTS_KIND;
|
|
4051
|
+
}
|
|
4052
|
+
|
|
4053
|
+
inline bool has_dictionary_elements() {
|
|
4054
|
+
return elements_kind() == JSObject::DICTIONARY_ELEMENTS;
|
|
3769
4055
|
}
|
|
3770
4056
|
|
|
3771
4057
|
// Tells whether the map is attached to SharedFunctionInfo
|
|
@@ -3818,6 +4104,26 @@ class Map: public HeapObject {
|
|
|
3818
4104
|
DECL_ACCESSORS(prototype_transitions, FixedArray)
|
|
3819
4105
|
inline FixedArray* unchecked_prototype_transitions();
|
|
3820
4106
|
|
|
4107
|
+
static const int kProtoTransitionHeaderSize = 1;
|
|
4108
|
+
static const int kProtoTransitionNumberOfEntriesOffset = 0;
|
|
4109
|
+
static const int kProtoTransitionElementsPerEntry = 2;
|
|
4110
|
+
static const int kProtoTransitionPrototypeOffset = 0;
|
|
4111
|
+
static const int kProtoTransitionMapOffset = 1;
|
|
4112
|
+
|
|
4113
|
+
inline int NumberOfProtoTransitions() {
|
|
4114
|
+
FixedArray* cache = unchecked_prototype_transitions();
|
|
4115
|
+
if (cache->length() == 0) return 0;
|
|
4116
|
+
return
|
|
4117
|
+
Smi::cast(cache->get(kProtoTransitionNumberOfEntriesOffset))->value();
|
|
4118
|
+
}
|
|
4119
|
+
|
|
4120
|
+
inline void SetNumberOfProtoTransitions(int value) {
|
|
4121
|
+
FixedArray* cache = unchecked_prototype_transitions();
|
|
4122
|
+
ASSERT(cache->length() != 0);
|
|
4123
|
+
cache->set_unchecked(kProtoTransitionNumberOfEntriesOffset,
|
|
4124
|
+
Smi::FromInt(value));
|
|
4125
|
+
}
|
|
4126
|
+
|
|
3821
4127
|
// Lookup in the map's instance descriptors and fill out the result
|
|
3822
4128
|
// with the given holder if the name is found. The holder may be
|
|
3823
4129
|
// NULL when this function is used from the compiler.
|
|
@@ -3834,18 +4140,23 @@ class Map: public HeapObject {
|
|
|
3834
4140
|
// instance descriptors.
|
|
3835
4141
|
MUST_USE_RESULT MaybeObject* CopyDropTransitions();
|
|
3836
4142
|
|
|
3837
|
-
// Returns this map if it has
|
|
4143
|
+
// Returns this map if it already has elements that are fast, otherwise
|
|
3838
4144
|
// returns a copy of the map, with all transitions dropped from the
|
|
3839
|
-
// descriptors and the
|
|
4145
|
+
// descriptors and the ElementsKind set to FAST_ELEMENTS.
|
|
3840
4146
|
MUST_USE_RESULT inline MaybeObject* GetFastElementsMap();
|
|
3841
4147
|
|
|
3842
|
-
// Returns this map if it has
|
|
3843
|
-
// otherwise returns a copy of the map, with all transitions dropped
|
|
3844
|
-
//
|
|
4148
|
+
// Returns this map if it already has fast elements that are doubles,
|
|
4149
|
+
// otherwise returns a copy of the map, with all transitions dropped from the
|
|
4150
|
+
// descriptors and the ElementsKind set to FAST_DOUBLE_ELEMENTS.
|
|
4151
|
+
MUST_USE_RESULT inline MaybeObject* GetFastDoubleElementsMap();
|
|
4152
|
+
|
|
4153
|
+
// Returns this map if already has dictionary elements, otherwise returns a
|
|
4154
|
+
// copy of the map, with all transitions dropped from the descriptors and the
|
|
4155
|
+
// ElementsKind set to DICTIONARY_ELEMENTS.
|
|
3845
4156
|
MUST_USE_RESULT inline MaybeObject* GetSlowElementsMap();
|
|
3846
4157
|
|
|
3847
4158
|
// Returns a new map with all transitions dropped from the descriptors and the
|
|
3848
|
-
//
|
|
4159
|
+
// ElementsKind set to one of the value corresponding to array_type.
|
|
3849
4160
|
MUST_USE_RESULT MaybeObject* GetExternalArrayElementsMap(
|
|
3850
4161
|
ExternalArrayType array_type,
|
|
3851
4162
|
bool safe_to_add_transition);
|
|
@@ -3894,6 +4205,21 @@ class Map: public HeapObject {
|
|
|
3894
4205
|
// following back pointers.
|
|
3895
4206
|
void ClearNonLiveTransitions(Heap* heap, Object* real_prototype);
|
|
3896
4207
|
|
|
4208
|
+
// Computes a hash value for this map, to be used in HashTables and such.
|
|
4209
|
+
int Hash();
|
|
4210
|
+
|
|
4211
|
+
// Compares this map to another to see if they describe equivalent objects.
|
|
4212
|
+
// If |mode| is set to CLEAR_INOBJECT_PROPERTIES, |other| is treated as if
|
|
4213
|
+
// it had exactly zero inobject properties.
|
|
4214
|
+
// The "shared" flags of both this map and |other| are ignored.
|
|
4215
|
+
bool EquivalentToForNormalization(Map* other, PropertyNormalizationMode mode);
|
|
4216
|
+
|
|
4217
|
+
// Returns true if this map and |other| describe equivalent objects.
|
|
4218
|
+
// The "shared" flags of both this map and |other| are ignored.
|
|
4219
|
+
bool EquivalentTo(Map* other) {
|
|
4220
|
+
return EquivalentToForNormalization(other, KEEP_INOBJECT_PROPERTIES);
|
|
4221
|
+
}
|
|
4222
|
+
|
|
3897
4223
|
// Dispatched behavior.
|
|
3898
4224
|
#ifdef OBJECT_PRINT
|
|
3899
4225
|
inline void MapPrint() {
|
|
@@ -3986,13 +4312,21 @@ class Map: public HeapObject {
|
|
|
3986
4312
|
// Bit positions for bit field 2
|
|
3987
4313
|
static const int kIsExtensible = 0;
|
|
3988
4314
|
static const int kFunctionWithPrototype = 1;
|
|
3989
|
-
static const int
|
|
3990
|
-
static const int
|
|
3991
|
-
|
|
3992
|
-
|
|
4315
|
+
static const int kStringWrapperSafeForDefaultValueOf = 2;
|
|
4316
|
+
static const int kAttachedToSharedFunctionInfo = 3;
|
|
4317
|
+
// No bits can be used after kElementsKindFirstBit, they are all reserved for
|
|
4318
|
+
// storing ElementKind. for anything other than storing the ElementKind.
|
|
4319
|
+
static const int kElementsKindShift = 4;
|
|
4320
|
+
static const int kElementsKindBitCount = 4;
|
|
4321
|
+
|
|
4322
|
+
// Derived values from bit field 2
|
|
4323
|
+
static const int kElementsKindMask = (-1 << kElementsKindShift) &
|
|
4324
|
+
((1 << (kElementsKindShift + kElementsKindBitCount)) - 1);
|
|
4325
|
+
static const int8_t kMaximumBitField2FastElementValue = static_cast<int8_t>(
|
|
4326
|
+
(JSObject::FAST_ELEMENTS + 1) << Map::kElementsKindShift) - 1;
|
|
3993
4327
|
|
|
3994
4328
|
// Bit positions for bit field 3
|
|
3995
|
-
static const int kIsShared =
|
|
4329
|
+
static const int kIsShared = 0;
|
|
3996
4330
|
|
|
3997
4331
|
// Layout of the default cache. It holds alternating name and code objects.
|
|
3998
4332
|
static const int kCodeCacheEntrySize = 2;
|
|
@@ -4128,6 +4462,7 @@ class Script: public Struct {
|
|
|
4128
4462
|
#define FUNCTIONS_WITH_ID_LIST(V) \
|
|
4129
4463
|
V(Array.prototype, push, ArrayPush) \
|
|
4130
4464
|
V(Array.prototype, pop, ArrayPop) \
|
|
4465
|
+
V(Function.prototype, apply, FunctionApply) \
|
|
4131
4466
|
V(String.prototype, charCodeAt, StringCharCodeAt) \
|
|
4132
4467
|
V(String.prototype, charAt, StringCharAt) \
|
|
4133
4468
|
V(String, fromCharCode, StringFromCharCode) \
|
|
@@ -4287,9 +4622,7 @@ class SharedFunctionInfo: public HeapObject {
|
|
|
4287
4622
|
// False if there are definitely no live objects created from this function.
|
|
4288
4623
|
// True if live objects _may_ exist (existence not guaranteed).
|
|
4289
4624
|
// May go back from true to false after GC.
|
|
4290
|
-
|
|
4291
|
-
|
|
4292
|
-
inline void set_live_objects_may_exist(bool value);
|
|
4625
|
+
DECL_BOOLEAN_ACCESSORS(live_objects_may_exist)
|
|
4293
4626
|
|
|
4294
4627
|
// [instance class name]: class name for instances.
|
|
4295
4628
|
DECL_ACCESSORS(instance_class_name, Object)
|
|
@@ -4348,12 +4681,10 @@ class SharedFunctionInfo: public HeapObject {
|
|
|
4348
4681
|
inline void set_end_position(int end_position);
|
|
4349
4682
|
|
|
4350
4683
|
// Is this function a function expression in the source code.
|
|
4351
|
-
|
|
4352
|
-
inline void set_is_expression(bool value);
|
|
4684
|
+
DECL_BOOLEAN_ACCESSORS(is_expression)
|
|
4353
4685
|
|
|
4354
4686
|
// Is this function a top-level function (scripts, evals).
|
|
4355
|
-
|
|
4356
|
-
inline void set_is_toplevel(bool value);
|
|
4687
|
+
DECL_BOOLEAN_ACCESSORS(is_toplevel)
|
|
4357
4688
|
|
|
4358
4689
|
// Bit field containing various information collected by the compiler to
|
|
4359
4690
|
// drive optimization.
|
|
@@ -4380,8 +4711,7 @@ class SharedFunctionInfo: public HeapObject {
|
|
|
4380
4711
|
// Indicates if this function can be lazy compiled.
|
|
4381
4712
|
// This is used to determine if we can safely flush code from a function
|
|
4382
4713
|
// when doing GC if we expect that the function will no longer be used.
|
|
4383
|
-
|
|
4384
|
-
inline void set_allows_lazy_compilation(bool flag);
|
|
4714
|
+
DECL_BOOLEAN_ACCESSORS(allows_lazy_compilation)
|
|
4385
4715
|
|
|
4386
4716
|
// Indicates how many full GCs this function has survived with assigned
|
|
4387
4717
|
// code object. Used to determine when it is relatively safe to flush
|
|
@@ -4395,19 +4725,36 @@ class SharedFunctionInfo: public HeapObject {
|
|
|
4395
4725
|
// shared function info. If a function is repeatedly optimized or if
|
|
4396
4726
|
// we cannot optimize the function we disable optimization to avoid
|
|
4397
4727
|
// spending time attempting to optimize it again.
|
|
4398
|
-
|
|
4399
|
-
inline void set_optimization_disabled(bool value);
|
|
4728
|
+
DECL_BOOLEAN_ACCESSORS(optimization_disabled)
|
|
4400
4729
|
|
|
4401
4730
|
// Indicates whether the function is a strict mode function.
|
|
4402
|
-
|
|
4403
|
-
|
|
4731
|
+
DECL_BOOLEAN_ACCESSORS(strict_mode)
|
|
4732
|
+
|
|
4733
|
+
// False if the function definitely does not allocate an arguments object.
|
|
4734
|
+
DECL_BOOLEAN_ACCESSORS(uses_arguments)
|
|
4735
|
+
|
|
4736
|
+
// True if the function has any duplicated parameter names.
|
|
4737
|
+
DECL_BOOLEAN_ACCESSORS(has_duplicate_parameters)
|
|
4404
4738
|
|
|
4405
|
-
// Indicates whether the function is a native
|
|
4739
|
+
// Indicates whether the function is a native function.
|
|
4406
4740
|
// These needs special threatment in .call and .apply since
|
|
4407
4741
|
// null passed as the receiver should not be translated to the
|
|
4408
4742
|
// global object.
|
|
4409
|
-
|
|
4410
|
-
|
|
4743
|
+
DECL_BOOLEAN_ACCESSORS(native)
|
|
4744
|
+
|
|
4745
|
+
// Indicates that the function was created by the Function function.
|
|
4746
|
+
// Though it's anonymous, toString should treat it as if it had the name
|
|
4747
|
+
// "anonymous". We don't set the name itself so that the system does not
|
|
4748
|
+
// see a binding for it.
|
|
4749
|
+
DECL_BOOLEAN_ACCESSORS(name_should_print_as_anonymous)
|
|
4750
|
+
|
|
4751
|
+
// Indicates whether the function is a bound function created using
|
|
4752
|
+
// the bind function.
|
|
4753
|
+
DECL_BOOLEAN_ACCESSORS(bound)
|
|
4754
|
+
|
|
4755
|
+
// Indicates that the function is anonymous (the name field can be set
|
|
4756
|
+
// through the API, which does not change this flag).
|
|
4757
|
+
DECL_BOOLEAN_ACCESSORS(is_anonymous)
|
|
4411
4758
|
|
|
4412
4759
|
// Indicates whether or not the code in the shared function support
|
|
4413
4760
|
// deoptimization.
|
|
@@ -4587,14 +4934,24 @@ class SharedFunctionInfo: public HeapObject {
|
|
|
4587
4934
|
static const int kStartPositionMask = ~((1 << kStartPositionShift) - 1);
|
|
4588
4935
|
|
|
4589
4936
|
// Bit positions in compiler_hints.
|
|
4590
|
-
static const int
|
|
4591
|
-
static const int
|
|
4592
|
-
|
|
4593
|
-
|
|
4594
|
-
|
|
4595
|
-
|
|
4596
|
-
|
|
4597
|
-
|
|
4937
|
+
static const int kCodeAgeSize = 3;
|
|
4938
|
+
static const int kCodeAgeMask = (1 << kCodeAgeSize) - 1;
|
|
4939
|
+
|
|
4940
|
+
enum CompilerHints {
|
|
4941
|
+
kHasOnlySimpleThisPropertyAssignments,
|
|
4942
|
+
kAllowLazyCompilation,
|
|
4943
|
+
kLiveObjectsMayExist,
|
|
4944
|
+
kCodeAgeShift,
|
|
4945
|
+
kOptimizationDisabled = kCodeAgeShift + kCodeAgeSize,
|
|
4946
|
+
kStrictModeFunction,
|
|
4947
|
+
kUsesArguments,
|
|
4948
|
+
kHasDuplicateParameters,
|
|
4949
|
+
kNative,
|
|
4950
|
+
kBoundFunction,
|
|
4951
|
+
kIsAnonymous,
|
|
4952
|
+
kNameShouldPrintAsAnonymous,
|
|
4953
|
+
kCompilerHintsCount // Pseudo entry
|
|
4954
|
+
};
|
|
4598
4955
|
|
|
4599
4956
|
private:
|
|
4600
4957
|
#if V8_HOST_ARCH_32_BIT
|
|
@@ -4607,28 +4964,31 @@ class SharedFunctionInfo: public HeapObject {
|
|
|
4607
4964
|
static const int kCompilerHintsSize = kIntSize;
|
|
4608
4965
|
#endif
|
|
4609
4966
|
|
|
4967
|
+
STATIC_ASSERT(SharedFunctionInfo::kCompilerHintsCount <=
|
|
4968
|
+
SharedFunctionInfo::kCompilerHintsSize * kBitsPerByte);
|
|
4969
|
+
|
|
4610
4970
|
public:
|
|
4611
4971
|
// Constants for optimizing codegen for strict mode function and
|
|
4612
|
-
//
|
|
4972
|
+
// native tests.
|
|
4613
4973
|
// Allows to use byte-widgh instructions.
|
|
4614
4974
|
static const int kStrictModeBitWithinByte =
|
|
4615
4975
|
(kStrictModeFunction + kCompilerHintsSmiTagSize) % kBitsPerByte;
|
|
4616
4976
|
|
|
4617
|
-
static const int
|
|
4618
|
-
(
|
|
4977
|
+
static const int kNativeBitWithinByte =
|
|
4978
|
+
(kNative + kCompilerHintsSmiTagSize) % kBitsPerByte;
|
|
4619
4979
|
|
|
4620
4980
|
#if __BYTE_ORDER == __LITTLE_ENDIAN
|
|
4621
4981
|
static const int kStrictModeByteOffset = kCompilerHintsOffset +
|
|
4622
4982
|
(kStrictModeFunction + kCompilerHintsSmiTagSize) / kBitsPerByte;
|
|
4623
|
-
static const int
|
|
4624
|
-
(
|
|
4983
|
+
static const int kNativeByteOffset = kCompilerHintsOffset +
|
|
4984
|
+
(kNative + kCompilerHintsSmiTagSize) / kBitsPerByte;
|
|
4625
4985
|
#elif __BYTE_ORDER == __BIG_ENDIAN
|
|
4626
4986
|
static const int kStrictModeByteOffset = kCompilerHintsOffset +
|
|
4627
4987
|
(kCompilerHintsSize - 1) -
|
|
4628
4988
|
((kStrictModeFunction + kCompilerHintsSmiTagSize) / kBitsPerByte);
|
|
4629
|
-
static const int
|
|
4989
|
+
static const int kNativeByteOffset = kCompilerHintsOffset +
|
|
4630
4990
|
(kCompilerHintsSize - 1) -
|
|
4631
|
-
((
|
|
4991
|
+
((kNative + kCompilerHintsSmiTagSize) / kBitsPerByte);
|
|
4632
4992
|
#else
|
|
4633
4993
|
#error Unknown byte ordering
|
|
4634
4994
|
#endif
|
|
@@ -4685,9 +5045,6 @@ class JSFunction: public JSObject {
|
|
|
4685
5045
|
// recompilation.
|
|
4686
5046
|
inline bool IsMarkedForLazyRecompilation();
|
|
4687
5047
|
|
|
4688
|
-
// Compute a hash code for the source code of this function.
|
|
4689
|
-
uint32_t SourceHash();
|
|
4690
|
-
|
|
4691
5048
|
// Check whether or not this function is inlineable.
|
|
4692
5049
|
bool IsInlineable();
|
|
4693
5050
|
|
|
@@ -4787,6 +5144,7 @@ class JSFunction: public JSObject {
|
|
|
4787
5144
|
// Layout of the literals array.
|
|
4788
5145
|
static const int kLiteralsPrefixSize = 1;
|
|
4789
5146
|
static const int kLiteralGlobalContextIndex = 0;
|
|
5147
|
+
|
|
4790
5148
|
private:
|
|
4791
5149
|
DISALLOW_IMPLICIT_CONSTRUCTORS(JSFunction);
|
|
4792
5150
|
};
|
|
@@ -4825,7 +5183,6 @@ class JSGlobalProxy : public JSObject {
|
|
|
4825
5183
|
static const int kSize = kContextOffset + kPointerSize;
|
|
4826
5184
|
|
|
4827
5185
|
private:
|
|
4828
|
-
|
|
4829
5186
|
DISALLOW_IMPLICIT_CONSTRUCTORS(JSGlobalProxy);
|
|
4830
5187
|
};
|
|
4831
5188
|
|
|
@@ -4881,7 +5238,6 @@ class GlobalObject: public JSObject {
|
|
|
4881
5238
|
// JavaScript global object.
|
|
4882
5239
|
class JSGlobalObject: public GlobalObject {
|
|
4883
5240
|
public:
|
|
4884
|
-
|
|
4885
5241
|
// Casting.
|
|
4886
5242
|
static inline JSGlobalObject* cast(Object* obj);
|
|
4887
5243
|
|
|
@@ -5053,8 +5409,10 @@ class JSMessageObject: public JSObject {
|
|
|
5053
5409
|
// If it is an atom regexp
|
|
5054
5410
|
// - a reference to a literal string to search for
|
|
5055
5411
|
// If it is an irregexp regexp:
|
|
5056
|
-
// - a reference to code for ASCII inputs (bytecode or compiled)
|
|
5057
|
-
//
|
|
5412
|
+
// - a reference to code for ASCII inputs (bytecode or compiled), or a smi
|
|
5413
|
+
// used for tracking the last usage (used for code flushing).
|
|
5414
|
+
// - a reference to code for UC16 inputs (bytecode or compiled), or a smi
|
|
5415
|
+
// used for tracking the last usage (used for code flushing)..
|
|
5058
5416
|
// - max number of registers used by irregexp implementations.
|
|
5059
5417
|
// - number of capture registers (output values) of the regexp.
|
|
5060
5418
|
class JSRegExp: public JSObject {
|
|
@@ -5087,6 +5445,12 @@ class JSRegExp: public JSObject {
|
|
|
5087
5445
|
inline Object* DataAt(int index);
|
|
5088
5446
|
// Set implementation data after the object has been prepared.
|
|
5089
5447
|
inline void SetDataAt(int index, Object* value);
|
|
5448
|
+
|
|
5449
|
+
// Used during GC when flushing code or setting age.
|
|
5450
|
+
inline Object* DataAtUnchecked(int index);
|
|
5451
|
+
inline void SetDataAtUnchecked(int index, Object* value, Heap* heap);
|
|
5452
|
+
inline Type TypeTagUnchecked();
|
|
5453
|
+
|
|
5090
5454
|
static int code_index(bool is_ascii) {
|
|
5091
5455
|
if (is_ascii) {
|
|
5092
5456
|
return kIrregexpASCIICodeIndex;
|
|
@@ -5095,6 +5459,14 @@ class JSRegExp: public JSObject {
|
|
|
5095
5459
|
}
|
|
5096
5460
|
}
|
|
5097
5461
|
|
|
5462
|
+
static int saved_code_index(bool is_ascii) {
|
|
5463
|
+
if (is_ascii) {
|
|
5464
|
+
return kIrregexpASCIICodeSavedIndex;
|
|
5465
|
+
} else {
|
|
5466
|
+
return kIrregexpUC16CodeSavedIndex;
|
|
5467
|
+
}
|
|
5468
|
+
}
|
|
5469
|
+
|
|
5098
5470
|
static inline JSRegExp* cast(Object* obj);
|
|
5099
5471
|
|
|
5100
5472
|
// Dispatched behavior.
|
|
@@ -5125,11 +5497,19 @@ class JSRegExp: public JSObject {
|
|
|
5125
5497
|
// fails, this fields hold an exception object that should be
|
|
5126
5498
|
// thrown if the regexp is used again.
|
|
5127
5499
|
static const int kIrregexpUC16CodeIndex = kDataIndex + 1;
|
|
5500
|
+
|
|
5501
|
+
// Saved instance of Irregexp compiled code or bytecode for ASCII that
|
|
5502
|
+
// is a potential candidate for flushing.
|
|
5503
|
+
static const int kIrregexpASCIICodeSavedIndex = kDataIndex + 2;
|
|
5504
|
+
// Saved instance of Irregexp compiled code or bytecode for UC16 that is
|
|
5505
|
+
// a potential candidate for flushing.
|
|
5506
|
+
static const int kIrregexpUC16CodeSavedIndex = kDataIndex + 3;
|
|
5507
|
+
|
|
5128
5508
|
// Maximal number of registers used by either ASCII or UC16.
|
|
5129
5509
|
// Only used to check that there is enough stack space
|
|
5130
|
-
static const int kIrregexpMaxRegisterCountIndex = kDataIndex +
|
|
5510
|
+
static const int kIrregexpMaxRegisterCountIndex = kDataIndex + 4;
|
|
5131
5511
|
// Number of captures in the compiled regexp.
|
|
5132
|
-
static const int kIrregexpCaptureCountIndex = kDataIndex +
|
|
5512
|
+
static const int kIrregexpCaptureCountIndex = kDataIndex + 5;
|
|
5133
5513
|
|
|
5134
5514
|
static const int kIrregexpDataSize = kIrregexpCaptureCountIndex + 1;
|
|
5135
5515
|
|
|
@@ -5150,6 +5530,18 @@ class JSRegExp: public JSObject {
|
|
|
5150
5530
|
static const int kMultilineFieldIndex = 3;
|
|
5151
5531
|
static const int kLastIndexFieldIndex = 4;
|
|
5152
5532
|
static const int kInObjectFieldCount = 5;
|
|
5533
|
+
|
|
5534
|
+
// The uninitialized value for a regexp code object.
|
|
5535
|
+
static const int kUninitializedValue = -1;
|
|
5536
|
+
|
|
5537
|
+
// The compilation error value for the regexp code object. The real error
|
|
5538
|
+
// object is in the saved code field.
|
|
5539
|
+
static const int kCompilationErrorValue = -2;
|
|
5540
|
+
|
|
5541
|
+
// When we store the sweep generation at which we moved the code from the
|
|
5542
|
+
// code index to the saved code index we mask it of to be in the [0:255]
|
|
5543
|
+
// range.
|
|
5544
|
+
static const int kCodeAgeMask = 0xff;
|
|
5153
5545
|
};
|
|
5154
5546
|
|
|
5155
5547
|
|
|
@@ -5295,6 +5687,49 @@ class CodeCacheHashTable: public HashTable<CodeCacheHashTableShape,
|
|
|
5295
5687
|
};
|
|
5296
5688
|
|
|
5297
5689
|
|
|
5690
|
+
class PolymorphicCodeCache: public Struct {
|
|
5691
|
+
public:
|
|
5692
|
+
DECL_ACCESSORS(cache, Object)
|
|
5693
|
+
|
|
5694
|
+
MUST_USE_RESULT MaybeObject* Update(MapList* maps,
|
|
5695
|
+
Code::Flags flags,
|
|
5696
|
+
Code* code);
|
|
5697
|
+
Object* Lookup(MapList* maps, Code::Flags flags);
|
|
5698
|
+
|
|
5699
|
+
static inline PolymorphicCodeCache* cast(Object* obj);
|
|
5700
|
+
|
|
5701
|
+
#ifdef OBJECT_PRINT
|
|
5702
|
+
inline void PolymorphicCodeCachePrint() {
|
|
5703
|
+
PolymorphicCodeCachePrint(stdout);
|
|
5704
|
+
}
|
|
5705
|
+
void PolymorphicCodeCachePrint(FILE* out);
|
|
5706
|
+
#endif
|
|
5707
|
+
#ifdef DEBUG
|
|
5708
|
+
void PolymorphicCodeCacheVerify();
|
|
5709
|
+
#endif
|
|
5710
|
+
|
|
5711
|
+
static const int kCacheOffset = HeapObject::kHeaderSize;
|
|
5712
|
+
static const int kSize = kCacheOffset + kPointerSize;
|
|
5713
|
+
|
|
5714
|
+
private:
|
|
5715
|
+
DISALLOW_IMPLICIT_CONSTRUCTORS(PolymorphicCodeCache);
|
|
5716
|
+
};
|
|
5717
|
+
|
|
5718
|
+
|
|
5719
|
+
class PolymorphicCodeCacheHashTable
|
|
5720
|
+
: public HashTable<CodeCacheHashTableShape, HashTableKey*> {
|
|
5721
|
+
public:
|
|
5722
|
+
Object* Lookup(MapList* maps, int code_kind);
|
|
5723
|
+
MUST_USE_RESULT MaybeObject* Put(MapList* maps, int code_kind, Code* code);
|
|
5724
|
+
|
|
5725
|
+
static inline PolymorphicCodeCacheHashTable* cast(Object* obj);
|
|
5726
|
+
|
|
5727
|
+
static const int kInitialSize = 64;
|
|
5728
|
+
private:
|
|
5729
|
+
DISALLOW_IMPLICIT_CONSTRUCTORS(PolymorphicCodeCacheHashTable);
|
|
5730
|
+
};
|
|
5731
|
+
|
|
5732
|
+
|
|
5298
5733
|
enum AllowNullsFlag {ALLOW_NULLS, DISALLOW_NULLS};
|
|
5299
5734
|
enum RobustnessFlag {ROBUST_STRING_TRAVERSAL, FAST_STRING_TRAVERSAL};
|
|
5300
5735
|
|
|
@@ -5333,7 +5768,6 @@ class StringHasher {
|
|
|
5333
5768
|
static uint32_t MakeArrayIndexHash(uint32_t value, int length);
|
|
5334
5769
|
|
|
5335
5770
|
private:
|
|
5336
|
-
|
|
5337
5771
|
uint32_t array_index() {
|
|
5338
5772
|
ASSERT(is_array_index());
|
|
5339
5773
|
return array_index_;
|
|
@@ -5375,12 +5809,15 @@ class StringShape BASE_EMBEDDED {
|
|
|
5375
5809
|
inline bool IsSequential();
|
|
5376
5810
|
inline bool IsExternal();
|
|
5377
5811
|
inline bool IsCons();
|
|
5812
|
+
inline bool IsSliced();
|
|
5813
|
+
inline bool IsIndirect();
|
|
5378
5814
|
inline bool IsExternalAscii();
|
|
5379
5815
|
inline bool IsExternalTwoByte();
|
|
5380
5816
|
inline bool IsSequentialAscii();
|
|
5381
5817
|
inline bool IsSequentialTwoByte();
|
|
5382
5818
|
inline bool IsSymbol();
|
|
5383
5819
|
inline StringRepresentationTag representation_tag();
|
|
5820
|
+
inline uint32_t encoding_tag();
|
|
5384
5821
|
inline uint32_t full_representation_tag();
|
|
5385
5822
|
inline uint32_t size_tag();
|
|
5386
5823
|
#ifdef DEBUG
|
|
@@ -5390,6 +5827,7 @@ class StringShape BASE_EMBEDDED {
|
|
|
5390
5827
|
#else
|
|
5391
5828
|
inline void invalidate() { }
|
|
5392
5829
|
#endif
|
|
5830
|
+
|
|
5393
5831
|
private:
|
|
5394
5832
|
uint32_t type_;
|
|
5395
5833
|
#ifdef DEBUG
|
|
@@ -5411,6 +5849,51 @@ class StringShape BASE_EMBEDDED {
|
|
|
5411
5849
|
// All string values have a length field.
|
|
5412
5850
|
class String: public HeapObject {
|
|
5413
5851
|
public:
|
|
5852
|
+
// Representation of the flat content of a String.
|
|
5853
|
+
// A non-flat string doesn't have flat content.
|
|
5854
|
+
// A flat string has content that's encoded as a sequence of either
|
|
5855
|
+
// ASCII chars or two-byte UC16.
|
|
5856
|
+
// Returned by String::GetFlatContent().
|
|
5857
|
+
class FlatContent {
|
|
5858
|
+
public:
|
|
5859
|
+
// Returns true if the string is flat and this structure contains content.
|
|
5860
|
+
bool IsFlat() { return state_ != NON_FLAT; }
|
|
5861
|
+
// Returns true if the structure contains ASCII content.
|
|
5862
|
+
bool IsAscii() { return state_ == ASCII; }
|
|
5863
|
+
// Returns true if the structure contains two-byte content.
|
|
5864
|
+
bool IsTwoByte() { return state_ == TWO_BYTE; }
|
|
5865
|
+
|
|
5866
|
+
// Return the ASCII content of the string. Only use if IsAscii() returns
|
|
5867
|
+
// true.
|
|
5868
|
+
Vector<const char> ToAsciiVector() {
|
|
5869
|
+
ASSERT_EQ(ASCII, state_);
|
|
5870
|
+
return Vector<const char>::cast(buffer_);
|
|
5871
|
+
}
|
|
5872
|
+
// Return the two-byte content of the string. Only use if IsTwoByte()
|
|
5873
|
+
// returns true.
|
|
5874
|
+
Vector<const uc16> ToUC16Vector() {
|
|
5875
|
+
ASSERT_EQ(TWO_BYTE, state_);
|
|
5876
|
+
return Vector<const uc16>::cast(buffer_);
|
|
5877
|
+
}
|
|
5878
|
+
|
|
5879
|
+
private:
|
|
5880
|
+
enum State { NON_FLAT, ASCII, TWO_BYTE };
|
|
5881
|
+
|
|
5882
|
+
// Constructors only used by String::GetFlatContent().
|
|
5883
|
+
explicit FlatContent(Vector<const char> chars)
|
|
5884
|
+
: buffer_(Vector<const byte>::cast(chars)),
|
|
5885
|
+
state_(ASCII) { }
|
|
5886
|
+
explicit FlatContent(Vector<const uc16> chars)
|
|
5887
|
+
: buffer_(Vector<const byte>::cast(chars)),
|
|
5888
|
+
state_(TWO_BYTE) { }
|
|
5889
|
+
FlatContent() : buffer_(), state_(NON_FLAT) { }
|
|
5890
|
+
|
|
5891
|
+
Vector<const byte> buffer_;
|
|
5892
|
+
State state_;
|
|
5893
|
+
|
|
5894
|
+
friend class String;
|
|
5895
|
+
};
|
|
5896
|
+
|
|
5414
5897
|
// Get and set the length of the string.
|
|
5415
5898
|
inline int length();
|
|
5416
5899
|
inline void set_length(int value);
|
|
@@ -5419,14 +5902,19 @@ class String: public HeapObject {
|
|
|
5419
5902
|
inline uint32_t hash_field();
|
|
5420
5903
|
inline void set_hash_field(uint32_t value);
|
|
5421
5904
|
|
|
5905
|
+
// Returns whether this string has only ASCII chars, i.e. all of them can
|
|
5906
|
+
// be ASCII encoded. This might be the case even if the string is
|
|
5907
|
+
// two-byte. Such strings may appear when the embedder prefers
|
|
5908
|
+
// two-byte external representations even for ASCII data.
|
|
5422
5909
|
inline bool IsAsciiRepresentation();
|
|
5423
5910
|
inline bool IsTwoByteRepresentation();
|
|
5424
5911
|
|
|
5425
|
-
//
|
|
5426
|
-
//
|
|
5427
|
-
//
|
|
5428
|
-
|
|
5429
|
-
|
|
5912
|
+
// Cons and slices have an encoding flag that may not represent the actual
|
|
5913
|
+
// encoding of the underlying string. This is taken into account here.
|
|
5914
|
+
// Requires: this->IsFlat()
|
|
5915
|
+
inline bool IsAsciiRepresentationUnderneath();
|
|
5916
|
+
inline bool IsTwoByteRepresentationUnderneath();
|
|
5917
|
+
|
|
5430
5918
|
// NOTE: this should be considered only a hint. False negatives are
|
|
5431
5919
|
// possible.
|
|
5432
5920
|
inline bool HasOnlyAsciiChars();
|
|
@@ -5459,8 +5947,16 @@ class String: public HeapObject {
|
|
|
5459
5947
|
// string.
|
|
5460
5948
|
inline String* TryFlattenGetString(PretenureFlag pretenure = NOT_TENURED);
|
|
5461
5949
|
|
|
5462
|
-
|
|
5463
|
-
|
|
5950
|
+
// Tries to return the content of a flat string as a structure holding either
|
|
5951
|
+
// a flat vector of char or of uc16.
|
|
5952
|
+
// If the string isn't flat, and therefore doesn't have flat content, the
|
|
5953
|
+
// returned structure will report so, and can't provide a vector of either
|
|
5954
|
+
// kind.
|
|
5955
|
+
FlatContent GetFlatContent();
|
|
5956
|
+
|
|
5957
|
+
// Returns the parent of a sliced string or first part of a flat cons string.
|
|
5958
|
+
// Requires: StringShape(this).IsIndirect() && this->IsFlat()
|
|
5959
|
+
inline String* GetUnderlying();
|
|
5464
5960
|
|
|
5465
5961
|
// Mark the string as an undetectable object. It only applies to
|
|
5466
5962
|
// ascii and two byte string types.
|
|
@@ -5541,6 +6037,8 @@ class String: public HeapObject {
|
|
|
5541
6037
|
StringPrint(stdout);
|
|
5542
6038
|
}
|
|
5543
6039
|
void StringPrint(FILE* out);
|
|
6040
|
+
|
|
6041
|
+
char* ToAsciiArray();
|
|
5544
6042
|
#endif
|
|
5545
6043
|
#ifdef DEBUG
|
|
5546
6044
|
void StringVerify();
|
|
@@ -5727,7 +6225,6 @@ class String: public HeapObject {
|
|
|
5727
6225
|
// The SeqString abstract class captures sequential string values.
|
|
5728
6226
|
class SeqString: public String {
|
|
5729
6227
|
public:
|
|
5730
|
-
|
|
5731
6228
|
// Casting.
|
|
5732
6229
|
static inline SeqString* cast(Object* obj);
|
|
5733
6230
|
|
|
@@ -5889,11 +6386,69 @@ class ConsString: public String {
|
|
|
5889
6386
|
typedef FixedBodyDescriptor<kFirstOffset, kSecondOffset + kPointerSize, kSize>
|
|
5890
6387
|
BodyDescriptor;
|
|
5891
6388
|
|
|
6389
|
+
#ifdef DEBUG
|
|
6390
|
+
void ConsStringVerify();
|
|
6391
|
+
#endif
|
|
6392
|
+
|
|
5892
6393
|
private:
|
|
5893
6394
|
DISALLOW_IMPLICIT_CONSTRUCTORS(ConsString);
|
|
5894
6395
|
};
|
|
5895
6396
|
|
|
5896
6397
|
|
|
6398
|
+
// The Sliced String class describes strings that are substrings of another
|
|
6399
|
+
// sequential string. The motivation is to save time and memory when creating
|
|
6400
|
+
// a substring. A Sliced String is described as a pointer to the parent,
|
|
6401
|
+
// the offset from the start of the parent string and the length. Using
|
|
6402
|
+
// a Sliced String therefore requires unpacking of the parent string and
|
|
6403
|
+
// adding the offset to the start address. A substring of a Sliced String
|
|
6404
|
+
// are not nested since the double indirection is simplified when creating
|
|
6405
|
+
// such a substring.
|
|
6406
|
+
// Currently missing features are:
|
|
6407
|
+
// - handling externalized parent strings
|
|
6408
|
+
// - external strings as parent
|
|
6409
|
+
// - truncating sliced string to enable otherwise unneeded parent to be GC'ed.
|
|
6410
|
+
class SlicedString: public String {
|
|
6411
|
+
public:
|
|
6412
|
+
|
|
6413
|
+
inline String* parent();
|
|
6414
|
+
inline void set_parent(String* parent);
|
|
6415
|
+
inline int offset();
|
|
6416
|
+
inline void set_offset(int offset);
|
|
6417
|
+
|
|
6418
|
+
// Dispatched behavior.
|
|
6419
|
+
uint16_t SlicedStringGet(int index);
|
|
6420
|
+
|
|
6421
|
+
// Casting.
|
|
6422
|
+
static inline SlicedString* cast(Object* obj);
|
|
6423
|
+
|
|
6424
|
+
// Layout description.
|
|
6425
|
+
static const int kParentOffset = POINTER_SIZE_ALIGN(String::kSize);
|
|
6426
|
+
static const int kOffsetOffset = kParentOffset + kPointerSize;
|
|
6427
|
+
static const int kSize = kOffsetOffset + kPointerSize;
|
|
6428
|
+
|
|
6429
|
+
// Support for StringInputBuffer
|
|
6430
|
+
inline const unibrow::byte* SlicedStringReadBlock(ReadBlockBuffer* buffer,
|
|
6431
|
+
unsigned* offset_ptr,
|
|
6432
|
+
unsigned chars);
|
|
6433
|
+
inline void SlicedStringReadBlockIntoBuffer(ReadBlockBuffer* buffer,
|
|
6434
|
+
unsigned* offset_ptr,
|
|
6435
|
+
unsigned chars);
|
|
6436
|
+
// Minimum length for a sliced string.
|
|
6437
|
+
static const int kMinLength = 13;
|
|
6438
|
+
|
|
6439
|
+
typedef FixedBodyDescriptor<kParentOffset,
|
|
6440
|
+
kOffsetOffset + kPointerSize, kSize>
|
|
6441
|
+
BodyDescriptor;
|
|
6442
|
+
|
|
6443
|
+
#ifdef DEBUG
|
|
6444
|
+
void SlicedStringVerify();
|
|
6445
|
+
#endif
|
|
6446
|
+
|
|
6447
|
+
private:
|
|
6448
|
+
DISALLOW_IMPLICIT_CONSTRUCTORS(SlicedString);
|
|
6449
|
+
};
|
|
6450
|
+
|
|
6451
|
+
|
|
5897
6452
|
// The ExternalString class describes string values that are backed by
|
|
5898
6453
|
// a string resource that lies outside the V8 heap. ExternalStrings
|
|
5899
6454
|
// consist of the length field common to all strings, a pointer to the
|
|
@@ -6162,14 +6717,37 @@ class JSGlobalPropertyCell: public HeapObject {
|
|
|
6162
6717
|
|
|
6163
6718
|
|
|
6164
6719
|
// The JSProxy describes EcmaScript Harmony proxies
|
|
6165
|
-
class JSProxy: public
|
|
6720
|
+
class JSProxy: public JSReceiver {
|
|
6166
6721
|
public:
|
|
6167
6722
|
// [handler]: The handler property.
|
|
6168
6723
|
DECL_ACCESSORS(handler, Object)
|
|
6169
6724
|
|
|
6725
|
+
// [padding]: The padding slot (unused, see below).
|
|
6726
|
+
DECL_ACCESSORS(padding, Object)
|
|
6727
|
+
|
|
6170
6728
|
// Casting.
|
|
6171
6729
|
static inline JSProxy* cast(Object* obj);
|
|
6172
6730
|
|
|
6731
|
+
bool HasPropertyWithHandler(String* name);
|
|
6732
|
+
|
|
6733
|
+
MUST_USE_RESULT MaybeObject* SetPropertyWithHandler(
|
|
6734
|
+
String* name,
|
|
6735
|
+
Object* value,
|
|
6736
|
+
PropertyAttributes attributes,
|
|
6737
|
+
StrictModeFlag strict_mode);
|
|
6738
|
+
|
|
6739
|
+
MUST_USE_RESULT MaybeObject* DeletePropertyWithHandler(
|
|
6740
|
+
String* name,
|
|
6741
|
+
DeleteMode mode);
|
|
6742
|
+
|
|
6743
|
+
MUST_USE_RESULT PropertyAttributes GetPropertyAttributeWithHandler(
|
|
6744
|
+
JSReceiver* receiver,
|
|
6745
|
+
String* name,
|
|
6746
|
+
bool* has_exception);
|
|
6747
|
+
|
|
6748
|
+
// Turn this into an (empty) JSObject.
|
|
6749
|
+
void Fix();
|
|
6750
|
+
|
|
6173
6751
|
// Dispatched behavior.
|
|
6174
6752
|
#ifdef OBJECT_PRINT
|
|
6175
6753
|
inline void JSProxyPrint() {
|
|
@@ -6181,9 +6759,14 @@ class JSProxy: public HeapObject {
|
|
|
6181
6759
|
void JSProxyVerify();
|
|
6182
6760
|
#endif
|
|
6183
6761
|
|
|
6184
|
-
// Layout description.
|
|
6762
|
+
// Layout description. We add padding so that a proxy has the same
|
|
6763
|
+
// size as a virgin JSObject. This is essential for becoming a JSObject
|
|
6764
|
+
// upon freeze.
|
|
6185
6765
|
static const int kHandlerOffset = HeapObject::kHeaderSize;
|
|
6186
|
-
static const int
|
|
6766
|
+
static const int kPaddingOffset = kHandlerOffset + kPointerSize;
|
|
6767
|
+
static const int kSize = kPaddingOffset + kPointerSize;
|
|
6768
|
+
|
|
6769
|
+
STATIC_CHECK(kSize == JSObject::kHeaderSize);
|
|
6187
6770
|
|
|
6188
6771
|
typedef FixedBodyDescriptor<kHandlerOffset,
|
|
6189
6772
|
kHandlerOffset + kPointerSize,
|
|
@@ -6194,6 +6777,50 @@ class JSProxy: public HeapObject {
|
|
|
6194
6777
|
};
|
|
6195
6778
|
|
|
6196
6779
|
|
|
6780
|
+
// TODO(rossberg): Only a stub for now.
|
|
6781
|
+
class JSFunctionProxy: public JSProxy {
|
|
6782
|
+
public:
|
|
6783
|
+
// Casting.
|
|
6784
|
+
static inline JSFunctionProxy* cast(Object* obj);
|
|
6785
|
+
|
|
6786
|
+
private:
|
|
6787
|
+
DISALLOW_IMPLICIT_CONSTRUCTORS(JSFunctionProxy);
|
|
6788
|
+
};
|
|
6789
|
+
|
|
6790
|
+
|
|
6791
|
+
// The JSWeakMap describes EcmaScript Harmony weak maps
|
|
6792
|
+
class JSWeakMap: public JSObject {
|
|
6793
|
+
public:
|
|
6794
|
+
// [table]: the backing hash table mapping keys to values.
|
|
6795
|
+
DECL_ACCESSORS(table, ObjectHashTable)
|
|
6796
|
+
|
|
6797
|
+
// [next]: linked list of encountered weak maps during GC.
|
|
6798
|
+
DECL_ACCESSORS(next, Object)
|
|
6799
|
+
|
|
6800
|
+
// Unchecked accessors to be used during GC.
|
|
6801
|
+
inline ObjectHashTable* unchecked_table();
|
|
6802
|
+
|
|
6803
|
+
// Casting.
|
|
6804
|
+
static inline JSWeakMap* cast(Object* obj);
|
|
6805
|
+
|
|
6806
|
+
#ifdef OBJECT_PRINT
|
|
6807
|
+
inline void JSWeakMapPrint() {
|
|
6808
|
+
JSWeakMapPrint(stdout);
|
|
6809
|
+
}
|
|
6810
|
+
void JSWeakMapPrint(FILE* out);
|
|
6811
|
+
#endif
|
|
6812
|
+
#ifdef DEBUG
|
|
6813
|
+
void JSWeakMapVerify();
|
|
6814
|
+
#endif
|
|
6815
|
+
|
|
6816
|
+
static const int kTableOffset = JSObject::kHeaderSize;
|
|
6817
|
+
static const int kNextOffset = kTableOffset + kPointerSize;
|
|
6818
|
+
static const int kSize = kNextOffset + kPointerSize;
|
|
6819
|
+
|
|
6820
|
+
private:
|
|
6821
|
+
DISALLOW_IMPLICIT_CONSTRUCTORS(JSWeakMap);
|
|
6822
|
+
};
|
|
6823
|
+
|
|
6197
6824
|
|
|
6198
6825
|
// Foreign describes objects pointing from JavaScript to C structures.
|
|
6199
6826
|
// Since they cannot contain references to JS HeapObjects they can be
|
|
@@ -6501,6 +7128,7 @@ class FunctionTemplateInfo: public TemplateInfo {
|
|
|
6501
7128
|
// If the bit is set, object instances created by this function
|
|
6502
7129
|
// requires access check.
|
|
6503
7130
|
DECL_BOOLEAN_ACCESSORS(needs_access_check)
|
|
7131
|
+
DECL_BOOLEAN_ACCESSORS(read_only_prototype)
|
|
6504
7132
|
|
|
6505
7133
|
static inline FunctionTemplateInfo* cast(Object* obj);
|
|
6506
7134
|
|
|
@@ -6540,6 +7168,7 @@ class FunctionTemplateInfo: public TemplateInfo {
|
|
|
6540
7168
|
static const int kHiddenPrototypeBit = 0;
|
|
6541
7169
|
static const int kUndetectableBit = 1;
|
|
6542
7170
|
static const int kNeedsAccessCheckBit = 2;
|
|
7171
|
+
static const int kReadOnlyPrototypeBit = 3;
|
|
6543
7172
|
|
|
6544
7173
|
DISALLOW_IMPLICIT_CONSTRUCTORS(FunctionTemplateInfo);
|
|
6545
7174
|
};
|