# HG changeset patch # User sundar # Date 1371542124 -19800 # Node ID 8fbfd4ce1ce593e244633bcb70be9a877dd400f3 # Parent 81a8b5860d3fe3bca83c3b4e62b50b77ade5ea81# Parent 1b5fdae617cff012a93327e5a5b67baa30a1fa84 Merge diff -r 81a8b5860d3f -r 8fbfd4ce1ce5 nashorn/make/project.properties --- a/nashorn/make/project.properties Sun Jun 16 22:38:17 2013 -0700 +++ b/nashorn/make/project.properties Tue Jun 18 13:25:24 2013 +0530 @@ -193,7 +193,8 @@ # list of test262 test dirs to be excluded test262-test-sys-prop.test.js.exclude.dir=\ - ${test262.suite.dir}/intl402/ + ${test262.suite.dir}/intl402/ \ + ${test262.suite.dir}/bestPractice/ test262-test-sys-prop.test.failed.list.file=${build.dir}/test/failedTests diff -r 81a8b5860d3f -r 8fbfd4ce1ce5 nashorn/samples/test.js --- a/nashorn/samples/test.js Sun Jun 16 22:38:17 2013 -0700 +++ b/nashorn/samples/test.js Tue Jun 18 13:25:24 2013 +0530 @@ -1,21 +1,21 @@ /* * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved. - * + * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: - * + * * - Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. - * + * * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * + * * - Neither the name of Oracle nor the names of its * contributors may be used to endorse or promote products derived * from this software without specific prior written permission. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR @@ -30,3 +30,4 @@ */ print("Hello World"); + diff -r 81a8b5860d3f -r 8fbfd4ce1ce5 nashorn/src/jdk/nashorn/api/scripting/NashornScriptEngine.java --- a/nashorn/src/jdk/nashorn/api/scripting/NashornScriptEngine.java Sun Jun 16 22:38:17 2013 -0700 +++ b/nashorn/src/jdk/nashorn/api/scripting/NashornScriptEngine.java Tue Jun 18 13:25:24 2013 +0530 @@ -72,7 +72,7 @@ private final ScriptObject global; // default options passed to Nashorn Options object - private static final String[] DEFAULT_OPTIONS = new String[] { "-scripting", "-af", "-doe" }; + private static final String[] DEFAULT_OPTIONS = new String[] { "-scripting", "-doe" }; NashornScriptEngine(final NashornScriptEngineFactory factory, final ClassLoader appLoader) { this(factory, DEFAULT_OPTIONS, appLoader); diff -r 81a8b5860d3f -r 8fbfd4ce1ce5 nashorn/src/jdk/nashorn/api/scripting/ScriptObjectMirror.java --- a/nashorn/src/jdk/nashorn/api/scripting/ScriptObjectMirror.java Sun Jun 16 22:38:17 2013 -0700 +++ b/nashorn/src/jdk/nashorn/api/scripting/ScriptObjectMirror.java Tue Jun 18 13:25:24 2013 +0530 @@ -342,6 +342,184 @@ }); } + // Support for ECMAScript Object API on mirrors + + /** + * Return the __proto__ of this object. + * @return __proto__ object. + */ + public Object getProto() { + return inGlobal(new Callable() { + @Override public Object call() { + return wrap(getScriptObject().getProto(), global); + } + }); + } + + /** + * ECMA 8.12.1 [[GetOwnProperty]] (P) + * + * @param key property key + * + * @return Returns the Property Descriptor of the named own property of this + * object, or undefined if absent. + */ + public Object getOwnPropertyDescriptor(final String key) { + return inGlobal(new Callable() { + @Override public Object call() { + return wrap(getScriptObject().getOwnPropertyDescriptor(key), global); + } + }); + } + + /** + * return an array of own property keys associated with the object. + * + * @param all True if to include non-enumerable keys. + * @return Array of keys. + */ + public String[] getOwnKeys(final boolean all) { + return inGlobal(new Callable() { + @Override public String[] call() { + return getScriptObject().getOwnKeys(all); + } + }); + } + + /** + * Flag this script object as non extensible + * + * @return the object after being made non extensible + */ + public ScriptObjectMirror preventExtensions() { + return inGlobal(new Callable() { + @Override public ScriptObjectMirror call() { + getScriptObject().preventExtensions(); + return ScriptObjectMirror.this; + } + }); + } + + /** + * Check if this script object is extensible + * @return true if extensible + */ + public boolean isExtensible() { + return inGlobal(new Callable() { + @Override public Boolean call() { + return getScriptObject().isExtensible(); + } + }); + } + + /** + * ECMAScript 15.2.3.8 - seal implementation + * @return the sealed script object + */ + public ScriptObjectMirror seal() { + return inGlobal(new Callable() { + @Override public ScriptObjectMirror call() { + getScriptObject().seal(); + return ScriptObjectMirror.this; + } + }); + } + + /** + * Check whether this script object is sealed + * @return true if sealed + */ + public boolean isSealed() { + return inGlobal(new Callable() { + @Override public Boolean call() { + return getScriptObject().isSealed(); + } + }); + } + + /** + * ECMA 15.2.39 - freeze implementation. Freeze this script object + * @return the frozen script object + */ + public ScriptObjectMirror freeze() { + return inGlobal(new Callable() { + @Override public ScriptObjectMirror call() { + getScriptObject().freeze(); + return ScriptObjectMirror.this; + } + }); + } + + /** + * Check whether this script object is frozen + * @return true if frozen + */ + public boolean isFrozen() { + return inGlobal(new Callable() { + @Override public Boolean call() { + return getScriptObject().isFrozen(); + } + }); + } + + // ECMAScript instanceof check + + /** + * Checking whether a script object is an instance of another by + * walking the proto chain + * + * @param instance instace to check + * @return true if 'instance' is an instance of this object + */ + public boolean isInstance(final ScriptObjectMirror instance) { + // if not belongs to my global scope, return false + if (instance == null || global != instance.global) { + return false; + } + + return inGlobal(new Callable() { + @Override public Boolean call() { + return getScriptObject().isInstance(instance.getScriptObject()); + } + }); + } + + /** + * Utility to check if given object is ECMAScript undefined value + * + * @param obj object to check + * @return true if 'obj' is ECMAScript undefined value + */ + public static boolean isUndefined(final Object obj) { + return obj == ScriptRuntime.UNDEFINED; + } + + /** + * is this a function object? + * + * @return if this mirror wraps a ECMAScript function instance + */ + public boolean isFunction() { + return getScriptObject() instanceof ScriptFunction; + } + + /** + * is this a 'use strict' function object? + * + * @return true if this mirror represents a ECMAScript 'use strict' function + */ + public boolean isStrictFunction() { + return isFunction() && ((ScriptFunction)getScriptObject()).isStrict(); + } + + /** + * is this an array object? + * + * @return if this mirror wraps a ECMAScript array object + */ + public boolean isArray() { + return getScriptObject().isArray(); + } // These are public only so that Context can access these. diff -r 81a8b5860d3f -r 8fbfd4ce1ce5 nashorn/src/jdk/nashorn/internal/codegen/Attr.java --- a/nashorn/src/jdk/nashorn/internal/codegen/Attr.java Sun Jun 16 22:38:17 2013 -0700 +++ b/nashorn/src/jdk/nashorn/internal/codegen/Attr.java Tue Jun 18 13:25:24 2013 +0530 @@ -35,6 +35,7 @@ import static jdk.nashorn.internal.codegen.CompilerConstants.SWITCH_TAG_PREFIX; import static jdk.nashorn.internal.codegen.CompilerConstants.THIS; import static jdk.nashorn.internal.codegen.CompilerConstants.VARARGS; +import static jdk.nashorn.internal.ir.Symbol.IS_ALWAYS_DEFINED; import static jdk.nashorn.internal.ir.Symbol.IS_CONSTANT; import static jdk.nashorn.internal.ir.Symbol.IS_FUNCTION_SELF; import static jdk.nashorn.internal.ir.Symbol.IS_GLOBAL; @@ -128,6 +129,8 @@ private final Deque returnTypes; + private int catchNestingLevel; + private static final DebugLogger LOG = new DebugLogger("attr"); private static final boolean DEBUG = LOG.isEnabled(); @@ -169,14 +172,14 @@ if (functionNode.isVarArg()) { initCompileConstant(VARARGS, body, IS_PARAM | IS_INTERNAL, Type.OBJECT_ARRAY); if (functionNode.needsArguments()) { - initCompileConstant(ARGUMENTS, body, IS_VAR | IS_INTERNAL, Type.typeFor(ScriptObject.class)); + initCompileConstant(ARGUMENTS, body, IS_VAR | IS_INTERNAL | IS_ALWAYS_DEFINED, Type.typeFor(ScriptObject.class)); addLocalDef(ARGUMENTS.symbolName()); } } initParameters(functionNode, body); - initCompileConstant(SCOPE, body, IS_VAR | IS_INTERNAL, Type.typeFor(ScriptObject.class)); - initCompileConstant(RETURN, body, IS_VAR | IS_INTERNAL, Type.OBJECT); + initCompileConstant(SCOPE, body, IS_VAR | IS_INTERNAL | IS_ALWAYS_DEFINED, Type.typeFor(ScriptObject.class)); + initCompileConstant(RETURN, body, IS_VAR | IS_INTERNAL | IS_ALWAYS_DEFINED, Type.OBJECT); } @@ -320,10 +323,12 @@ final Block block = lc.getCurrentBlock(); start(catchNode); + catchNestingLevel++; // define block-local exception variable - final Symbol def = defineSymbol(block, exception.getName(), IS_VAR | IS_LET); - newType(def, Type.OBJECT); + final Symbol def = defineSymbol(block, exception.getName(), IS_VAR | IS_LET | IS_ALWAYS_DEFINED); + newType(def, Type.OBJECT); //we can catch anything, not just ecma exceptions + addLocalDef(exception.getName()); return true; @@ -334,6 +339,9 @@ final IdentNode exception = catchNode.getException(); final Block block = lc.getCurrentBlock(); final Symbol symbol = findSymbol(block, exception.getName()); + + catchNestingLevel--; + assert symbol != null; return end(catchNode.setException((IdentNode)exception.setSymbol(lc, symbol))); } @@ -543,9 +551,19 @@ assert lc.getFunctionBody(functionNode).getExistingSymbol(CALLEE.symbolName()) != null; lc.setFlag(functionNode.getBody(), Block.NEEDS_SELF_SYMBOL); newType(symbol, FunctionNode.FUNCTION_TYPE); - } else if (!identNode.isInitializedHere()) { // NASHORN-448 - // here is a use outside the local def scope - if (!isLocalDef(name)) { + } else if (!identNode.isInitializedHere()) { + /* + * See NASHORN-448, JDK-8016235 + * + * Here is a use outside the local def scope + * the inCatch check is a conservative approach to handle things that might have only been + * defined in the try block, but with variable declarations, which due to JavaScript rules + * have to be lifted up into the function scope outside the try block anyway, but as the + * flow can fault at almost any place in the try block and get us to the catch block, all we + * know is that we have a declaration, not a definition. This can be made better and less + * conservative once we superimpose a CFG onto the AST. + */ + if (!isLocalDef(name) || inCatch()) { newType(symbol, Type.OBJECT); symbol.setCanBeUndefined(); } @@ -572,6 +590,10 @@ return end(identNode.setSymbol(lc, symbol)); } + private boolean inCatch() { + return catchNestingLevel > 0; + } + /** * If the symbol isn't already a scope symbol, and it is either not local to the current function, or it is being * referenced from within a with block, we force it to be a scope symbol. @@ -584,26 +606,26 @@ } private boolean symbolNeedsToBeScope(Symbol symbol) { - if(symbol.isThis() || symbol.isInternal()) { + if (symbol.isThis() || symbol.isInternal()) { return false; } boolean previousWasBlock = false; - for(final Iterator it = lc.getAllNodes(); it.hasNext();) { + for (final Iterator it = lc.getAllNodes(); it.hasNext();) { final LexicalContextNode node = it.next(); - if(node instanceof FunctionNode) { + if (node instanceof FunctionNode) { // We reached the function boundary without seeing a definition for the symbol - it needs to be in // scope. return true; - } else if(node instanceof WithNode) { - if(previousWasBlock) { + } else if (node instanceof WithNode) { + if (previousWasBlock) { // We reached a WithNode; the symbol must be scoped. Note that if the WithNode was not immediately // preceded by a block, this means we're currently processing its expression, not its body, // therefore it doesn't count. return true; } previousWasBlock = false; - } else if(node instanceof Block) { - if(((Block)node).getExistingSymbol(symbol.getName()) == symbol) { + } else if (node instanceof Block) { + if (((Block)node).getExistingSymbol(symbol.getName()) == symbol) { // We reached the block that defines the symbol without reaching either the function boundary, or a // WithNode. The symbol need not be scoped. return false; @@ -1700,8 +1722,8 @@ } private void pushLocalsBlock() { - localDefs.push(localDefs.isEmpty() ? new HashSet() : new HashSet<>(localDefs.peek())); - localUses.push(localUses.isEmpty() ? new HashSet() : new HashSet<>(localUses.peek())); + localDefs.push(new HashSet<>(localDefs.peek())); + localUses.push(new HashSet<>(localUses.peek())); } private void popLocals() { diff -r 81a8b5860d3f -r 8fbfd4ce1ce5 nashorn/src/jdk/nashorn/internal/ir/BreakableNode.java --- a/nashorn/src/jdk/nashorn/internal/ir/BreakableNode.java Sun Jun 16 22:38:17 2013 -0700 +++ b/nashorn/src/jdk/nashorn/internal/ir/BreakableNode.java Tue Jun 18 13:25:24 2013 +0530 @@ -86,7 +86,7 @@ /** * Return the labels associated with this node. Breakable nodes that - * aren't LoopNodes only have a break label -> the location immediately + * aren't LoopNodes only have a break label - the location immediately * afterwards the node in code * @return list of labels representing locations around this node */ diff -r 81a8b5860d3f -r 8fbfd4ce1ce5 nashorn/src/jdk/nashorn/internal/ir/Symbol.java --- a/nashorn/src/jdk/nashorn/internal/ir/Symbol.java Sun Jun 16 22:38:17 2013 -0700 +++ b/nashorn/src/jdk/nashorn/internal/ir/Symbol.java Tue Jun 18 13:25:24 2013 +0530 @@ -55,23 +55,25 @@ public static final int KINDMASK = (1 << 3) - 1; // Kinds are represented by lower three bits /** Is this scope */ - public static final int IS_SCOPE = 1 << 4; + public static final int IS_SCOPE = 1 << 4; /** Is this a this symbol */ - public static final int IS_THIS = 1 << 5; + public static final int IS_THIS = 1 << 5; /** Can this symbol ever be undefined */ - public static final int CAN_BE_UNDEFINED = 1 << 6; + public static final int CAN_BE_UNDEFINED = 1 << 6; + /** Is this symbol always defined? */ + public static final int IS_ALWAYS_DEFINED = 1 << 8; /** Can this symbol ever have primitive types */ - public static final int CAN_BE_PRIMITIVE = 1 << 7; + public static final int CAN_BE_PRIMITIVE = 1 << 9; /** Is this a let */ - public static final int IS_LET = 1 << 8; + public static final int IS_LET = 1 << 10; /** Is this an internal symbol, never represented explicitly in source code */ - public static final int IS_INTERNAL = 1 << 9; + public static final int IS_INTERNAL = 1 << 11; /** Is this a function self-reference symbol */ - public static final int IS_FUNCTION_SELF = 1 << 10; + public static final int IS_FUNCTION_SELF = 1 << 12; /** Is this a specialized param? */ - public static final int IS_SPECIALIZED_PARAM = 1 << 11; + public static final int IS_SPECIALIZED_PARAM = 1 << 13; /** Is this symbol a shared temporary? */ - public static final int IS_SHARED = 1 << 12; + public static final int IS_SHARED = 1 << 14; /** Null or name identifying symbol. */ private final String name; @@ -384,7 +386,7 @@ * Mark this symbol as one being shared by multiple expressions. The symbol must be a temporary. */ public void setIsShared() { - if(!isShared()) { + if (!isShared()) { assert isTemp(); trace("SET IS SHARED"); flags |= IS_SHARED; @@ -417,6 +419,14 @@ } /** + * Check if this symbol is always defined, which overrides all canBeUndefined tags + * @return true if always defined + */ + public boolean isAlwaysDefined() { + return isParam() || (flags & IS_ALWAYS_DEFINED) == IS_ALWAYS_DEFINED; + } + + /** * Get the range for this symbol * @return range for symbol */ @@ -462,7 +472,9 @@ */ public void setCanBeUndefined() { assert type.isObject() : type; - if (!isParam() && !canBeUndefined()) {//parameters are never undefined + if (isAlwaysDefined()) { + return; + } else if (!canBeUndefined()) { assert !isShared(); flags |= CAN_BE_UNDEFINED; } diff -r 81a8b5860d3f -r 8fbfd4ce1ce5 nashorn/src/jdk/nashorn/internal/objects/AccessorPropertyDescriptor.java --- a/nashorn/src/jdk/nashorn/internal/objects/AccessorPropertyDescriptor.java Sun Jun 16 22:38:17 2013 -0700 +++ b/nashorn/src/jdk/nashorn/internal/objects/AccessorPropertyDescriptor.java Tue Jun 18 13:25:24 2013 +0530 @@ -138,18 +138,16 @@ @Override public PropertyDescriptor fillFrom(final ScriptObject sobj) { - final boolean strict = isStrictContext(); - if (sobj.has(CONFIGURABLE)) { this.configurable = JSType.toBoolean(sobj.get(CONFIGURABLE)); } else { - delete(CONFIGURABLE, strict); + delete(CONFIGURABLE, false); } if (sobj.has(ENUMERABLE)) { this.enumerable = JSType.toBoolean(sobj.get(ENUMERABLE)); } else { - delete(ENUMERABLE, strict); + delete(ENUMERABLE, false); } if (sobj.has(GET)) { @@ -160,7 +158,7 @@ throw typeError("not.a.function", ScriptRuntime.safeToString(getter)); } } else { - delete(GET, strict); + delete(GET, false); } if (sobj.has(SET)) { @@ -171,7 +169,7 @@ throw typeError("not.a.function", ScriptRuntime.safeToString(setter)); } } else { - delete(SET, strict); + delete(SET, false); } return this; diff -r 81a8b5860d3f -r 8fbfd4ce1ce5 nashorn/src/jdk/nashorn/internal/objects/DataPropertyDescriptor.java --- a/nashorn/src/jdk/nashorn/internal/objects/DataPropertyDescriptor.java Sun Jun 16 22:38:17 2013 -0700 +++ b/nashorn/src/jdk/nashorn/internal/objects/DataPropertyDescriptor.java Tue Jun 18 13:25:24 2013 +0530 @@ -136,29 +136,28 @@ @Override public PropertyDescriptor fillFrom(final ScriptObject sobj) { - final boolean strict = isStrictContext(); if (sobj.has(CONFIGURABLE)) { this.configurable = JSType.toBoolean(sobj.get(CONFIGURABLE)); } else { - delete(CONFIGURABLE, strict); + delete(CONFIGURABLE, false); } if (sobj.has(ENUMERABLE)) { this.enumerable = JSType.toBoolean(sobj.get(ENUMERABLE)); } else { - delete(ENUMERABLE, strict); + delete(ENUMERABLE, false); } if (sobj.has(WRITABLE)) { this.writable = JSType.toBoolean(sobj.get(WRITABLE)); } else { - delete(WRITABLE, strict); + delete(WRITABLE, false); } if (sobj.has(VALUE)) { this.value = sobj.get(VALUE); } else { - delete(VALUE, strict); + delete(VALUE, false); } return this; diff -r 81a8b5860d3f -r 8fbfd4ce1ce5 nashorn/src/jdk/nashorn/internal/objects/GenericPropertyDescriptor.java --- a/nashorn/src/jdk/nashorn/internal/objects/GenericPropertyDescriptor.java Sun Jun 16 22:38:17 2013 -0700 +++ b/nashorn/src/jdk/nashorn/internal/objects/GenericPropertyDescriptor.java Tue Jun 18 13:25:24 2013 +0530 @@ -124,17 +124,16 @@ @Override public PropertyDescriptor fillFrom(final ScriptObject sobj) { - final boolean strict = isStrictContext(); if (sobj.has(CONFIGURABLE)) { this.configurable = JSType.toBoolean(sobj.get(CONFIGURABLE)); } else { - delete(CONFIGURABLE, strict); + delete(CONFIGURABLE, false); } if (sobj.has(ENUMERABLE)) { this.enumerable = JSType.toBoolean(sobj.get(ENUMERABLE)); } else { - delete(ENUMERABLE, strict); + delete(ENUMERABLE, false); } return this; diff -r 81a8b5860d3f -r 8fbfd4ce1ce5 nashorn/src/jdk/nashorn/internal/objects/Global.java --- a/nashorn/src/jdk/nashorn/internal/objects/Global.java Sun Jun 16 22:38:17 2013 -0700 +++ b/nashorn/src/jdk/nashorn/internal/objects/Global.java Tue Jun 18 13:25:24 2013 +0530 @@ -37,6 +37,7 @@ import java.lang.reflect.Field; import java.security.AccessController; import java.security.PrivilegedAction; +import java.util.Arrays; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -372,7 +373,7 @@ private static final MethodHandle PRINT = findOwnMH("print", Object.class, Object.class, Object[].class); private static final MethodHandle PRINTLN = findOwnMH("println", Object.class, Object.class, Object[].class); private static final MethodHandle LOAD = findOwnMH("load", Object.class, Object.class, Object.class); - private static final MethodHandle LOADWITHNEWGLOBAL = findOwnMH("loadWithNewGlobal", Object.class, Object.class, Object.class, Object[].class); + private static final MethodHandle LOADWITHNEWGLOBAL = findOwnMH("loadWithNewGlobal", Object.class, Object.class, Object[].class); private static final MethodHandle EXIT = findOwnMH("exit", Object.class, Object.class, Object.class); private final Context context; @@ -429,15 +430,6 @@ return instance().context; } - /** - * Script access check for strict mode - * - * @return true if strict mode enabled in {@link Global#getThisContext()} - */ - static boolean isStrict() { - return getEnv()._strict; - } - // GlobalObject interface implementation @Override @@ -615,14 +607,12 @@ public PropertyDescriptor newAccessorDescriptor(final Object get, final Object set, final boolean configurable, final boolean enumerable) { final AccessorPropertyDescriptor desc = new AccessorPropertyDescriptor(configurable, enumerable, get == null ? UNDEFINED : get, set == null ? UNDEFINED : set); - final boolean strict = context.getEnv()._strict; - if (get == null) { - desc.delete(PropertyDescriptor.GET, strict); + desc.delete(PropertyDescriptor.GET, false); } if (set == null) { - desc.delete(PropertyDescriptor.SET, strict); + desc.delete(PropertyDescriptor.SET, false); } return desc; @@ -750,17 +740,21 @@ /** * Global loadWithNewGlobal implementation - Nashorn extension * - * @param self scope - * @param source source to load - * @param args (optional) arguments to be passed to the loaded script + * @param self scope + * @param args from plus (optional) arguments to be passed to the loaded script * - * @return result of load (undefined) + * @return result of load (may be undefined) * * @throws IOException if source could not be read */ - public static Object loadWithNewGlobal(final Object self, final Object source, final Object...args) throws IOException { + public static Object loadWithNewGlobal(final Object self, final Object...args) throws IOException { final Global global = Global.instance(); - return global.context.loadWithNewGlobal(source, args); + final int length = args.length; + final boolean hasArgs = 0 < length; + final Object from = hasArgs ? args[0] : UNDEFINED; + final Object[] arguments = hasArgs ? Arrays.copyOfRange(args, 1, length) : args; + + return global.context.loadWithNewGlobal(from, arguments); } /** @@ -1480,7 +1474,6 @@ // Error objects this.builtinError = (ScriptFunction)initConstructor("Error"); final ScriptObject errorProto = getErrorPrototype(); - final boolean strict = Global.isStrict(); // Nashorn specific accessors on Error.prototype - stack, lineNumber, columnNumber and fileName final ScriptFunction getStack = ScriptFunctionImpl.makeFunction("getStack", NativeError.GET_STACK); @@ -1498,10 +1491,10 @@ // ECMA 15.11.4.2 Error.prototype.name // Error.prototype.name = "Error"; - errorProto.set(NativeError.NAME, "Error", strict); + errorProto.set(NativeError.NAME, "Error", false); // ECMA 15.11.4.3 Error.prototype.message // Error.prototype.message = ""; - errorProto.set(NativeError.MESSAGE, "", strict); + errorProto.set(NativeError.MESSAGE, "", false); this.builtinEvalError = initErrorSubtype("EvalError", errorProto); this.builtinRangeError = initErrorSubtype("RangeError", errorProto); @@ -1514,9 +1507,8 @@ private ScriptFunction initErrorSubtype(final String name, final ScriptObject errorProto) { final ScriptObject cons = initConstructor(name); final ScriptObject prototype = ScriptFunction.getPrototype(cons); - final boolean strict = Global.isStrict(); - prototype.set(NativeError.NAME, name, strict); - prototype.set(NativeError.MESSAGE, "", strict); + prototype.set(NativeError.NAME, name, false); + prototype.set(NativeError.MESSAGE, "", false); prototype.setProto(errorProto); return (ScriptFunction)cons; } @@ -1725,7 +1717,7 @@ // builtinFunction.setProto(anon); builtinFunction.setPrototype(anon); - anon.set("constructor", builtinFunction, anon.isStrict()); + anon.set("constructor", builtinFunction, false); anon.deleteOwnProperty(anon.getMap().findProperty("prototype")); // now initialize Object diff -r 81a8b5860d3f -r 8fbfd4ce1ce5 nashorn/src/jdk/nashorn/internal/objects/NativeArray.java --- a/nashorn/src/jdk/nashorn/internal/objects/NativeArray.java Sun Jun 16 22:38:17 2013 -0700 +++ b/nashorn/src/jdk/nashorn/internal/objects/NativeArray.java Tue Jun 18 13:25:24 2013 +0530 @@ -39,6 +39,7 @@ import java.util.Comparator; import java.util.Iterator; import java.util.List; +import jdk.nashorn.api.scripting.ScriptObjectMirror; import jdk.nashorn.internal.objects.annotations.Attribute; import jdk.nashorn.internal.objects.annotations.Constructor; import jdk.nashorn.internal.objects.annotations.Function; @@ -118,7 +119,7 @@ if (value == ScriptRuntime.EMPTY) { arrayData = arrayData.delete(index); } else { - arrayData = arrayData.set(index, value, isStrictContext()); + arrayData = arrayData.set(index, value, false); } } @@ -158,6 +159,11 @@ // Step 3 if ("length".equals(key)) { + // check for length being made non-writable + if (desc.has(WRITABLE) && !desc.isWritable()) { + setIsLengthNotWritable(); + } + // Step 3a if (!desc.has(VALUE)) { return super.defineOwnProperty("length", desc, reject); @@ -286,7 +292,8 @@ @Function(attributes = Attribute.NOT_ENUMERABLE, where = Where.CONSTRUCTOR) public static Object isArray(final Object self, final Object arg) { return isArray(arg) || (arg == Global.instance().getArrayPrototype()) - || (arg instanceof NativeRegExpExecResult); + || (arg instanceof NativeRegExpExecResult) + || (arg instanceof ScriptObjectMirror && ((ScriptObjectMirror)arg).isArray()); } /** @@ -603,7 +610,6 @@ public static Object pop(final Object self) { try { final ScriptObject sobj = (ScriptObject)self; - final boolean strict = sobj.isStrictContext(); if (bulkable(sobj)) { return sobj.getArray().pop(); @@ -612,15 +618,15 @@ final long len = JSType.toUint32(sobj.getLength()); if (len == 0) { - sobj.set("length", 0, strict); + sobj.set("length", 0, true); return ScriptRuntime.UNDEFINED; } final long index = len - 1; final Object element = sobj.get(index); - sobj.delete(index, strict); - sobj.set("length", index, strict); + sobj.delete(index, true); + sobj.set("length", index, true); return element; } catch (final ClassCastException | NullPointerException e) { @@ -639,11 +645,10 @@ public static Object push(final Object self, final Object... args) { try { final ScriptObject sobj = (ScriptObject)self; - final boolean strict = sobj.isStrictContext(); if (bulkable(sobj)) { if (sobj.getArray().length() + args.length <= JSType.MAX_UINT) { - final ArrayData newData = sobj.getArray().push(sobj.isStrictContext(), args); + final ArrayData newData = sobj.getArray().push(true, args); sobj.setArray(newData); return newData.length(); } @@ -652,9 +657,9 @@ long len = JSType.toUint32(sobj.getLength()); for (final Object element : args) { - sobj.set(len++, element, strict); + sobj.set(len++, element, true); } - sobj.set("length", len, strict); + sobj.set("length", len, true); return len; } catch (final ClassCastException | NullPointerException e) { @@ -672,7 +677,6 @@ public static Object reverse(final Object self) { try { final ScriptObject sobj = (ScriptObject)self; - final boolean strict = sobj.isStrictContext(); final long len = JSType.toUint32(sobj.getLength()); final long middle = len / 2; @@ -684,14 +688,14 @@ final boolean upperExists = sobj.has(upper); if (lowerExists && upperExists) { - sobj.set(lower, upperValue, strict); - sobj.set(upper, lowerValue, strict); + sobj.set(lower, upperValue, true); + sobj.set(upper, lowerValue, true); } else if (!lowerExists && upperExists) { - sobj.set(lower, upperValue, strict); - sobj.delete(upper, strict); + sobj.set(lower, upperValue, true); + sobj.delete(upper, true); } else if (lowerExists && !upperExists) { - sobj.delete(lower, strict); - sobj.set(upper, lowerValue, strict); + sobj.delete(lower, true); + sobj.set(upper, lowerValue, true); } } return sobj; @@ -717,7 +721,6 @@ } final ScriptObject sobj = (ScriptObject) obj; - final boolean strict = Global.isStrict(); long len = JSType.toUint32(sobj.getLength()); @@ -728,15 +731,15 @@ sobj.getArray().shiftLeft(1); } else { for (long k = 1; k < len; k++) { - sobj.set(k - 1, sobj.get(k), strict); + sobj.set(k - 1, sobj.get(k), true); } } - sobj.delete(--len, strict); + sobj.delete(--len, true); } else { len = 0; } - sobj.set("length", len, strict); + sobj.set("length", len, true); return first; } @@ -833,7 +836,6 @@ public static Object sort(final Object self, final Object comparefn) { try { final ScriptObject sobj = (ScriptObject) self; - final boolean strict = sobj.isStrictContext(); final long len = JSType.toUint32(sobj.getLength()); ArrayData array = sobj.getArray(); @@ -850,7 +852,7 @@ final Object[] sorted = sort(src.toArray(), comparefn); for (int i = 0; i < sorted.length; i++) { - array = array.set(i, sorted[i], strict); + array = array.set(i, sorted[i], true); } // delete missing elements - which are at the end of sorted array @@ -891,7 +893,6 @@ } final ScriptObject sobj = (ScriptObject)obj; - final boolean strict = Global.isStrict(); final long len = JSType.toUint32(sobj.getLength()); final long relativeStart = JSType.toLong(start); @@ -914,14 +915,14 @@ final long to = k + items.length; if (sobj.has(from)) { - sobj.set(to, sobj.get(from), strict); + sobj.set(to, sobj.get(from), true); } else { - sobj.delete(to, strict); + sobj.delete(to, true); } } for (long k = len; k > (len - actualDeleteCount + items.length); k--) { - sobj.delete(k - 1, strict); + sobj.delete(k - 1, true); } } else if (items.length > actualDeleteCount) { for (long k = len - actualDeleteCount; k > actualStart; k--) { @@ -930,20 +931,20 @@ if (sobj.has(from)) { final Object fromValue = sobj.get(from); - sobj.set(to, fromValue, strict); + sobj.set(to, fromValue, true); } else { - sobj.delete(to, strict); + sobj.delete(to, true); } } } long k = actualStart; for (int i = 0; i < items.length; i++, k++) { - sobj.set(k, items[i], strict); + sobj.set(k, items[i], true); } final long newLength = len - actualDeleteCount + items.length; - sobj.set("length", newLength, strict); + sobj.set("length", newLength, true); return array; } @@ -964,7 +965,6 @@ } final ScriptObject sobj = (ScriptObject)obj; - final boolean strict = Global.isStrict(); final long len = JSType.toUint32(sobj.getLength()); if (items == null) { @@ -975,7 +975,7 @@ sobj.getArray().shiftRight(items.length); for (int j = 0; j < items.length; j++) { - sobj.setArray(sobj.getArray().set(j, items[j], sobj.isStrictContext())); + sobj.setArray(sobj.getArray().set(j, items[j], true)); } } else { for (long k = len; k > 0; k--) { @@ -984,19 +984,19 @@ if (sobj.has(from)) { final Object fromValue = sobj.get(from); - sobj.set(to, fromValue, strict); + sobj.set(to, fromValue, true); } else { - sobj.delete(to, strict); + sobj.delete(to, true); } } for (int j = 0; j < items.length; j++) { - sobj.set(j, items[j], strict); + sobj.set(j, items[j], true); } } final long newLength = len + items.length; - sobj.set("length", newLength, strict); + sobj.set("length", newLength, true); return newLength; } @@ -1239,7 +1239,7 @@ * @return true if optimizable */ private static boolean bulkable(final ScriptObject self) { - return self.isArray() && !hasInheritedArrayEntries(self); + return self.isArray() && !hasInheritedArrayEntries(self) && !self.isLengthNotWritable(); } private static boolean hasInheritedArrayEntries(final ScriptObject self) { diff -r 81a8b5860d3f -r 8fbfd4ce1ce5 nashorn/src/jdk/nashorn/internal/objects/NativeError.java --- a/nashorn/src/jdk/nashorn/internal/objects/NativeError.java Sun Jun 16 22:38:17 2013 -0700 +++ b/nashorn/src/jdk/nashorn/internal/objects/NativeError.java Tue Jun 18 13:25:24 2013 +0530 @@ -90,7 +90,7 @@ if (msg != UNDEFINED) { this.instMessage = JSType.toString(msg); } else { - this.delete(NativeError.MESSAGE, Global.isStrict()); + this.delete(NativeError.MESSAGE, false); } } @@ -166,7 +166,7 @@ public static Object setLineNumber(final Object self, final Object value) { Global.checkObject(self); final ScriptObject sobj = (ScriptObject)self; - sobj.set(LINENUMBER, value, Global.isStrict()); + sobj.set(LINENUMBER, value, false); return value; } @@ -194,7 +194,7 @@ public static Object setColumnNumber(final Object self, final Object value) { Global.checkObject(self); final ScriptObject sobj = (ScriptObject)self; - sobj.set(COLUMNNUMBER, value, Global.isStrict()); + sobj.set(COLUMNNUMBER, value, false); return value; } @@ -222,7 +222,7 @@ public static Object setFileName(final Object self, final Object value) { Global.checkObject(self); final ScriptObject sobj = (ScriptObject)self; - sobj.set(FILENAME, value, Global.isStrict()); + sobj.set(FILENAME, value, false); return value; } @@ -278,7 +278,7 @@ public static Object setStack(final Object self, final Object value) { Global.checkObject(self); final ScriptObject sobj = (ScriptObject)self; - sobj.set(STACK, value, Global.isStrict()); + sobj.set(STACK, value, false); return value; } diff -r 81a8b5860d3f -r 8fbfd4ce1ce5 nashorn/src/jdk/nashorn/internal/objects/NativeEvalError.java --- a/nashorn/src/jdk/nashorn/internal/objects/NativeEvalError.java Sun Jun 16 22:38:17 2013 -0700 +++ b/nashorn/src/jdk/nashorn/internal/objects/NativeEvalError.java Tue Jun 18 13:25:24 2013 +0530 @@ -59,7 +59,7 @@ if (msg != UNDEFINED) { this.instMessage = JSType.toString(msg); } else { - this.delete(NativeError.MESSAGE, Global.isStrict()); + this.delete(NativeError.MESSAGE, false); } } diff -r 81a8b5860d3f -r 8fbfd4ce1ce5 nashorn/src/jdk/nashorn/internal/objects/NativeFunction.java --- a/nashorn/src/jdk/nashorn/internal/objects/NativeFunction.java Sun Jun 16 22:38:17 2013 -0700 +++ b/nashorn/src/jdk/nashorn/internal/objects/NativeFunction.java Tue Jun 18 13:25:24 2013 +0530 @@ -29,6 +29,7 @@ import static jdk.nashorn.internal.runtime.ScriptRuntime.UNDEFINED; import java.util.List; +import jdk.nashorn.api.scripting.ScriptObjectMirror; import jdk.nashorn.internal.objects.annotations.Attribute; import jdk.nashorn.internal.objects.annotations.Constructor; import jdk.nashorn.internal.objects.annotations.Function; @@ -102,6 +103,16 @@ list.toArray(args = new Object[list.size()]); } else if (array == null || array == UNDEFINED) { args = ScriptRuntime.EMPTY_ARRAY; + } else if (array instanceof ScriptObjectMirror) { + // look for array-like ScriptObjectMirror object + final ScriptObjectMirror mirror = (ScriptObjectMirror)array; + final Object len = mirror.containsKey("length")? mirror.getMember("length") : Integer.valueOf(0); + final int n = (int)JSType.toUint32(len); + + args = new Object[n]; + for (int i = 0; i < args.length; i++) { + args[i] = mirror.containsKey(i)? mirror.getSlot(i) : UNDEFINED; + } } else { throw typeError("function.apply.expects.array"); } @@ -216,7 +227,7 @@ final Global global = Global.instance(); - return Global.directEval(global, sb.toString(), global, "", Global.isStrict()); + return Global.directEval(global, sb.toString(), global, "", global.isStrictContext()); } private static void checkFunctionParameters(final String params) { diff -r 81a8b5860d3f -r 8fbfd4ce1ce5 nashorn/src/jdk/nashorn/internal/objects/NativeJSON.java --- a/nashorn/src/jdk/nashorn/internal/objects/NativeJSON.java Sun Jun 16 22:38:17 2013 -0700 +++ b/nashorn/src/jdk/nashorn/internal/objects/NativeJSON.java Tue Jun 18 13:25:24 2013 +0530 @@ -158,7 +158,7 @@ state.gap = gap; final ScriptObject wrapper = Global.newEmptyInstance(); - wrapper.set("", value, Global.isStrict()); + wrapper.set("", value, false); return str("", wrapper, state); } diff -r 81a8b5860d3f -r 8fbfd4ce1ce5 nashorn/src/jdk/nashorn/internal/objects/NativeJavaImporter.java --- a/nashorn/src/jdk/nashorn/internal/objects/NativeJavaImporter.java Sun Jun 16 22:38:17 2013 -0700 +++ b/nashorn/src/jdk/nashorn/internal/objects/NativeJavaImporter.java Tue Jun 18 13:25:24 2013 +0530 @@ -121,7 +121,7 @@ final String name = desc.getNameToken(CallSiteDescriptor.NAME_OPERAND); final Object value = createProperty(name); if(value != null) { - set(name, value, isStrictContext()); + set(name, value, false); return true; } return false; diff -r 81a8b5860d3f -r 8fbfd4ce1ce5 nashorn/src/jdk/nashorn/internal/objects/NativeObject.java --- a/nashorn/src/jdk/nashorn/internal/objects/NativeObject.java Sun Jun 16 22:38:17 2013 -0700 +++ b/nashorn/src/jdk/nashorn/internal/objects/NativeObject.java Tue Jun 18 13:25:24 2013 +0530 @@ -28,11 +28,13 @@ import static jdk.nashorn.internal.runtime.ECMAErrors.typeError; import static jdk.nashorn.internal.runtime.ScriptRuntime.UNDEFINED; +import jdk.nashorn.api.scripting.ScriptObjectMirror; import jdk.nashorn.internal.objects.annotations.Attribute; import jdk.nashorn.internal.objects.annotations.Constructor; import jdk.nashorn.internal.objects.annotations.Function; import jdk.nashorn.internal.objects.annotations.ScriptClass; import jdk.nashorn.internal.objects.annotations.Where; +import jdk.nashorn.internal.runtime.ECMAException; import jdk.nashorn.internal.runtime.JSType; import jdk.nashorn.internal.runtime.ScriptFunction; import jdk.nashorn.internal.runtime.ScriptObject; @@ -54,6 +56,10 @@ private NativeObject() { } + private static ECMAException notAnObject(final Object obj) { + return typeError("not.an.object", ScriptRuntime.safeToString(obj)); + } + /** * ECMA 15.2.3.2 Object.getPrototypeOf ( O ) * @@ -63,9 +69,13 @@ */ @Function(attributes = Attribute.NOT_ENUMERABLE, where = Where.CONSTRUCTOR) public static Object getPrototypeOf(final Object self, final Object obj) { - Global.checkObject(obj); - - return ((ScriptObject)obj).getProto(); + if (obj instanceof ScriptObject) { + return ((ScriptObject)obj).getProto(); + } else if (obj instanceof ScriptObjectMirror) { + return ((ScriptObjectMirror)obj).getProto(); + } else { + throw notAnObject(obj); + } } /** @@ -78,12 +88,19 @@ */ @Function(attributes = Attribute.NOT_ENUMERABLE, where = Where.CONSTRUCTOR) public static Object getOwnPropertyDescriptor(final Object self, final Object obj, final Object prop) { - Global.checkObject(obj); + if (obj instanceof ScriptObject) { + final String key = JSType.toString(prop); + final ScriptObject sobj = (ScriptObject)obj; - final String key = JSType.toString(prop); - final ScriptObject sobj = (ScriptObject)obj; + return sobj.getOwnPropertyDescriptor(key); + } else if (obj instanceof ScriptObjectMirror) { + final String key = JSType.toString(prop); + final ScriptObjectMirror sobjMirror = (ScriptObjectMirror)obj; - return sobj.getOwnPropertyDescriptor(key); + return sobjMirror.getOwnPropertyDescriptor(key); + } else { + throw notAnObject(obj); + } } /** @@ -95,9 +112,13 @@ */ @Function(attributes = Attribute.NOT_ENUMERABLE, where = Where.CONSTRUCTOR) public static Object getOwnPropertyNames(final Object self, final Object obj) { - Global.checkObject(obj); - - return new NativeArray(((ScriptObject)obj).getOwnKeys(true)); + if (obj instanceof ScriptObject) { + return new NativeArray(((ScriptObject)obj).getOwnKeys(true)); + } else if (obj instanceof ScriptObjectMirror) { + return new NativeArray(((ScriptObjectMirror)obj).getOwnKeys(true)); + } else { + throw notAnObject(obj); + } } /** @@ -175,8 +196,13 @@ */ @Function(attributes = Attribute.NOT_ENUMERABLE, where = Where.CONSTRUCTOR) public static Object seal(final Object self, final Object obj) { - Global.checkObject(obj); - return ((ScriptObject)obj).seal(); + if (obj instanceof ScriptObject) { + return ((ScriptObject)obj).seal(); + } else if (obj instanceof ScriptObjectMirror) { + return ((ScriptObjectMirror)obj).seal(); + } else { + throw notAnObject(obj); + } } @@ -189,8 +215,13 @@ */ @Function(attributes = Attribute.NOT_ENUMERABLE, where = Where.CONSTRUCTOR) public static Object freeze(final Object self, final Object obj) { - Global.checkObject(obj); - return ((ScriptObject)obj).freeze(); + if (obj instanceof ScriptObject) { + return ((ScriptObject)obj).freeze(); + } else if (obj instanceof ScriptObjectMirror) { + return ((ScriptObjectMirror)obj).freeze(); + } else { + throw notAnObject(obj); + } } /** @@ -202,8 +233,13 @@ */ @Function(attributes = Attribute.NOT_ENUMERABLE, where = Where.CONSTRUCTOR) public static Object preventExtensions(final Object self, final Object obj) { - Global.checkObject(obj); - return ((ScriptObject)obj).preventExtensions(); + if (obj instanceof ScriptObject) { + return ((ScriptObject)obj).preventExtensions(); + } else if (obj instanceof ScriptObjectMirror) { + return ((ScriptObjectMirror)obj).preventExtensions(); + } else { + throw notAnObject(obj); + } } /** @@ -215,8 +251,13 @@ */ @Function(attributes = Attribute.NOT_ENUMERABLE, where = Where.CONSTRUCTOR) public static Object isSealed(final Object self, final Object obj) { - Global.checkObject(obj); - return ((ScriptObject)obj).isSealed(); + if (obj instanceof ScriptObject) { + return ((ScriptObject)obj).isSealed(); + } else if (obj instanceof ScriptObjectMirror) { + return ((ScriptObjectMirror)obj).isSealed(); + } else { + throw notAnObject(obj); + } } /** @@ -228,8 +269,13 @@ */ @Function(attributes = Attribute.NOT_ENUMERABLE, where = Where.CONSTRUCTOR) public static Object isFrozen(final Object self, final Object obj) { - Global.checkObject(obj); - return ((ScriptObject)obj).isFrozen(); + if (obj instanceof ScriptObject) { + return ((ScriptObject)obj).isFrozen(); + } else if (obj instanceof ScriptObjectMirror) { + return ((ScriptObjectMirror)obj).isFrozen(); + } else { + throw notAnObject(obj); + } } /** @@ -241,8 +287,13 @@ */ @Function(attributes = Attribute.NOT_ENUMERABLE, where = Where.CONSTRUCTOR) public static Object isExtensible(final Object self, final Object obj) { - Global.checkObject(obj); - return ((ScriptObject)obj).isExtensible(); + if (obj instanceof ScriptObject) { + return ((ScriptObject)obj).isExtensible(); + } else if (obj instanceof ScriptObjectMirror) { + return ((ScriptObjectMirror)obj).isExtensible(); + } else { + throw notAnObject(obj); + } } /** @@ -254,9 +305,15 @@ */ @Function(attributes = Attribute.NOT_ENUMERABLE, where = Where.CONSTRUCTOR) public static Object keys(final Object self, final Object obj) { - Global.checkObject(obj); - final ScriptObject sobj = (ScriptObject)obj; - return new NativeArray(sobj.getOwnKeys(false)); + if (obj instanceof ScriptObject) { + final ScriptObject sobj = (ScriptObject)obj; + return new NativeArray(sobj.getOwnKeys(false)); + } else if (obj instanceof ScriptObjectMirror) { + final ScriptObjectMirror sobjMirror = (ScriptObjectMirror)obj; + return new NativeArray(sobjMirror.getOwnKeys(false)); + } else { + throw notAnObject(obj); + } } /** diff -r 81a8b5860d3f -r 8fbfd4ce1ce5 nashorn/src/jdk/nashorn/internal/objects/NativeRangeError.java --- a/nashorn/src/jdk/nashorn/internal/objects/NativeRangeError.java Sun Jun 16 22:38:17 2013 -0700 +++ b/nashorn/src/jdk/nashorn/internal/objects/NativeRangeError.java Tue Jun 18 13:25:24 2013 +0530 @@ -59,7 +59,7 @@ if (msg != UNDEFINED) { this.instMessage = JSType.toString(msg); } else { - this.delete(NativeError.MESSAGE, Global.isStrict()); + this.delete(NativeError.MESSAGE, false); } } diff -r 81a8b5860d3f -r 8fbfd4ce1ce5 nashorn/src/jdk/nashorn/internal/objects/NativeReferenceError.java --- a/nashorn/src/jdk/nashorn/internal/objects/NativeReferenceError.java Sun Jun 16 22:38:17 2013 -0700 +++ b/nashorn/src/jdk/nashorn/internal/objects/NativeReferenceError.java Tue Jun 18 13:25:24 2013 +0530 @@ -59,7 +59,7 @@ if (msg != UNDEFINED) { this.instMessage = JSType.toString(msg); } else { - this.delete(NativeError.MESSAGE, Global.isStrict()); + this.delete(NativeError.MESSAGE, false); } } diff -r 81a8b5860d3f -r 8fbfd4ce1ce5 nashorn/src/jdk/nashorn/internal/objects/NativeRegExp.java --- a/nashorn/src/jdk/nashorn/internal/objects/NativeRegExp.java Sun Jun 16 22:38:17 2013 -0700 +++ b/nashorn/src/jdk/nashorn/internal/objects/NativeRegExp.java Tue Jun 18 13:25:24 2013 +0530 @@ -641,26 +641,19 @@ return string; } - /* - * $$ -> $ - * $& -> the matched substring - * $` -> the portion of string that preceeds matched substring - * $' -> the portion of string that follows the matched substring - * $n -> the nth capture, where n is [1-9] and $n is NOT followed by a decimal digit - * $nn -> the nnth capture, where nn is a two digit decimal number [01-99]. - */ - String replace = replacement; - if (!regexp.isGlobal()) { if (!matcher.search(0)) { return string; } final StringBuilder sb = new StringBuilder(); + sb.append(string, 0, matcher.start()); + if (function != null) { - replace = callReplaceValue(function, matcher, string); + sb.append(callReplaceValue(function, matcher, string)); + } else { + appendReplacement(matcher, string, replacement, sb); } - appendReplacement(matcher, string, replace, sb, 0); sb.append(string, matcher.end(), string.length()); return sb.toString(); } @@ -676,12 +669,13 @@ final StringBuilder sb = new StringBuilder(); do { + sb.append(string, thisIndex, matcher.start()); if (function != null) { - replace = callReplaceValue(function, matcher, string); + sb.append(callReplaceValue(function, matcher, string)); + } else { + appendReplacement(matcher, string, replacement, sb); } - appendReplacement(matcher, string, replace, sb, thisIndex); - // ECMA 15.5.4.10 String.prototype.match(regexp) thisIndex = matcher.end(); if (thisIndex == previousLastIndex) { @@ -697,10 +691,19 @@ return sb.toString(); } - private void appendReplacement(final RegExpMatcher matcher, final String text, final String replacement, final StringBuilder sb, final int lastAppendPosition) { - // Process substitution string to replace group references with groups + private void appendReplacement(final RegExpMatcher matcher, final String text, final String replacement, final StringBuilder sb) { + /* + * Process substitution patterns: + * + * $$ -> $ + * $& -> the matched substring + * $` -> the portion of string that preceeds matched substring + * $' -> the portion of string that follows the matched substring + * $n -> the nth capture, where n is [1-9] and $n is NOT followed by a decimal digit + * $nn -> the nnth capture, where nn is a two digit decimal number [01-99]. + */ + int cursor = 0; - final StringBuilder result = new StringBuilder(); Object[] groups = null; while (cursor < replacement.length()) { @@ -732,37 +735,33 @@ } // Append group if matched. if (groups[refNum] != UNDEFINED) { - result.append((String) groups[refNum]); + sb.append((String) groups[refNum]); } } else { // $0. ignore. assert refNum == 0; - result.append("$0"); + sb.append("$0"); } } else if (nextChar == '$') { - result.append('$'); + sb.append('$'); cursor++; } else if (nextChar == '&') { - result.append(matcher.group()); + sb.append(matcher.group()); cursor++; } else if (nextChar == '`') { - result.append(text.substring(0, matcher.start())); + sb.append(text, 0, matcher.start()); cursor++; } else if (nextChar == '\'') { - result.append(text.substring(matcher.end())); + sb.append(text, matcher.end(), text.length()); cursor++; } else { // unknown substitution or $n with n>m. skip. - result.append('$'); + sb.append('$'); } } else { - result.append(nextChar); + sb.append(nextChar); cursor++; } } - // Append the intervening text - sb.append(text, lastAppendPosition, matcher.start()); - // Append the match substitution - sb.append(result); } private String callReplaceValue(final ScriptFunction function, final RegExpMatcher matcher, final String string) { diff -r 81a8b5860d3f -r 8fbfd4ce1ce5 nashorn/src/jdk/nashorn/internal/objects/NativeSyntaxError.java --- a/nashorn/src/jdk/nashorn/internal/objects/NativeSyntaxError.java Sun Jun 16 22:38:17 2013 -0700 +++ b/nashorn/src/jdk/nashorn/internal/objects/NativeSyntaxError.java Tue Jun 18 13:25:24 2013 +0530 @@ -59,7 +59,7 @@ if (msg != UNDEFINED) { this.instMessage = JSType.toString(msg); } else { - this.delete(NativeError.MESSAGE, Global.isStrict()); + this.delete(NativeError.MESSAGE, false); } } diff -r 81a8b5860d3f -r 8fbfd4ce1ce5 nashorn/src/jdk/nashorn/internal/objects/NativeTypeError.java --- a/nashorn/src/jdk/nashorn/internal/objects/NativeTypeError.java Sun Jun 16 22:38:17 2013 -0700 +++ b/nashorn/src/jdk/nashorn/internal/objects/NativeTypeError.java Tue Jun 18 13:25:24 2013 +0530 @@ -59,7 +59,7 @@ if (msg != UNDEFINED) { this.instMessage = JSType.toString(msg); } else { - delete(NativeError.MESSAGE, Global.isStrict()); + delete(NativeError.MESSAGE, false); } } diff -r 81a8b5860d3f -r 8fbfd4ce1ce5 nashorn/src/jdk/nashorn/internal/objects/NativeURIError.java --- a/nashorn/src/jdk/nashorn/internal/objects/NativeURIError.java Sun Jun 16 22:38:17 2013 -0700 +++ b/nashorn/src/jdk/nashorn/internal/objects/NativeURIError.java Tue Jun 18 13:25:24 2013 +0530 @@ -58,7 +58,7 @@ if (msg != UNDEFINED) { this.instMessage = JSType.toString(msg); } else { - this.delete(NativeError.MESSAGE, Global.isStrict()); + this.delete(NativeError.MESSAGE, false); } } diff -r 81a8b5860d3f -r 8fbfd4ce1ce5 nashorn/src/jdk/nashorn/internal/parser/JSONParser.java --- a/nashorn/src/jdk/nashorn/internal/parser/JSONParser.java Sun Jun 16 22:38:17 2013 -0700 +++ b/nashorn/src/jdk/nashorn/internal/parser/JSONParser.java Tue Jun 18 13:25:24 2013 +0530 @@ -149,9 +149,9 @@ @Override protected void scanNumber() { // Record beginning of number. - final int start = position; + final int startPosition = position; // Assume value is a decimal. - TokenType type = TokenType.DECIMAL; + TokenType valueType = TokenType.DECIMAL; // floating point can't start with a "." with no leading digit before if (ch0 == '.') { @@ -211,11 +211,11 @@ } } - type = TokenType.FLOATING; + valueType = TokenType.FLOATING; } // Add number token. - add(type, start); + add(valueType, startPosition); } // ECMA 15.12.1.1 The JSON Lexical Grammar - JSONEscapeCharacter diff -r 81a8b5860d3f -r 8fbfd4ce1ce5 nashorn/src/jdk/nashorn/internal/parser/Lexer.java --- a/nashorn/src/jdk/nashorn/internal/parser/Lexer.java Sun Jun 16 22:38:17 2013 -0700 +++ b/nashorn/src/jdk/nashorn/internal/parser/Lexer.java Tue Jun 18 13:25:24 2013 +0530 @@ -666,37 +666,24 @@ /** - * Get the value of a numeric sequence. + * Get the value of a hexadecimal numeric sequence. * - * @param base Numeric base. - * @param max Maximum number of digits. - * @param skip Skip over escape first. - * @param check Tells whether to throw error if a digit is invalid for the given base. - * @param type Type of token to report against. - * + * @param length Number of digits. + * @param type Type of token to report against. * @return Value of sequence or < 0 if no digits. */ - private int valueOfSequence(final int base, final int max, final boolean skip, final boolean check, final TokenType type) { - assert base == 16 || base == 8 : "base other than 16 or 8"; - final boolean isHex = base == 16; - final int shift = isHex ? 4 : 3; + private int hexSequence(final int length, final TokenType type) { int value = 0; - if (skip) { - skip(2); - } - - for (int i = 0; i < max; i++) { - final int digit = convertDigit(ch0, base); + for (int i = 0; i < length; i++) { + final int digit = convertDigit(ch0, 16); if (digit == -1) { - if (check) { - error(Lexer.message("invalid." + (isHex ? "hex" : "octal")), type, position, limit); - } + error(Lexer.message("invalid.hex"), type, position, limit); return i == 0 ? -1 : value; } - value = value << shift | digit; + value = digit | value << 4; skip(1); } @@ -704,6 +691,30 @@ } /** + * Get the value of an octal numeric sequence. This parses up to 3 digits with a maximum value of 255. + * + * @return Value of sequence. + */ + private int octalSequence() { + int value = 0; + + for (int i = 0; i < 3; i++) { + final int digit = convertDigit(ch0, 8); + + if (digit == -1) { + break; + } + value = digit | value << 3; + skip(1); + + if (i == 1 && value >= 32) { + break; + } + } + return value; + } + + /** * Convert a string to a JavaScript identifier. * * @param start Position in source content. @@ -724,7 +735,8 @@ while (!atEOF() && position < end && !isEOL(ch0)) { // If escape character. if (ch0 == '\\' && ch1 == 'u') { - final int ch = valueOfSequence(16, 4, true, true, TokenType.IDENT); + skip(2); + final int ch = hexSequence(4, TokenType.IDENT); if (isWhitespace((char)ch)) { return null; } @@ -815,7 +827,7 @@ } reset(afterSlash); // Octal sequence. - final int ch = valueOfSequence(8, 3, false, false, STRING); + final int ch = octalSequence(); if (ch < 0) { sb.append('\\'); @@ -862,7 +874,7 @@ break; case 'x': { // Hex sequence. - final int ch = valueOfSequence(16, 2, false, true, STRING); + final int ch = hexSequence(2, STRING); if (ch < 0) { sb.append('\\'); @@ -874,7 +886,7 @@ break; case 'u': { // Unicode sequence. - final int ch = valueOfSequence(16, 4, false, true, STRING); + final int ch = hexSequence(4, STRING); if (ch < 0) { sb.append('\\'); @@ -907,6 +919,7 @@ /** * Scan over a string literal. + * @param add true if we nare not just scanning but should actually modify the token stream */ protected void scanString(final boolean add) { // Type of string. @@ -1103,6 +1116,10 @@ } } + if (Character.isJavaIdentifierStart(ch0)) { + error(Lexer.message("missing.space.after.number"), type, position, 1); + } + // Add number token. add(type, start); } @@ -1191,7 +1208,8 @@ // Make sure first character is valid start character. if (ch0 == '\\' && ch1 == 'u') { - final int ch = valueOfSequence(16, 4, true, true, TokenType.IDENT); + skip(2); + final int ch = hexSequence(4, TokenType.IDENT); if (!Character.isJavaIdentifierStart(ch)) { error(Lexer.message("illegal.identifier.character"), TokenType.IDENT, start, position); @@ -1204,7 +1222,8 @@ // Make sure remaining characters are valid part characters. while (!atEOF()) { if (ch0 == '\\' && ch1 == 'u') { - final int ch = valueOfSequence(16, 4, true, true, TokenType.IDENT); + skip(2); + final int ch = hexSequence(4, TokenType.IDENT); if (!Character.isJavaIdentifierPart(ch)) { error(Lexer.message("illegal.identifier.character"), TokenType.IDENT, start, position); @@ -1596,6 +1615,12 @@ return null; } + /** + * Get the correctly localized error message for a given message id format arguments + * @param msgId message id + * @param args format arguments + * @return message + */ protected static String message(final String msgId, final String... args) { return ECMAErrors.getMessage("lexer.error." + msgId, args); } diff -r 81a8b5860d3f -r 8fbfd4ce1ce5 nashorn/src/jdk/nashorn/internal/parser/Parser.java --- a/nashorn/src/jdk/nashorn/internal/parser/Parser.java Sun Jun 16 22:38:17 2013 -0700 +++ b/nashorn/src/jdk/nashorn/internal/parser/Parser.java Tue Jun 18 13:25:24 2013 +0530 @@ -2403,7 +2403,7 @@ verifyStrictIdent(name, "function name"); } else if (isStatement) { // Nashorn extension: anonymous function statements - if (env._no_syntax_extensions || !env._anon_functions) { + if (env._no_syntax_extensions) { expect(IDENT); } } diff -r 81a8b5860d3f -r 8fbfd4ce1ce5 nashorn/src/jdk/nashorn/internal/runtime/Context.java --- a/nashorn/src/jdk/nashorn/internal/runtime/Context.java Sun Jun 16 22:38:17 2013 -0700 +++ b/nashorn/src/jdk/nashorn/internal/runtime/Context.java Tue Jun 18 13:25:24 2013 +0530 @@ -46,6 +46,7 @@ import java.security.Permissions; import java.security.PrivilegedAction; import java.security.ProtectionDomain; +import java.util.Map; import jdk.internal.org.objectweb.asm.ClassReader; import jdk.internal.org.objectweb.asm.util.CheckClassAdapter; import jdk.nashorn.api.scripting.ScriptObjectMirror; @@ -188,7 +189,7 @@ private final ScriptEnvironment env; /** is this context in strict mode? Cached from env. as this is used heavily. */ - public final boolean _strict; + final boolean _strict; /** class loader to resolve classes from script. */ private final ClassLoader appLoader; @@ -482,6 +483,13 @@ final String name = JSType.toString(sobj.get("name")); source = new Source(name, script); } + } else if (src instanceof Map) { + final Map map = (Map)src; + if (map.containsKey("script") && map.containsKey("name")) { + final String script = JSType.toString(map.get("script")); + final String name = JSType.toString(map.get("name")); + source = new Source(name, script); + } } if (source != null) { diff -r 81a8b5860d3f -r 8fbfd4ce1ce5 nashorn/src/jdk/nashorn/internal/runtime/GlobalFunctions.java --- a/nashorn/src/jdk/nashorn/internal/runtime/GlobalFunctions.java Sun Jun 16 22:38:17 2013 -0700 +++ b/nashorn/src/jdk/nashorn/internal/runtime/GlobalFunctions.java Tue Jun 18 13:25:24 2013 +0530 @@ -373,11 +373,16 @@ sb.append(ch); } else if (ch < 256) { sb.append('%'); - final byte b = (byte)ch; - sb.append(Integer.toHexString(b & 0xFF).toUpperCase(Locale.ENGLISH)); + if (ch < 16) { + sb.append('0'); + } + sb.append(Integer.toHexString(ch).toUpperCase(Locale.ENGLISH)); } else { sb.append("%u"); - sb.append(Integer.toHexString(ch & 0xFFFF).toUpperCase(Locale.ENGLISH)); + if (ch < 4096) { + sb.append('0'); + } + sb.append(Integer.toHexString(ch).toUpperCase(Locale.ENGLISH)); } } diff -r 81a8b5860d3f -r 8fbfd4ce1ce5 nashorn/src/jdk/nashorn/internal/runtime/JSONFunctions.java --- a/nashorn/src/jdk/nashorn/internal/runtime/JSONFunctions.java Sun Jun 16 22:38:17 2013 -0700 +++ b/nashorn/src/jdk/nashorn/internal/runtime/JSONFunctions.java Tue Jun 18 13:25:24 2013 +0530 @@ -101,7 +101,6 @@ final Object val = holder.get(name); if (val instanceof ScriptObject) { final ScriptObject valueObj = (ScriptObject)val; - final boolean strict = valueObj.isStrictContext(); final Iterator iter = valueObj.propertyIterator(); while (iter.hasNext()) { @@ -109,9 +108,9 @@ final Object newElement = walk(valueObj, key, reviver); if (newElement == ScriptRuntime.UNDEFINED) { - valueObj.delete(key, strict); + valueObj.delete(key, false); } else { - setPropertyValue(valueObj, key, newElement, strict); + setPropertyValue(valueObj, key, newElement, false); } } } @@ -164,14 +163,13 @@ } else if (node instanceof ObjectNode) { final ObjectNode objNode = (ObjectNode) node; final ScriptObject object = ((GlobalObject)global).newObject(); - final boolean strict = global.isStrictContext(); for (final PropertyNode pNode: objNode.getElements()) { final Node valueNode = pNode.getValue(); final String name = pNode.getKeyName(); final Object value = convertNode(global, valueNode); - setPropertyValue(object, name, value, strict); + setPropertyValue(object, name, value, false); } return object; diff -r 81a8b5860d3f -r 8fbfd4ce1ce5 nashorn/src/jdk/nashorn/internal/runtime/NativeJavaPackage.java --- a/nashorn/src/jdk/nashorn/internal/runtime/NativeJavaPackage.java Sun Jun 16 22:38:17 2013 -0700 +++ b/nashorn/src/jdk/nashorn/internal/runtime/NativeJavaPackage.java Tue Jun 18 13:25:24 2013 +0530 @@ -199,7 +199,6 @@ final String fullName = name.isEmpty() ? propertyName : name + "." + propertyName; final Context context = getContext(); - final boolean strict = context._strict; Class javaClass = null; try { @@ -209,9 +208,9 @@ } if (javaClass == null) { - set(propertyName, new NativeJavaPackage(fullName, getProto()), strict); + set(propertyName, new NativeJavaPackage(fullName, getProto()), false); } else { - set(propertyName, StaticClass.forClass(javaClass), strict); + set(propertyName, StaticClass.forClass(javaClass), false); } return super.lookup(desc, request); diff -r 81a8b5860d3f -r 8fbfd4ce1ce5 nashorn/src/jdk/nashorn/internal/runtime/PropertyListenerManager.java --- a/nashorn/src/jdk/nashorn/internal/runtime/PropertyListenerManager.java Sun Jun 16 22:38:17 2013 -0700 +++ b/nashorn/src/jdk/nashorn/internal/runtime/PropertyListenerManager.java Tue Jun 18 13:25:24 2013 +0530 @@ -61,7 +61,7 @@ * * @param listener The property listener that is added. */ - public final void addPropertyListener(final PropertyListener listener) { + public synchronized final void addPropertyListener(final PropertyListener listener) { if (listeners == null) { listeners = new WeakHashMap<>(); } @@ -77,7 +77,7 @@ * * @param listener The property listener that is removed. */ - public final void removePropertyListener(final PropertyListener listener) { + public synchronized final void removePropertyListener(final PropertyListener listener) { if (listeners != null) { if (Context.DEBUG) { listenersRemoved++; @@ -92,7 +92,7 @@ * @param object The ScriptObject to which property was added. * @param prop The property being added. */ - protected final void notifyPropertyAdded(final ScriptObject object, final Property prop) { + protected synchronized final void notifyPropertyAdded(final ScriptObject object, final Property prop) { if (listeners != null) { for (PropertyListener listener : listeners.keySet()) { listener.propertyAdded(object, prop); @@ -106,7 +106,7 @@ * @param object The ScriptObject from which property was deleted. * @param prop The property being deleted. */ - protected final void notifyPropertyDeleted(final ScriptObject object, final Property prop) { + protected synchronized final void notifyPropertyDeleted(final ScriptObject object, final Property prop) { if (listeners != null) { for (PropertyListener listener : listeners.keySet()) { listener.propertyDeleted(object, prop); @@ -121,7 +121,7 @@ * @param oldProp The old property being replaced. * @param newProp The new property that replaces the old property. */ - protected final void notifyPropertyModified(final ScriptObject object, final Property oldProp, final Property newProp) { + protected synchronized final void notifyPropertyModified(final ScriptObject object, final Property oldProp, final Property newProp) { if (listeners != null) { for (PropertyListener listener : listeners.keySet()) { listener.propertyModified(object, oldProp, newProp); diff -r 81a8b5860d3f -r 8fbfd4ce1ce5 nashorn/src/jdk/nashorn/internal/runtime/PropertyMap.java --- a/nashorn/src/jdk/nashorn/internal/runtime/PropertyMap.java Sun Jun 16 22:38:17 2013 -0700 +++ b/nashorn/src/jdk/nashorn/internal/runtime/PropertyMap.java Tue Jun 18 13:25:24 2013 +0530 @@ -95,7 +95,6 @@ */ private PropertyMap(final PropertyHashMap properties, final int fieldCount, final int fieldMaximum) { this.properties = properties; - this.hashCode = computeHashCode(); this.fieldCount = fieldCount; this.fieldMaximum = fieldMaximum; @@ -125,7 +124,6 @@ this.spillLength = propertyMap.spillLength; this.fieldCount = propertyMap.fieldCount; this.fieldMaximum = propertyMap.fieldMaximum; - this.hashCode = computeHashCode(); if (Context.DEBUG) { count++; @@ -610,6 +608,9 @@ @Override public int hashCode() { + if (hashCode == 0 && !properties.isEmpty()) { + hashCode = computeHashCode(); + } return hashCode; } diff -r 81a8b5860d3f -r 8fbfd4ce1ce5 nashorn/src/jdk/nashorn/internal/runtime/ScriptEnvironment.java --- a/nashorn/src/jdk/nashorn/internal/runtime/ScriptEnvironment.java Sun Jun 16 22:38:17 2013 -0700 +++ b/nashorn/src/jdk/nashorn/internal/runtime/ScriptEnvironment.java Tue Jun 18 13:25:24 2013 +0530 @@ -56,9 +56,6 @@ /** Current Options object. */ private final Options options; - /** Always allow functions as statements */ - public final boolean _anon_functions; - /** Size of the per-global Class cache size */ public final int _class_cache_size; @@ -192,7 +189,6 @@ this.namespace = new Namespace(); this.options = options; - _anon_functions = options.getBoolean("anon.functions"); _class_cache_size = options.getInteger("class.cache.size"); _compile_only = options.getBoolean("compile.only"); _debug_lines = options.getBoolean("debug.lines"); diff -r 81a8b5860d3f -r 8fbfd4ce1ce5 nashorn/src/jdk/nashorn/internal/runtime/ScriptObject.java --- a/nashorn/src/jdk/nashorn/internal/runtime/ScriptObject.java Sun Jun 16 22:38:17 2013 -0700 +++ b/nashorn/src/jdk/nashorn/internal/runtime/ScriptObject.java Tue Jun 18 13:25:24 2013 +0530 @@ -105,6 +105,9 @@ /** Is this a prototype PropertyMap? */ public static final int IS_PROTOTYPE = 0b0000_1000; + /** Is length property not-writable? */ + public static final int IS_LENGTH_NOT_WRITABLE = 0b0001_0000; + /** Spill growth rate - by how many elements does {@link ScriptObject#spill} when full */ public static final int SPILL_RATE = 8; @@ -443,7 +446,7 @@ if (newValue && property != null) { // Temporarily clear flags. property = modifyOwnProperty(property, 0); - set(key, value, getContext()._strict); + set(key, value, false); } if (property == null) { @@ -998,7 +1001,7 @@ * @param value the value to write at the given index */ public void setArgument(final int key, final Object value) { - set(key, value, getContext()._strict); + set(key, value, false); } /** @@ -1105,7 +1108,8 @@ } /** - * return a List of own keys associated with the object. + * return an array of own property keys associated with the object. + * * @param all True if to include non-enumerable keys. * @return Array of keys. */ @@ -1206,7 +1210,7 @@ * the proto chain * * @param instance instace to check - * @return true if instance of instance + * @return true if 'instance' is an instance of this object */ public boolean isInstance(final ScriptObject instance) { return false; @@ -1277,14 +1281,14 @@ * * @return {@code true} if is prototype */ - public boolean isPrototype() { + public final boolean isPrototype() { return (flags & IS_PROTOTYPE) != 0; } /** * Flag this object as having a prototype. */ - public void setIsPrototype() { + public final void setIsPrototype() { if (proto != null && !isPrototype()) { proto.addPropertyListener(this); } @@ -1292,6 +1296,22 @@ } /** + * Check if this object has non-writable length property + * + * @return {@code true} if 'length' property is non-writable + */ + public final boolean isLengthNotWritable() { + return (flags & IS_LENGTH_NOT_WRITABLE) != 0; + } + + /** + * Flag this object as having non-writable length property + */ + public void setIsLengthNotWritable() { + flags |= IS_LENGTH_NOT_WRITABLE; + } + + /** * Get the {@link ArrayData} for this ScriptObject if it is an array * @return array data */ @@ -1363,7 +1383,7 @@ /** * Check whether this ScriptObject is frozen - * @return true if frozed + * @return true if frozen */ public boolean isFrozen() { return getMap().isFrozen(); @@ -1393,7 +1413,7 @@ * (java.util.Map-like method to help ScriptObjectMirror implementation) */ public void clear() { - final boolean strict = getContext()._strict; + final boolean strict = isStrictContext(); final Iterator iter = propertyIterator(); while (iter.hasNext()) { delete(iter.next(), strict); @@ -1481,7 +1501,7 @@ */ public Object put(final Object key, final Object value) { final Object oldValue = get(key); - set(key, value, getContext()._strict); + set(key, value, isStrictContext()); return oldValue; } @@ -1493,7 +1513,7 @@ * @param otherMap a {@literal } map of properties to add */ public void putAll(final Map otherMap) { - final boolean strict = getContext()._strict; + final boolean strict = isStrictContext(); for (final Map.Entry entry : otherMap.entrySet()) { set(entry.getKey(), entry.getValue(), strict); } @@ -1508,7 +1528,7 @@ */ public Object remove(final Object key) { final Object oldValue = get(key); - delete(key, getContext()._strict); + delete(key, isStrictContext()); return oldValue; } @@ -1520,7 +1540,7 @@ * @return if the delete was successful or not */ public boolean delete(final Object key) { - return delete(key, getContext()._strict); + return delete(key, isStrictContext()); } /** @@ -2222,7 +2242,7 @@ return; } - final boolean isStrict = getContext()._strict; + final boolean isStrict = isStrictContext(); if (newLength > arrayLength) { setArray(getArray().ensure(newLength - 1)); diff -r 81a8b5860d3f -r 8fbfd4ce1ce5 nashorn/src/jdk/nashorn/internal/runtime/ScriptRuntime.java --- a/nashorn/src/jdk/nashorn/internal/runtime/ScriptRuntime.java Sun Jun 16 22:38:17 2013 -0700 +++ b/nashorn/src/jdk/nashorn/internal/runtime/ScriptRuntime.java Tue Jun 18 13:25:24 2013 +0530 @@ -825,6 +825,13 @@ return ((StaticClass)clazz).getRepresentedClass().isInstance(obj); } + if (clazz instanceof ScriptObjectMirror) { + if (obj instanceof ScriptObjectMirror) { + return ((ScriptObjectMirror)clazz).isInstance((ScriptObjectMirror)obj); + } + return false; + } + throw typeError("instanceof.on.non.object"); } diff -r 81a8b5860d3f -r 8fbfd4ce1ce5 nashorn/src/jdk/nashorn/internal/runtime/ScriptingFunctions.java --- a/nashorn/src/jdk/nashorn/internal/runtime/ScriptingFunctions.java Sun Jun 16 22:38:17 2013 -0700 +++ b/nashorn/src/jdk/nashorn/internal/runtime/ScriptingFunctions.java Tue Jun 18 13:25:24 2013 +0530 @@ -221,10 +221,9 @@ final String err = errBuffer.toString(); // Set globals for secondary results. - final boolean isStrict = global.isStrictContext(); - global.set(OUT_NAME, out, isStrict); - global.set(ERR_NAME, err, isStrict); - global.set(EXIT_NAME, exit, isStrict); + global.set(OUT_NAME, out, false); + global.set(ERR_NAME, err, false); + global.set(EXIT_NAME, exit, false); // Propagate exception if present. for (int i = 0; i < exception.length; i++) { diff -r 81a8b5860d3f -r 8fbfd4ce1ce5 nashorn/src/jdk/nashorn/internal/runtime/arrays/ArrayIterator.java --- a/nashorn/src/jdk/nashorn/internal/runtime/arrays/ArrayIterator.java Sun Jun 16 22:38:17 2013 -0700 +++ b/nashorn/src/jdk/nashorn/internal/runtime/arrays/ArrayIterator.java Tue Jun 18 13:25:24 2013 +0530 @@ -83,6 +83,6 @@ @Override public void remove() { - array.delete(index, array.isStrictContext()); + array.delete(index, false); } } diff -r 81a8b5860d3f -r 8fbfd4ce1ce5 nashorn/src/jdk/nashorn/internal/runtime/arrays/ArrayLikeIterator.java --- a/nashorn/src/jdk/nashorn/internal/runtime/arrays/ArrayLikeIterator.java Sun Jun 16 22:38:17 2013 -0700 +++ b/nashorn/src/jdk/nashorn/internal/runtime/arrays/ArrayLikeIterator.java Tue Jun 18 13:25:24 2013 +0530 @@ -26,6 +26,7 @@ package jdk.nashorn.internal.runtime.arrays; import java.util.Iterator; +import jdk.nashorn.api.scripting.ScriptObjectMirror; import jdk.nashorn.internal.runtime.JSType; import jdk.nashorn.internal.runtime.ScriptObject; @@ -125,6 +126,10 @@ return new MapIterator((ScriptObject)obj, includeUndefined); } + if (obj instanceof ScriptObjectMirror) { + return new ScriptObjectMirrorIterator((ScriptObjectMirror)obj, includeUndefined); + } + return new EmptyArrayLikeIterator(); } @@ -146,6 +151,10 @@ return new ReverseMapIterator((ScriptObject)obj, includeUndefined); } + if (obj instanceof ScriptObjectMirror) { + return new ReverseScriptObjectMirrorIterator((ScriptObjectMirror)obj, includeUndefined); + } + assert !obj.getClass().isArray(); return new EmptyArrayLikeIterator(); diff -r 81a8b5860d3f -r 8fbfd4ce1ce5 nashorn/src/jdk/nashorn/internal/runtime/arrays/IteratorAction.java --- a/nashorn/src/jdk/nashorn/internal/runtime/arrays/IteratorAction.java Sun Jun 16 22:38:17 2013 -0700 +++ b/nashorn/src/jdk/nashorn/internal/runtime/arrays/IteratorAction.java Tue Jun 18 13:25:24 2013 +0530 @@ -27,6 +27,7 @@ import static jdk.nashorn.internal.runtime.ECMAErrors.typeError; +import jdk.nashorn.api.scripting.ScriptObjectMirror; import jdk.nashorn.internal.runtime.Context; import jdk.nashorn.internal.runtime.ScriptFunction; import jdk.nashorn.internal.runtime.ScriptRuntime; @@ -96,12 +97,18 @@ * @return result of apply */ public final T apply() { - if (!(callbackfn instanceof ScriptFunction)) { + final boolean strict; + if (callbackfn instanceof ScriptFunction) { + strict = ((ScriptFunction)callbackfn).isStrict(); + } else if (callbackfn instanceof ScriptObjectMirror && + ((ScriptObjectMirror)callbackfn).isFunction()) { + strict = ((ScriptObjectMirror)callbackfn).isStrictFunction(); + } else { throw typeError("not.a.function", ScriptRuntime.safeToString(callbackfn)); } - final ScriptFunction func = ((ScriptFunction)callbackfn); + // for non-strict callback, need to translate undefined thisArg to be global object - thisArg = (thisArg == ScriptRuntime.UNDEFINED && !func.isStrict()) ? Context.getGlobal() : thisArg; + thisArg = (thisArg == ScriptRuntime.UNDEFINED && !strict)? Context.getGlobal() : thisArg; applyLoopBegin(iter); final boolean reverse = iter.isReverse(); diff -r 81a8b5860d3f -r 8fbfd4ce1ce5 nashorn/src/jdk/nashorn/internal/runtime/arrays/ReverseScriptObjectMirrorIterator.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/nashorn/src/jdk/nashorn/internal/runtime/arrays/ReverseScriptObjectMirrorIterator.java Tue Jun 18 13:25:24 2013 +0530 @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package jdk.nashorn.internal.runtime.arrays; + +import jdk.nashorn.api.scripting.ScriptObjectMirror; +import jdk.nashorn.internal.runtime.JSType; + +/** + * Reverse iterator over a ScriptObjectMirror + */ +final class ReverseScriptObjectMirrorIterator extends ScriptObjectMirrorIterator { + + ReverseScriptObjectMirrorIterator(final ScriptObjectMirror obj, final boolean includeUndefined) { + super(obj, includeUndefined); + this.index = JSType.toUint32(obj.containsKey("length")? obj.getMember("length") : 0) - 1; + } + + @Override + public boolean isReverse() { + return true; + } + + @Override + protected boolean indexInArray() { + return index >= 0; + } + + @Override + protected long bumpIndex() { + return index--; + } +} + diff -r 81a8b5860d3f -r 8fbfd4ce1ce5 nashorn/src/jdk/nashorn/internal/runtime/arrays/ScriptObjectMirrorIterator.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/nashorn/src/jdk/nashorn/internal/runtime/arrays/ScriptObjectMirrorIterator.java Tue Jun 18 13:25:24 2013 +0530 @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package jdk.nashorn.internal.runtime.arrays; + +import java.util.NoSuchElementException; +import jdk.nashorn.api.scripting.ScriptObjectMirror; +import jdk.nashorn.internal.runtime.JSType; + +/** + * Iterator over a ScriptObjectMirror + */ +class ScriptObjectMirrorIterator extends ArrayLikeIterator { + + protected final ScriptObjectMirror obj; + private final long length; + + ScriptObjectMirrorIterator(final ScriptObjectMirror obj, final boolean includeUndefined) { + super(includeUndefined); + this.obj = obj; + this.length = JSType.toUint32(obj.containsKey("length")? obj.getMember("length") : 0); + this.index = 0; + } + + protected boolean indexInArray() { + return index < length; + } + + @Override + public long getLength() { + return length; + } + + @Override + public boolean hasNext() { + if (length == 0L) { + return false; //return empty string if toUint32(length) == 0 + } + + while (indexInArray()) { + if (obj.containsKey(index) || includeUndefined) { + break; + } + bumpIndex(); + } + + return indexInArray(); + } + + @Override + public Object next() { + if (indexInArray()) { + return obj.get(bumpIndex()); + } + + throw new NoSuchElementException(); + } +} + diff -r 81a8b5860d3f -r 8fbfd4ce1ce5 nashorn/src/jdk/nashorn/internal/runtime/resources/Messages.properties --- a/nashorn/src/jdk/nashorn/internal/runtime/resources/Messages.properties Sun Jun 16 22:38:17 2013 -0700 +++ b/nashorn/src/jdk/nashorn/internal/runtime/resources/Messages.properties Tue Jun 18 13:25:24 2013 +0530 @@ -25,8 +25,8 @@ lexer.error.edit.string.missing.brace=Edit string expression missing closing brace lexer.error.here.missing.end.marker=Here string missing end marker "{0}" lexer.error.missing.close.quote=Missing close quote +lexer.error.missing.space.after.number=Missing space after numeric literal lexer.error.invalid.hex=Invalid hex digit -lexer.error.invalid.octal=Invalid octal digit lexer.error.strict.no.octal=cannot use octal escapes in strict mode lexer.error.json.invalid.number=Invalid JSON number format lexer.error.invalid.escape.char=Invalid escape character diff -r 81a8b5860d3f -r 8fbfd4ce1ce5 nashorn/src/jdk/nashorn/internal/runtime/resources/Options.properties --- a/nashorn/src/jdk/nashorn/internal/runtime/resources/Options.properties Sun Jun 16 22:38:17 2013 -0700 +++ b/nashorn/src/jdk/nashorn/internal/runtime/resources/Options.properties Tue Jun 18 13:25:24 2013 +0530 @@ -59,7 +59,7 @@ ## is_undocumented - should this option never appear in the online help. defaults to no. ## desc - description of what the option does ## default - default value of the option. e.g. debug.lines is true by default. Not set means option not available by default -## dependency - does this arg imply another arg, e.g. scripting -> anon-functions +## dependency - does this arg imply another arg. ## confict - does this arg conflict with another arg e.g trace && instrument ## value_next_arg - is the opton's value passed as next argument in command line? ## @@ -77,16 +77,9 @@ desc="Print extended help for command line flags." \ } -nashorn.option.anon.functions = { \ - name="--anon-functions", \ - short_name="-af", \ - is_undocumented=true, \ - desc="Always allow functions as statements." \ -} - nashorn.option.class.cache.size ={ \ name="--class-cache-size", \ - short_name="--ccs", \ + short_name="-ccs", \ desc="Size of the Class cache size per global scope.", \ is_undocumented=true, \ type=Integer, \ @@ -201,10 +194,10 @@ nashorn.option.no.syntax.extensions = { \ name="--no-syntax-extensions", \ - short_name="--nse", \ + short_name="-nse", \ is_undocumented=true, \ desc="No non-standard syntax extensions", \ - default=-anon-functions=false \ + default=false \ } nashorn.option.package = { \ @@ -296,8 +289,7 @@ nashorn.option.scripting = { \ name="-scripting", \ - desc="Enable scripting features.", \ - dependency="--anon-functions=true" \ + desc="Enable scripting features." \ } nashorn.option.specialize.calls = { \ diff -r 81a8b5860d3f -r 8fbfd4ce1ce5 nashorn/test/script/basic/JDK-8011893.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/nashorn/test/script/basic/JDK-8011893.js Tue Jun 18 13:25:24 2013 +0530 @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * JDK-8011893: JS Object builtin prototype is not thread safe + * + * @test + * @run + */ + +var a = {}; +var thread = new java.lang.Thread(new java.lang.Runnable() { + run: function() { + print("Thread starts"); + for (var i = 0; i < 1000000; i++) { + // Unsubscribe to builtin, subscribe to new proto + var b = Object.create(a); + } + print("Thread done"); + } +}); + +print("Main starts"); +thread.start(); +for (var j = 0; j < 1000000; j++) { + // Subscribe to builtin prototype. + a = {}; +} + +thread.join(); +print("Main done"); diff -r 81a8b5860d3f -r 8fbfd4ce1ce5 nashorn/test/script/basic/JDK-8011893.js.EXPECTED --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/nashorn/test/script/basic/JDK-8011893.js.EXPECTED Tue Jun 18 13:25:24 2013 +0530 @@ -0,0 +1,4 @@ +Main starts +Thread starts +Thread done +Main done diff -r 81a8b5860d3f -r 8fbfd4ce1ce5 nashorn/test/script/basic/JDK-8015355.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/nashorn/test/script/basic/JDK-8015355.js Tue Jun 18 13:25:24 2013 +0530 @@ -0,0 +1,122 @@ +/* + * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * JDK-8015355: Array.prototype functions don't honour non-writable length and / or index properties + * + * @test + * @run + */ + +function fail(msg) { + print(msg); +} + +function check(callback) { + try { + callback(); + fail("TypeError expected for " + callback); + } catch (e) { + if (! (e instanceof TypeError)) { + fail("TypeError expected, got " + e); + } + } +} + +var array = Object.defineProperty([],"length", { writable: false }); + +check(function() { + array.push(0) +}); + +check(function() { + array.pop() +}); + +check(function() { + Object.defineProperty([,,],"0",{ writable: false }).reverse(); +}); + +check(function() { + array.shift() +}); + +check(function() { + array.splice(0) +}); + +check(function() { + array.unshift() +}); + +// try the above via call + +check(function() { + Array.prototype.push.call(array, 0); +}); + +check(function() { + Array.prototype.pop.call(array); +}); + +check(function() { + Array.prototype.shift.call(array); +}); + +check(function() { + Array.prototype.unshift.call(array); +}); + +check(function() { + Array.prototype.splice.call(array, 0); +}); + +check(function() { + Array.prototype.reverse.call(Object.defineProperty([,,],"0",{ writable: false })); +}); + +// try the above via apply + +check(function() { + Array.prototype.push.apply(array, [ 0 ]); +}); + +check(function() { + Array.prototype.pop.apply(array); +}); + +check(function() { + Array.prototype.shift.apply(array); +}); + +check(function() { + Array.prototype.unshift.apply(array); +}); + +check(function() { + Array.prototype.splice.apply(array, [ 0 ]); +}); + +check(function() { + Array.prototype.reverse.apply(Object.defineProperty([,,],"0",{ writable: false })); +}); diff -r 81a8b5860d3f -r 8fbfd4ce1ce5 nashorn/test/script/basic/JDK-8016235.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/nashorn/test/script/basic/JDK-8016235.js Tue Jun 18 13:25:24 2013 +0530 @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * JDK-8016235 : use before definition in catch block generated erroneous bytecode + * as there is no guarantee anything in the try block has executed. + * + * @test + * @run + */ + +function f() { + try { + var parser = {}; + } catch (e) { + parser = parser.context(); + } +} + +function g() { + try { + return "apa"; + } catch (tmp) { + //for now, too conservative as var ex declaration exists on the function + //level, but at least the code does not break, and the analysis is driven + //from the catch block (the rare case), not the try block (the common case) + var ex = new Error("DOM Exception 5"); + ex.code = ex.number = 5; + return ex; + } +} diff -r 81a8b5860d3f -r 8fbfd4ce1ce5 nashorn/test/script/basic/JDK-8016518.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/nashorn/test/script/basic/JDK-8016518.js Tue Jun 18 13:25:24 2013 +0530 @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * JDK-8016518: Parsing of octal string escapes is broken + * + * @test + * @run + */ + +print("\471".charCodeAt(0)); +print("\471".charCodeAt(1)); + +print("\377".length); +print("\377".charCodeAt(0)); +print("\400".length); +print("\400".charCodeAt(0)); +print("\400".charCodeAt(1)); diff -r 81a8b5860d3f -r 8fbfd4ce1ce5 nashorn/test/script/basic/JDK-8016518.js.EXPECTED --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/nashorn/test/script/basic/JDK-8016518.js.EXPECTED Tue Jun 18 13:25:24 2013 +0530 @@ -0,0 +1,7 @@ +39 +49 +1 +255 +2 +32 +48 diff -r 81a8b5860d3f -r 8fbfd4ce1ce5 nashorn/test/script/basic/JDK-8016528.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/nashorn/test/script/basic/JDK-8016528.js Tue Jun 18 13:25:24 2013 +0530 @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * JDK-8016528: Hex code from escape() should be padded + * + * @test + * @run + */ + +for (var i = 0; i < 8192; i++) { + print(escape(String.fromCharCode(i))); +} diff -r 81a8b5860d3f -r 8fbfd4ce1ce5 nashorn/test/script/basic/JDK-8016528.js.EXPECTED --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/nashorn/test/script/basic/JDK-8016528.js.EXPECTED Tue Jun 18 13:25:24 2013 +0530 @@ -0,0 +1,8192 @@ +%00 +%01 +%02 +%03 +%04 +%05 +%06 +%07 +%08 +%09 +%0A +%0B +%0C +%0D +%0E +%0F +%10 +%11 +%12 +%13 +%14 +%15 +%16 +%17 +%18 +%19 +%1A +%1B +%1C +%1D +%1E +%1F +%20 +%21 +%22 +%23 +%24 +%25 +%26 +%27 +%28 +%29 +* ++ +%2C +- +. +/ +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +%3A +%3B +%3C +%3D +%3E +%3F +@ +A +B +C +D +E +F +G +H +I +J +K +L +M +N +O +P +Q +R +S +T +U +V +W +X +Y +Z +%5B +%5C +%5D +%5E +_ +%60 +a +b +c +d +e +f +g +h +i +j +k +l +m +n +o +p +q +r +s +t +u +v +w +x +y +z +%7B +%7C +%7D +%7E +%7F +%80 +%81 +%82 +%83 +%84 +%85 +%86 +%87 +%88 +%89 +%8A +%8B +%8C +%8D +%8E +%8F +%90 +%91 +%92 +%93 +%94 +%95 +%96 +%97 +%98 +%99 +%9A +%9B +%9C +%9D +%9E +%9F +%A0 +%A1 +%A2 +%A3 +%A4 +%A5 +%A6 +%A7 +%A8 +%A9 +%AA +%AB +%AC +%AD +%AE +%AF +%B0 +%B1 +%B2 +%B3 +%B4 +%B5 +%B6 +%B7 +%B8 +%B9 +%BA +%BB +%BC +%BD +%BE +%BF +%C0 +%C1 +%C2 +%C3 +%C4 +%C5 +%C6 +%C7 +%C8 +%C9 +%CA +%CB +%CC +%CD +%CE +%CF +%D0 +%D1 +%D2 +%D3 +%D4 +%D5 +%D6 +%D7 +%D8 +%D9 +%DA +%DB +%DC +%DD +%DE +%DF +%E0 +%E1 +%E2 +%E3 +%E4 +%E5 +%E6 +%E7 +%E8 +%E9 +%EA +%EB +%EC +%ED +%EE +%EF +%F0 +%F1 +%F2 +%F3 +%F4 +%F5 +%F6 +%F7 +%F8 +%F9 +%FA +%FB +%FC +%FD +%FE +%FF +%u0100 +%u0101 +%u0102 +%u0103 +%u0104 +%u0105 +%u0106 +%u0107 +%u0108 +%u0109 +%u010A +%u010B +%u010C +%u010D +%u010E +%u010F +%u0110 +%u0111 +%u0112 +%u0113 +%u0114 +%u0115 +%u0116 +%u0117 +%u0118 +%u0119 +%u011A +%u011B +%u011C +%u011D +%u011E +%u011F +%u0120 +%u0121 +%u0122 +%u0123 +%u0124 +%u0125 +%u0126 +%u0127 +%u0128 +%u0129 +%u012A +%u012B +%u012C +%u012D +%u012E +%u012F +%u0130 +%u0131 +%u0132 +%u0133 +%u0134 +%u0135 +%u0136 +%u0137 +%u0138 +%u0139 +%u013A +%u013B +%u013C +%u013D +%u013E +%u013F +%u0140 +%u0141 +%u0142 +%u0143 +%u0144 +%u0145 +%u0146 +%u0147 +%u0148 +%u0149 +%u014A +%u014B +%u014C +%u014D +%u014E +%u014F +%u0150 +%u0151 +%u0152 +%u0153 +%u0154 +%u0155 +%u0156 +%u0157 +%u0158 +%u0159 +%u015A +%u015B +%u015C +%u015D +%u015E +%u015F +%u0160 +%u0161 +%u0162 +%u0163 +%u0164 +%u0165 +%u0166 +%u0167 +%u0168 +%u0169 +%u016A +%u016B +%u016C +%u016D +%u016E +%u016F +%u0170 +%u0171 +%u0172 +%u0173 +%u0174 +%u0175 +%u0176 +%u0177 +%u0178 +%u0179 +%u017A +%u017B +%u017C +%u017D +%u017E +%u017F +%u0180 +%u0181 +%u0182 +%u0183 +%u0184 +%u0185 +%u0186 +%u0187 +%u0188 +%u0189 +%u018A +%u018B +%u018C +%u018D +%u018E +%u018F +%u0190 +%u0191 +%u0192 +%u0193 +%u0194 +%u0195 +%u0196 +%u0197 +%u0198 +%u0199 +%u019A +%u019B +%u019C +%u019D +%u019E +%u019F +%u01A0 +%u01A1 +%u01A2 +%u01A3 +%u01A4 +%u01A5 +%u01A6 +%u01A7 +%u01A8 +%u01A9 +%u01AA +%u01AB +%u01AC +%u01AD +%u01AE +%u01AF +%u01B0 +%u01B1 +%u01B2 +%u01B3 +%u01B4 +%u01B5 +%u01B6 +%u01B7 +%u01B8 +%u01B9 +%u01BA +%u01BB +%u01BC +%u01BD +%u01BE +%u01BF +%u01C0 +%u01C1 +%u01C2 +%u01C3 +%u01C4 +%u01C5 +%u01C6 +%u01C7 +%u01C8 +%u01C9 +%u01CA +%u01CB +%u01CC +%u01CD +%u01CE +%u01CF +%u01D0 +%u01D1 +%u01D2 +%u01D3 +%u01D4 +%u01D5 +%u01D6 +%u01D7 +%u01D8 +%u01D9 +%u01DA +%u01DB +%u01DC +%u01DD +%u01DE +%u01DF +%u01E0 +%u01E1 +%u01E2 +%u01E3 +%u01E4 +%u01E5 +%u01E6 +%u01E7 +%u01E8 +%u01E9 +%u01EA +%u01EB +%u01EC +%u01ED +%u01EE +%u01EF +%u01F0 +%u01F1 +%u01F2 +%u01F3 +%u01F4 +%u01F5 +%u01F6 +%u01F7 +%u01F8 +%u01F9 +%u01FA +%u01FB +%u01FC +%u01FD +%u01FE +%u01FF +%u0200 +%u0201 +%u0202 +%u0203 +%u0204 +%u0205 +%u0206 +%u0207 +%u0208 +%u0209 +%u020A +%u020B +%u020C +%u020D +%u020E +%u020F +%u0210 +%u0211 +%u0212 +%u0213 +%u0214 +%u0215 +%u0216 +%u0217 +%u0218 +%u0219 +%u021A +%u021B +%u021C +%u021D +%u021E +%u021F +%u0220 +%u0221 +%u0222 +%u0223 +%u0224 +%u0225 +%u0226 +%u0227 +%u0228 +%u0229 +%u022A +%u022B +%u022C +%u022D +%u022E +%u022F +%u0230 +%u0231 +%u0232 +%u0233 +%u0234 +%u0235 +%u0236 +%u0237 +%u0238 +%u0239 +%u023A +%u023B +%u023C +%u023D +%u023E +%u023F +%u0240 +%u0241 +%u0242 +%u0243 +%u0244 +%u0245 +%u0246 +%u0247 +%u0248 +%u0249 +%u024A +%u024B +%u024C +%u024D +%u024E +%u024F +%u0250 +%u0251 +%u0252 +%u0253 +%u0254 +%u0255 +%u0256 +%u0257 +%u0258 +%u0259 +%u025A +%u025B +%u025C +%u025D +%u025E +%u025F +%u0260 +%u0261 +%u0262 +%u0263 +%u0264 +%u0265 +%u0266 +%u0267 +%u0268 +%u0269 +%u026A +%u026B +%u026C +%u026D +%u026E +%u026F +%u0270 +%u0271 +%u0272 +%u0273 +%u0274 +%u0275 +%u0276 +%u0277 +%u0278 +%u0279 +%u027A +%u027B +%u027C +%u027D +%u027E +%u027F +%u0280 +%u0281 +%u0282 +%u0283 +%u0284 +%u0285 +%u0286 +%u0287 +%u0288 +%u0289 +%u028A +%u028B +%u028C +%u028D +%u028E +%u028F +%u0290 +%u0291 +%u0292 +%u0293 +%u0294 +%u0295 +%u0296 +%u0297 +%u0298 +%u0299 +%u029A +%u029B +%u029C +%u029D +%u029E +%u029F +%u02A0 +%u02A1 +%u02A2 +%u02A3 +%u02A4 +%u02A5 +%u02A6 +%u02A7 +%u02A8 +%u02A9 +%u02AA +%u02AB +%u02AC +%u02AD +%u02AE +%u02AF +%u02B0 +%u02B1 +%u02B2 +%u02B3 +%u02B4 +%u02B5 +%u02B6 +%u02B7 +%u02B8 +%u02B9 +%u02BA +%u02BB +%u02BC +%u02BD +%u02BE +%u02BF +%u02C0 +%u02C1 +%u02C2 +%u02C3 +%u02C4 +%u02C5 +%u02C6 +%u02C7 +%u02C8 +%u02C9 +%u02CA +%u02CB +%u02CC +%u02CD +%u02CE +%u02CF +%u02D0 +%u02D1 +%u02D2 +%u02D3 +%u02D4 +%u02D5 +%u02D6 +%u02D7 +%u02D8 +%u02D9 +%u02DA +%u02DB +%u02DC +%u02DD +%u02DE +%u02DF +%u02E0 +%u02E1 +%u02E2 +%u02E3 +%u02E4 +%u02E5 +%u02E6 +%u02E7 +%u02E8 +%u02E9 +%u02EA +%u02EB +%u02EC +%u02ED +%u02EE +%u02EF +%u02F0 +%u02F1 +%u02F2 +%u02F3 +%u02F4 +%u02F5 +%u02F6 +%u02F7 +%u02F8 +%u02F9 +%u02FA +%u02FB +%u02FC +%u02FD +%u02FE +%u02FF +%u0300 +%u0301 +%u0302 +%u0303 +%u0304 +%u0305 +%u0306 +%u0307 +%u0308 +%u0309 +%u030A +%u030B +%u030C +%u030D +%u030E +%u030F +%u0310 +%u0311 +%u0312 +%u0313 +%u0314 +%u0315 +%u0316 +%u0317 +%u0318 +%u0319 +%u031A +%u031B +%u031C +%u031D +%u031E +%u031F +%u0320 +%u0321 +%u0322 +%u0323 +%u0324 +%u0325 +%u0326 +%u0327 +%u0328 +%u0329 +%u032A +%u032B +%u032C +%u032D +%u032E +%u032F +%u0330 +%u0331 +%u0332 +%u0333 +%u0334 +%u0335 +%u0336 +%u0337 +%u0338 +%u0339 +%u033A +%u033B +%u033C +%u033D +%u033E +%u033F +%u0340 +%u0341 +%u0342 +%u0343 +%u0344 +%u0345 +%u0346 +%u0347 +%u0348 +%u0349 +%u034A +%u034B +%u034C +%u034D +%u034E +%u034F +%u0350 +%u0351 +%u0352 +%u0353 +%u0354 +%u0355 +%u0356 +%u0357 +%u0358 +%u0359 +%u035A +%u035B +%u035C +%u035D +%u035E +%u035F +%u0360 +%u0361 +%u0362 +%u0363 +%u0364 +%u0365 +%u0366 +%u0367 +%u0368 +%u0369 +%u036A +%u036B +%u036C +%u036D +%u036E +%u036F +%u0370 +%u0371 +%u0372 +%u0373 +%u0374 +%u0375 +%u0376 +%u0377 +%u0378 +%u0379 +%u037A +%u037B +%u037C +%u037D +%u037E +%u037F +%u0380 +%u0381 +%u0382 +%u0383 +%u0384 +%u0385 +%u0386 +%u0387 +%u0388 +%u0389 +%u038A +%u038B +%u038C +%u038D +%u038E +%u038F +%u0390 +%u0391 +%u0392 +%u0393 +%u0394 +%u0395 +%u0396 +%u0397 +%u0398 +%u0399 +%u039A +%u039B +%u039C +%u039D +%u039E +%u039F +%u03A0 +%u03A1 +%u03A2 +%u03A3 +%u03A4 +%u03A5 +%u03A6 +%u03A7 +%u03A8 +%u03A9 +%u03AA +%u03AB +%u03AC +%u03AD +%u03AE +%u03AF +%u03B0 +%u03B1 +%u03B2 +%u03B3 +%u03B4 +%u03B5 +%u03B6 +%u03B7 +%u03B8 +%u03B9 +%u03BA +%u03BB +%u03BC +%u03BD +%u03BE +%u03BF +%u03C0 +%u03C1 +%u03C2 +%u03C3 +%u03C4 +%u03C5 +%u03C6 +%u03C7 +%u03C8 +%u03C9 +%u03CA +%u03CB +%u03CC +%u03CD +%u03CE +%u03CF +%u03D0 +%u03D1 +%u03D2 +%u03D3 +%u03D4 +%u03D5 +%u03D6 +%u03D7 +%u03D8 +%u03D9 +%u03DA +%u03DB +%u03DC +%u03DD +%u03DE +%u03DF +%u03E0 +%u03E1 +%u03E2 +%u03E3 +%u03E4 +%u03E5 +%u03E6 +%u03E7 +%u03E8 +%u03E9 +%u03EA +%u03EB +%u03EC +%u03ED +%u03EE +%u03EF +%u03F0 +%u03F1 +%u03F2 +%u03F3 +%u03F4 +%u03F5 +%u03F6 +%u03F7 +%u03F8 +%u03F9 +%u03FA +%u03FB +%u03FC +%u03FD +%u03FE +%u03FF +%u0400 +%u0401 +%u0402 +%u0403 +%u0404 +%u0405 +%u0406 +%u0407 +%u0408 +%u0409 +%u040A +%u040B +%u040C +%u040D +%u040E +%u040F +%u0410 +%u0411 +%u0412 +%u0413 +%u0414 +%u0415 +%u0416 +%u0417 +%u0418 +%u0419 +%u041A +%u041B +%u041C +%u041D +%u041E +%u041F +%u0420 +%u0421 +%u0422 +%u0423 +%u0424 +%u0425 +%u0426 +%u0427 +%u0428 +%u0429 +%u042A +%u042B +%u042C +%u042D +%u042E +%u042F +%u0430 +%u0431 +%u0432 +%u0433 +%u0434 +%u0435 +%u0436 +%u0437 +%u0438 +%u0439 +%u043A +%u043B +%u043C +%u043D +%u043E +%u043F +%u0440 +%u0441 +%u0442 +%u0443 +%u0444 +%u0445 +%u0446 +%u0447 +%u0448 +%u0449 +%u044A +%u044B +%u044C +%u044D +%u044E +%u044F +%u0450 +%u0451 +%u0452 +%u0453 +%u0454 +%u0455 +%u0456 +%u0457 +%u0458 +%u0459 +%u045A +%u045B +%u045C +%u045D +%u045E +%u045F +%u0460 +%u0461 +%u0462 +%u0463 +%u0464 +%u0465 +%u0466 +%u0467 +%u0468 +%u0469 +%u046A +%u046B +%u046C +%u046D +%u046E +%u046F +%u0470 +%u0471 +%u0472 +%u0473 +%u0474 +%u0475 +%u0476 +%u0477 +%u0478 +%u0479 +%u047A +%u047B +%u047C +%u047D +%u047E +%u047F +%u0480 +%u0481 +%u0482 +%u0483 +%u0484 +%u0485 +%u0486 +%u0487 +%u0488 +%u0489 +%u048A +%u048B +%u048C +%u048D +%u048E +%u048F +%u0490 +%u0491 +%u0492 +%u0493 +%u0494 +%u0495 +%u0496 +%u0497 +%u0498 +%u0499 +%u049A +%u049B +%u049C +%u049D +%u049E +%u049F +%u04A0 +%u04A1 +%u04A2 +%u04A3 +%u04A4 +%u04A5 +%u04A6 +%u04A7 +%u04A8 +%u04A9 +%u04AA +%u04AB +%u04AC +%u04AD +%u04AE +%u04AF +%u04B0 +%u04B1 +%u04B2 +%u04B3 +%u04B4 +%u04B5 +%u04B6 +%u04B7 +%u04B8 +%u04B9 +%u04BA +%u04BB +%u04BC +%u04BD +%u04BE +%u04BF +%u04C0 +%u04C1 +%u04C2 +%u04C3 +%u04C4 +%u04C5 +%u04C6 +%u04C7 +%u04C8 +%u04C9 +%u04CA +%u04CB +%u04CC +%u04CD +%u04CE +%u04CF +%u04D0 +%u04D1 +%u04D2 +%u04D3 +%u04D4 +%u04D5 +%u04D6 +%u04D7 +%u04D8 +%u04D9 +%u04DA +%u04DB +%u04DC +%u04DD +%u04DE +%u04DF +%u04E0 +%u04E1 +%u04E2 +%u04E3 +%u04E4 +%u04E5 +%u04E6 +%u04E7 +%u04E8 +%u04E9 +%u04EA +%u04EB +%u04EC +%u04ED +%u04EE +%u04EF +%u04F0 +%u04F1 +%u04F2 +%u04F3 +%u04F4 +%u04F5 +%u04F6 +%u04F7 +%u04F8 +%u04F9 +%u04FA +%u04FB +%u04FC +%u04FD +%u04FE +%u04FF +%u0500 +%u0501 +%u0502 +%u0503 +%u0504 +%u0505 +%u0506 +%u0507 +%u0508 +%u0509 +%u050A +%u050B +%u050C +%u050D +%u050E +%u050F +%u0510 +%u0511 +%u0512 +%u0513 +%u0514 +%u0515 +%u0516 +%u0517 +%u0518 +%u0519 +%u051A +%u051B +%u051C +%u051D +%u051E +%u051F +%u0520 +%u0521 +%u0522 +%u0523 +%u0524 +%u0525 +%u0526 +%u0527 +%u0528 +%u0529 +%u052A +%u052B +%u052C +%u052D +%u052E +%u052F +%u0530 +%u0531 +%u0532 +%u0533 +%u0534 +%u0535 +%u0536 +%u0537 +%u0538 +%u0539 +%u053A +%u053B +%u053C +%u053D +%u053E +%u053F +%u0540 +%u0541 +%u0542 +%u0543 +%u0544 +%u0545 +%u0546 +%u0547 +%u0548 +%u0549 +%u054A +%u054B +%u054C +%u054D +%u054E +%u054F +%u0550 +%u0551 +%u0552 +%u0553 +%u0554 +%u0555 +%u0556 +%u0557 +%u0558 +%u0559 +%u055A +%u055B +%u055C +%u055D +%u055E +%u055F +%u0560 +%u0561 +%u0562 +%u0563 +%u0564 +%u0565 +%u0566 +%u0567 +%u0568 +%u0569 +%u056A +%u056B +%u056C +%u056D +%u056E +%u056F +%u0570 +%u0571 +%u0572 +%u0573 +%u0574 +%u0575 +%u0576 +%u0577 +%u0578 +%u0579 +%u057A +%u057B +%u057C +%u057D +%u057E +%u057F +%u0580 +%u0581 +%u0582 +%u0583 +%u0584 +%u0585 +%u0586 +%u0587 +%u0588 +%u0589 +%u058A +%u058B +%u058C +%u058D +%u058E +%u058F +%u0590 +%u0591 +%u0592 +%u0593 +%u0594 +%u0595 +%u0596 +%u0597 +%u0598 +%u0599 +%u059A +%u059B +%u059C +%u059D +%u059E +%u059F +%u05A0 +%u05A1 +%u05A2 +%u05A3 +%u05A4 +%u05A5 +%u05A6 +%u05A7 +%u05A8 +%u05A9 +%u05AA +%u05AB +%u05AC +%u05AD +%u05AE +%u05AF +%u05B0 +%u05B1 +%u05B2 +%u05B3 +%u05B4 +%u05B5 +%u05B6 +%u05B7 +%u05B8 +%u05B9 +%u05BA +%u05BB +%u05BC +%u05BD +%u05BE +%u05BF +%u05C0 +%u05C1 +%u05C2 +%u05C3 +%u05C4 +%u05C5 +%u05C6 +%u05C7 +%u05C8 +%u05C9 +%u05CA +%u05CB +%u05CC +%u05CD +%u05CE +%u05CF +%u05D0 +%u05D1 +%u05D2 +%u05D3 +%u05D4 +%u05D5 +%u05D6 +%u05D7 +%u05D8 +%u05D9 +%u05DA +%u05DB +%u05DC +%u05DD +%u05DE +%u05DF +%u05E0 +%u05E1 +%u05E2 +%u05E3 +%u05E4 +%u05E5 +%u05E6 +%u05E7 +%u05E8 +%u05E9 +%u05EA +%u05EB +%u05EC +%u05ED +%u05EE +%u05EF +%u05F0 +%u05F1 +%u05F2 +%u05F3 +%u05F4 +%u05F5 +%u05F6 +%u05F7 +%u05F8 +%u05F9 +%u05FA +%u05FB +%u05FC +%u05FD +%u05FE +%u05FF +%u0600 +%u0601 +%u0602 +%u0603 +%u0604 +%u0605 +%u0606 +%u0607 +%u0608 +%u0609 +%u060A +%u060B +%u060C +%u060D +%u060E +%u060F +%u0610 +%u0611 +%u0612 +%u0613 +%u0614 +%u0615 +%u0616 +%u0617 +%u0618 +%u0619 +%u061A +%u061B +%u061C +%u061D +%u061E +%u061F +%u0620 +%u0621 +%u0622 +%u0623 +%u0624 +%u0625 +%u0626 +%u0627 +%u0628 +%u0629 +%u062A +%u062B +%u062C +%u062D +%u062E +%u062F +%u0630 +%u0631 +%u0632 +%u0633 +%u0634 +%u0635 +%u0636 +%u0637 +%u0638 +%u0639 +%u063A +%u063B +%u063C +%u063D +%u063E +%u063F +%u0640 +%u0641 +%u0642 +%u0643 +%u0644 +%u0645 +%u0646 +%u0647 +%u0648 +%u0649 +%u064A +%u064B +%u064C +%u064D +%u064E +%u064F +%u0650 +%u0651 +%u0652 +%u0653 +%u0654 +%u0655 +%u0656 +%u0657 +%u0658 +%u0659 +%u065A +%u065B +%u065C +%u065D +%u065E +%u065F +%u0660 +%u0661 +%u0662 +%u0663 +%u0664 +%u0665 +%u0666 +%u0667 +%u0668 +%u0669 +%u066A +%u066B +%u066C +%u066D +%u066E +%u066F +%u0670 +%u0671 +%u0672 +%u0673 +%u0674 +%u0675 +%u0676 +%u0677 +%u0678 +%u0679 +%u067A +%u067B +%u067C +%u067D +%u067E +%u067F +%u0680 +%u0681 +%u0682 +%u0683 +%u0684 +%u0685 +%u0686 +%u0687 +%u0688 +%u0689 +%u068A +%u068B +%u068C +%u068D +%u068E +%u068F +%u0690 +%u0691 +%u0692 +%u0693 +%u0694 +%u0695 +%u0696 +%u0697 +%u0698 +%u0699 +%u069A +%u069B +%u069C +%u069D +%u069E +%u069F +%u06A0 +%u06A1 +%u06A2 +%u06A3 +%u06A4 +%u06A5 +%u06A6 +%u06A7 +%u06A8 +%u06A9 +%u06AA +%u06AB +%u06AC +%u06AD +%u06AE +%u06AF +%u06B0 +%u06B1 +%u06B2 +%u06B3 +%u06B4 +%u06B5 +%u06B6 +%u06B7 +%u06B8 +%u06B9 +%u06BA +%u06BB +%u06BC +%u06BD +%u06BE +%u06BF +%u06C0 +%u06C1 +%u06C2 +%u06C3 +%u06C4 +%u06C5 +%u06C6 +%u06C7 +%u06C8 +%u06C9 +%u06CA +%u06CB +%u06CC +%u06CD +%u06CE +%u06CF +%u06D0 +%u06D1 +%u06D2 +%u06D3 +%u06D4 +%u06D5 +%u06D6 +%u06D7 +%u06D8 +%u06D9 +%u06DA +%u06DB +%u06DC +%u06DD +%u06DE +%u06DF +%u06E0 +%u06E1 +%u06E2 +%u06E3 +%u06E4 +%u06E5 +%u06E6 +%u06E7 +%u06E8 +%u06E9 +%u06EA +%u06EB +%u06EC +%u06ED +%u06EE +%u06EF +%u06F0 +%u06F1 +%u06F2 +%u06F3 +%u06F4 +%u06F5 +%u06F6 +%u06F7 +%u06F8 +%u06F9 +%u06FA +%u06FB +%u06FC +%u06FD +%u06FE +%u06FF +%u0700 +%u0701 +%u0702 +%u0703 +%u0704 +%u0705 +%u0706 +%u0707 +%u0708 +%u0709 +%u070A +%u070B +%u070C +%u070D +%u070E +%u070F +%u0710 +%u0711 +%u0712 +%u0713 +%u0714 +%u0715 +%u0716 +%u0717 +%u0718 +%u0719 +%u071A +%u071B +%u071C +%u071D +%u071E +%u071F +%u0720 +%u0721 +%u0722 +%u0723 +%u0724 +%u0725 +%u0726 +%u0727 +%u0728 +%u0729 +%u072A +%u072B +%u072C +%u072D +%u072E +%u072F +%u0730 +%u0731 +%u0732 +%u0733 +%u0734 +%u0735 +%u0736 +%u0737 +%u0738 +%u0739 +%u073A +%u073B +%u073C +%u073D +%u073E +%u073F +%u0740 +%u0741 +%u0742 +%u0743 +%u0744 +%u0745 +%u0746 +%u0747 +%u0748 +%u0749 +%u074A +%u074B +%u074C +%u074D +%u074E +%u074F +%u0750 +%u0751 +%u0752 +%u0753 +%u0754 +%u0755 +%u0756 +%u0757 +%u0758 +%u0759 +%u075A +%u075B +%u075C +%u075D +%u075E +%u075F +%u0760 +%u0761 +%u0762 +%u0763 +%u0764 +%u0765 +%u0766 +%u0767 +%u0768 +%u0769 +%u076A +%u076B +%u076C +%u076D +%u076E +%u076F +%u0770 +%u0771 +%u0772 +%u0773 +%u0774 +%u0775 +%u0776 +%u0777 +%u0778 +%u0779 +%u077A +%u077B +%u077C +%u077D +%u077E +%u077F +%u0780 +%u0781 +%u0782 +%u0783 +%u0784 +%u0785 +%u0786 +%u0787 +%u0788 +%u0789 +%u078A +%u078B +%u078C +%u078D +%u078E +%u078F +%u0790 +%u0791 +%u0792 +%u0793 +%u0794 +%u0795 +%u0796 +%u0797 +%u0798 +%u0799 +%u079A +%u079B +%u079C +%u079D +%u079E +%u079F +%u07A0 +%u07A1 +%u07A2 +%u07A3 +%u07A4 +%u07A5 +%u07A6 +%u07A7 +%u07A8 +%u07A9 +%u07AA +%u07AB +%u07AC +%u07AD +%u07AE +%u07AF +%u07B0 +%u07B1 +%u07B2 +%u07B3 +%u07B4 +%u07B5 +%u07B6 +%u07B7 +%u07B8 +%u07B9 +%u07BA +%u07BB +%u07BC +%u07BD +%u07BE +%u07BF +%u07C0 +%u07C1 +%u07C2 +%u07C3 +%u07C4 +%u07C5 +%u07C6 +%u07C7 +%u07C8 +%u07C9 +%u07CA +%u07CB +%u07CC +%u07CD +%u07CE +%u07CF +%u07D0 +%u07D1 +%u07D2 +%u07D3 +%u07D4 +%u07D5 +%u07D6 +%u07D7 +%u07D8 +%u07D9 +%u07DA +%u07DB +%u07DC +%u07DD +%u07DE +%u07DF +%u07E0 +%u07E1 +%u07E2 +%u07E3 +%u07E4 +%u07E5 +%u07E6 +%u07E7 +%u07E8 +%u07E9 +%u07EA +%u07EB +%u07EC +%u07ED +%u07EE +%u07EF +%u07F0 +%u07F1 +%u07F2 +%u07F3 +%u07F4 +%u07F5 +%u07F6 +%u07F7 +%u07F8 +%u07F9 +%u07FA +%u07FB +%u07FC +%u07FD +%u07FE +%u07FF +%u0800 +%u0801 +%u0802 +%u0803 +%u0804 +%u0805 +%u0806 +%u0807 +%u0808 +%u0809 +%u080A +%u080B +%u080C +%u080D +%u080E +%u080F +%u0810 +%u0811 +%u0812 +%u0813 +%u0814 +%u0815 +%u0816 +%u0817 +%u0818 +%u0819 +%u081A +%u081B +%u081C +%u081D +%u081E +%u081F +%u0820 +%u0821 +%u0822 +%u0823 +%u0824 +%u0825 +%u0826 +%u0827 +%u0828 +%u0829 +%u082A +%u082B +%u082C +%u082D +%u082E +%u082F +%u0830 +%u0831 +%u0832 +%u0833 +%u0834 +%u0835 +%u0836 +%u0837 +%u0838 +%u0839 +%u083A +%u083B +%u083C +%u083D +%u083E +%u083F +%u0840 +%u0841 +%u0842 +%u0843 +%u0844 +%u0845 +%u0846 +%u0847 +%u0848 +%u0849 +%u084A +%u084B +%u084C +%u084D +%u084E +%u084F +%u0850 +%u0851 +%u0852 +%u0853 +%u0854 +%u0855 +%u0856 +%u0857 +%u0858 +%u0859 +%u085A +%u085B +%u085C +%u085D +%u085E +%u085F +%u0860 +%u0861 +%u0862 +%u0863 +%u0864 +%u0865 +%u0866 +%u0867 +%u0868 +%u0869 +%u086A +%u086B +%u086C +%u086D +%u086E +%u086F +%u0870 +%u0871 +%u0872 +%u0873 +%u0874 +%u0875 +%u0876 +%u0877 +%u0878 +%u0879 +%u087A +%u087B +%u087C +%u087D +%u087E +%u087F +%u0880 +%u0881 +%u0882 +%u0883 +%u0884 +%u0885 +%u0886 +%u0887 +%u0888 +%u0889 +%u088A +%u088B +%u088C +%u088D +%u088E +%u088F +%u0890 +%u0891 +%u0892 +%u0893 +%u0894 +%u0895 +%u0896 +%u0897 +%u0898 +%u0899 +%u089A +%u089B +%u089C +%u089D +%u089E +%u089F +%u08A0 +%u08A1 +%u08A2 +%u08A3 +%u08A4 +%u08A5 +%u08A6 +%u08A7 +%u08A8 +%u08A9 +%u08AA +%u08AB +%u08AC +%u08AD +%u08AE +%u08AF +%u08B0 +%u08B1 +%u08B2 +%u08B3 +%u08B4 +%u08B5 +%u08B6 +%u08B7 +%u08B8 +%u08B9 +%u08BA +%u08BB +%u08BC +%u08BD +%u08BE +%u08BF +%u08C0 +%u08C1 +%u08C2 +%u08C3 +%u08C4 +%u08C5 +%u08C6 +%u08C7 +%u08C8 +%u08C9 +%u08CA +%u08CB +%u08CC +%u08CD +%u08CE +%u08CF +%u08D0 +%u08D1 +%u08D2 +%u08D3 +%u08D4 +%u08D5 +%u08D6 +%u08D7 +%u08D8 +%u08D9 +%u08DA +%u08DB +%u08DC +%u08DD +%u08DE +%u08DF +%u08E0 +%u08E1 +%u08E2 +%u08E3 +%u08E4 +%u08E5 +%u08E6 +%u08E7 +%u08E8 +%u08E9 +%u08EA +%u08EB +%u08EC +%u08ED +%u08EE +%u08EF +%u08F0 +%u08F1 +%u08F2 +%u08F3 +%u08F4 +%u08F5 +%u08F6 +%u08F7 +%u08F8 +%u08F9 +%u08FA +%u08FB +%u08FC +%u08FD +%u08FE +%u08FF +%u0900 +%u0901 +%u0902 +%u0903 +%u0904 +%u0905 +%u0906 +%u0907 +%u0908 +%u0909 +%u090A +%u090B +%u090C +%u090D +%u090E +%u090F +%u0910 +%u0911 +%u0912 +%u0913 +%u0914 +%u0915 +%u0916 +%u0917 +%u0918 +%u0919 +%u091A +%u091B +%u091C +%u091D +%u091E +%u091F +%u0920 +%u0921 +%u0922 +%u0923 +%u0924 +%u0925 +%u0926 +%u0927 +%u0928 +%u0929 +%u092A +%u092B +%u092C +%u092D +%u092E +%u092F +%u0930 +%u0931 +%u0932 +%u0933 +%u0934 +%u0935 +%u0936 +%u0937 +%u0938 +%u0939 +%u093A +%u093B +%u093C +%u093D +%u093E +%u093F +%u0940 +%u0941 +%u0942 +%u0943 +%u0944 +%u0945 +%u0946 +%u0947 +%u0948 +%u0949 +%u094A +%u094B +%u094C +%u094D +%u094E +%u094F +%u0950 +%u0951 +%u0952 +%u0953 +%u0954 +%u0955 +%u0956 +%u0957 +%u0958 +%u0959 +%u095A +%u095B +%u095C +%u095D +%u095E +%u095F +%u0960 +%u0961 +%u0962 +%u0963 +%u0964 +%u0965 +%u0966 +%u0967 +%u0968 +%u0969 +%u096A +%u096B +%u096C +%u096D +%u096E +%u096F +%u0970 +%u0971 +%u0972 +%u0973 +%u0974 +%u0975 +%u0976 +%u0977 +%u0978 +%u0979 +%u097A +%u097B +%u097C +%u097D +%u097E +%u097F +%u0980 +%u0981 +%u0982 +%u0983 +%u0984 +%u0985 +%u0986 +%u0987 +%u0988 +%u0989 +%u098A +%u098B +%u098C +%u098D +%u098E +%u098F +%u0990 +%u0991 +%u0992 +%u0993 +%u0994 +%u0995 +%u0996 +%u0997 +%u0998 +%u0999 +%u099A +%u099B +%u099C +%u099D +%u099E +%u099F +%u09A0 +%u09A1 +%u09A2 +%u09A3 +%u09A4 +%u09A5 +%u09A6 +%u09A7 +%u09A8 +%u09A9 +%u09AA +%u09AB +%u09AC +%u09AD +%u09AE +%u09AF +%u09B0 +%u09B1 +%u09B2 +%u09B3 +%u09B4 +%u09B5 +%u09B6 +%u09B7 +%u09B8 +%u09B9 +%u09BA +%u09BB +%u09BC +%u09BD +%u09BE +%u09BF +%u09C0 +%u09C1 +%u09C2 +%u09C3 +%u09C4 +%u09C5 +%u09C6 +%u09C7 +%u09C8 +%u09C9 +%u09CA +%u09CB +%u09CC +%u09CD +%u09CE +%u09CF +%u09D0 +%u09D1 +%u09D2 +%u09D3 +%u09D4 +%u09D5 +%u09D6 +%u09D7 +%u09D8 +%u09D9 +%u09DA +%u09DB +%u09DC +%u09DD +%u09DE +%u09DF +%u09E0 +%u09E1 +%u09E2 +%u09E3 +%u09E4 +%u09E5 +%u09E6 +%u09E7 +%u09E8 +%u09E9 +%u09EA +%u09EB +%u09EC +%u09ED +%u09EE +%u09EF +%u09F0 +%u09F1 +%u09F2 +%u09F3 +%u09F4 +%u09F5 +%u09F6 +%u09F7 +%u09F8 +%u09F9 +%u09FA +%u09FB +%u09FC +%u09FD +%u09FE +%u09FF +%u0A00 +%u0A01 +%u0A02 +%u0A03 +%u0A04 +%u0A05 +%u0A06 +%u0A07 +%u0A08 +%u0A09 +%u0A0A +%u0A0B +%u0A0C +%u0A0D +%u0A0E +%u0A0F +%u0A10 +%u0A11 +%u0A12 +%u0A13 +%u0A14 +%u0A15 +%u0A16 +%u0A17 +%u0A18 +%u0A19 +%u0A1A +%u0A1B +%u0A1C +%u0A1D +%u0A1E +%u0A1F +%u0A20 +%u0A21 +%u0A22 +%u0A23 +%u0A24 +%u0A25 +%u0A26 +%u0A27 +%u0A28 +%u0A29 +%u0A2A +%u0A2B +%u0A2C +%u0A2D +%u0A2E +%u0A2F +%u0A30 +%u0A31 +%u0A32 +%u0A33 +%u0A34 +%u0A35 +%u0A36 +%u0A37 +%u0A38 +%u0A39 +%u0A3A +%u0A3B +%u0A3C +%u0A3D +%u0A3E +%u0A3F +%u0A40 +%u0A41 +%u0A42 +%u0A43 +%u0A44 +%u0A45 +%u0A46 +%u0A47 +%u0A48 +%u0A49 +%u0A4A +%u0A4B +%u0A4C +%u0A4D +%u0A4E +%u0A4F +%u0A50 +%u0A51 +%u0A52 +%u0A53 +%u0A54 +%u0A55 +%u0A56 +%u0A57 +%u0A58 +%u0A59 +%u0A5A +%u0A5B +%u0A5C +%u0A5D +%u0A5E +%u0A5F +%u0A60 +%u0A61 +%u0A62 +%u0A63 +%u0A64 +%u0A65 +%u0A66 +%u0A67 +%u0A68 +%u0A69 +%u0A6A +%u0A6B +%u0A6C +%u0A6D +%u0A6E +%u0A6F +%u0A70 +%u0A71 +%u0A72 +%u0A73 +%u0A74 +%u0A75 +%u0A76 +%u0A77 +%u0A78 +%u0A79 +%u0A7A +%u0A7B +%u0A7C +%u0A7D +%u0A7E +%u0A7F +%u0A80 +%u0A81 +%u0A82 +%u0A83 +%u0A84 +%u0A85 +%u0A86 +%u0A87 +%u0A88 +%u0A89 +%u0A8A +%u0A8B +%u0A8C +%u0A8D +%u0A8E +%u0A8F +%u0A90 +%u0A91 +%u0A92 +%u0A93 +%u0A94 +%u0A95 +%u0A96 +%u0A97 +%u0A98 +%u0A99 +%u0A9A +%u0A9B +%u0A9C +%u0A9D +%u0A9E +%u0A9F +%u0AA0 +%u0AA1 +%u0AA2 +%u0AA3 +%u0AA4 +%u0AA5 +%u0AA6 +%u0AA7 +%u0AA8 +%u0AA9 +%u0AAA +%u0AAB +%u0AAC +%u0AAD +%u0AAE +%u0AAF +%u0AB0 +%u0AB1 +%u0AB2 +%u0AB3 +%u0AB4 +%u0AB5 +%u0AB6 +%u0AB7 +%u0AB8 +%u0AB9 +%u0ABA +%u0ABB +%u0ABC +%u0ABD +%u0ABE +%u0ABF +%u0AC0 +%u0AC1 +%u0AC2 +%u0AC3 +%u0AC4 +%u0AC5 +%u0AC6 +%u0AC7 +%u0AC8 +%u0AC9 +%u0ACA +%u0ACB +%u0ACC +%u0ACD +%u0ACE +%u0ACF +%u0AD0 +%u0AD1 +%u0AD2 +%u0AD3 +%u0AD4 +%u0AD5 +%u0AD6 +%u0AD7 +%u0AD8 +%u0AD9 +%u0ADA +%u0ADB +%u0ADC +%u0ADD +%u0ADE +%u0ADF +%u0AE0 +%u0AE1 +%u0AE2 +%u0AE3 +%u0AE4 +%u0AE5 +%u0AE6 +%u0AE7 +%u0AE8 +%u0AE9 +%u0AEA +%u0AEB +%u0AEC +%u0AED +%u0AEE +%u0AEF +%u0AF0 +%u0AF1 +%u0AF2 +%u0AF3 +%u0AF4 +%u0AF5 +%u0AF6 +%u0AF7 +%u0AF8 +%u0AF9 +%u0AFA +%u0AFB +%u0AFC +%u0AFD +%u0AFE +%u0AFF +%u0B00 +%u0B01 +%u0B02 +%u0B03 +%u0B04 +%u0B05 +%u0B06 +%u0B07 +%u0B08 +%u0B09 +%u0B0A +%u0B0B +%u0B0C +%u0B0D +%u0B0E +%u0B0F +%u0B10 +%u0B11 +%u0B12 +%u0B13 +%u0B14 +%u0B15 +%u0B16 +%u0B17 +%u0B18 +%u0B19 +%u0B1A +%u0B1B +%u0B1C +%u0B1D +%u0B1E +%u0B1F +%u0B20 +%u0B21 +%u0B22 +%u0B23 +%u0B24 +%u0B25 +%u0B26 +%u0B27 +%u0B28 +%u0B29 +%u0B2A +%u0B2B +%u0B2C +%u0B2D +%u0B2E +%u0B2F +%u0B30 +%u0B31 +%u0B32 +%u0B33 +%u0B34 +%u0B35 +%u0B36 +%u0B37 +%u0B38 +%u0B39 +%u0B3A +%u0B3B +%u0B3C +%u0B3D +%u0B3E +%u0B3F +%u0B40 +%u0B41 +%u0B42 +%u0B43 +%u0B44 +%u0B45 +%u0B46 +%u0B47 +%u0B48 +%u0B49 +%u0B4A +%u0B4B +%u0B4C +%u0B4D +%u0B4E +%u0B4F +%u0B50 +%u0B51 +%u0B52 +%u0B53 +%u0B54 +%u0B55 +%u0B56 +%u0B57 +%u0B58 +%u0B59 +%u0B5A +%u0B5B +%u0B5C +%u0B5D +%u0B5E +%u0B5F +%u0B60 +%u0B61 +%u0B62 +%u0B63 +%u0B64 +%u0B65 +%u0B66 +%u0B67 +%u0B68 +%u0B69 +%u0B6A +%u0B6B +%u0B6C +%u0B6D +%u0B6E +%u0B6F +%u0B70 +%u0B71 +%u0B72 +%u0B73 +%u0B74 +%u0B75 +%u0B76 +%u0B77 +%u0B78 +%u0B79 +%u0B7A +%u0B7B +%u0B7C +%u0B7D +%u0B7E +%u0B7F +%u0B80 +%u0B81 +%u0B82 +%u0B83 +%u0B84 +%u0B85 +%u0B86 +%u0B87 +%u0B88 +%u0B89 +%u0B8A +%u0B8B +%u0B8C +%u0B8D +%u0B8E +%u0B8F +%u0B90 +%u0B91 +%u0B92 +%u0B93 +%u0B94 +%u0B95 +%u0B96 +%u0B97 +%u0B98 +%u0B99 +%u0B9A +%u0B9B +%u0B9C +%u0B9D +%u0B9E +%u0B9F +%u0BA0 +%u0BA1 +%u0BA2 +%u0BA3 +%u0BA4 +%u0BA5 +%u0BA6 +%u0BA7 +%u0BA8 +%u0BA9 +%u0BAA +%u0BAB +%u0BAC +%u0BAD +%u0BAE +%u0BAF +%u0BB0 +%u0BB1 +%u0BB2 +%u0BB3 +%u0BB4 +%u0BB5 +%u0BB6 +%u0BB7 +%u0BB8 +%u0BB9 +%u0BBA +%u0BBB +%u0BBC +%u0BBD +%u0BBE +%u0BBF +%u0BC0 +%u0BC1 +%u0BC2 +%u0BC3 +%u0BC4 +%u0BC5 +%u0BC6 +%u0BC7 +%u0BC8 +%u0BC9 +%u0BCA +%u0BCB +%u0BCC +%u0BCD +%u0BCE +%u0BCF +%u0BD0 +%u0BD1 +%u0BD2 +%u0BD3 +%u0BD4 +%u0BD5 +%u0BD6 +%u0BD7 +%u0BD8 +%u0BD9 +%u0BDA +%u0BDB +%u0BDC +%u0BDD +%u0BDE +%u0BDF +%u0BE0 +%u0BE1 +%u0BE2 +%u0BE3 +%u0BE4 +%u0BE5 +%u0BE6 +%u0BE7 +%u0BE8 +%u0BE9 +%u0BEA +%u0BEB +%u0BEC +%u0BED +%u0BEE +%u0BEF +%u0BF0 +%u0BF1 +%u0BF2 +%u0BF3 +%u0BF4 +%u0BF5 +%u0BF6 +%u0BF7 +%u0BF8 +%u0BF9 +%u0BFA +%u0BFB +%u0BFC +%u0BFD +%u0BFE +%u0BFF +%u0C00 +%u0C01 +%u0C02 +%u0C03 +%u0C04 +%u0C05 +%u0C06 +%u0C07 +%u0C08 +%u0C09 +%u0C0A +%u0C0B +%u0C0C +%u0C0D +%u0C0E +%u0C0F +%u0C10 +%u0C11 +%u0C12 +%u0C13 +%u0C14 +%u0C15 +%u0C16 +%u0C17 +%u0C18 +%u0C19 +%u0C1A +%u0C1B +%u0C1C +%u0C1D +%u0C1E +%u0C1F +%u0C20 +%u0C21 +%u0C22 +%u0C23 +%u0C24 +%u0C25 +%u0C26 +%u0C27 +%u0C28 +%u0C29 +%u0C2A +%u0C2B +%u0C2C +%u0C2D +%u0C2E +%u0C2F +%u0C30 +%u0C31 +%u0C32 +%u0C33 +%u0C34 +%u0C35 +%u0C36 +%u0C37 +%u0C38 +%u0C39 +%u0C3A +%u0C3B +%u0C3C +%u0C3D +%u0C3E +%u0C3F +%u0C40 +%u0C41 +%u0C42 +%u0C43 +%u0C44 +%u0C45 +%u0C46 +%u0C47 +%u0C48 +%u0C49 +%u0C4A +%u0C4B +%u0C4C +%u0C4D +%u0C4E +%u0C4F +%u0C50 +%u0C51 +%u0C52 +%u0C53 +%u0C54 +%u0C55 +%u0C56 +%u0C57 +%u0C58 +%u0C59 +%u0C5A +%u0C5B +%u0C5C +%u0C5D +%u0C5E +%u0C5F +%u0C60 +%u0C61 +%u0C62 +%u0C63 +%u0C64 +%u0C65 +%u0C66 +%u0C67 +%u0C68 +%u0C69 +%u0C6A +%u0C6B +%u0C6C +%u0C6D +%u0C6E +%u0C6F +%u0C70 +%u0C71 +%u0C72 +%u0C73 +%u0C74 +%u0C75 +%u0C76 +%u0C77 +%u0C78 +%u0C79 +%u0C7A +%u0C7B +%u0C7C +%u0C7D +%u0C7E +%u0C7F +%u0C80 +%u0C81 +%u0C82 +%u0C83 +%u0C84 +%u0C85 +%u0C86 +%u0C87 +%u0C88 +%u0C89 +%u0C8A +%u0C8B +%u0C8C +%u0C8D +%u0C8E +%u0C8F +%u0C90 +%u0C91 +%u0C92 +%u0C93 +%u0C94 +%u0C95 +%u0C96 +%u0C97 +%u0C98 +%u0C99 +%u0C9A +%u0C9B +%u0C9C +%u0C9D +%u0C9E +%u0C9F +%u0CA0 +%u0CA1 +%u0CA2 +%u0CA3 +%u0CA4 +%u0CA5 +%u0CA6 +%u0CA7 +%u0CA8 +%u0CA9 +%u0CAA +%u0CAB +%u0CAC +%u0CAD +%u0CAE +%u0CAF +%u0CB0 +%u0CB1 +%u0CB2 +%u0CB3 +%u0CB4 +%u0CB5 +%u0CB6 +%u0CB7 +%u0CB8 +%u0CB9 +%u0CBA +%u0CBB +%u0CBC +%u0CBD +%u0CBE +%u0CBF +%u0CC0 +%u0CC1 +%u0CC2 +%u0CC3 +%u0CC4 +%u0CC5 +%u0CC6 +%u0CC7 +%u0CC8 +%u0CC9 +%u0CCA +%u0CCB +%u0CCC +%u0CCD +%u0CCE +%u0CCF +%u0CD0 +%u0CD1 +%u0CD2 +%u0CD3 +%u0CD4 +%u0CD5 +%u0CD6 +%u0CD7 +%u0CD8 +%u0CD9 +%u0CDA +%u0CDB +%u0CDC +%u0CDD +%u0CDE +%u0CDF +%u0CE0 +%u0CE1 +%u0CE2 +%u0CE3 +%u0CE4 +%u0CE5 +%u0CE6 +%u0CE7 +%u0CE8 +%u0CE9 +%u0CEA +%u0CEB +%u0CEC +%u0CED +%u0CEE +%u0CEF +%u0CF0 +%u0CF1 +%u0CF2 +%u0CF3 +%u0CF4 +%u0CF5 +%u0CF6 +%u0CF7 +%u0CF8 +%u0CF9 +%u0CFA +%u0CFB +%u0CFC +%u0CFD +%u0CFE +%u0CFF +%u0D00 +%u0D01 +%u0D02 +%u0D03 +%u0D04 +%u0D05 +%u0D06 +%u0D07 +%u0D08 +%u0D09 +%u0D0A +%u0D0B +%u0D0C +%u0D0D +%u0D0E +%u0D0F +%u0D10 +%u0D11 +%u0D12 +%u0D13 +%u0D14 +%u0D15 +%u0D16 +%u0D17 +%u0D18 +%u0D19 +%u0D1A +%u0D1B +%u0D1C +%u0D1D +%u0D1E +%u0D1F +%u0D20 +%u0D21 +%u0D22 +%u0D23 +%u0D24 +%u0D25 +%u0D26 +%u0D27 +%u0D28 +%u0D29 +%u0D2A +%u0D2B +%u0D2C +%u0D2D +%u0D2E +%u0D2F +%u0D30 +%u0D31 +%u0D32 +%u0D33 +%u0D34 +%u0D35 +%u0D36 +%u0D37 +%u0D38 +%u0D39 +%u0D3A +%u0D3B +%u0D3C +%u0D3D +%u0D3E +%u0D3F +%u0D40 +%u0D41 +%u0D42 +%u0D43 +%u0D44 +%u0D45 +%u0D46 +%u0D47 +%u0D48 +%u0D49 +%u0D4A +%u0D4B +%u0D4C +%u0D4D +%u0D4E +%u0D4F +%u0D50 +%u0D51 +%u0D52 +%u0D53 +%u0D54 +%u0D55 +%u0D56 +%u0D57 +%u0D58 +%u0D59 +%u0D5A +%u0D5B +%u0D5C +%u0D5D +%u0D5E +%u0D5F +%u0D60 +%u0D61 +%u0D62 +%u0D63 +%u0D64 +%u0D65 +%u0D66 +%u0D67 +%u0D68 +%u0D69 +%u0D6A +%u0D6B +%u0D6C +%u0D6D +%u0D6E +%u0D6F +%u0D70 +%u0D71 +%u0D72 +%u0D73 +%u0D74 +%u0D75 +%u0D76 +%u0D77 +%u0D78 +%u0D79 +%u0D7A +%u0D7B +%u0D7C +%u0D7D +%u0D7E +%u0D7F +%u0D80 +%u0D81 +%u0D82 +%u0D83 +%u0D84 +%u0D85 +%u0D86 +%u0D87 +%u0D88 +%u0D89 +%u0D8A +%u0D8B +%u0D8C +%u0D8D +%u0D8E +%u0D8F +%u0D90 +%u0D91 +%u0D92 +%u0D93 +%u0D94 +%u0D95 +%u0D96 +%u0D97 +%u0D98 +%u0D99 +%u0D9A +%u0D9B +%u0D9C +%u0D9D +%u0D9E +%u0D9F +%u0DA0 +%u0DA1 +%u0DA2 +%u0DA3 +%u0DA4 +%u0DA5 +%u0DA6 +%u0DA7 +%u0DA8 +%u0DA9 +%u0DAA +%u0DAB +%u0DAC +%u0DAD +%u0DAE +%u0DAF +%u0DB0 +%u0DB1 +%u0DB2 +%u0DB3 +%u0DB4 +%u0DB5 +%u0DB6 +%u0DB7 +%u0DB8 +%u0DB9 +%u0DBA +%u0DBB +%u0DBC +%u0DBD +%u0DBE +%u0DBF +%u0DC0 +%u0DC1 +%u0DC2 +%u0DC3 +%u0DC4 +%u0DC5 +%u0DC6 +%u0DC7 +%u0DC8 +%u0DC9 +%u0DCA +%u0DCB +%u0DCC +%u0DCD +%u0DCE +%u0DCF +%u0DD0 +%u0DD1 +%u0DD2 +%u0DD3 +%u0DD4 +%u0DD5 +%u0DD6 +%u0DD7 +%u0DD8 +%u0DD9 +%u0DDA +%u0DDB +%u0DDC +%u0DDD +%u0DDE +%u0DDF +%u0DE0 +%u0DE1 +%u0DE2 +%u0DE3 +%u0DE4 +%u0DE5 +%u0DE6 +%u0DE7 +%u0DE8 +%u0DE9 +%u0DEA +%u0DEB +%u0DEC +%u0DED +%u0DEE +%u0DEF +%u0DF0 +%u0DF1 +%u0DF2 +%u0DF3 +%u0DF4 +%u0DF5 +%u0DF6 +%u0DF7 +%u0DF8 +%u0DF9 +%u0DFA +%u0DFB +%u0DFC +%u0DFD +%u0DFE +%u0DFF +%u0E00 +%u0E01 +%u0E02 +%u0E03 +%u0E04 +%u0E05 +%u0E06 +%u0E07 +%u0E08 +%u0E09 +%u0E0A +%u0E0B +%u0E0C +%u0E0D +%u0E0E +%u0E0F +%u0E10 +%u0E11 +%u0E12 +%u0E13 +%u0E14 +%u0E15 +%u0E16 +%u0E17 +%u0E18 +%u0E19 +%u0E1A +%u0E1B +%u0E1C +%u0E1D +%u0E1E +%u0E1F +%u0E20 +%u0E21 +%u0E22 +%u0E23 +%u0E24 +%u0E25 +%u0E26 +%u0E27 +%u0E28 +%u0E29 +%u0E2A +%u0E2B +%u0E2C +%u0E2D +%u0E2E +%u0E2F +%u0E30 +%u0E31 +%u0E32 +%u0E33 +%u0E34 +%u0E35 +%u0E36 +%u0E37 +%u0E38 +%u0E39 +%u0E3A +%u0E3B +%u0E3C +%u0E3D +%u0E3E +%u0E3F +%u0E40 +%u0E41 +%u0E42 +%u0E43 +%u0E44 +%u0E45 +%u0E46 +%u0E47 +%u0E48 +%u0E49 +%u0E4A +%u0E4B +%u0E4C +%u0E4D +%u0E4E +%u0E4F +%u0E50 +%u0E51 +%u0E52 +%u0E53 +%u0E54 +%u0E55 +%u0E56 +%u0E57 +%u0E58 +%u0E59 +%u0E5A +%u0E5B +%u0E5C +%u0E5D +%u0E5E +%u0E5F +%u0E60 +%u0E61 +%u0E62 +%u0E63 +%u0E64 +%u0E65 +%u0E66 +%u0E67 +%u0E68 +%u0E69 +%u0E6A +%u0E6B +%u0E6C +%u0E6D +%u0E6E +%u0E6F +%u0E70 +%u0E71 +%u0E72 +%u0E73 +%u0E74 +%u0E75 +%u0E76 +%u0E77 +%u0E78 +%u0E79 +%u0E7A +%u0E7B +%u0E7C +%u0E7D +%u0E7E +%u0E7F +%u0E80 +%u0E81 +%u0E82 +%u0E83 +%u0E84 +%u0E85 +%u0E86 +%u0E87 +%u0E88 +%u0E89 +%u0E8A +%u0E8B +%u0E8C +%u0E8D +%u0E8E +%u0E8F +%u0E90 +%u0E91 +%u0E92 +%u0E93 +%u0E94 +%u0E95 +%u0E96 +%u0E97 +%u0E98 +%u0E99 +%u0E9A +%u0E9B +%u0E9C +%u0E9D +%u0E9E +%u0E9F +%u0EA0 +%u0EA1 +%u0EA2 +%u0EA3 +%u0EA4 +%u0EA5 +%u0EA6 +%u0EA7 +%u0EA8 +%u0EA9 +%u0EAA +%u0EAB +%u0EAC +%u0EAD +%u0EAE +%u0EAF +%u0EB0 +%u0EB1 +%u0EB2 +%u0EB3 +%u0EB4 +%u0EB5 +%u0EB6 +%u0EB7 +%u0EB8 +%u0EB9 +%u0EBA +%u0EBB +%u0EBC +%u0EBD +%u0EBE +%u0EBF +%u0EC0 +%u0EC1 +%u0EC2 +%u0EC3 +%u0EC4 +%u0EC5 +%u0EC6 +%u0EC7 +%u0EC8 +%u0EC9 +%u0ECA +%u0ECB +%u0ECC +%u0ECD +%u0ECE +%u0ECF +%u0ED0 +%u0ED1 +%u0ED2 +%u0ED3 +%u0ED4 +%u0ED5 +%u0ED6 +%u0ED7 +%u0ED8 +%u0ED9 +%u0EDA +%u0EDB +%u0EDC +%u0EDD +%u0EDE +%u0EDF +%u0EE0 +%u0EE1 +%u0EE2 +%u0EE3 +%u0EE4 +%u0EE5 +%u0EE6 +%u0EE7 +%u0EE8 +%u0EE9 +%u0EEA +%u0EEB +%u0EEC +%u0EED +%u0EEE +%u0EEF +%u0EF0 +%u0EF1 +%u0EF2 +%u0EF3 +%u0EF4 +%u0EF5 +%u0EF6 +%u0EF7 +%u0EF8 +%u0EF9 +%u0EFA +%u0EFB +%u0EFC +%u0EFD +%u0EFE +%u0EFF +%u0F00 +%u0F01 +%u0F02 +%u0F03 +%u0F04 +%u0F05 +%u0F06 +%u0F07 +%u0F08 +%u0F09 +%u0F0A +%u0F0B +%u0F0C +%u0F0D +%u0F0E +%u0F0F +%u0F10 +%u0F11 +%u0F12 +%u0F13 +%u0F14 +%u0F15 +%u0F16 +%u0F17 +%u0F18 +%u0F19 +%u0F1A +%u0F1B +%u0F1C +%u0F1D +%u0F1E +%u0F1F +%u0F20 +%u0F21 +%u0F22 +%u0F23 +%u0F24 +%u0F25 +%u0F26 +%u0F27 +%u0F28 +%u0F29 +%u0F2A +%u0F2B +%u0F2C +%u0F2D +%u0F2E +%u0F2F +%u0F30 +%u0F31 +%u0F32 +%u0F33 +%u0F34 +%u0F35 +%u0F36 +%u0F37 +%u0F38 +%u0F39 +%u0F3A +%u0F3B +%u0F3C +%u0F3D +%u0F3E +%u0F3F +%u0F40 +%u0F41 +%u0F42 +%u0F43 +%u0F44 +%u0F45 +%u0F46 +%u0F47 +%u0F48 +%u0F49 +%u0F4A +%u0F4B +%u0F4C +%u0F4D +%u0F4E +%u0F4F +%u0F50 +%u0F51 +%u0F52 +%u0F53 +%u0F54 +%u0F55 +%u0F56 +%u0F57 +%u0F58 +%u0F59 +%u0F5A +%u0F5B +%u0F5C +%u0F5D +%u0F5E +%u0F5F +%u0F60 +%u0F61 +%u0F62 +%u0F63 +%u0F64 +%u0F65 +%u0F66 +%u0F67 +%u0F68 +%u0F69 +%u0F6A +%u0F6B +%u0F6C +%u0F6D +%u0F6E +%u0F6F +%u0F70 +%u0F71 +%u0F72 +%u0F73 +%u0F74 +%u0F75 +%u0F76 +%u0F77 +%u0F78 +%u0F79 +%u0F7A +%u0F7B +%u0F7C +%u0F7D +%u0F7E +%u0F7F +%u0F80 +%u0F81 +%u0F82 +%u0F83 +%u0F84 +%u0F85 +%u0F86 +%u0F87 +%u0F88 +%u0F89 +%u0F8A +%u0F8B +%u0F8C +%u0F8D +%u0F8E +%u0F8F +%u0F90 +%u0F91 +%u0F92 +%u0F93 +%u0F94 +%u0F95 +%u0F96 +%u0F97 +%u0F98 +%u0F99 +%u0F9A +%u0F9B +%u0F9C +%u0F9D +%u0F9E +%u0F9F +%u0FA0 +%u0FA1 +%u0FA2 +%u0FA3 +%u0FA4 +%u0FA5 +%u0FA6 +%u0FA7 +%u0FA8 +%u0FA9 +%u0FAA +%u0FAB +%u0FAC +%u0FAD +%u0FAE +%u0FAF +%u0FB0 +%u0FB1 +%u0FB2 +%u0FB3 +%u0FB4 +%u0FB5 +%u0FB6 +%u0FB7 +%u0FB8 +%u0FB9 +%u0FBA +%u0FBB +%u0FBC +%u0FBD +%u0FBE +%u0FBF +%u0FC0 +%u0FC1 +%u0FC2 +%u0FC3 +%u0FC4 +%u0FC5 +%u0FC6 +%u0FC7 +%u0FC8 +%u0FC9 +%u0FCA +%u0FCB +%u0FCC +%u0FCD +%u0FCE +%u0FCF +%u0FD0 +%u0FD1 +%u0FD2 +%u0FD3 +%u0FD4 +%u0FD5 +%u0FD6 +%u0FD7 +%u0FD8 +%u0FD9 +%u0FDA +%u0FDB +%u0FDC +%u0FDD +%u0FDE +%u0FDF +%u0FE0 +%u0FE1 +%u0FE2 +%u0FE3 +%u0FE4 +%u0FE5 +%u0FE6 +%u0FE7 +%u0FE8 +%u0FE9 +%u0FEA +%u0FEB +%u0FEC +%u0FED +%u0FEE +%u0FEF +%u0FF0 +%u0FF1 +%u0FF2 +%u0FF3 +%u0FF4 +%u0FF5 +%u0FF6 +%u0FF7 +%u0FF8 +%u0FF9 +%u0FFA +%u0FFB +%u0FFC +%u0FFD +%u0FFE +%u0FFF +%u1000 +%u1001 +%u1002 +%u1003 +%u1004 +%u1005 +%u1006 +%u1007 +%u1008 +%u1009 +%u100A +%u100B +%u100C +%u100D +%u100E +%u100F +%u1010 +%u1011 +%u1012 +%u1013 +%u1014 +%u1015 +%u1016 +%u1017 +%u1018 +%u1019 +%u101A +%u101B +%u101C +%u101D +%u101E +%u101F +%u1020 +%u1021 +%u1022 +%u1023 +%u1024 +%u1025 +%u1026 +%u1027 +%u1028 +%u1029 +%u102A +%u102B +%u102C +%u102D +%u102E +%u102F +%u1030 +%u1031 +%u1032 +%u1033 +%u1034 +%u1035 +%u1036 +%u1037 +%u1038 +%u1039 +%u103A +%u103B +%u103C +%u103D +%u103E +%u103F +%u1040 +%u1041 +%u1042 +%u1043 +%u1044 +%u1045 +%u1046 +%u1047 +%u1048 +%u1049 +%u104A +%u104B +%u104C +%u104D +%u104E +%u104F +%u1050 +%u1051 +%u1052 +%u1053 +%u1054 +%u1055 +%u1056 +%u1057 +%u1058 +%u1059 +%u105A +%u105B +%u105C +%u105D +%u105E +%u105F +%u1060 +%u1061 +%u1062 +%u1063 +%u1064 +%u1065 +%u1066 +%u1067 +%u1068 +%u1069 +%u106A +%u106B +%u106C +%u106D +%u106E +%u106F +%u1070 +%u1071 +%u1072 +%u1073 +%u1074 +%u1075 +%u1076 +%u1077 +%u1078 +%u1079 +%u107A +%u107B +%u107C +%u107D +%u107E +%u107F +%u1080 +%u1081 +%u1082 +%u1083 +%u1084 +%u1085 +%u1086 +%u1087 +%u1088 +%u1089 +%u108A +%u108B +%u108C +%u108D +%u108E +%u108F +%u1090 +%u1091 +%u1092 +%u1093 +%u1094 +%u1095 +%u1096 +%u1097 +%u1098 +%u1099 +%u109A +%u109B +%u109C +%u109D +%u109E +%u109F +%u10A0 +%u10A1 +%u10A2 +%u10A3 +%u10A4 +%u10A5 +%u10A6 +%u10A7 +%u10A8 +%u10A9 +%u10AA +%u10AB +%u10AC +%u10AD +%u10AE +%u10AF +%u10B0 +%u10B1 +%u10B2 +%u10B3 +%u10B4 +%u10B5 +%u10B6 +%u10B7 +%u10B8 +%u10B9 +%u10BA +%u10BB +%u10BC +%u10BD +%u10BE +%u10BF +%u10C0 +%u10C1 +%u10C2 +%u10C3 +%u10C4 +%u10C5 +%u10C6 +%u10C7 +%u10C8 +%u10C9 +%u10CA +%u10CB +%u10CC +%u10CD +%u10CE +%u10CF +%u10D0 +%u10D1 +%u10D2 +%u10D3 +%u10D4 +%u10D5 +%u10D6 +%u10D7 +%u10D8 +%u10D9 +%u10DA +%u10DB +%u10DC +%u10DD +%u10DE +%u10DF +%u10E0 +%u10E1 +%u10E2 +%u10E3 +%u10E4 +%u10E5 +%u10E6 +%u10E7 +%u10E8 +%u10E9 +%u10EA +%u10EB +%u10EC +%u10ED +%u10EE +%u10EF +%u10F0 +%u10F1 +%u10F2 +%u10F3 +%u10F4 +%u10F5 +%u10F6 +%u10F7 +%u10F8 +%u10F9 +%u10FA +%u10FB +%u10FC +%u10FD +%u10FE +%u10FF +%u1100 +%u1101 +%u1102 +%u1103 +%u1104 +%u1105 +%u1106 +%u1107 +%u1108 +%u1109 +%u110A +%u110B +%u110C +%u110D +%u110E +%u110F +%u1110 +%u1111 +%u1112 +%u1113 +%u1114 +%u1115 +%u1116 +%u1117 +%u1118 +%u1119 +%u111A +%u111B +%u111C +%u111D +%u111E +%u111F +%u1120 +%u1121 +%u1122 +%u1123 +%u1124 +%u1125 +%u1126 +%u1127 +%u1128 +%u1129 +%u112A +%u112B +%u112C +%u112D +%u112E +%u112F +%u1130 +%u1131 +%u1132 +%u1133 +%u1134 +%u1135 +%u1136 +%u1137 +%u1138 +%u1139 +%u113A +%u113B +%u113C +%u113D +%u113E +%u113F +%u1140 +%u1141 +%u1142 +%u1143 +%u1144 +%u1145 +%u1146 +%u1147 +%u1148 +%u1149 +%u114A +%u114B +%u114C +%u114D +%u114E +%u114F +%u1150 +%u1151 +%u1152 +%u1153 +%u1154 +%u1155 +%u1156 +%u1157 +%u1158 +%u1159 +%u115A +%u115B +%u115C +%u115D +%u115E +%u115F +%u1160 +%u1161 +%u1162 +%u1163 +%u1164 +%u1165 +%u1166 +%u1167 +%u1168 +%u1169 +%u116A +%u116B +%u116C +%u116D +%u116E +%u116F +%u1170 +%u1171 +%u1172 +%u1173 +%u1174 +%u1175 +%u1176 +%u1177 +%u1178 +%u1179 +%u117A +%u117B +%u117C +%u117D +%u117E +%u117F +%u1180 +%u1181 +%u1182 +%u1183 +%u1184 +%u1185 +%u1186 +%u1187 +%u1188 +%u1189 +%u118A +%u118B +%u118C +%u118D +%u118E +%u118F +%u1190 +%u1191 +%u1192 +%u1193 +%u1194 +%u1195 +%u1196 +%u1197 +%u1198 +%u1199 +%u119A +%u119B +%u119C +%u119D +%u119E +%u119F +%u11A0 +%u11A1 +%u11A2 +%u11A3 +%u11A4 +%u11A5 +%u11A6 +%u11A7 +%u11A8 +%u11A9 +%u11AA +%u11AB +%u11AC +%u11AD +%u11AE +%u11AF +%u11B0 +%u11B1 +%u11B2 +%u11B3 +%u11B4 +%u11B5 +%u11B6 +%u11B7 +%u11B8 +%u11B9 +%u11BA +%u11BB +%u11BC +%u11BD +%u11BE +%u11BF +%u11C0 +%u11C1 +%u11C2 +%u11C3 +%u11C4 +%u11C5 +%u11C6 +%u11C7 +%u11C8 +%u11C9 +%u11CA +%u11CB +%u11CC +%u11CD +%u11CE +%u11CF +%u11D0 +%u11D1 +%u11D2 +%u11D3 +%u11D4 +%u11D5 +%u11D6 +%u11D7 +%u11D8 +%u11D9 +%u11DA +%u11DB +%u11DC +%u11DD +%u11DE +%u11DF +%u11E0 +%u11E1 +%u11E2 +%u11E3 +%u11E4 +%u11E5 +%u11E6 +%u11E7 +%u11E8 +%u11E9 +%u11EA +%u11EB +%u11EC +%u11ED +%u11EE +%u11EF +%u11F0 +%u11F1 +%u11F2 +%u11F3 +%u11F4 +%u11F5 +%u11F6 +%u11F7 +%u11F8 +%u11F9 +%u11FA +%u11FB +%u11FC +%u11FD +%u11FE +%u11FF +%u1200 +%u1201 +%u1202 +%u1203 +%u1204 +%u1205 +%u1206 +%u1207 +%u1208 +%u1209 +%u120A +%u120B +%u120C +%u120D +%u120E +%u120F +%u1210 +%u1211 +%u1212 +%u1213 +%u1214 +%u1215 +%u1216 +%u1217 +%u1218 +%u1219 +%u121A +%u121B +%u121C +%u121D +%u121E +%u121F +%u1220 +%u1221 +%u1222 +%u1223 +%u1224 +%u1225 +%u1226 +%u1227 +%u1228 +%u1229 +%u122A +%u122B +%u122C +%u122D +%u122E +%u122F +%u1230 +%u1231 +%u1232 +%u1233 +%u1234 +%u1235 +%u1236 +%u1237 +%u1238 +%u1239 +%u123A +%u123B +%u123C +%u123D +%u123E +%u123F +%u1240 +%u1241 +%u1242 +%u1243 +%u1244 +%u1245 +%u1246 +%u1247 +%u1248 +%u1249 +%u124A +%u124B +%u124C +%u124D +%u124E +%u124F +%u1250 +%u1251 +%u1252 +%u1253 +%u1254 +%u1255 +%u1256 +%u1257 +%u1258 +%u1259 +%u125A +%u125B +%u125C +%u125D +%u125E +%u125F +%u1260 +%u1261 +%u1262 +%u1263 +%u1264 +%u1265 +%u1266 +%u1267 +%u1268 +%u1269 +%u126A +%u126B +%u126C +%u126D +%u126E +%u126F +%u1270 +%u1271 +%u1272 +%u1273 +%u1274 +%u1275 +%u1276 +%u1277 +%u1278 +%u1279 +%u127A +%u127B +%u127C +%u127D +%u127E +%u127F +%u1280 +%u1281 +%u1282 +%u1283 +%u1284 +%u1285 +%u1286 +%u1287 +%u1288 +%u1289 +%u128A +%u128B +%u128C +%u128D +%u128E +%u128F +%u1290 +%u1291 +%u1292 +%u1293 +%u1294 +%u1295 +%u1296 +%u1297 +%u1298 +%u1299 +%u129A +%u129B +%u129C +%u129D +%u129E +%u129F +%u12A0 +%u12A1 +%u12A2 +%u12A3 +%u12A4 +%u12A5 +%u12A6 +%u12A7 +%u12A8 +%u12A9 +%u12AA +%u12AB +%u12AC +%u12AD +%u12AE +%u12AF +%u12B0 +%u12B1 +%u12B2 +%u12B3 +%u12B4 +%u12B5 +%u12B6 +%u12B7 +%u12B8 +%u12B9 +%u12BA +%u12BB +%u12BC +%u12BD +%u12BE +%u12BF +%u12C0 +%u12C1 +%u12C2 +%u12C3 +%u12C4 +%u12C5 +%u12C6 +%u12C7 +%u12C8 +%u12C9 +%u12CA +%u12CB +%u12CC +%u12CD +%u12CE +%u12CF +%u12D0 +%u12D1 +%u12D2 +%u12D3 +%u12D4 +%u12D5 +%u12D6 +%u12D7 +%u12D8 +%u12D9 +%u12DA +%u12DB +%u12DC +%u12DD +%u12DE +%u12DF +%u12E0 +%u12E1 +%u12E2 +%u12E3 +%u12E4 +%u12E5 +%u12E6 +%u12E7 +%u12E8 +%u12E9 +%u12EA +%u12EB +%u12EC +%u12ED +%u12EE +%u12EF +%u12F0 +%u12F1 +%u12F2 +%u12F3 +%u12F4 +%u12F5 +%u12F6 +%u12F7 +%u12F8 +%u12F9 +%u12FA +%u12FB +%u12FC +%u12FD +%u12FE +%u12FF +%u1300 +%u1301 +%u1302 +%u1303 +%u1304 +%u1305 +%u1306 +%u1307 +%u1308 +%u1309 +%u130A +%u130B +%u130C +%u130D +%u130E +%u130F +%u1310 +%u1311 +%u1312 +%u1313 +%u1314 +%u1315 +%u1316 +%u1317 +%u1318 +%u1319 +%u131A +%u131B +%u131C +%u131D +%u131E +%u131F +%u1320 +%u1321 +%u1322 +%u1323 +%u1324 +%u1325 +%u1326 +%u1327 +%u1328 +%u1329 +%u132A +%u132B +%u132C +%u132D +%u132E +%u132F +%u1330 +%u1331 +%u1332 +%u1333 +%u1334 +%u1335 +%u1336 +%u1337 +%u1338 +%u1339 +%u133A +%u133B +%u133C +%u133D +%u133E +%u133F +%u1340 +%u1341 +%u1342 +%u1343 +%u1344 +%u1345 +%u1346 +%u1347 +%u1348 +%u1349 +%u134A +%u134B +%u134C +%u134D +%u134E +%u134F +%u1350 +%u1351 +%u1352 +%u1353 +%u1354 +%u1355 +%u1356 +%u1357 +%u1358 +%u1359 +%u135A +%u135B +%u135C +%u135D +%u135E +%u135F +%u1360 +%u1361 +%u1362 +%u1363 +%u1364 +%u1365 +%u1366 +%u1367 +%u1368 +%u1369 +%u136A +%u136B +%u136C +%u136D +%u136E +%u136F +%u1370 +%u1371 +%u1372 +%u1373 +%u1374 +%u1375 +%u1376 +%u1377 +%u1378 +%u1379 +%u137A +%u137B +%u137C +%u137D +%u137E +%u137F +%u1380 +%u1381 +%u1382 +%u1383 +%u1384 +%u1385 +%u1386 +%u1387 +%u1388 +%u1389 +%u138A +%u138B +%u138C +%u138D +%u138E +%u138F +%u1390 +%u1391 +%u1392 +%u1393 +%u1394 +%u1395 +%u1396 +%u1397 +%u1398 +%u1399 +%u139A +%u139B +%u139C +%u139D +%u139E +%u139F +%u13A0 +%u13A1 +%u13A2 +%u13A3 +%u13A4 +%u13A5 +%u13A6 +%u13A7 +%u13A8 +%u13A9 +%u13AA +%u13AB +%u13AC +%u13AD +%u13AE +%u13AF +%u13B0 +%u13B1 +%u13B2 +%u13B3 +%u13B4 +%u13B5 +%u13B6 +%u13B7 +%u13B8 +%u13B9 +%u13BA +%u13BB +%u13BC +%u13BD +%u13BE +%u13BF +%u13C0 +%u13C1 +%u13C2 +%u13C3 +%u13C4 +%u13C5 +%u13C6 +%u13C7 +%u13C8 +%u13C9 +%u13CA +%u13CB +%u13CC +%u13CD +%u13CE +%u13CF +%u13D0 +%u13D1 +%u13D2 +%u13D3 +%u13D4 +%u13D5 +%u13D6 +%u13D7 +%u13D8 +%u13D9 +%u13DA +%u13DB +%u13DC +%u13DD +%u13DE +%u13DF +%u13E0 +%u13E1 +%u13E2 +%u13E3 +%u13E4 +%u13E5 +%u13E6 +%u13E7 +%u13E8 +%u13E9 +%u13EA +%u13EB +%u13EC +%u13ED +%u13EE +%u13EF +%u13F0 +%u13F1 +%u13F2 +%u13F3 +%u13F4 +%u13F5 +%u13F6 +%u13F7 +%u13F8 +%u13F9 +%u13FA +%u13FB +%u13FC +%u13FD +%u13FE +%u13FF +%u1400 +%u1401 +%u1402 +%u1403 +%u1404 +%u1405 +%u1406 +%u1407 +%u1408 +%u1409 +%u140A +%u140B +%u140C +%u140D +%u140E +%u140F +%u1410 +%u1411 +%u1412 +%u1413 +%u1414 +%u1415 +%u1416 +%u1417 +%u1418 +%u1419 +%u141A +%u141B +%u141C +%u141D +%u141E +%u141F +%u1420 +%u1421 +%u1422 +%u1423 +%u1424 +%u1425 +%u1426 +%u1427 +%u1428 +%u1429 +%u142A +%u142B +%u142C +%u142D +%u142E +%u142F +%u1430 +%u1431 +%u1432 +%u1433 +%u1434 +%u1435 +%u1436 +%u1437 +%u1438 +%u1439 +%u143A +%u143B +%u143C +%u143D +%u143E +%u143F +%u1440 +%u1441 +%u1442 +%u1443 +%u1444 +%u1445 +%u1446 +%u1447 +%u1448 +%u1449 +%u144A +%u144B +%u144C +%u144D +%u144E +%u144F +%u1450 +%u1451 +%u1452 +%u1453 +%u1454 +%u1455 +%u1456 +%u1457 +%u1458 +%u1459 +%u145A +%u145B +%u145C +%u145D +%u145E +%u145F +%u1460 +%u1461 +%u1462 +%u1463 +%u1464 +%u1465 +%u1466 +%u1467 +%u1468 +%u1469 +%u146A +%u146B +%u146C +%u146D +%u146E +%u146F +%u1470 +%u1471 +%u1472 +%u1473 +%u1474 +%u1475 +%u1476 +%u1477 +%u1478 +%u1479 +%u147A +%u147B +%u147C +%u147D +%u147E +%u147F +%u1480 +%u1481 +%u1482 +%u1483 +%u1484 +%u1485 +%u1486 +%u1487 +%u1488 +%u1489 +%u148A +%u148B +%u148C +%u148D +%u148E +%u148F +%u1490 +%u1491 +%u1492 +%u1493 +%u1494 +%u1495 +%u1496 +%u1497 +%u1498 +%u1499 +%u149A +%u149B +%u149C +%u149D +%u149E +%u149F +%u14A0 +%u14A1 +%u14A2 +%u14A3 +%u14A4 +%u14A5 +%u14A6 +%u14A7 +%u14A8 +%u14A9 +%u14AA +%u14AB +%u14AC +%u14AD +%u14AE +%u14AF +%u14B0 +%u14B1 +%u14B2 +%u14B3 +%u14B4 +%u14B5 +%u14B6 +%u14B7 +%u14B8 +%u14B9 +%u14BA +%u14BB +%u14BC +%u14BD +%u14BE +%u14BF +%u14C0 +%u14C1 +%u14C2 +%u14C3 +%u14C4 +%u14C5 +%u14C6 +%u14C7 +%u14C8 +%u14C9 +%u14CA +%u14CB +%u14CC +%u14CD +%u14CE +%u14CF +%u14D0 +%u14D1 +%u14D2 +%u14D3 +%u14D4 +%u14D5 +%u14D6 +%u14D7 +%u14D8 +%u14D9 +%u14DA +%u14DB +%u14DC +%u14DD +%u14DE +%u14DF +%u14E0 +%u14E1 +%u14E2 +%u14E3 +%u14E4 +%u14E5 +%u14E6 +%u14E7 +%u14E8 +%u14E9 +%u14EA +%u14EB +%u14EC +%u14ED +%u14EE +%u14EF +%u14F0 +%u14F1 +%u14F2 +%u14F3 +%u14F4 +%u14F5 +%u14F6 +%u14F7 +%u14F8 +%u14F9 +%u14FA +%u14FB +%u14FC +%u14FD +%u14FE +%u14FF +%u1500 +%u1501 +%u1502 +%u1503 +%u1504 +%u1505 +%u1506 +%u1507 +%u1508 +%u1509 +%u150A +%u150B +%u150C +%u150D +%u150E +%u150F +%u1510 +%u1511 +%u1512 +%u1513 +%u1514 +%u1515 +%u1516 +%u1517 +%u1518 +%u1519 +%u151A +%u151B +%u151C +%u151D +%u151E +%u151F +%u1520 +%u1521 +%u1522 +%u1523 +%u1524 +%u1525 +%u1526 +%u1527 +%u1528 +%u1529 +%u152A +%u152B +%u152C +%u152D +%u152E +%u152F +%u1530 +%u1531 +%u1532 +%u1533 +%u1534 +%u1535 +%u1536 +%u1537 +%u1538 +%u1539 +%u153A +%u153B +%u153C +%u153D +%u153E +%u153F +%u1540 +%u1541 +%u1542 +%u1543 +%u1544 +%u1545 +%u1546 +%u1547 +%u1548 +%u1549 +%u154A +%u154B +%u154C +%u154D +%u154E +%u154F +%u1550 +%u1551 +%u1552 +%u1553 +%u1554 +%u1555 +%u1556 +%u1557 +%u1558 +%u1559 +%u155A +%u155B +%u155C +%u155D +%u155E +%u155F +%u1560 +%u1561 +%u1562 +%u1563 +%u1564 +%u1565 +%u1566 +%u1567 +%u1568 +%u1569 +%u156A +%u156B +%u156C +%u156D +%u156E +%u156F +%u1570 +%u1571 +%u1572 +%u1573 +%u1574 +%u1575 +%u1576 +%u1577 +%u1578 +%u1579 +%u157A +%u157B +%u157C +%u157D +%u157E +%u157F +%u1580 +%u1581 +%u1582 +%u1583 +%u1584 +%u1585 +%u1586 +%u1587 +%u1588 +%u1589 +%u158A +%u158B +%u158C +%u158D +%u158E +%u158F +%u1590 +%u1591 +%u1592 +%u1593 +%u1594 +%u1595 +%u1596 +%u1597 +%u1598 +%u1599 +%u159A +%u159B +%u159C +%u159D +%u159E +%u159F +%u15A0 +%u15A1 +%u15A2 +%u15A3 +%u15A4 +%u15A5 +%u15A6 +%u15A7 +%u15A8 +%u15A9 +%u15AA +%u15AB +%u15AC +%u15AD +%u15AE +%u15AF +%u15B0 +%u15B1 +%u15B2 +%u15B3 +%u15B4 +%u15B5 +%u15B6 +%u15B7 +%u15B8 +%u15B9 +%u15BA +%u15BB +%u15BC +%u15BD +%u15BE +%u15BF +%u15C0 +%u15C1 +%u15C2 +%u15C3 +%u15C4 +%u15C5 +%u15C6 +%u15C7 +%u15C8 +%u15C9 +%u15CA +%u15CB +%u15CC +%u15CD +%u15CE +%u15CF +%u15D0 +%u15D1 +%u15D2 +%u15D3 +%u15D4 +%u15D5 +%u15D6 +%u15D7 +%u15D8 +%u15D9 +%u15DA +%u15DB +%u15DC +%u15DD +%u15DE +%u15DF +%u15E0 +%u15E1 +%u15E2 +%u15E3 +%u15E4 +%u15E5 +%u15E6 +%u15E7 +%u15E8 +%u15E9 +%u15EA +%u15EB +%u15EC +%u15ED +%u15EE +%u15EF +%u15F0 +%u15F1 +%u15F2 +%u15F3 +%u15F4 +%u15F5 +%u15F6 +%u15F7 +%u15F8 +%u15F9 +%u15FA +%u15FB +%u15FC +%u15FD +%u15FE +%u15FF +%u1600 +%u1601 +%u1602 +%u1603 +%u1604 +%u1605 +%u1606 +%u1607 +%u1608 +%u1609 +%u160A +%u160B +%u160C +%u160D +%u160E +%u160F +%u1610 +%u1611 +%u1612 +%u1613 +%u1614 +%u1615 +%u1616 +%u1617 +%u1618 +%u1619 +%u161A +%u161B +%u161C +%u161D +%u161E +%u161F +%u1620 +%u1621 +%u1622 +%u1623 +%u1624 +%u1625 +%u1626 +%u1627 +%u1628 +%u1629 +%u162A +%u162B +%u162C +%u162D +%u162E +%u162F +%u1630 +%u1631 +%u1632 +%u1633 +%u1634 +%u1635 +%u1636 +%u1637 +%u1638 +%u1639 +%u163A +%u163B +%u163C +%u163D +%u163E +%u163F +%u1640 +%u1641 +%u1642 +%u1643 +%u1644 +%u1645 +%u1646 +%u1647 +%u1648 +%u1649 +%u164A +%u164B +%u164C +%u164D +%u164E +%u164F +%u1650 +%u1651 +%u1652 +%u1653 +%u1654 +%u1655 +%u1656 +%u1657 +%u1658 +%u1659 +%u165A +%u165B +%u165C +%u165D +%u165E +%u165F +%u1660 +%u1661 +%u1662 +%u1663 +%u1664 +%u1665 +%u1666 +%u1667 +%u1668 +%u1669 +%u166A +%u166B +%u166C +%u166D +%u166E +%u166F +%u1670 +%u1671 +%u1672 +%u1673 +%u1674 +%u1675 +%u1676 +%u1677 +%u1678 +%u1679 +%u167A +%u167B +%u167C +%u167D +%u167E +%u167F +%u1680 +%u1681 +%u1682 +%u1683 +%u1684 +%u1685 +%u1686 +%u1687 +%u1688 +%u1689 +%u168A +%u168B +%u168C +%u168D +%u168E +%u168F +%u1690 +%u1691 +%u1692 +%u1693 +%u1694 +%u1695 +%u1696 +%u1697 +%u1698 +%u1699 +%u169A +%u169B +%u169C +%u169D +%u169E +%u169F +%u16A0 +%u16A1 +%u16A2 +%u16A3 +%u16A4 +%u16A5 +%u16A6 +%u16A7 +%u16A8 +%u16A9 +%u16AA +%u16AB +%u16AC +%u16AD +%u16AE +%u16AF +%u16B0 +%u16B1 +%u16B2 +%u16B3 +%u16B4 +%u16B5 +%u16B6 +%u16B7 +%u16B8 +%u16B9 +%u16BA +%u16BB +%u16BC +%u16BD +%u16BE +%u16BF +%u16C0 +%u16C1 +%u16C2 +%u16C3 +%u16C4 +%u16C5 +%u16C6 +%u16C7 +%u16C8 +%u16C9 +%u16CA +%u16CB +%u16CC +%u16CD +%u16CE +%u16CF +%u16D0 +%u16D1 +%u16D2 +%u16D3 +%u16D4 +%u16D5 +%u16D6 +%u16D7 +%u16D8 +%u16D9 +%u16DA +%u16DB +%u16DC +%u16DD +%u16DE +%u16DF +%u16E0 +%u16E1 +%u16E2 +%u16E3 +%u16E4 +%u16E5 +%u16E6 +%u16E7 +%u16E8 +%u16E9 +%u16EA +%u16EB +%u16EC +%u16ED +%u16EE +%u16EF +%u16F0 +%u16F1 +%u16F2 +%u16F3 +%u16F4 +%u16F5 +%u16F6 +%u16F7 +%u16F8 +%u16F9 +%u16FA +%u16FB +%u16FC +%u16FD +%u16FE +%u16FF +%u1700 +%u1701 +%u1702 +%u1703 +%u1704 +%u1705 +%u1706 +%u1707 +%u1708 +%u1709 +%u170A +%u170B +%u170C +%u170D +%u170E +%u170F +%u1710 +%u1711 +%u1712 +%u1713 +%u1714 +%u1715 +%u1716 +%u1717 +%u1718 +%u1719 +%u171A +%u171B +%u171C +%u171D +%u171E +%u171F +%u1720 +%u1721 +%u1722 +%u1723 +%u1724 +%u1725 +%u1726 +%u1727 +%u1728 +%u1729 +%u172A +%u172B +%u172C +%u172D +%u172E +%u172F +%u1730 +%u1731 +%u1732 +%u1733 +%u1734 +%u1735 +%u1736 +%u1737 +%u1738 +%u1739 +%u173A +%u173B +%u173C +%u173D +%u173E +%u173F +%u1740 +%u1741 +%u1742 +%u1743 +%u1744 +%u1745 +%u1746 +%u1747 +%u1748 +%u1749 +%u174A +%u174B +%u174C +%u174D +%u174E +%u174F +%u1750 +%u1751 +%u1752 +%u1753 +%u1754 +%u1755 +%u1756 +%u1757 +%u1758 +%u1759 +%u175A +%u175B +%u175C +%u175D +%u175E +%u175F +%u1760 +%u1761 +%u1762 +%u1763 +%u1764 +%u1765 +%u1766 +%u1767 +%u1768 +%u1769 +%u176A +%u176B +%u176C +%u176D +%u176E +%u176F +%u1770 +%u1771 +%u1772 +%u1773 +%u1774 +%u1775 +%u1776 +%u1777 +%u1778 +%u1779 +%u177A +%u177B +%u177C +%u177D +%u177E +%u177F +%u1780 +%u1781 +%u1782 +%u1783 +%u1784 +%u1785 +%u1786 +%u1787 +%u1788 +%u1789 +%u178A +%u178B +%u178C +%u178D +%u178E +%u178F +%u1790 +%u1791 +%u1792 +%u1793 +%u1794 +%u1795 +%u1796 +%u1797 +%u1798 +%u1799 +%u179A +%u179B +%u179C +%u179D +%u179E +%u179F +%u17A0 +%u17A1 +%u17A2 +%u17A3 +%u17A4 +%u17A5 +%u17A6 +%u17A7 +%u17A8 +%u17A9 +%u17AA +%u17AB +%u17AC +%u17AD +%u17AE +%u17AF +%u17B0 +%u17B1 +%u17B2 +%u17B3 +%u17B4 +%u17B5 +%u17B6 +%u17B7 +%u17B8 +%u17B9 +%u17BA +%u17BB +%u17BC +%u17BD +%u17BE +%u17BF +%u17C0 +%u17C1 +%u17C2 +%u17C3 +%u17C4 +%u17C5 +%u17C6 +%u17C7 +%u17C8 +%u17C9 +%u17CA +%u17CB +%u17CC +%u17CD +%u17CE +%u17CF +%u17D0 +%u17D1 +%u17D2 +%u17D3 +%u17D4 +%u17D5 +%u17D6 +%u17D7 +%u17D8 +%u17D9 +%u17DA +%u17DB +%u17DC +%u17DD +%u17DE +%u17DF +%u17E0 +%u17E1 +%u17E2 +%u17E3 +%u17E4 +%u17E5 +%u17E6 +%u17E7 +%u17E8 +%u17E9 +%u17EA +%u17EB +%u17EC +%u17ED +%u17EE +%u17EF +%u17F0 +%u17F1 +%u17F2 +%u17F3 +%u17F4 +%u17F5 +%u17F6 +%u17F7 +%u17F8 +%u17F9 +%u17FA +%u17FB +%u17FC +%u17FD +%u17FE +%u17FF +%u1800 +%u1801 +%u1802 +%u1803 +%u1804 +%u1805 +%u1806 +%u1807 +%u1808 +%u1809 +%u180A +%u180B +%u180C +%u180D +%u180E +%u180F +%u1810 +%u1811 +%u1812 +%u1813 +%u1814 +%u1815 +%u1816 +%u1817 +%u1818 +%u1819 +%u181A +%u181B +%u181C +%u181D +%u181E +%u181F +%u1820 +%u1821 +%u1822 +%u1823 +%u1824 +%u1825 +%u1826 +%u1827 +%u1828 +%u1829 +%u182A +%u182B +%u182C +%u182D +%u182E +%u182F +%u1830 +%u1831 +%u1832 +%u1833 +%u1834 +%u1835 +%u1836 +%u1837 +%u1838 +%u1839 +%u183A +%u183B +%u183C +%u183D +%u183E +%u183F +%u1840 +%u1841 +%u1842 +%u1843 +%u1844 +%u1845 +%u1846 +%u1847 +%u1848 +%u1849 +%u184A +%u184B +%u184C +%u184D +%u184E +%u184F +%u1850 +%u1851 +%u1852 +%u1853 +%u1854 +%u1855 +%u1856 +%u1857 +%u1858 +%u1859 +%u185A +%u185B +%u185C +%u185D +%u185E +%u185F +%u1860 +%u1861 +%u1862 +%u1863 +%u1864 +%u1865 +%u1866 +%u1867 +%u1868 +%u1869 +%u186A +%u186B +%u186C +%u186D +%u186E +%u186F +%u1870 +%u1871 +%u1872 +%u1873 +%u1874 +%u1875 +%u1876 +%u1877 +%u1878 +%u1879 +%u187A +%u187B +%u187C +%u187D +%u187E +%u187F +%u1880 +%u1881 +%u1882 +%u1883 +%u1884 +%u1885 +%u1886 +%u1887 +%u1888 +%u1889 +%u188A +%u188B +%u188C +%u188D +%u188E +%u188F +%u1890 +%u1891 +%u1892 +%u1893 +%u1894 +%u1895 +%u1896 +%u1897 +%u1898 +%u1899 +%u189A +%u189B +%u189C +%u189D +%u189E +%u189F +%u18A0 +%u18A1 +%u18A2 +%u18A3 +%u18A4 +%u18A5 +%u18A6 +%u18A7 +%u18A8 +%u18A9 +%u18AA +%u18AB +%u18AC +%u18AD +%u18AE +%u18AF +%u18B0 +%u18B1 +%u18B2 +%u18B3 +%u18B4 +%u18B5 +%u18B6 +%u18B7 +%u18B8 +%u18B9 +%u18BA +%u18BB +%u18BC +%u18BD +%u18BE +%u18BF +%u18C0 +%u18C1 +%u18C2 +%u18C3 +%u18C4 +%u18C5 +%u18C6 +%u18C7 +%u18C8 +%u18C9 +%u18CA +%u18CB +%u18CC +%u18CD +%u18CE +%u18CF +%u18D0 +%u18D1 +%u18D2 +%u18D3 +%u18D4 +%u18D5 +%u18D6 +%u18D7 +%u18D8 +%u18D9 +%u18DA +%u18DB +%u18DC +%u18DD +%u18DE +%u18DF +%u18E0 +%u18E1 +%u18E2 +%u18E3 +%u18E4 +%u18E5 +%u18E6 +%u18E7 +%u18E8 +%u18E9 +%u18EA +%u18EB +%u18EC +%u18ED +%u18EE +%u18EF +%u18F0 +%u18F1 +%u18F2 +%u18F3 +%u18F4 +%u18F5 +%u18F6 +%u18F7 +%u18F8 +%u18F9 +%u18FA +%u18FB +%u18FC +%u18FD +%u18FE +%u18FF +%u1900 +%u1901 +%u1902 +%u1903 +%u1904 +%u1905 +%u1906 +%u1907 +%u1908 +%u1909 +%u190A +%u190B +%u190C +%u190D +%u190E +%u190F +%u1910 +%u1911 +%u1912 +%u1913 +%u1914 +%u1915 +%u1916 +%u1917 +%u1918 +%u1919 +%u191A +%u191B +%u191C +%u191D +%u191E +%u191F +%u1920 +%u1921 +%u1922 +%u1923 +%u1924 +%u1925 +%u1926 +%u1927 +%u1928 +%u1929 +%u192A +%u192B +%u192C +%u192D +%u192E +%u192F +%u1930 +%u1931 +%u1932 +%u1933 +%u1934 +%u1935 +%u1936 +%u1937 +%u1938 +%u1939 +%u193A +%u193B +%u193C +%u193D +%u193E +%u193F +%u1940 +%u1941 +%u1942 +%u1943 +%u1944 +%u1945 +%u1946 +%u1947 +%u1948 +%u1949 +%u194A +%u194B +%u194C +%u194D +%u194E +%u194F +%u1950 +%u1951 +%u1952 +%u1953 +%u1954 +%u1955 +%u1956 +%u1957 +%u1958 +%u1959 +%u195A +%u195B +%u195C +%u195D +%u195E +%u195F +%u1960 +%u1961 +%u1962 +%u1963 +%u1964 +%u1965 +%u1966 +%u1967 +%u1968 +%u1969 +%u196A +%u196B +%u196C +%u196D +%u196E +%u196F +%u1970 +%u1971 +%u1972 +%u1973 +%u1974 +%u1975 +%u1976 +%u1977 +%u1978 +%u1979 +%u197A +%u197B +%u197C +%u197D +%u197E +%u197F +%u1980 +%u1981 +%u1982 +%u1983 +%u1984 +%u1985 +%u1986 +%u1987 +%u1988 +%u1989 +%u198A +%u198B +%u198C +%u198D +%u198E +%u198F +%u1990 +%u1991 +%u1992 +%u1993 +%u1994 +%u1995 +%u1996 +%u1997 +%u1998 +%u1999 +%u199A +%u199B +%u199C +%u199D +%u199E +%u199F +%u19A0 +%u19A1 +%u19A2 +%u19A3 +%u19A4 +%u19A5 +%u19A6 +%u19A7 +%u19A8 +%u19A9 +%u19AA +%u19AB +%u19AC +%u19AD +%u19AE +%u19AF +%u19B0 +%u19B1 +%u19B2 +%u19B3 +%u19B4 +%u19B5 +%u19B6 +%u19B7 +%u19B8 +%u19B9 +%u19BA +%u19BB +%u19BC +%u19BD +%u19BE +%u19BF +%u19C0 +%u19C1 +%u19C2 +%u19C3 +%u19C4 +%u19C5 +%u19C6 +%u19C7 +%u19C8 +%u19C9 +%u19CA +%u19CB +%u19CC +%u19CD +%u19CE +%u19CF +%u19D0 +%u19D1 +%u19D2 +%u19D3 +%u19D4 +%u19D5 +%u19D6 +%u19D7 +%u19D8 +%u19D9 +%u19DA +%u19DB +%u19DC +%u19DD +%u19DE +%u19DF +%u19E0 +%u19E1 +%u19E2 +%u19E3 +%u19E4 +%u19E5 +%u19E6 +%u19E7 +%u19E8 +%u19E9 +%u19EA +%u19EB +%u19EC +%u19ED +%u19EE +%u19EF +%u19F0 +%u19F1 +%u19F2 +%u19F3 +%u19F4 +%u19F5 +%u19F6 +%u19F7 +%u19F8 +%u19F9 +%u19FA +%u19FB +%u19FC +%u19FD +%u19FE +%u19FF +%u1A00 +%u1A01 +%u1A02 +%u1A03 +%u1A04 +%u1A05 +%u1A06 +%u1A07 +%u1A08 +%u1A09 +%u1A0A +%u1A0B +%u1A0C +%u1A0D +%u1A0E +%u1A0F +%u1A10 +%u1A11 +%u1A12 +%u1A13 +%u1A14 +%u1A15 +%u1A16 +%u1A17 +%u1A18 +%u1A19 +%u1A1A +%u1A1B +%u1A1C +%u1A1D +%u1A1E +%u1A1F +%u1A20 +%u1A21 +%u1A22 +%u1A23 +%u1A24 +%u1A25 +%u1A26 +%u1A27 +%u1A28 +%u1A29 +%u1A2A +%u1A2B +%u1A2C +%u1A2D +%u1A2E +%u1A2F +%u1A30 +%u1A31 +%u1A32 +%u1A33 +%u1A34 +%u1A35 +%u1A36 +%u1A37 +%u1A38 +%u1A39 +%u1A3A +%u1A3B +%u1A3C +%u1A3D +%u1A3E +%u1A3F +%u1A40 +%u1A41 +%u1A42 +%u1A43 +%u1A44 +%u1A45 +%u1A46 +%u1A47 +%u1A48 +%u1A49 +%u1A4A +%u1A4B +%u1A4C +%u1A4D +%u1A4E +%u1A4F +%u1A50 +%u1A51 +%u1A52 +%u1A53 +%u1A54 +%u1A55 +%u1A56 +%u1A57 +%u1A58 +%u1A59 +%u1A5A +%u1A5B +%u1A5C +%u1A5D +%u1A5E +%u1A5F +%u1A60 +%u1A61 +%u1A62 +%u1A63 +%u1A64 +%u1A65 +%u1A66 +%u1A67 +%u1A68 +%u1A69 +%u1A6A +%u1A6B +%u1A6C +%u1A6D +%u1A6E +%u1A6F +%u1A70 +%u1A71 +%u1A72 +%u1A73 +%u1A74 +%u1A75 +%u1A76 +%u1A77 +%u1A78 +%u1A79 +%u1A7A +%u1A7B +%u1A7C +%u1A7D +%u1A7E +%u1A7F +%u1A80 +%u1A81 +%u1A82 +%u1A83 +%u1A84 +%u1A85 +%u1A86 +%u1A87 +%u1A88 +%u1A89 +%u1A8A +%u1A8B +%u1A8C +%u1A8D +%u1A8E +%u1A8F +%u1A90 +%u1A91 +%u1A92 +%u1A93 +%u1A94 +%u1A95 +%u1A96 +%u1A97 +%u1A98 +%u1A99 +%u1A9A +%u1A9B +%u1A9C +%u1A9D +%u1A9E +%u1A9F +%u1AA0 +%u1AA1 +%u1AA2 +%u1AA3 +%u1AA4 +%u1AA5 +%u1AA6 +%u1AA7 +%u1AA8 +%u1AA9 +%u1AAA +%u1AAB +%u1AAC +%u1AAD +%u1AAE +%u1AAF +%u1AB0 +%u1AB1 +%u1AB2 +%u1AB3 +%u1AB4 +%u1AB5 +%u1AB6 +%u1AB7 +%u1AB8 +%u1AB9 +%u1ABA +%u1ABB +%u1ABC +%u1ABD +%u1ABE +%u1ABF +%u1AC0 +%u1AC1 +%u1AC2 +%u1AC3 +%u1AC4 +%u1AC5 +%u1AC6 +%u1AC7 +%u1AC8 +%u1AC9 +%u1ACA +%u1ACB +%u1ACC +%u1ACD +%u1ACE +%u1ACF +%u1AD0 +%u1AD1 +%u1AD2 +%u1AD3 +%u1AD4 +%u1AD5 +%u1AD6 +%u1AD7 +%u1AD8 +%u1AD9 +%u1ADA +%u1ADB +%u1ADC +%u1ADD +%u1ADE +%u1ADF +%u1AE0 +%u1AE1 +%u1AE2 +%u1AE3 +%u1AE4 +%u1AE5 +%u1AE6 +%u1AE7 +%u1AE8 +%u1AE9 +%u1AEA +%u1AEB +%u1AEC +%u1AED +%u1AEE +%u1AEF +%u1AF0 +%u1AF1 +%u1AF2 +%u1AF3 +%u1AF4 +%u1AF5 +%u1AF6 +%u1AF7 +%u1AF8 +%u1AF9 +%u1AFA +%u1AFB +%u1AFC +%u1AFD +%u1AFE +%u1AFF +%u1B00 +%u1B01 +%u1B02 +%u1B03 +%u1B04 +%u1B05 +%u1B06 +%u1B07 +%u1B08 +%u1B09 +%u1B0A +%u1B0B +%u1B0C +%u1B0D +%u1B0E +%u1B0F +%u1B10 +%u1B11 +%u1B12 +%u1B13 +%u1B14 +%u1B15 +%u1B16 +%u1B17 +%u1B18 +%u1B19 +%u1B1A +%u1B1B +%u1B1C +%u1B1D +%u1B1E +%u1B1F +%u1B20 +%u1B21 +%u1B22 +%u1B23 +%u1B24 +%u1B25 +%u1B26 +%u1B27 +%u1B28 +%u1B29 +%u1B2A +%u1B2B +%u1B2C +%u1B2D +%u1B2E +%u1B2F +%u1B30 +%u1B31 +%u1B32 +%u1B33 +%u1B34 +%u1B35 +%u1B36 +%u1B37 +%u1B38 +%u1B39 +%u1B3A +%u1B3B +%u1B3C +%u1B3D +%u1B3E +%u1B3F +%u1B40 +%u1B41 +%u1B42 +%u1B43 +%u1B44 +%u1B45 +%u1B46 +%u1B47 +%u1B48 +%u1B49 +%u1B4A +%u1B4B +%u1B4C +%u1B4D +%u1B4E +%u1B4F +%u1B50 +%u1B51 +%u1B52 +%u1B53 +%u1B54 +%u1B55 +%u1B56 +%u1B57 +%u1B58 +%u1B59 +%u1B5A +%u1B5B +%u1B5C +%u1B5D +%u1B5E +%u1B5F +%u1B60 +%u1B61 +%u1B62 +%u1B63 +%u1B64 +%u1B65 +%u1B66 +%u1B67 +%u1B68 +%u1B69 +%u1B6A +%u1B6B +%u1B6C +%u1B6D +%u1B6E +%u1B6F +%u1B70 +%u1B71 +%u1B72 +%u1B73 +%u1B74 +%u1B75 +%u1B76 +%u1B77 +%u1B78 +%u1B79 +%u1B7A +%u1B7B +%u1B7C +%u1B7D +%u1B7E +%u1B7F +%u1B80 +%u1B81 +%u1B82 +%u1B83 +%u1B84 +%u1B85 +%u1B86 +%u1B87 +%u1B88 +%u1B89 +%u1B8A +%u1B8B +%u1B8C +%u1B8D +%u1B8E +%u1B8F +%u1B90 +%u1B91 +%u1B92 +%u1B93 +%u1B94 +%u1B95 +%u1B96 +%u1B97 +%u1B98 +%u1B99 +%u1B9A +%u1B9B +%u1B9C +%u1B9D +%u1B9E +%u1B9F +%u1BA0 +%u1BA1 +%u1BA2 +%u1BA3 +%u1BA4 +%u1BA5 +%u1BA6 +%u1BA7 +%u1BA8 +%u1BA9 +%u1BAA +%u1BAB +%u1BAC +%u1BAD +%u1BAE +%u1BAF +%u1BB0 +%u1BB1 +%u1BB2 +%u1BB3 +%u1BB4 +%u1BB5 +%u1BB6 +%u1BB7 +%u1BB8 +%u1BB9 +%u1BBA +%u1BBB +%u1BBC +%u1BBD +%u1BBE +%u1BBF +%u1BC0 +%u1BC1 +%u1BC2 +%u1BC3 +%u1BC4 +%u1BC5 +%u1BC6 +%u1BC7 +%u1BC8 +%u1BC9 +%u1BCA +%u1BCB +%u1BCC +%u1BCD +%u1BCE +%u1BCF +%u1BD0 +%u1BD1 +%u1BD2 +%u1BD3 +%u1BD4 +%u1BD5 +%u1BD6 +%u1BD7 +%u1BD8 +%u1BD9 +%u1BDA +%u1BDB +%u1BDC +%u1BDD +%u1BDE +%u1BDF +%u1BE0 +%u1BE1 +%u1BE2 +%u1BE3 +%u1BE4 +%u1BE5 +%u1BE6 +%u1BE7 +%u1BE8 +%u1BE9 +%u1BEA +%u1BEB +%u1BEC +%u1BED +%u1BEE +%u1BEF +%u1BF0 +%u1BF1 +%u1BF2 +%u1BF3 +%u1BF4 +%u1BF5 +%u1BF6 +%u1BF7 +%u1BF8 +%u1BF9 +%u1BFA +%u1BFB +%u1BFC +%u1BFD +%u1BFE +%u1BFF +%u1C00 +%u1C01 +%u1C02 +%u1C03 +%u1C04 +%u1C05 +%u1C06 +%u1C07 +%u1C08 +%u1C09 +%u1C0A +%u1C0B +%u1C0C +%u1C0D +%u1C0E +%u1C0F +%u1C10 +%u1C11 +%u1C12 +%u1C13 +%u1C14 +%u1C15 +%u1C16 +%u1C17 +%u1C18 +%u1C19 +%u1C1A +%u1C1B +%u1C1C +%u1C1D +%u1C1E +%u1C1F +%u1C20 +%u1C21 +%u1C22 +%u1C23 +%u1C24 +%u1C25 +%u1C26 +%u1C27 +%u1C28 +%u1C29 +%u1C2A +%u1C2B +%u1C2C +%u1C2D +%u1C2E +%u1C2F +%u1C30 +%u1C31 +%u1C32 +%u1C33 +%u1C34 +%u1C35 +%u1C36 +%u1C37 +%u1C38 +%u1C39 +%u1C3A +%u1C3B +%u1C3C +%u1C3D +%u1C3E +%u1C3F +%u1C40 +%u1C41 +%u1C42 +%u1C43 +%u1C44 +%u1C45 +%u1C46 +%u1C47 +%u1C48 +%u1C49 +%u1C4A +%u1C4B +%u1C4C +%u1C4D +%u1C4E +%u1C4F +%u1C50 +%u1C51 +%u1C52 +%u1C53 +%u1C54 +%u1C55 +%u1C56 +%u1C57 +%u1C58 +%u1C59 +%u1C5A +%u1C5B +%u1C5C +%u1C5D +%u1C5E +%u1C5F +%u1C60 +%u1C61 +%u1C62 +%u1C63 +%u1C64 +%u1C65 +%u1C66 +%u1C67 +%u1C68 +%u1C69 +%u1C6A +%u1C6B +%u1C6C +%u1C6D +%u1C6E +%u1C6F +%u1C70 +%u1C71 +%u1C72 +%u1C73 +%u1C74 +%u1C75 +%u1C76 +%u1C77 +%u1C78 +%u1C79 +%u1C7A +%u1C7B +%u1C7C +%u1C7D +%u1C7E +%u1C7F +%u1C80 +%u1C81 +%u1C82 +%u1C83 +%u1C84 +%u1C85 +%u1C86 +%u1C87 +%u1C88 +%u1C89 +%u1C8A +%u1C8B +%u1C8C +%u1C8D +%u1C8E +%u1C8F +%u1C90 +%u1C91 +%u1C92 +%u1C93 +%u1C94 +%u1C95 +%u1C96 +%u1C97 +%u1C98 +%u1C99 +%u1C9A +%u1C9B +%u1C9C +%u1C9D +%u1C9E +%u1C9F +%u1CA0 +%u1CA1 +%u1CA2 +%u1CA3 +%u1CA4 +%u1CA5 +%u1CA6 +%u1CA7 +%u1CA8 +%u1CA9 +%u1CAA +%u1CAB +%u1CAC +%u1CAD +%u1CAE +%u1CAF +%u1CB0 +%u1CB1 +%u1CB2 +%u1CB3 +%u1CB4 +%u1CB5 +%u1CB6 +%u1CB7 +%u1CB8 +%u1CB9 +%u1CBA +%u1CBB +%u1CBC +%u1CBD +%u1CBE +%u1CBF +%u1CC0 +%u1CC1 +%u1CC2 +%u1CC3 +%u1CC4 +%u1CC5 +%u1CC6 +%u1CC7 +%u1CC8 +%u1CC9 +%u1CCA +%u1CCB +%u1CCC +%u1CCD +%u1CCE +%u1CCF +%u1CD0 +%u1CD1 +%u1CD2 +%u1CD3 +%u1CD4 +%u1CD5 +%u1CD6 +%u1CD7 +%u1CD8 +%u1CD9 +%u1CDA +%u1CDB +%u1CDC +%u1CDD +%u1CDE +%u1CDF +%u1CE0 +%u1CE1 +%u1CE2 +%u1CE3 +%u1CE4 +%u1CE5 +%u1CE6 +%u1CE7 +%u1CE8 +%u1CE9 +%u1CEA +%u1CEB +%u1CEC +%u1CED +%u1CEE +%u1CEF +%u1CF0 +%u1CF1 +%u1CF2 +%u1CF3 +%u1CF4 +%u1CF5 +%u1CF6 +%u1CF7 +%u1CF8 +%u1CF9 +%u1CFA +%u1CFB +%u1CFC +%u1CFD +%u1CFE +%u1CFF +%u1D00 +%u1D01 +%u1D02 +%u1D03 +%u1D04 +%u1D05 +%u1D06 +%u1D07 +%u1D08 +%u1D09 +%u1D0A +%u1D0B +%u1D0C +%u1D0D +%u1D0E +%u1D0F +%u1D10 +%u1D11 +%u1D12 +%u1D13 +%u1D14 +%u1D15 +%u1D16 +%u1D17 +%u1D18 +%u1D19 +%u1D1A +%u1D1B +%u1D1C +%u1D1D +%u1D1E +%u1D1F +%u1D20 +%u1D21 +%u1D22 +%u1D23 +%u1D24 +%u1D25 +%u1D26 +%u1D27 +%u1D28 +%u1D29 +%u1D2A +%u1D2B +%u1D2C +%u1D2D +%u1D2E +%u1D2F +%u1D30 +%u1D31 +%u1D32 +%u1D33 +%u1D34 +%u1D35 +%u1D36 +%u1D37 +%u1D38 +%u1D39 +%u1D3A +%u1D3B +%u1D3C +%u1D3D +%u1D3E +%u1D3F +%u1D40 +%u1D41 +%u1D42 +%u1D43 +%u1D44 +%u1D45 +%u1D46 +%u1D47 +%u1D48 +%u1D49 +%u1D4A +%u1D4B +%u1D4C +%u1D4D +%u1D4E +%u1D4F +%u1D50 +%u1D51 +%u1D52 +%u1D53 +%u1D54 +%u1D55 +%u1D56 +%u1D57 +%u1D58 +%u1D59 +%u1D5A +%u1D5B +%u1D5C +%u1D5D +%u1D5E +%u1D5F +%u1D60 +%u1D61 +%u1D62 +%u1D63 +%u1D64 +%u1D65 +%u1D66 +%u1D67 +%u1D68 +%u1D69 +%u1D6A +%u1D6B +%u1D6C +%u1D6D +%u1D6E +%u1D6F +%u1D70 +%u1D71 +%u1D72 +%u1D73 +%u1D74 +%u1D75 +%u1D76 +%u1D77 +%u1D78 +%u1D79 +%u1D7A +%u1D7B +%u1D7C +%u1D7D +%u1D7E +%u1D7F +%u1D80 +%u1D81 +%u1D82 +%u1D83 +%u1D84 +%u1D85 +%u1D86 +%u1D87 +%u1D88 +%u1D89 +%u1D8A +%u1D8B +%u1D8C +%u1D8D +%u1D8E +%u1D8F +%u1D90 +%u1D91 +%u1D92 +%u1D93 +%u1D94 +%u1D95 +%u1D96 +%u1D97 +%u1D98 +%u1D99 +%u1D9A +%u1D9B +%u1D9C +%u1D9D +%u1D9E +%u1D9F +%u1DA0 +%u1DA1 +%u1DA2 +%u1DA3 +%u1DA4 +%u1DA5 +%u1DA6 +%u1DA7 +%u1DA8 +%u1DA9 +%u1DAA +%u1DAB +%u1DAC +%u1DAD +%u1DAE +%u1DAF +%u1DB0 +%u1DB1 +%u1DB2 +%u1DB3 +%u1DB4 +%u1DB5 +%u1DB6 +%u1DB7 +%u1DB8 +%u1DB9 +%u1DBA +%u1DBB +%u1DBC +%u1DBD +%u1DBE +%u1DBF +%u1DC0 +%u1DC1 +%u1DC2 +%u1DC3 +%u1DC4 +%u1DC5 +%u1DC6 +%u1DC7 +%u1DC8 +%u1DC9 +%u1DCA +%u1DCB +%u1DCC +%u1DCD +%u1DCE +%u1DCF +%u1DD0 +%u1DD1 +%u1DD2 +%u1DD3 +%u1DD4 +%u1DD5 +%u1DD6 +%u1DD7 +%u1DD8 +%u1DD9 +%u1DDA +%u1DDB +%u1DDC +%u1DDD +%u1DDE +%u1DDF +%u1DE0 +%u1DE1 +%u1DE2 +%u1DE3 +%u1DE4 +%u1DE5 +%u1DE6 +%u1DE7 +%u1DE8 +%u1DE9 +%u1DEA +%u1DEB +%u1DEC +%u1DED +%u1DEE +%u1DEF +%u1DF0 +%u1DF1 +%u1DF2 +%u1DF3 +%u1DF4 +%u1DF5 +%u1DF6 +%u1DF7 +%u1DF8 +%u1DF9 +%u1DFA +%u1DFB +%u1DFC +%u1DFD +%u1DFE +%u1DFF +%u1E00 +%u1E01 +%u1E02 +%u1E03 +%u1E04 +%u1E05 +%u1E06 +%u1E07 +%u1E08 +%u1E09 +%u1E0A +%u1E0B +%u1E0C +%u1E0D +%u1E0E +%u1E0F +%u1E10 +%u1E11 +%u1E12 +%u1E13 +%u1E14 +%u1E15 +%u1E16 +%u1E17 +%u1E18 +%u1E19 +%u1E1A +%u1E1B +%u1E1C +%u1E1D +%u1E1E +%u1E1F +%u1E20 +%u1E21 +%u1E22 +%u1E23 +%u1E24 +%u1E25 +%u1E26 +%u1E27 +%u1E28 +%u1E29 +%u1E2A +%u1E2B +%u1E2C +%u1E2D +%u1E2E +%u1E2F +%u1E30 +%u1E31 +%u1E32 +%u1E33 +%u1E34 +%u1E35 +%u1E36 +%u1E37 +%u1E38 +%u1E39 +%u1E3A +%u1E3B +%u1E3C +%u1E3D +%u1E3E +%u1E3F +%u1E40 +%u1E41 +%u1E42 +%u1E43 +%u1E44 +%u1E45 +%u1E46 +%u1E47 +%u1E48 +%u1E49 +%u1E4A +%u1E4B +%u1E4C +%u1E4D +%u1E4E +%u1E4F +%u1E50 +%u1E51 +%u1E52 +%u1E53 +%u1E54 +%u1E55 +%u1E56 +%u1E57 +%u1E58 +%u1E59 +%u1E5A +%u1E5B +%u1E5C +%u1E5D +%u1E5E +%u1E5F +%u1E60 +%u1E61 +%u1E62 +%u1E63 +%u1E64 +%u1E65 +%u1E66 +%u1E67 +%u1E68 +%u1E69 +%u1E6A +%u1E6B +%u1E6C +%u1E6D +%u1E6E +%u1E6F +%u1E70 +%u1E71 +%u1E72 +%u1E73 +%u1E74 +%u1E75 +%u1E76 +%u1E77 +%u1E78 +%u1E79 +%u1E7A +%u1E7B +%u1E7C +%u1E7D +%u1E7E +%u1E7F +%u1E80 +%u1E81 +%u1E82 +%u1E83 +%u1E84 +%u1E85 +%u1E86 +%u1E87 +%u1E88 +%u1E89 +%u1E8A +%u1E8B +%u1E8C +%u1E8D +%u1E8E +%u1E8F +%u1E90 +%u1E91 +%u1E92 +%u1E93 +%u1E94 +%u1E95 +%u1E96 +%u1E97 +%u1E98 +%u1E99 +%u1E9A +%u1E9B +%u1E9C +%u1E9D +%u1E9E +%u1E9F +%u1EA0 +%u1EA1 +%u1EA2 +%u1EA3 +%u1EA4 +%u1EA5 +%u1EA6 +%u1EA7 +%u1EA8 +%u1EA9 +%u1EAA +%u1EAB +%u1EAC +%u1EAD +%u1EAE +%u1EAF +%u1EB0 +%u1EB1 +%u1EB2 +%u1EB3 +%u1EB4 +%u1EB5 +%u1EB6 +%u1EB7 +%u1EB8 +%u1EB9 +%u1EBA +%u1EBB +%u1EBC +%u1EBD +%u1EBE +%u1EBF +%u1EC0 +%u1EC1 +%u1EC2 +%u1EC3 +%u1EC4 +%u1EC5 +%u1EC6 +%u1EC7 +%u1EC8 +%u1EC9 +%u1ECA +%u1ECB +%u1ECC +%u1ECD +%u1ECE +%u1ECF +%u1ED0 +%u1ED1 +%u1ED2 +%u1ED3 +%u1ED4 +%u1ED5 +%u1ED6 +%u1ED7 +%u1ED8 +%u1ED9 +%u1EDA +%u1EDB +%u1EDC +%u1EDD +%u1EDE +%u1EDF +%u1EE0 +%u1EE1 +%u1EE2 +%u1EE3 +%u1EE4 +%u1EE5 +%u1EE6 +%u1EE7 +%u1EE8 +%u1EE9 +%u1EEA +%u1EEB +%u1EEC +%u1EED +%u1EEE +%u1EEF +%u1EF0 +%u1EF1 +%u1EF2 +%u1EF3 +%u1EF4 +%u1EF5 +%u1EF6 +%u1EF7 +%u1EF8 +%u1EF9 +%u1EFA +%u1EFB +%u1EFC +%u1EFD +%u1EFE +%u1EFF +%u1F00 +%u1F01 +%u1F02 +%u1F03 +%u1F04 +%u1F05 +%u1F06 +%u1F07 +%u1F08 +%u1F09 +%u1F0A +%u1F0B +%u1F0C +%u1F0D +%u1F0E +%u1F0F +%u1F10 +%u1F11 +%u1F12 +%u1F13 +%u1F14 +%u1F15 +%u1F16 +%u1F17 +%u1F18 +%u1F19 +%u1F1A +%u1F1B +%u1F1C +%u1F1D +%u1F1E +%u1F1F +%u1F20 +%u1F21 +%u1F22 +%u1F23 +%u1F24 +%u1F25 +%u1F26 +%u1F27 +%u1F28 +%u1F29 +%u1F2A +%u1F2B +%u1F2C +%u1F2D +%u1F2E +%u1F2F +%u1F30 +%u1F31 +%u1F32 +%u1F33 +%u1F34 +%u1F35 +%u1F36 +%u1F37 +%u1F38 +%u1F39 +%u1F3A +%u1F3B +%u1F3C +%u1F3D +%u1F3E +%u1F3F +%u1F40 +%u1F41 +%u1F42 +%u1F43 +%u1F44 +%u1F45 +%u1F46 +%u1F47 +%u1F48 +%u1F49 +%u1F4A +%u1F4B +%u1F4C +%u1F4D +%u1F4E +%u1F4F +%u1F50 +%u1F51 +%u1F52 +%u1F53 +%u1F54 +%u1F55 +%u1F56 +%u1F57 +%u1F58 +%u1F59 +%u1F5A +%u1F5B +%u1F5C +%u1F5D +%u1F5E +%u1F5F +%u1F60 +%u1F61 +%u1F62 +%u1F63 +%u1F64 +%u1F65 +%u1F66 +%u1F67 +%u1F68 +%u1F69 +%u1F6A +%u1F6B +%u1F6C +%u1F6D +%u1F6E +%u1F6F +%u1F70 +%u1F71 +%u1F72 +%u1F73 +%u1F74 +%u1F75 +%u1F76 +%u1F77 +%u1F78 +%u1F79 +%u1F7A +%u1F7B +%u1F7C +%u1F7D +%u1F7E +%u1F7F +%u1F80 +%u1F81 +%u1F82 +%u1F83 +%u1F84 +%u1F85 +%u1F86 +%u1F87 +%u1F88 +%u1F89 +%u1F8A +%u1F8B +%u1F8C +%u1F8D +%u1F8E +%u1F8F +%u1F90 +%u1F91 +%u1F92 +%u1F93 +%u1F94 +%u1F95 +%u1F96 +%u1F97 +%u1F98 +%u1F99 +%u1F9A +%u1F9B +%u1F9C +%u1F9D +%u1F9E +%u1F9F +%u1FA0 +%u1FA1 +%u1FA2 +%u1FA3 +%u1FA4 +%u1FA5 +%u1FA6 +%u1FA7 +%u1FA8 +%u1FA9 +%u1FAA +%u1FAB +%u1FAC +%u1FAD +%u1FAE +%u1FAF +%u1FB0 +%u1FB1 +%u1FB2 +%u1FB3 +%u1FB4 +%u1FB5 +%u1FB6 +%u1FB7 +%u1FB8 +%u1FB9 +%u1FBA +%u1FBB +%u1FBC +%u1FBD +%u1FBE +%u1FBF +%u1FC0 +%u1FC1 +%u1FC2 +%u1FC3 +%u1FC4 +%u1FC5 +%u1FC6 +%u1FC7 +%u1FC8 +%u1FC9 +%u1FCA +%u1FCB +%u1FCC +%u1FCD +%u1FCE +%u1FCF +%u1FD0 +%u1FD1 +%u1FD2 +%u1FD3 +%u1FD4 +%u1FD5 +%u1FD6 +%u1FD7 +%u1FD8 +%u1FD9 +%u1FDA +%u1FDB +%u1FDC +%u1FDD +%u1FDE +%u1FDF +%u1FE0 +%u1FE1 +%u1FE2 +%u1FE3 +%u1FE4 +%u1FE5 +%u1FE6 +%u1FE7 +%u1FE8 +%u1FE9 +%u1FEA +%u1FEB +%u1FEC +%u1FED +%u1FEE +%u1FEF +%u1FF0 +%u1FF1 +%u1FF2 +%u1FF3 +%u1FF4 +%u1FF5 +%u1FF6 +%u1FF7 +%u1FF8 +%u1FF9 +%u1FFA +%u1FFB +%u1FFC +%u1FFD +%u1FFE +%u1FFF diff -r 81a8b5860d3f -r 8fbfd4ce1ce5 nashorn/test/script/basic/JDK-8016542.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/nashorn/test/script/basic/JDK-8016542.js Tue Jun 18 13:25:24 2013 +0530 @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * JDK-8016542: String.prototype.replace called with function argument should not replace $ patterns + * + * @test + * @run + */ + +print("abc".replace("a", "$&")); +print("abc".replace("b", "$&")); +print("abc".replace("c", "$&")); + +print("abc".replace("a", function(){return "$&"})); +print("abc".replace("b", function(){return "$&"})); +print("abc".replace("c", function(){return "$&"})); diff -r 81a8b5860d3f -r 8fbfd4ce1ce5 nashorn/test/script/basic/JDK-8016542.js.EXPECTED --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/nashorn/test/script/basic/JDK-8016542.js.EXPECTED Tue Jun 18 13:25:24 2013 +0530 @@ -0,0 +1,6 @@ +abc +abc +abc +$&bc +a$&c +ab$& diff -r 81a8b5860d3f -r 8fbfd4ce1ce5 nashorn/test/script/basic/JDK-8016618.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/nashorn/test/script/basic/JDK-8016618.js Tue Jun 18 13:25:24 2013 +0530 @@ -0,0 +1,132 @@ +/* + * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * JDK-8016618: script mirror object access should be improved + * + * @test + * @option -scripting + * @option -strict + * @run + */ + +var global = loadWithNewGlobal({ + name: "code", + script: <