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/json.js
CHANGED
|
@@ -153,7 +153,7 @@ function JSONSerialize(key, holder, replacer, stack, indent, gap) {
|
|
|
153
153
|
if (IS_STRING(value)) {
|
|
154
154
|
return %QuoteJSONString(value);
|
|
155
155
|
} else if (IS_NUMBER(value)) {
|
|
156
|
-
return
|
|
156
|
+
return JSON_NUMBER_TO_STRING(value);
|
|
157
157
|
} else if (IS_BOOLEAN(value)) {
|
|
158
158
|
return value ? "true" : "false";
|
|
159
159
|
} else if (IS_NULL(value)) {
|
|
@@ -164,7 +164,7 @@ function JSONSerialize(key, holder, replacer, stack, indent, gap) {
|
|
|
164
164
|
return SerializeArray(value, replacer, stack, indent, gap);
|
|
165
165
|
} else if (IS_NUMBER_WRAPPER(value)) {
|
|
166
166
|
value = ToNumber(value);
|
|
167
|
-
return
|
|
167
|
+
return JSON_NUMBER_TO_STRING(value);
|
|
168
168
|
} else if (IS_STRING_WRAPPER(value)) {
|
|
169
169
|
return %QuoteJSONString(ToString(value));
|
|
170
170
|
} else if (IS_BOOLEAN_WRAPPER(value)) {
|
|
@@ -191,31 +191,37 @@ function BasicSerializeArray(value, stack, builder) {
|
|
|
191
191
|
var val = value[0];
|
|
192
192
|
if (IS_STRING(val)) {
|
|
193
193
|
// First entry is a string. Remaining entries are likely to be strings too.
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
194
|
+
var array_string = %QuoteJSONStringArray(value);
|
|
195
|
+
if (!IS_UNDEFINED(array_string)) {
|
|
196
|
+
// array_string also includes bracket characters so we are done.
|
|
197
|
+
builder[builder.length - 1] = array_string;
|
|
198
|
+
stack.pop();
|
|
199
|
+
return;
|
|
200
|
+
} else {
|
|
201
|
+
builder.push(%QuoteJSONString(val));
|
|
202
|
+
for (var i = 1; i < len; i++) {
|
|
203
|
+
val = value[i];
|
|
204
|
+
if (IS_STRING(val)) {
|
|
205
|
+
builder.push(%QuoteJSONStringComma(val));
|
|
206
|
+
} else {
|
|
207
|
+
builder.push(",");
|
|
208
|
+
var before = builder.length;
|
|
209
|
+
BasicJSONSerialize(i, val, stack, builder);
|
|
210
|
+
if (before == builder.length) builder[before - 1] = ",null";
|
|
211
|
+
}
|
|
204
212
|
}
|
|
205
213
|
}
|
|
206
214
|
} else if (IS_NUMBER(val)) {
|
|
207
215
|
// First entry is a number. Remaining entries are likely to be numbers too.
|
|
208
|
-
builder.push(
|
|
216
|
+
builder.push(JSON_NUMBER_TO_STRING(val));
|
|
209
217
|
for (var i = 1; i < len; i++) {
|
|
210
218
|
builder.push(",");
|
|
211
219
|
val = value[i];
|
|
212
220
|
if (IS_NUMBER(val)) {
|
|
213
|
-
builder.push(
|
|
214
|
-
? %_NumberToString(val)
|
|
215
|
-
: "null");
|
|
221
|
+
builder.push(JSON_NUMBER_TO_STRING(val));
|
|
216
222
|
} else {
|
|
217
223
|
var before = builder.length;
|
|
218
|
-
BasicJSONSerialize(i,
|
|
224
|
+
BasicJSONSerialize(i, val, stack, builder);
|
|
219
225
|
if (before == builder.length) builder[before - 1] = ",null";
|
|
220
226
|
}
|
|
221
227
|
}
|
|
@@ -226,13 +232,12 @@ function BasicSerializeArray(value, stack, builder) {
|
|
|
226
232
|
for (var i = 1; i < len; i++) {
|
|
227
233
|
builder.push(",");
|
|
228
234
|
before = builder.length;
|
|
229
|
-
|
|
230
|
-
BasicJSONSerialize(i, val, stack, builder);
|
|
235
|
+
BasicJSONSerialize(i, value[i], stack, builder);
|
|
231
236
|
if (before == builder.length) builder[before - 1] = ",null";
|
|
232
237
|
}
|
|
233
238
|
}
|
|
234
239
|
stack.pop();
|
|
235
|
-
builder.push("]");
|
|
240
|
+
builder.push("]");
|
|
236
241
|
}
|
|
237
242
|
|
|
238
243
|
|
|
@@ -273,9 +278,9 @@ function BasicJSONSerialize(key, value, stack, builder) {
|
|
|
273
278
|
}
|
|
274
279
|
}
|
|
275
280
|
if (IS_STRING(value)) {
|
|
276
|
-
builder.push(%QuoteJSONString(value));
|
|
281
|
+
builder.push(value !== "" ? %QuoteJSONString(value) : '""');
|
|
277
282
|
} else if (IS_NUMBER(value)) {
|
|
278
|
-
builder.push(
|
|
283
|
+
builder.push(JSON_NUMBER_TO_STRING(value));
|
|
279
284
|
} else if (IS_BOOLEAN(value)) {
|
|
280
285
|
builder.push(value ? "true" : "false");
|
|
281
286
|
} else if (IS_NULL(value)) {
|
|
@@ -285,7 +290,7 @@ function BasicJSONSerialize(key, value, stack, builder) {
|
|
|
285
290
|
// Unwrap value if necessary
|
|
286
291
|
if (IS_NUMBER_WRAPPER(value)) {
|
|
287
292
|
value = ToNumber(value);
|
|
288
|
-
builder.push(
|
|
293
|
+
builder.push(JSON_NUMBER_TO_STRING(value));
|
|
289
294
|
} else if (IS_STRING_WRAPPER(value)) {
|
|
290
295
|
builder.push(%QuoteJSONString(ToString(value)));
|
|
291
296
|
} else if (IS_BOOLEAN_WRAPPER(value)) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Copyright
|
|
1
|
+
// Copyright 2011 the V8 project authors. All rights reserved.
|
|
2
2
|
// Redistribution and use in source and binary forms, with or without
|
|
3
3
|
// modification, are permitted provided that the following conditions are
|
|
4
4
|
// met:
|
|
@@ -127,7 +127,7 @@ Handle<Object> RegExpImpl::Compile(Handle<JSRegExp> re,
|
|
|
127
127
|
return re;
|
|
128
128
|
}
|
|
129
129
|
pattern = FlattenGetString(pattern);
|
|
130
|
-
|
|
130
|
+
ZoneScope zone_scope(isolate, DELETE_ON_EXIT);
|
|
131
131
|
PostponeInterruptsScope postpone(isolate);
|
|
132
132
|
RegExpCompileData parse_result;
|
|
133
133
|
FlatStringReader reader(isolate, pattern);
|
|
@@ -212,19 +212,7 @@ static void SetAtomLastCapture(FixedArray* array,
|
|
|
212
212
|
RegExpImpl::SetCapture(array, 1, to);
|
|
213
213
|
}
|
|
214
214
|
|
|
215
|
-
/* template <typename SubjectChar>, typename PatternChar>
|
|
216
|
-
static int ReStringMatch(Vector<const SubjectChar> sub_vector,
|
|
217
|
-
Vector<const PatternChar> pat_vector,
|
|
218
|
-
int start_index) {
|
|
219
215
|
|
|
220
|
-
int pattern_length = pat_vector.length();
|
|
221
|
-
if (pattern_length == 0) return start_index;
|
|
222
|
-
|
|
223
|
-
int subject_length = sub_vector.length();
|
|
224
|
-
if (start_index + pattern_length > subject_length) return -1;
|
|
225
|
-
return SearchString(sub_vector, pat_vector, start_index);
|
|
226
|
-
}
|
|
227
|
-
*/
|
|
228
216
|
Handle<Object> RegExpImpl::AtomExec(Handle<JSRegExp> re,
|
|
229
217
|
Handle<String> subject,
|
|
230
218
|
int index,
|
|
@@ -236,38 +224,41 @@ Handle<Object> RegExpImpl::AtomExec(Handle<JSRegExp> re,
|
|
|
236
224
|
|
|
237
225
|
if (!subject->IsFlat()) FlattenString(subject);
|
|
238
226
|
AssertNoAllocation no_heap_allocation; // ensure vectors stay valid
|
|
239
|
-
// Extract flattened substrings of cons strings before determining asciiness.
|
|
240
|
-
String* seq_sub = *subject;
|
|
241
|
-
if (seq_sub->IsConsString()) seq_sub = ConsString::cast(seq_sub)->first();
|
|
242
227
|
|
|
243
228
|
String* needle = String::cast(re->DataAt(JSRegExp::kAtomPatternIndex));
|
|
244
229
|
int needle_len = needle->length();
|
|
230
|
+
ASSERT(needle->IsFlat());
|
|
245
231
|
|
|
246
232
|
if (needle_len != 0) {
|
|
247
|
-
if (index + needle_len > subject->length())
|
|
248
|
-
|
|
233
|
+
if (index + needle_len > subject->length()) {
|
|
234
|
+
return isolate->factory()->null_value();
|
|
235
|
+
}
|
|
249
236
|
|
|
237
|
+
String::FlatContent needle_content = needle->GetFlatContent();
|
|
238
|
+
String::FlatContent subject_content = subject->GetFlatContent();
|
|
239
|
+
ASSERT(needle_content.IsFlat());
|
|
240
|
+
ASSERT(subject_content.IsFlat());
|
|
250
241
|
// dispatch on type of strings
|
|
251
|
-
index = (
|
|
252
|
-
? (
|
|
242
|
+
index = (needle_content.IsAscii()
|
|
243
|
+
? (subject_content.IsAscii()
|
|
253
244
|
? SearchString(isolate,
|
|
254
|
-
|
|
255
|
-
|
|
245
|
+
subject_content.ToAsciiVector(),
|
|
246
|
+
needle_content.ToAsciiVector(),
|
|
256
247
|
index)
|
|
257
248
|
: SearchString(isolate,
|
|
258
|
-
|
|
259
|
-
|
|
249
|
+
subject_content.ToUC16Vector(),
|
|
250
|
+
needle_content.ToAsciiVector(),
|
|
260
251
|
index))
|
|
261
|
-
: (
|
|
252
|
+
: (subject_content.IsAscii()
|
|
262
253
|
? SearchString(isolate,
|
|
263
|
-
|
|
264
|
-
|
|
254
|
+
subject_content.ToAsciiVector(),
|
|
255
|
+
needle_content.ToUC16Vector(),
|
|
265
256
|
index)
|
|
266
257
|
: SearchString(isolate,
|
|
267
|
-
|
|
268
|
-
|
|
258
|
+
subject_content.ToUC16Vector(),
|
|
259
|
+
needle_content.ToUC16Vector(),
|
|
269
260
|
index)));
|
|
270
|
-
if (index == -1) return
|
|
261
|
+
if (index == -1) return isolate->factory()->null_value();
|
|
271
262
|
}
|
|
272
263
|
ASSERT(last_match_info->HasFastElements());
|
|
273
264
|
|
|
@@ -295,31 +286,67 @@ bool RegExpImpl::EnsureCompiledIrregexp(Handle<JSRegExp> re, bool is_ascii) {
|
|
|
295
286
|
#else // V8_INTERPRETED_REGEXP (RegExp native code)
|
|
296
287
|
if (compiled_code->IsCode()) return true;
|
|
297
288
|
#endif
|
|
289
|
+
// We could potentially have marked this as flushable, but have kept
|
|
290
|
+
// a saved version if we did not flush it yet.
|
|
291
|
+
Object* saved_code = re->DataAt(JSRegExp::saved_code_index(is_ascii));
|
|
292
|
+
if (saved_code->IsCode()) {
|
|
293
|
+
// Reinstate the code in the original place.
|
|
294
|
+
re->SetDataAt(JSRegExp::code_index(is_ascii), saved_code);
|
|
295
|
+
ASSERT(compiled_code->IsSmi());
|
|
296
|
+
return true;
|
|
297
|
+
}
|
|
298
298
|
return CompileIrregexp(re, is_ascii);
|
|
299
299
|
}
|
|
300
300
|
|
|
301
301
|
|
|
302
|
+
static bool CreateRegExpErrorObjectAndThrow(Handle<JSRegExp> re,
|
|
303
|
+
bool is_ascii,
|
|
304
|
+
Handle<String> error_message,
|
|
305
|
+
Isolate* isolate) {
|
|
306
|
+
Factory* factory = isolate->factory();
|
|
307
|
+
Handle<FixedArray> elements = factory->NewFixedArray(2);
|
|
308
|
+
elements->set(0, re->Pattern());
|
|
309
|
+
elements->set(1, *error_message);
|
|
310
|
+
Handle<JSArray> array = factory->NewJSArrayWithElements(elements);
|
|
311
|
+
Handle<Object> regexp_err =
|
|
312
|
+
factory->NewSyntaxError("malformed_regexp", array);
|
|
313
|
+
isolate->Throw(*regexp_err);
|
|
314
|
+
return false;
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
|
|
302
318
|
bool RegExpImpl::CompileIrregexp(Handle<JSRegExp> re, bool is_ascii) {
|
|
303
319
|
// Compile the RegExp.
|
|
304
320
|
Isolate* isolate = re->GetIsolate();
|
|
305
|
-
|
|
321
|
+
ZoneScope zone_scope(isolate, DELETE_ON_EXIT);
|
|
306
322
|
PostponeInterruptsScope postpone(isolate);
|
|
323
|
+
// If we had a compilation error the last time this is saved at the
|
|
324
|
+
// saved code index.
|
|
307
325
|
Object* entry = re->DataAt(JSRegExp::code_index(is_ascii));
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
326
|
+
// When arriving here entry can only be a smi, either representing an
|
|
327
|
+
// uncompiled regexp, a previous compilation error, or code that has
|
|
328
|
+
// been flushed.
|
|
329
|
+
ASSERT(entry->IsSmi());
|
|
330
|
+
int entry_value = Smi::cast(entry)->value();
|
|
331
|
+
ASSERT(entry_value == JSRegExp::kUninitializedValue ||
|
|
332
|
+
entry_value == JSRegExp::kCompilationErrorValue ||
|
|
333
|
+
(entry_value < JSRegExp::kCodeAgeMask && entry_value >= 0));
|
|
334
|
+
|
|
335
|
+
if (entry_value == JSRegExp::kCompilationErrorValue) {
|
|
336
|
+
// A previous compilation failed and threw an error which we store in
|
|
337
|
+
// the saved code index (we store the error message, not the actual
|
|
338
|
+
// error). Recreate the error object and throw it.
|
|
339
|
+
Object* error_string = re->DataAt(JSRegExp::saved_code_index(is_ascii));
|
|
340
|
+
ASSERT(error_string->IsString());
|
|
341
|
+
Handle<String> error_message(String::cast(error_string));
|
|
342
|
+
CreateRegExpErrorObjectAndThrow(re, is_ascii, error_message, isolate);
|
|
312
343
|
return false;
|
|
313
344
|
}
|
|
314
|
-
ASSERT(entry->IsTheHole());
|
|
315
345
|
|
|
316
346
|
JSRegExp::Flags flags = re->GetFlags();
|
|
317
347
|
|
|
318
348
|
Handle<String> pattern(re->Pattern());
|
|
319
|
-
if (!pattern->IsFlat())
|
|
320
|
-
FlattenString(pattern);
|
|
321
|
-
}
|
|
322
|
-
|
|
349
|
+
if (!pattern->IsFlat()) FlattenString(pattern);
|
|
323
350
|
RegExpCompileData compile_data;
|
|
324
351
|
FlatStringReader reader(isolate, pattern);
|
|
325
352
|
if (!RegExpParser::ParseRegExp(&reader, flags.is_multiline(),
|
|
@@ -340,17 +367,9 @@ bool RegExpImpl::CompileIrregexp(Handle<JSRegExp> re, bool is_ascii) {
|
|
|
340
367
|
is_ascii);
|
|
341
368
|
if (result.error_message != NULL) {
|
|
342
369
|
// Unable to compile regexp.
|
|
343
|
-
Factory* factory = isolate->factory();
|
|
344
|
-
Handle<FixedArray> elements = factory->NewFixedArray(2);
|
|
345
|
-
elements->set(0, *pattern);
|
|
346
370
|
Handle<String> error_message =
|
|
347
|
-
factory->NewStringFromUtf8(CStrVector(result.error_message));
|
|
348
|
-
|
|
349
|
-
Handle<JSArray> array = factory->NewJSArrayWithElements(elements);
|
|
350
|
-
Handle<Object> regexp_err =
|
|
351
|
-
factory->NewSyntaxError("malformed_regexp", array);
|
|
352
|
-
isolate->Throw(*regexp_err);
|
|
353
|
-
re->SetDataAt(JSRegExp::code_index(is_ascii), *regexp_err);
|
|
371
|
+
isolate->factory()->NewStringFromUtf8(CStrVector(result.error_message));
|
|
372
|
+
CreateRegExpErrorObjectAndThrow(re, is_ascii, error_message, isolate);
|
|
354
373
|
return false;
|
|
355
374
|
}
|
|
356
375
|
|
|
@@ -411,22 +430,12 @@ void RegExpImpl::IrregexpInitialize(Handle<JSRegExp> re,
|
|
|
411
430
|
|
|
412
431
|
int RegExpImpl::IrregexpPrepare(Handle<JSRegExp> regexp,
|
|
413
432
|
Handle<String> subject) {
|
|
414
|
-
if (!subject->IsFlat())
|
|
415
|
-
|
|
416
|
-
}
|
|
433
|
+
if (!subject->IsFlat()) FlattenString(subject);
|
|
434
|
+
|
|
417
435
|
// Check the asciiness of the underlying storage.
|
|
418
|
-
bool is_ascii;
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
String* sequential_string = *subject;
|
|
422
|
-
if (subject->IsConsString()) {
|
|
423
|
-
sequential_string = ConsString::cast(*subject)->first();
|
|
424
|
-
}
|
|
425
|
-
is_ascii = sequential_string->IsAsciiRepresentation();
|
|
426
|
-
}
|
|
427
|
-
if (!EnsureCompiledIrregexp(regexp, is_ascii)) {
|
|
428
|
-
return -1;
|
|
429
|
-
}
|
|
436
|
+
bool is_ascii = subject->IsAsciiRepresentationUnderneath();
|
|
437
|
+
if (!EnsureCompiledIrregexp(regexp, is_ascii)) return -1;
|
|
438
|
+
|
|
430
439
|
#ifdef V8_INTERPRETED_REGEXP
|
|
431
440
|
// Byte-code regexp needs space allocated for all its registers.
|
|
432
441
|
return IrregexpNumberOfRegisters(FixedArray::cast(regexp->data()));
|
|
@@ -451,15 +460,12 @@ RegExpImpl::IrregexpResult RegExpImpl::IrregexpExecOnce(
|
|
|
451
460
|
ASSERT(index <= subject->length());
|
|
452
461
|
ASSERT(subject->IsFlat());
|
|
453
462
|
|
|
454
|
-
|
|
455
|
-
if (subject->IsConsString()) {
|
|
456
|
-
subject = Handle<String>(ConsString::cast(*subject)->first(), isolate);
|
|
457
|
-
}
|
|
463
|
+
bool is_ascii = subject->IsAsciiRepresentationUnderneath();
|
|
458
464
|
|
|
459
465
|
#ifndef V8_INTERPRETED_REGEXP
|
|
460
466
|
ASSERT(output.length() >= (IrregexpNumberOfCaptures(*irregexp) + 1) * 2);
|
|
461
467
|
do {
|
|
462
|
-
|
|
468
|
+
EnsureCompiledIrregexp(regexp, is_ascii);
|
|
463
469
|
Handle<Code> code(IrregexpNativeCode(*irregexp, is_ascii), isolate);
|
|
464
470
|
NativeRegExpMacroAssembler::Result res =
|
|
465
471
|
NativeRegExpMacroAssembler::Match(code,
|
|
@@ -486,13 +492,13 @@ RegExpImpl::IrregexpResult RegExpImpl::IrregexpExecOnce(
|
|
|
486
492
|
// being internal and external, and even between being ASCII and UC16,
|
|
487
493
|
// but the characters are always the same).
|
|
488
494
|
IrregexpPrepare(regexp, subject);
|
|
495
|
+
is_ascii = subject->IsAsciiRepresentationUnderneath();
|
|
489
496
|
} while (true);
|
|
490
497
|
UNREACHABLE();
|
|
491
498
|
return RE_EXCEPTION;
|
|
492
499
|
#else // V8_INTERPRETED_REGEXP
|
|
493
500
|
|
|
494
501
|
ASSERT(output.length() >= IrregexpNumberOfRegisters(*irregexp));
|
|
495
|
-
bool is_ascii = subject->IsAsciiRepresentation();
|
|
496
502
|
// We must have done EnsureCompiledIrregexp, so we can get the number of
|
|
497
503
|
// registers.
|
|
498
504
|
int* register_vector = output.start();
|
|
@@ -810,7 +816,13 @@ class RegExpCompiler {
|
|
|
810
816
|
inline bool ignore_case() { return ignore_case_; }
|
|
811
817
|
inline bool ascii() { return ascii_; }
|
|
812
818
|
|
|
819
|
+
int current_expansion_factor() { return current_expansion_factor_; }
|
|
820
|
+
void set_current_expansion_factor(int value) {
|
|
821
|
+
current_expansion_factor_ = value;
|
|
822
|
+
}
|
|
823
|
+
|
|
813
824
|
static const int kNoRegister = -1;
|
|
825
|
+
|
|
814
826
|
private:
|
|
815
827
|
EndNode* accept_;
|
|
816
828
|
int next_register_;
|
|
@@ -820,6 +832,7 @@ class RegExpCompiler {
|
|
|
820
832
|
bool ignore_case_;
|
|
821
833
|
bool ascii_;
|
|
822
834
|
bool reg_exp_too_big_;
|
|
835
|
+
int current_expansion_factor_;
|
|
823
836
|
};
|
|
824
837
|
|
|
825
838
|
|
|
@@ -847,7 +860,8 @@ RegExpCompiler::RegExpCompiler(int capture_count, bool ignore_case, bool ascii)
|
|
|
847
860
|
recursion_depth_(0),
|
|
848
861
|
ignore_case_(ignore_case),
|
|
849
862
|
ascii_(ascii),
|
|
850
|
-
reg_exp_too_big_(false)
|
|
863
|
+
reg_exp_too_big_(false),
|
|
864
|
+
current_expansion_factor_(1) {
|
|
851
865
|
accept_ = new EndNode(EndNode::ACCEPT);
|
|
852
866
|
ASSERT(next_register_ - 1 <= RegExpMacroAssembler::kMaxRegister);
|
|
853
867
|
}
|
|
@@ -1918,13 +1932,10 @@ void TextNode::GetQuickCheckDetails(QuickCheckDetails* details,
|
|
|
1918
1932
|
ASSERT(characters_filled_in < details->characters());
|
|
1919
1933
|
int characters = details->characters();
|
|
1920
1934
|
int char_mask;
|
|
1921
|
-
int char_shift;
|
|
1922
1935
|
if (compiler->ascii()) {
|
|
1923
1936
|
char_mask = String::kMaxAsciiCharCode;
|
|
1924
|
-
char_shift = 8;
|
|
1925
1937
|
} else {
|
|
1926
1938
|
char_mask = String::kMaxUC16CharCode;
|
|
1927
|
-
char_shift = 16;
|
|
1928
1939
|
}
|
|
1929
1940
|
for (int k = 0; k < elms_->length(); k++) {
|
|
1930
1941
|
TextElement elm = elms_->at(k);
|
|
@@ -2767,6 +2778,7 @@ class AlternativeGenerationList {
|
|
|
2767
2778
|
AlternativeGeneration* at(int i) {
|
|
2768
2779
|
return alt_gens_[i];
|
|
2769
2780
|
}
|
|
2781
|
+
|
|
2770
2782
|
private:
|
|
2771
2783
|
static const int kAFew = 10;
|
|
2772
2784
|
ZoneList<AlternativeGeneration*> alt_gens_;
|
|
@@ -3326,6 +3338,7 @@ class TableEntryHeaderPrinter {
|
|
|
3326
3338
|
}
|
|
3327
3339
|
stream()->Add("}}");
|
|
3328
3340
|
}
|
|
3341
|
+
|
|
3329
3342
|
private:
|
|
3330
3343
|
bool first_;
|
|
3331
3344
|
StringStream* stream() { return stream_; }
|
|
@@ -3727,6 +3740,44 @@ RegExpNode* RegExpQuantifier::ToNode(RegExpCompiler* compiler,
|
|
|
3727
3740
|
}
|
|
3728
3741
|
|
|
3729
3742
|
|
|
3743
|
+
// Scoped object to keep track of how much we unroll quantifier loops in the
|
|
3744
|
+
// regexp graph generator.
|
|
3745
|
+
class RegExpExpansionLimiter {
|
|
3746
|
+
public:
|
|
3747
|
+
static const int kMaxExpansionFactor = 6;
|
|
3748
|
+
RegExpExpansionLimiter(RegExpCompiler* compiler, int factor)
|
|
3749
|
+
: compiler_(compiler),
|
|
3750
|
+
saved_expansion_factor_(compiler->current_expansion_factor()),
|
|
3751
|
+
ok_to_expand_(saved_expansion_factor_ <= kMaxExpansionFactor) {
|
|
3752
|
+
ASSERT(factor > 0);
|
|
3753
|
+
if (ok_to_expand_) {
|
|
3754
|
+
if (factor > kMaxExpansionFactor) {
|
|
3755
|
+
// Avoid integer overflow of the current expansion factor.
|
|
3756
|
+
ok_to_expand_ = false;
|
|
3757
|
+
compiler->set_current_expansion_factor(kMaxExpansionFactor + 1);
|
|
3758
|
+
} else {
|
|
3759
|
+
int new_factor = saved_expansion_factor_ * factor;
|
|
3760
|
+
ok_to_expand_ = (new_factor <= kMaxExpansionFactor);
|
|
3761
|
+
compiler->set_current_expansion_factor(new_factor);
|
|
3762
|
+
}
|
|
3763
|
+
}
|
|
3764
|
+
}
|
|
3765
|
+
|
|
3766
|
+
~RegExpExpansionLimiter() {
|
|
3767
|
+
compiler_->set_current_expansion_factor(saved_expansion_factor_);
|
|
3768
|
+
}
|
|
3769
|
+
|
|
3770
|
+
bool ok_to_expand() { return ok_to_expand_; }
|
|
3771
|
+
|
|
3772
|
+
private:
|
|
3773
|
+
RegExpCompiler* compiler_;
|
|
3774
|
+
int saved_expansion_factor_;
|
|
3775
|
+
bool ok_to_expand_;
|
|
3776
|
+
|
|
3777
|
+
DISALLOW_IMPLICIT_CONSTRUCTORS(RegExpExpansionLimiter);
|
|
3778
|
+
};
|
|
3779
|
+
|
|
3780
|
+
|
|
3730
3781
|
RegExpNode* RegExpQuantifier::ToNode(int min,
|
|
3731
3782
|
int max,
|
|
3732
3783
|
bool is_greedy,
|
|
@@ -3766,38 +3817,46 @@ RegExpNode* RegExpQuantifier::ToNode(int min,
|
|
|
3766
3817
|
} else if (FLAG_regexp_optimization && !needs_capture_clearing) {
|
|
3767
3818
|
// Only unroll if there are no captures and the body can't be
|
|
3768
3819
|
// empty.
|
|
3769
|
-
|
|
3770
|
-
|
|
3771
|
-
|
|
3772
|
-
|
|
3773
|
-
|
|
3774
|
-
|
|
3775
|
-
|
|
3776
|
-
|
|
3777
|
-
|
|
3778
|
-
|
|
3820
|
+
{
|
|
3821
|
+
RegExpExpansionLimiter limiter(
|
|
3822
|
+
compiler, min + ((max != min) ? 1 : 0));
|
|
3823
|
+
if (min > 0 && min <= kMaxUnrolledMinMatches && limiter.ok_to_expand()) {
|
|
3824
|
+
int new_max = (max == kInfinity) ? max : max - min;
|
|
3825
|
+
// Recurse once to get the loop or optional matches after the fixed
|
|
3826
|
+
// ones.
|
|
3827
|
+
RegExpNode* answer = ToNode(
|
|
3828
|
+
0, new_max, is_greedy, body, compiler, on_success, true);
|
|
3829
|
+
// Unroll the forced matches from 0 to min. This can cause chains of
|
|
3830
|
+
// TextNodes (which the parser does not generate). These should be
|
|
3831
|
+
// combined if it turns out they hinder good code generation.
|
|
3832
|
+
for (int i = 0; i < min; i++) {
|
|
3833
|
+
answer = body->ToNode(compiler, answer);
|
|
3834
|
+
}
|
|
3835
|
+
return answer;
|
|
3779
3836
|
}
|
|
3780
|
-
return answer;
|
|
3781
3837
|
}
|
|
3782
|
-
if (max <= kMaxUnrolledMaxMatches) {
|
|
3783
|
-
ASSERT(
|
|
3784
|
-
|
|
3785
|
-
|
|
3786
|
-
|
|
3787
|
-
|
|
3788
|
-
|
|
3789
|
-
alternation
|
|
3790
|
-
|
|
3791
|
-
|
|
3792
|
-
|
|
3793
|
-
|
|
3794
|
-
|
|
3795
|
-
|
|
3838
|
+
if (max <= kMaxUnrolledMaxMatches && min == 0) {
|
|
3839
|
+
ASSERT(max > 0); // Due to the 'if' above.
|
|
3840
|
+
RegExpExpansionLimiter limiter(compiler, max);
|
|
3841
|
+
if (limiter.ok_to_expand()) {
|
|
3842
|
+
// Unroll the optional matches up to max.
|
|
3843
|
+
RegExpNode* answer = on_success;
|
|
3844
|
+
for (int i = 0; i < max; i++) {
|
|
3845
|
+
ChoiceNode* alternation = new ChoiceNode(2);
|
|
3846
|
+
if (is_greedy) {
|
|
3847
|
+
alternation->AddAlternative(
|
|
3848
|
+
GuardedAlternative(body->ToNode(compiler, answer)));
|
|
3849
|
+
alternation->AddAlternative(GuardedAlternative(on_success));
|
|
3850
|
+
} else {
|
|
3851
|
+
alternation->AddAlternative(GuardedAlternative(on_success));
|
|
3852
|
+
alternation->AddAlternative(
|
|
3853
|
+
GuardedAlternative(body->ToNode(compiler, answer)));
|
|
3854
|
+
}
|
|
3855
|
+
answer = alternation;
|
|
3856
|
+
if (not_at_start) alternation->set_not_at_start();
|
|
3796
3857
|
}
|
|
3797
|
-
answer
|
|
3798
|
-
if (not_at_start) alternation->set_not_at_start();
|
|
3858
|
+
return answer;
|
|
3799
3859
|
}
|
|
3800
|
-
return answer;
|
|
3801
3860
|
}
|
|
3802
3861
|
}
|
|
3803
3862
|
bool has_min = min > 0;
|
|
@@ -4123,12 +4182,6 @@ void CharacterRange::Split(ZoneList<CharacterRange>* base,
|
|
|
4123
4182
|
}
|
|
4124
4183
|
|
|
4125
4184
|
|
|
4126
|
-
static void AddUncanonicals(Isolate* isolate,
|
|
4127
|
-
ZoneList<CharacterRange>* ranges,
|
|
4128
|
-
int bottom,
|
|
4129
|
-
int top);
|
|
4130
|
-
|
|
4131
|
-
|
|
4132
4185
|
void CharacterRange::AddCaseEquivalents(ZoneList<CharacterRange>* ranges,
|
|
4133
4186
|
bool is_ascii) {
|
|
4134
4187
|
Isolate* isolate = Isolate::Current();
|
|
@@ -4289,101 +4342,6 @@ SetRelation CharacterRange::WordCharacterRelation(
|
|
|
4289
4342
|
}
|
|
4290
4343
|
|
|
4291
4344
|
|
|
4292
|
-
static void AddUncanonicals(Isolate* isolate,
|
|
4293
|
-
ZoneList<CharacterRange>* ranges,
|
|
4294
|
-
int bottom,
|
|
4295
|
-
int top) {
|
|
4296
|
-
unibrow::uchar chars[unibrow::Ecma262UnCanonicalize::kMaxWidth];
|
|
4297
|
-
// Zones with no case mappings. There is a DEBUG-mode loop to assert that
|
|
4298
|
-
// this table is correct.
|
|
4299
|
-
// 0x0600 - 0x0fff
|
|
4300
|
-
// 0x1100 - 0x1cff
|
|
4301
|
-
// 0x2000 - 0x20ff
|
|
4302
|
-
// 0x2200 - 0x23ff
|
|
4303
|
-
// 0x2500 - 0x2bff
|
|
4304
|
-
// 0x2e00 - 0xa5ff
|
|
4305
|
-
// 0xa800 - 0xfaff
|
|
4306
|
-
// 0xfc00 - 0xfeff
|
|
4307
|
-
const int boundary_count = 18;
|
|
4308
|
-
int boundaries[] = {
|
|
4309
|
-
0x600, 0x1000, 0x1100, 0x1d00, 0x2000, 0x2100, 0x2200, 0x2400, 0x2500,
|
|
4310
|
-
0x2c00, 0x2e00, 0xa600, 0xa800, 0xfb00, 0xfc00, 0xff00};
|
|
4311
|
-
|
|
4312
|
-
// Special ASCII rule from spec can save us some work here.
|
|
4313
|
-
if (bottom == 0x80 && top == 0xffff) return;
|
|
4314
|
-
|
|
4315
|
-
if (top <= boundaries[0]) {
|
|
4316
|
-
CharacterRange range(bottom, top);
|
|
4317
|
-
range.AddCaseEquivalents(ranges, false);
|
|
4318
|
-
return;
|
|
4319
|
-
}
|
|
4320
|
-
|
|
4321
|
-
// Split up very large ranges. This helps remove ranges where there are no
|
|
4322
|
-
// case mappings.
|
|
4323
|
-
for (int i = 0; i < boundary_count; i++) {
|
|
4324
|
-
if (bottom < boundaries[i] && top >= boundaries[i]) {
|
|
4325
|
-
AddUncanonicals(isolate, ranges, bottom, boundaries[i] - 1);
|
|
4326
|
-
AddUncanonicals(isolate, ranges, boundaries[i], top);
|
|
4327
|
-
return;
|
|
4328
|
-
}
|
|
4329
|
-
}
|
|
4330
|
-
|
|
4331
|
-
// If we are completely in a zone with no case mappings then we are done.
|
|
4332
|
-
for (int i = 0; i < boundary_count; i += 2) {
|
|
4333
|
-
if (bottom >= boundaries[i] && top < boundaries[i + 1]) {
|
|
4334
|
-
#ifdef DEBUG
|
|
4335
|
-
for (int j = bottom; j <= top; j++) {
|
|
4336
|
-
unsigned current_char = j;
|
|
4337
|
-
int length = isolate->jsregexp_uncanonicalize()->get(current_char,
|
|
4338
|
-
'\0', chars);
|
|
4339
|
-
for (int k = 0; k < length; k++) {
|
|
4340
|
-
ASSERT(chars[k] == current_char);
|
|
4341
|
-
}
|
|
4342
|
-
}
|
|
4343
|
-
#endif
|
|
4344
|
-
return;
|
|
4345
|
-
}
|
|
4346
|
-
}
|
|
4347
|
-
|
|
4348
|
-
// Step through the range finding equivalent characters.
|
|
4349
|
-
ZoneList<unibrow::uchar> *characters = new ZoneList<unibrow::uchar>(100);
|
|
4350
|
-
for (int i = bottom; i <= top; i++) {
|
|
4351
|
-
int length = isolate->jsregexp_uncanonicalize()->get(i, '\0', chars);
|
|
4352
|
-
for (int j = 0; j < length; j++) {
|
|
4353
|
-
uc32 chr = chars[j];
|
|
4354
|
-
if (chr != i && (chr < bottom || chr > top)) {
|
|
4355
|
-
characters->Add(chr);
|
|
4356
|
-
}
|
|
4357
|
-
}
|
|
4358
|
-
}
|
|
4359
|
-
|
|
4360
|
-
// Step through the equivalent characters finding simple ranges and
|
|
4361
|
-
// adding ranges to the character class.
|
|
4362
|
-
if (characters->length() > 0) {
|
|
4363
|
-
int new_from = characters->at(0);
|
|
4364
|
-
int new_to = new_from;
|
|
4365
|
-
for (int i = 1; i < characters->length(); i++) {
|
|
4366
|
-
int chr = characters->at(i);
|
|
4367
|
-
if (chr == new_to + 1) {
|
|
4368
|
-
new_to++;
|
|
4369
|
-
} else {
|
|
4370
|
-
if (new_to == new_from) {
|
|
4371
|
-
ranges->Add(CharacterRange::Singleton(new_from));
|
|
4372
|
-
} else {
|
|
4373
|
-
ranges->Add(CharacterRange(new_from, new_to));
|
|
4374
|
-
}
|
|
4375
|
-
new_from = new_to = chr;
|
|
4376
|
-
}
|
|
4377
|
-
}
|
|
4378
|
-
if (new_to == new_from) {
|
|
4379
|
-
ranges->Add(CharacterRange::Singleton(new_from));
|
|
4380
|
-
} else {
|
|
4381
|
-
ranges->Add(CharacterRange(new_from, new_to));
|
|
4382
|
-
}
|
|
4383
|
-
}
|
|
4384
|
-
}
|
|
4385
|
-
|
|
4386
|
-
|
|
4387
4345
|
ZoneList<CharacterRange>* CharacterSet::ranges() {
|
|
4388
4346
|
if (ranges_ == NULL) {
|
|
4389
4347
|
ranges_ = new ZoneList<CharacterRange>(2);
|
|
@@ -4901,7 +4859,6 @@ void TextNode::CalculateOffsets() {
|
|
|
4901
4859
|
cp_offset += elm.data.u_atom->data().length();
|
|
4902
4860
|
} else {
|
|
4903
4861
|
cp_offset++;
|
|
4904
|
-
Vector<const uc16> quarks = elm.data.u_atom->data();
|
|
4905
4862
|
}
|
|
4906
4863
|
}
|
|
4907
4864
|
}
|
|
@@ -5340,8 +5297,6 @@ RegExpEngine::CompilationResult RegExpEngine::Compile(RegExpCompileData* data,
|
|
|
5340
5297
|
return CompilationResult(error_message);
|
|
5341
5298
|
}
|
|
5342
5299
|
|
|
5343
|
-
NodeInfo info = *node->info();
|
|
5344
|
-
|
|
5345
5300
|
// Create the correct assembler for the architecture.
|
|
5346
5301
|
#ifndef V8_INTERPRETED_REGEXP
|
|
5347
5302
|
// Native regexp implementation.
|