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
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
// Copyright 2011 the V8 project authors. All rights reserved.
|
|
2
|
+
// Redistribution and use in source and binary forms, with or without
|
|
3
|
+
// modification, are permitted provided that the following conditions are
|
|
4
|
+
// met:
|
|
5
|
+
//
|
|
6
|
+
// * Redistributions of source code must retain the above copyright
|
|
7
|
+
// notice, this list of conditions and the following disclaimer.
|
|
8
|
+
// * Redistributions in binary form must reproduce the above
|
|
9
|
+
// copyright notice, this list of conditions and the following
|
|
10
|
+
// disclaimer in the documentation and/or other materials provided
|
|
11
|
+
// with the distribution.
|
|
12
|
+
// * Neither the name of Google Inc. nor the names of its
|
|
13
|
+
// contributors may be used to endorse or promote products derived
|
|
14
|
+
// from this software without specific prior written permission.
|
|
15
|
+
//
|
|
16
|
+
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
17
|
+
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
18
|
+
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
19
|
+
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
20
|
+
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
21
|
+
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
22
|
+
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
23
|
+
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
24
|
+
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
25
|
+
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
26
|
+
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
27
|
+
|
|
28
|
+
#ifndef V8_ELEMENTS_H_
|
|
29
|
+
#define V8_ELEMENTS_H_
|
|
30
|
+
|
|
31
|
+
#include "objects.h"
|
|
32
|
+
|
|
33
|
+
namespace v8 {
|
|
34
|
+
namespace internal {
|
|
35
|
+
|
|
36
|
+
// Abstract base class for handles that can operate on objects with differing
|
|
37
|
+
// ElementsKinds.
|
|
38
|
+
class ElementsAccessor {
|
|
39
|
+
public:
|
|
40
|
+
ElementsAccessor() { }
|
|
41
|
+
virtual ~ElementsAccessor() { }
|
|
42
|
+
virtual MaybeObject* Get(FixedArrayBase* backing_store,
|
|
43
|
+
uint32_t key,
|
|
44
|
+
JSObject* holder,
|
|
45
|
+
Object* receiver) = 0;
|
|
46
|
+
|
|
47
|
+
virtual MaybeObject* Delete(JSObject* holder,
|
|
48
|
+
uint32_t key,
|
|
49
|
+
JSReceiver::DeleteMode mode) = 0;
|
|
50
|
+
|
|
51
|
+
virtual MaybeObject* AddElementsToFixedArray(FixedArrayBase* from,
|
|
52
|
+
FixedArray* to,
|
|
53
|
+
JSObject* holder,
|
|
54
|
+
Object* receiver) = 0;
|
|
55
|
+
|
|
56
|
+
// Returns a shared ElementsAccessor for the specified ElementsKind.
|
|
57
|
+
static ElementsAccessor* ForKind(JSObject::ElementsKind elements_kind) {
|
|
58
|
+
ASSERT(elements_kind < JSObject::kElementsKindCount);
|
|
59
|
+
return elements_accessors_[elements_kind];
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
static ElementsAccessor* ForArray(FixedArrayBase* array);
|
|
63
|
+
|
|
64
|
+
static void InitializeOncePerProcess();
|
|
65
|
+
|
|
66
|
+
protected:
|
|
67
|
+
friend class NonStrictArgumentsElementsAccessor;
|
|
68
|
+
|
|
69
|
+
virtual uint32_t GetCapacity(FixedArrayBase* backing_store) = 0;
|
|
70
|
+
|
|
71
|
+
virtual bool HasElementAtIndex(FixedArrayBase* backing_store,
|
|
72
|
+
uint32_t index,
|
|
73
|
+
JSObject* holder,
|
|
74
|
+
Object* receiver) = 0;
|
|
75
|
+
|
|
76
|
+
// Element handlers distinguish between indexes and keys when the manipulate
|
|
77
|
+
// elements. Indexes refer to elements in terms of their location in the
|
|
78
|
+
// underlying storage's backing store representation, and are between 0
|
|
79
|
+
// GetCapacity. Keys refer to elements in terms of the value that would be
|
|
80
|
+
// specific in JavaScript to access the element. In most implementations, keys
|
|
81
|
+
// are equivalent to indexes, and GetKeyForIndex returns the same value it is
|
|
82
|
+
// passed. In the NumberDictionary ElementsAccessor, GetKeyForIndex maps the
|
|
83
|
+
// index to a key using the KeyAt method on the NumberDictionary.
|
|
84
|
+
virtual uint32_t GetKeyForIndex(FixedArrayBase* backing_store,
|
|
85
|
+
uint32_t index) = 0;
|
|
86
|
+
|
|
87
|
+
private:
|
|
88
|
+
static ElementsAccessor** elements_accessors_;
|
|
89
|
+
|
|
90
|
+
DISALLOW_COPY_AND_ASSIGN(ElementsAccessor);
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
} } // namespace v8::internal
|
|
94
|
+
|
|
95
|
+
#endif // V8_ELEMENTS_H_
|
|
@@ -132,7 +132,7 @@ static Handle<Object> Invoke(bool construct,
|
|
|
132
132
|
if (*has_pending_exception) {
|
|
133
133
|
isolate->ReportPendingMessages();
|
|
134
134
|
if (isolate->pending_exception() == Failure::OutOfMemoryException()) {
|
|
135
|
-
if (!isolate->
|
|
135
|
+
if (!isolate->ignore_out_of_memory()) {
|
|
136
136
|
V8::FatalProcessOutOfMemory("JS", true);
|
|
137
137
|
}
|
|
138
138
|
}
|
|
@@ -210,23 +210,6 @@ Handle<Object> Execution::GetFunctionDelegate(Handle<Object> object) {
|
|
|
210
210
|
// If you return a function from here, it will be called when an
|
|
211
211
|
// attempt is made to call the given object as a function.
|
|
212
212
|
|
|
213
|
-
// Regular expressions can be called as functions in both Firefox
|
|
214
|
-
// and Safari so we allow it too.
|
|
215
|
-
if (object->IsJSRegExp()) {
|
|
216
|
-
Handle<String> exec = factory->exec_symbol();
|
|
217
|
-
// TODO(lrn): Bug 617. We should use the default function here, not the
|
|
218
|
-
// one on the RegExp object.
|
|
219
|
-
Object* exec_function;
|
|
220
|
-
{ MaybeObject* maybe_exec_function = object->GetProperty(*exec);
|
|
221
|
-
// This can lose an exception, but the alternative is to put a failure
|
|
222
|
-
// object in a handle, which is not GC safe.
|
|
223
|
-
if (!maybe_exec_function->ToObject(&exec_function)) {
|
|
224
|
-
return factory->undefined_value();
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
return Handle<Object>(exec_function);
|
|
228
|
-
}
|
|
229
|
-
|
|
230
213
|
// Objects created through the API can have an instance-call handler
|
|
231
214
|
// that should be used when calling the object as a function.
|
|
232
215
|
if (object->IsHeapObject() &&
|
|
@@ -469,8 +452,9 @@ char* StackGuard::RestoreStackGuard(char* from) {
|
|
|
469
452
|
|
|
470
453
|
|
|
471
454
|
void StackGuard::FreeThreadResources() {
|
|
472
|
-
Isolate::
|
|
473
|
-
|
|
455
|
+
Isolate::PerIsolateThreadData* per_thread =
|
|
456
|
+
isolate_->FindOrAllocatePerThreadDataForThisThread();
|
|
457
|
+
per_thread->set_stack_limit(thread_local_.real_climit_);
|
|
474
458
|
}
|
|
475
459
|
|
|
476
460
|
|
|
@@ -519,7 +503,7 @@ void StackGuard::InitThread(const ExecutionAccess& lock) {
|
|
|
519
503
|
uintptr_t stored_limit = per_thread->stack_limit();
|
|
520
504
|
// You should hold the ExecutionAccess lock when you call this.
|
|
521
505
|
if (stored_limit != 0) {
|
|
522
|
-
|
|
506
|
+
SetStackLimit(stored_limit);
|
|
523
507
|
}
|
|
524
508
|
}
|
|
525
509
|
|
|
@@ -25,7 +25,9 @@
|
|
|
25
25
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
26
26
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
27
27
|
|
|
28
|
-
#include "break-iterator.h"
|
|
28
|
+
#include "src/extensions/experimental/break-iterator.h"
|
|
29
|
+
|
|
30
|
+
#include <string.h>
|
|
29
31
|
|
|
30
32
|
#include "unicode/brkiter.h"
|
|
31
33
|
#include "unicode/locid.h"
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
26
26
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
27
27
|
|
|
28
|
-
#include "collator.h"
|
|
28
|
+
#include "src/extensions/experimental/collator.h"
|
|
29
29
|
|
|
30
30
|
#include "unicode/coll.h"
|
|
31
31
|
#include "unicode/locid.h"
|
|
@@ -153,6 +153,11 @@ v8::Handle<v8::Value> Collator::JSCollator(const v8::Arguments& args) {
|
|
|
153
153
|
bool ignore_case, ignore_accents, numeric;
|
|
154
154
|
|
|
155
155
|
if (ExtractBooleanOption(options, "ignoreCase", &ignore_case)) {
|
|
156
|
+
// We need to explicitly set the level to secondary to get case ignored.
|
|
157
|
+
// The default L3 ignores UCOL_CASE_LEVEL == UCOL_OFF !
|
|
158
|
+
if (ignore_case) {
|
|
159
|
+
collator->setStrength(icu::Collator::SECONDARY);
|
|
160
|
+
}
|
|
156
161
|
collator->setAttribute(UCOL_CASE_LEVEL, ignore_case ? UCOL_OFF : UCOL_ON,
|
|
157
162
|
status);
|
|
158
163
|
if (U_FAILURE(status)) {
|
|
@@ -215,4 +220,3 @@ v8::Handle<v8::Value> Collator::JSCollator(const v8::Arguments& args) {
|
|
|
215
220
|
}
|
|
216
221
|
|
|
217
222
|
} } // namespace v8::internal
|
|
218
|
-
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
#ifndef V8_EXTENSIONS_EXPERIMENTAL_COLLATOR_H
|
|
29
29
|
#define V8_EXTENSIONS_EXPERIMENTAL_COLLATOR_H_
|
|
30
30
|
|
|
31
|
-
#include
|
|
31
|
+
#include "include/v8.h"
|
|
32
32
|
|
|
33
33
|
#include "unicode/uversion.h"
|
|
34
34
|
|
|
@@ -66,4 +66,3 @@ class Collator {
|
|
|
66
66
|
} } // namespace v8::internal
|
|
67
67
|
|
|
68
68
|
#endif // V8_EXTENSIONS_EXPERIMENTAL_COLLATOR
|
|
69
|
-
|
|
@@ -0,0 +1,384 @@
|
|
|
1
|
+
// Copyright 2011 the V8 project authors. All rights reserved.
|
|
2
|
+
// Redistribution and use in source and binary forms, with or without
|
|
3
|
+
// modification, are permitted provided that the following conditions are
|
|
4
|
+
// met:
|
|
5
|
+
//
|
|
6
|
+
// * Redistributions of source code must retain the above copyright
|
|
7
|
+
// notice, this list of conditions and the following disclaimer.
|
|
8
|
+
// * Redistributions in binary form must reproduce the above
|
|
9
|
+
// copyright notice, this list of conditions and the following
|
|
10
|
+
// disclaimer in the documentation and/or other materials provided
|
|
11
|
+
// with the distribution.
|
|
12
|
+
// * Neither the name of Google Inc. nor the names of its
|
|
13
|
+
// contributors may be used to endorse or promote products derived
|
|
14
|
+
// from this software without specific prior written permission.
|
|
15
|
+
//
|
|
16
|
+
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
17
|
+
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
18
|
+
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
19
|
+
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
20
|
+
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
21
|
+
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
22
|
+
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
23
|
+
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
24
|
+
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
25
|
+
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
26
|
+
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
27
|
+
|
|
28
|
+
#include "src/extensions/experimental/datetime-format.h"
|
|
29
|
+
|
|
30
|
+
#include <string.h>
|
|
31
|
+
|
|
32
|
+
#include "src/extensions/experimental/i18n-utils.h"
|
|
33
|
+
#include "unicode/dtfmtsym.h"
|
|
34
|
+
#include "unicode/dtptngen.h"
|
|
35
|
+
#include "unicode/locid.h"
|
|
36
|
+
#include "unicode/smpdtfmt.h"
|
|
37
|
+
|
|
38
|
+
namespace v8 {
|
|
39
|
+
namespace internal {
|
|
40
|
+
|
|
41
|
+
v8::Persistent<v8::FunctionTemplate> DateTimeFormat::datetime_format_template_;
|
|
42
|
+
|
|
43
|
+
static icu::DateFormat* CreateDateTimeFormat(v8::Handle<v8::String>,
|
|
44
|
+
v8::Handle<v8::Object>);
|
|
45
|
+
static v8::Handle<v8::Value> GetSymbols(
|
|
46
|
+
const v8::Arguments&,
|
|
47
|
+
const icu::UnicodeString*, int32_t,
|
|
48
|
+
const icu::UnicodeString*, int32_t,
|
|
49
|
+
const icu::UnicodeString*, int32_t);
|
|
50
|
+
static v8::Handle<v8::Value> ThrowUnexpectedObjectError();
|
|
51
|
+
static icu::DateFormat::EStyle GetDateTimeStyle(const icu::UnicodeString&);
|
|
52
|
+
|
|
53
|
+
icu::SimpleDateFormat* DateTimeFormat::UnpackDateTimeFormat(
|
|
54
|
+
v8::Handle<v8::Object> obj) {
|
|
55
|
+
if (datetime_format_template_->HasInstance(obj)) {
|
|
56
|
+
return static_cast<icu::SimpleDateFormat*>(
|
|
57
|
+
obj->GetPointerFromInternalField(0));
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
return NULL;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
void DateTimeFormat::DeleteDateTimeFormat(v8::Persistent<v8::Value> object,
|
|
64
|
+
void* param) {
|
|
65
|
+
v8::Persistent<v8::Object> persistent_object =
|
|
66
|
+
v8::Persistent<v8::Object>::Cast(object);
|
|
67
|
+
|
|
68
|
+
// First delete the hidden C++ object.
|
|
69
|
+
// Unpacking should never return NULL here. That would only happen if
|
|
70
|
+
// this method is used as the weak callback for persistent handles not
|
|
71
|
+
// pointing to a date time formatter.
|
|
72
|
+
delete UnpackDateTimeFormat(persistent_object);
|
|
73
|
+
|
|
74
|
+
// Then dispose of the persistent handle to JS object.
|
|
75
|
+
persistent_object.Dispose();
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
v8::Handle<v8::Value> DateTimeFormat::Format(const v8::Arguments& args) {
|
|
79
|
+
v8::HandleScope handle_scope;
|
|
80
|
+
|
|
81
|
+
double millis = 0.0;
|
|
82
|
+
if (args.Length() != 1 || !args[0]->IsDate()) {
|
|
83
|
+
// Create a new date.
|
|
84
|
+
v8::TryCatch try_catch;
|
|
85
|
+
v8::Local<v8::Script> date_script =
|
|
86
|
+
v8::Script::Compile(v8::String::New("eval('new Date()')"));
|
|
87
|
+
millis = date_script->Run()->NumberValue();
|
|
88
|
+
if (try_catch.HasCaught()) {
|
|
89
|
+
return try_catch.ReThrow();
|
|
90
|
+
}
|
|
91
|
+
} else {
|
|
92
|
+
millis = v8::Date::Cast(*args[0])->NumberValue();
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
icu::SimpleDateFormat* date_format = UnpackDateTimeFormat(args.Holder());
|
|
96
|
+
if (!date_format) {
|
|
97
|
+
return ThrowUnexpectedObjectError();
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
icu::UnicodeString result;
|
|
101
|
+
date_format->format(millis, result);
|
|
102
|
+
|
|
103
|
+
return v8::String::New(
|
|
104
|
+
reinterpret_cast<const uint16_t*>(result.getBuffer()), result.length());
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
v8::Handle<v8::Value> DateTimeFormat::GetMonths(const v8::Arguments& args) {
|
|
108
|
+
icu::SimpleDateFormat* date_format = UnpackDateTimeFormat(args.Holder());
|
|
109
|
+
if (!date_format) {
|
|
110
|
+
return ThrowUnexpectedObjectError();
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
const icu::DateFormatSymbols* symbols = date_format->getDateFormatSymbols();
|
|
114
|
+
|
|
115
|
+
int32_t narrow_count;
|
|
116
|
+
const icu::UnicodeString* narrow = symbols->getMonths(
|
|
117
|
+
narrow_count,
|
|
118
|
+
icu::DateFormatSymbols::STANDALONE,
|
|
119
|
+
icu::DateFormatSymbols::NARROW);
|
|
120
|
+
int32_t abbrev_count;
|
|
121
|
+
const icu::UnicodeString* abbrev = symbols->getMonths(
|
|
122
|
+
abbrev_count,
|
|
123
|
+
icu::DateFormatSymbols::STANDALONE,
|
|
124
|
+
icu::DateFormatSymbols::ABBREVIATED);
|
|
125
|
+
int32_t wide_count;
|
|
126
|
+
const icu::UnicodeString* wide = symbols->getMonths(
|
|
127
|
+
wide_count,
|
|
128
|
+
icu::DateFormatSymbols::STANDALONE,
|
|
129
|
+
icu::DateFormatSymbols::WIDE);
|
|
130
|
+
|
|
131
|
+
return GetSymbols(
|
|
132
|
+
args, narrow, narrow_count, abbrev, abbrev_count, wide, wide_count);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
v8::Handle<v8::Value> DateTimeFormat::GetWeekdays(const v8::Arguments& args) {
|
|
136
|
+
icu::SimpleDateFormat* date_format = UnpackDateTimeFormat(args.Holder());
|
|
137
|
+
if (!date_format) {
|
|
138
|
+
return ThrowUnexpectedObjectError();
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
const icu::DateFormatSymbols* symbols = date_format->getDateFormatSymbols();
|
|
142
|
+
|
|
143
|
+
int32_t narrow_count;
|
|
144
|
+
const icu::UnicodeString* narrow = symbols->getWeekdays(
|
|
145
|
+
narrow_count,
|
|
146
|
+
icu::DateFormatSymbols::STANDALONE,
|
|
147
|
+
icu::DateFormatSymbols::NARROW);
|
|
148
|
+
int32_t abbrev_count;
|
|
149
|
+
const icu::UnicodeString* abbrev = symbols->getWeekdays(
|
|
150
|
+
abbrev_count,
|
|
151
|
+
icu::DateFormatSymbols::STANDALONE,
|
|
152
|
+
icu::DateFormatSymbols::ABBREVIATED);
|
|
153
|
+
int32_t wide_count;
|
|
154
|
+
const icu::UnicodeString* wide = symbols->getWeekdays(
|
|
155
|
+
wide_count,
|
|
156
|
+
icu::DateFormatSymbols::STANDALONE,
|
|
157
|
+
icu::DateFormatSymbols::WIDE);
|
|
158
|
+
|
|
159
|
+
// getXXXWeekdays always returns 8 elements - ICU stable API.
|
|
160
|
+
// We can't use ASSERT_EQ(8, narrow_count) because ASSERT is internal to v8.
|
|
161
|
+
if (narrow_count != 8 || abbrev_count != 8 || wide_count != 8) {
|
|
162
|
+
return v8::ThrowException(v8::Exception::Error(
|
|
163
|
+
v8::String::New("Failed to get weekday information.")));
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
// ICU documentation says we should ignore element 0 of the returned array.
|
|
167
|
+
return GetSymbols(args, narrow + 1, narrow_count - 1, abbrev + 1,
|
|
168
|
+
abbrev_count -1 , wide + 1, wide_count - 1);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
v8::Handle<v8::Value> DateTimeFormat::GetEras(const v8::Arguments& args) {
|
|
172
|
+
icu::SimpleDateFormat* date_format = UnpackDateTimeFormat(args.Holder());
|
|
173
|
+
if (!date_format) {
|
|
174
|
+
return ThrowUnexpectedObjectError();
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
const icu::DateFormatSymbols* symbols = date_format->getDateFormatSymbols();
|
|
178
|
+
|
|
179
|
+
int32_t narrow_count;
|
|
180
|
+
const icu::UnicodeString* narrow = symbols->getNarrowEras(narrow_count);
|
|
181
|
+
int32_t abbrev_count;
|
|
182
|
+
const icu::UnicodeString* abbrev = symbols->getEras(abbrev_count);
|
|
183
|
+
int32_t wide_count;
|
|
184
|
+
const icu::UnicodeString* wide = symbols->getEraNames(wide_count);
|
|
185
|
+
|
|
186
|
+
return GetSymbols(
|
|
187
|
+
args, narrow, narrow_count, abbrev, abbrev_count, wide, wide_count);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
v8::Handle<v8::Value> DateTimeFormat::GetAmPm(const v8::Arguments& args) {
|
|
191
|
+
icu::SimpleDateFormat* date_format = UnpackDateTimeFormat(args.Holder());
|
|
192
|
+
if (!date_format) {
|
|
193
|
+
return ThrowUnexpectedObjectError();
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
const icu::DateFormatSymbols* symbols = date_format->getDateFormatSymbols();
|
|
197
|
+
|
|
198
|
+
// In this case narrow == abbreviated == wide
|
|
199
|
+
int32_t count;
|
|
200
|
+
const icu::UnicodeString* wide = symbols->getAmPmStrings(count);
|
|
201
|
+
|
|
202
|
+
return GetSymbols(args, wide, count, wide, count, wide, count);
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
v8::Handle<v8::Value> DateTimeFormat::JSDateTimeFormat(
|
|
206
|
+
const v8::Arguments& args) {
|
|
207
|
+
v8::HandleScope handle_scope;
|
|
208
|
+
|
|
209
|
+
if (args.Length() != 2 || !args[0]->IsString() || !args[1]->IsObject()) {
|
|
210
|
+
return v8::ThrowException(v8::Exception::SyntaxError(
|
|
211
|
+
v8::String::New("Locale and date/time options are required.")));
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
icu::SimpleDateFormat* date_format = static_cast<icu::SimpleDateFormat*>(
|
|
215
|
+
CreateDateTimeFormat(args[0]->ToString(), args[1]->ToObject()));
|
|
216
|
+
|
|
217
|
+
if (datetime_format_template_.IsEmpty()) {
|
|
218
|
+
v8::Local<v8::FunctionTemplate> raw_template(v8::FunctionTemplate::New());
|
|
219
|
+
|
|
220
|
+
raw_template->SetClassName(v8::String::New("v8Locale.DateTimeFormat"));
|
|
221
|
+
|
|
222
|
+
// Define internal field count on instance template.
|
|
223
|
+
v8::Local<v8::ObjectTemplate> object_template =
|
|
224
|
+
raw_template->InstanceTemplate();
|
|
225
|
+
|
|
226
|
+
// Set aside internal field for icu date time formatter.
|
|
227
|
+
object_template->SetInternalFieldCount(1);
|
|
228
|
+
|
|
229
|
+
// Define all of the prototype methods on prototype template.
|
|
230
|
+
v8::Local<v8::ObjectTemplate> proto = raw_template->PrototypeTemplate();
|
|
231
|
+
proto->Set(v8::String::New("format"),
|
|
232
|
+
v8::FunctionTemplate::New(Format));
|
|
233
|
+
proto->Set(v8::String::New("getMonths"),
|
|
234
|
+
v8::FunctionTemplate::New(GetMonths));
|
|
235
|
+
proto->Set(v8::String::New("getWeekdays"),
|
|
236
|
+
v8::FunctionTemplate::New(GetWeekdays));
|
|
237
|
+
proto->Set(v8::String::New("getEras"),
|
|
238
|
+
v8::FunctionTemplate::New(GetEras));
|
|
239
|
+
proto->Set(v8::String::New("getAmPm"),
|
|
240
|
+
v8::FunctionTemplate::New(GetAmPm));
|
|
241
|
+
|
|
242
|
+
datetime_format_template_ =
|
|
243
|
+
v8::Persistent<v8::FunctionTemplate>::New(raw_template);
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
// Create an empty object wrapper.
|
|
247
|
+
v8::Local<v8::Object> local_object =
|
|
248
|
+
datetime_format_template_->GetFunction()->NewInstance();
|
|
249
|
+
v8::Persistent<v8::Object> wrapper =
|
|
250
|
+
v8::Persistent<v8::Object>::New(local_object);
|
|
251
|
+
|
|
252
|
+
// Set date time formatter as internal field of the resulting JS object.
|
|
253
|
+
wrapper->SetPointerInInternalField(0, date_format);
|
|
254
|
+
|
|
255
|
+
// Set resolved pattern in options.pattern.
|
|
256
|
+
icu::UnicodeString pattern;
|
|
257
|
+
date_format->toPattern(pattern);
|
|
258
|
+
v8::Local<v8::Object> options = v8::Object::New();
|
|
259
|
+
options->Set(v8::String::New("pattern"),
|
|
260
|
+
v8::String::New(reinterpret_cast<const uint16_t*>(
|
|
261
|
+
pattern.getBuffer()), pattern.length()));
|
|
262
|
+
wrapper->Set(v8::String::New("options"), options);
|
|
263
|
+
|
|
264
|
+
// Make object handle weak so we can delete iterator once GC kicks in.
|
|
265
|
+
wrapper.MakeWeak(NULL, DeleteDateTimeFormat);
|
|
266
|
+
|
|
267
|
+
return wrapper;
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
// Returns SimpleDateFormat.
|
|
271
|
+
static icu::DateFormat* CreateDateTimeFormat(
|
|
272
|
+
v8::Handle<v8::String> locale, v8::Handle<v8::Object> settings) {
|
|
273
|
+
v8::HandleScope handle_scope;
|
|
274
|
+
|
|
275
|
+
v8::String::AsciiValue ascii_locale(locale);
|
|
276
|
+
icu::Locale icu_locale(*ascii_locale);
|
|
277
|
+
|
|
278
|
+
// Make formatter from skeleton.
|
|
279
|
+
icu::SimpleDateFormat* date_format = NULL;
|
|
280
|
+
UErrorCode status = U_ZERO_ERROR;
|
|
281
|
+
icu::UnicodeString skeleton;
|
|
282
|
+
if (I18NUtils::ExtractStringSetting(settings, "skeleton", &skeleton)) {
|
|
283
|
+
v8::Local<icu::DateTimePatternGenerator> generator(
|
|
284
|
+
icu::DateTimePatternGenerator::createInstance(icu_locale, status));
|
|
285
|
+
icu::UnicodeString pattern =
|
|
286
|
+
generator->getBestPattern(skeleton, status);
|
|
287
|
+
|
|
288
|
+
date_format = new icu::SimpleDateFormat(pattern, icu_locale, status);
|
|
289
|
+
if (U_SUCCESS(status)) {
|
|
290
|
+
return date_format;
|
|
291
|
+
} else {
|
|
292
|
+
delete date_format;
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
// Extract date style and time style from settings.
|
|
297
|
+
icu::UnicodeString date_style;
|
|
298
|
+
icu::DateFormat::EStyle icu_date_style = icu::DateFormat::kNone;
|
|
299
|
+
if (I18NUtils::ExtractStringSetting(settings, "dateStyle", &date_style)) {
|
|
300
|
+
icu_date_style = GetDateTimeStyle(date_style);
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
icu::UnicodeString time_style;
|
|
304
|
+
icu::DateFormat::EStyle icu_time_style = icu::DateFormat::kNone;
|
|
305
|
+
if (I18NUtils::ExtractStringSetting(settings, "timeStyle", &time_style)) {
|
|
306
|
+
icu_time_style = GetDateTimeStyle(time_style);
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
// Try all combinations of date/time styles.
|
|
310
|
+
if (icu_date_style == icu::DateFormat::kNone &&
|
|
311
|
+
icu_time_style == icu::DateFormat::kNone) {
|
|
312
|
+
// Return default short date, short
|
|
313
|
+
return icu::DateFormat::createDateTimeInstance(
|
|
314
|
+
icu::DateFormat::kShort, icu::DateFormat::kShort, icu_locale);
|
|
315
|
+
} else if (icu_date_style != icu::DateFormat::kNone &&
|
|
316
|
+
icu_time_style != icu::DateFormat::kNone) {
|
|
317
|
+
return icu::DateFormat::createDateTimeInstance(
|
|
318
|
+
icu_date_style, icu_time_style, icu_locale);
|
|
319
|
+
} else if (icu_date_style != icu::DateFormat::kNone) {
|
|
320
|
+
return icu::DateFormat::createDateInstance(icu_date_style, icu_locale);
|
|
321
|
+
} else {
|
|
322
|
+
// icu_time_style != icu::DateFormat::kNone
|
|
323
|
+
return icu::DateFormat::createTimeInstance(icu_time_style, icu_locale);
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
// Creates a v8::Array of narrow, abbrev or wide symbols.
|
|
328
|
+
static v8::Handle<v8::Value> GetSymbols(const v8::Arguments& args,
|
|
329
|
+
const icu::UnicodeString* narrow,
|
|
330
|
+
int32_t narrow_count,
|
|
331
|
+
const icu::UnicodeString* abbrev,
|
|
332
|
+
int32_t abbrev_count,
|
|
333
|
+
const icu::UnicodeString* wide,
|
|
334
|
+
int32_t wide_count) {
|
|
335
|
+
v8::HandleScope handle_scope;
|
|
336
|
+
|
|
337
|
+
// Make wide width default.
|
|
338
|
+
const icu::UnicodeString* result = wide;
|
|
339
|
+
int32_t count = wide_count;
|
|
340
|
+
|
|
341
|
+
if (args.Length() == 1 && args[0]->IsString()) {
|
|
342
|
+
v8::String::AsciiValue ascii_value(args[0]);
|
|
343
|
+
if (strcmp(*ascii_value, "abbreviated") == 0) {
|
|
344
|
+
result = abbrev;
|
|
345
|
+
count = abbrev_count;
|
|
346
|
+
} else if (strcmp(*ascii_value, "narrow") == 0) {
|
|
347
|
+
result = narrow;
|
|
348
|
+
count = narrow_count;
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
v8::Handle<v8::Array> symbols = v8::Array::New();
|
|
353
|
+
for (int32_t i = 0; i < count; ++i) {
|
|
354
|
+
symbols->Set(i, v8::String::New(
|
|
355
|
+
reinterpret_cast<const uint16_t*>(result[i].getBuffer()),
|
|
356
|
+
result[i].length()));
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
return handle_scope.Close(symbols);
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
// Throws a JavaScript exception.
|
|
363
|
+
static v8::Handle<v8::Value> ThrowUnexpectedObjectError() {
|
|
364
|
+
// Returns undefined, and schedules an exception to be thrown.
|
|
365
|
+
return v8::ThrowException(v8::Exception::Error(
|
|
366
|
+
v8::String::New("DateTimeFormat method called on an object "
|
|
367
|
+
"that is not a DateTimeFormat.")));
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
// Returns icu date/time style.
|
|
371
|
+
static icu::DateFormat::EStyle GetDateTimeStyle(
|
|
372
|
+
const icu::UnicodeString& type) {
|
|
373
|
+
if (type == UNICODE_STRING_SIMPLE("medium")) {
|
|
374
|
+
return icu::DateFormat::kMedium;
|
|
375
|
+
} else if (type == UNICODE_STRING_SIMPLE("long")) {
|
|
376
|
+
return icu::DateFormat::kLong;
|
|
377
|
+
} else if (type == UNICODE_STRING_SIMPLE("full")) {
|
|
378
|
+
return icu::DateFormat::kFull;
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
return icu::DateFormat::kShort;
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
} } // namespace v8::internal
|