haikuwebkit/LayoutTests/js/Object-assign-expected.txt

59 lines
5.1 KiB
Plaintext
Raw Permalink Normal View History

Test to ensure correct behavior of Object.assign
On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
PASS Object.assign.length is 2
PASS Object.assign.name is 'assign'
check TypeError on null/undefined
[JSC] Add @throwXXXError bytecode intrinsic https://bugs.webkit.org/show_bug.cgi?id=162995 Reviewed by Saam Barati. Source/JavaScriptCore: Builtin JS code need to check arguments carefully since it is somewhat standard library for JS. So bunch of `throw new @TypeError("...")` exists while usual code does not have so many. However the above code bloats 32 instructions per site, enlarges the size of bytecodes of builtins, and prevent us from inlining. We should have a way to reduce this size. Fortunately, we already have such a opcode: op_throw_static_error. In this patch, 1. We extends op_throw_static_error to throw arbitrary errors. Previously, only TypeError and ReferenceError are allowed. We can embed ErrorType enum in op_throw_static_error to throw any types of errors. 2. We introduce several new bytecode intrinsics, `@throwTypeError("...")`, `@throwRangeError("...")`, and `@throwOutOfMemoryError()`. And use it inside builtin JS instead of `throw new @TypeError("...")` thingy. 3. DFG Node for throw_static_error is incorrectly named as "ThrowReferenceError". This patch renames it to "ThrowStaticError". * builtins/ArrayConstructor.js: * builtins/ArrayIteratorPrototype.js: (next): * builtins/ArrayPrototype.js: (values): (keys): (entries): (reduce): (reduceRight): (every): (forEach): (filter): (map): (some): (fill): (find): (findIndex): (includes): (sort): (concatSlowPath): (copyWithin): * builtins/DatePrototype.js: (toLocaleString.toDateTimeOptionsAnyAll): (toLocaleString): (toLocaleDateString.toDateTimeOptionsDateDate): (toLocaleDateString): (toLocaleTimeString.toDateTimeOptionsTimeTime): (toLocaleTimeString): * builtins/FunctionPrototype.js: (bind): * builtins/GeneratorPrototype.js: (globalPrivate.generatorResume): * builtins/GlobalOperations.js: (globalPrivate.speciesConstructor): * builtins/MapPrototype.js: (forEach): * builtins/ModuleLoaderPrototype.js: (provide): * builtins/ObjectConstructor.js: (values): (entries): (assign): * builtins/PromiseConstructor.js: (race): (reject): (resolve): * builtins/PromiseOperations.js: (globalPrivate.newPromiseCapability.executor): (globalPrivate.newPromiseCapability): (globalPrivate.initializePromise): * builtins/PromisePrototype.js: * builtins/ReflectObject.js: (apply): (deleteProperty): (has): * builtins/RegExpPrototype.js: (globalPrivate.regExpExec): (match): (replace): (search): (split): (intrinsic.RegExpTestIntrinsic.test): * builtins/SetPrototype.js: (forEach): * builtins/StringConstructor.js: (raw): * builtins/StringIteratorPrototype.js: (next): * builtins/StringPrototype.js: (match): (globalPrivate.repeatSlowPath): (repeat): (padStart): (padEnd): (intrinsic.StringPrototypeReplaceIntrinsic.replace): (localeCompare): (search): (split): * builtins/TypedArrayConstructor.js: (of): (from): * builtins/TypedArrayPrototype.js: (globalPrivate.typedArraySpeciesConstructor): (every): (find): (findIndex): (forEach): (some): (subarray): (reduce): (reduceRight): (map): (filter): * bytecode/BytecodeIntrinsicRegistry.h: * bytecode/CodeBlock.cpp: (JSC::CodeBlock::dumpBytecode): * bytecompiler/BytecodeGenerator.cpp: (JSC::BytecodeGenerator::emitThrowStaticError): (JSC::BytecodeGenerator::emitThrowReferenceError): (JSC::BytecodeGenerator::emitThrowTypeError): (JSC::BytecodeGenerator::emitThrowRangeError): (JSC::BytecodeGenerator::emitThrowOutOfMemoryError): (JSC::BytecodeGenerator::emitReadOnlyExceptionIfNeeded): * bytecompiler/BytecodeGenerator.h: * bytecompiler/NodesCodegen.cpp: (JSC::BytecodeIntrinsicNode::emit_intrinsic_throwTypeError): (JSC::BytecodeIntrinsicNode::emit_intrinsic_throwRangeError): (JSC::BytecodeIntrinsicNode::emit_intrinsic_throwOutOfMemoryError): * dfg/DFGAbstractInterpreterInlines.h: (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects): * dfg/DFGByteCodeParser.cpp: (JSC::DFG::ByteCodeParser::parseBlock): * dfg/DFGClobberize.h: (JSC::DFG::clobberize): * dfg/DFGDoesGC.cpp: (JSC::DFG::doesGC): * dfg/DFGFixupPhase.cpp: (JSC::DFG::FixupPhase::fixupNode): * dfg/DFGNodeType.h: * dfg/DFGPredictionPropagationPhase.cpp: * dfg/DFGSafeToExecute.h: (JSC::DFG::safeToExecute): * dfg/DFGSpeculativeJIT32_64.cpp: (JSC::DFG::SpeculativeJIT::compile): * dfg/DFGSpeculativeJIT64.cpp: (JSC::DFG::SpeculativeJIT::compile): * ftl/FTLCapabilities.cpp: (JSC::FTL::canCompile): * ftl/FTLLowerDFGToB3.cpp: (JSC::FTL::DFG::LowerDFGToB3::compileNode): * jit/JITOpcodes.cpp: (JSC::JIT::emit_op_throw_static_error): * jit/JITOpcodes32_64.cpp: (JSC::JIT::emit_op_throw_static_error): Deleted. * jit/JITOperations.cpp: * jit/JITOperations.h: * llint/LLIntSlowPaths.cpp: (JSC::LLInt::LLINT_SLOW_PATH_DECL): Deleted. * llint/LLIntSlowPaths.h: * llint/LowLevelInterpreter.asm: * runtime/CommonSlowPaths.cpp: (JSC::SLOW_PATH_DECL): * runtime/CommonSlowPaths.h: * runtime/Error.cpp: (JSC::createError): (WTF::printInternal): * runtime/Error.h: LayoutTests: * js/Object-assign-expected.txt: Canonical link: https://commits.webkit.org/180906@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@206853 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2016-10-06 07:44:23 +00:00
PASS Object.assign() threw exception TypeError: Object.assign requires that input parameter not be null or undefined.
PASS Object.assign(undefined) threw exception TypeError: Object.assign requires that input parameter not be null or undefined.
PASS Object.assign(null) threw exception TypeError: Object.assign requires that input parameter not be null or undefined.
PASS var target = {}, ret = Object.assign(target); target === ret is true
multiple sources are copied
PASS var target = {}, ret = Object.assign(target, {a: 1}); target === ret is true
PASS var target = {}; Object.assign(target, {a: 1}); target.a === 1 is true
PASS var target = {}; Object.assign(target, {a: 1}, {b: 2}); target.b === 2 is true
PASS var target = {}; Object.assign(target, {a: 1}, {a: 2}); target.a === 2 is true
only enumerable properties are copied
PASS var target = {}, source = {}; Object.defineProperty(source, 'a', { value: 1, enumerable: false }); Object.assign(target, {a: 2}, source); target.a === 2 is true
PASS var target = {}, source = {}; Object.defineProperty(source, 'a', { value: 1, enumerable: false }); Object.assign(target, source); 'a' in target && target.a === 1 is false
PASS var target = {}, source = {}; Object.defineProperty(source, 'a', { value: 1, enumerable: false }); Object.assign(target, source, {a: 2}); target.a === 2 is true
PASS var target = {}, source = {}; Object.defineProperty(source, 'a', { value: 1, enumerable: true }); Object.assign(target, source, {a: 2}); target.a === 2 is true
PASS var target = {}, source = {}; Object.defineProperty(source, 'a', { value: 1, enumerable: true }); Object.assign(target, {a: 2}, source); target.a === 1 is true
only own properties are copied
PASS var target = {}, C = function C() {}; C.prototype.a = 1; Object.assign(target, {a: 2}, new C()); target.a === 2 is true
Symbols are copied
PASS var target = {}, source = {}, sym = Symbol('sym'); source[sym] = sym; Object.assign(target, source); target[sym] === sym is true
PASS var target = {}, source1 = {}, source2 = {}, sym = Symbol('sym'); source1[sym] = 1; source2[sym] = 2; Object.assign(target, source1, source2); target[sym] === 2 is true
non-enumerable Symbols are not copied
PASS var target = {}, source = {}, sym = Symbol('sym'); Object.defineProperty(source, sym, { value: 1, enumerable: false }); Object.assign(target, source); target[sym] is undefined.
only own Symbols are copied
PASS var target = {}, source1 = {}, sym = Symbol('sym'), C = function C() {}; C.prototype[sym] = 1; source1[sym] = 2; Object.assign(target, source1, new C()); target[sym] === 2 is true
primitives as sources
PASS var target = {}; Object.assign(target, true); Object.getOwnPropertyNames(target).length === 0 is true
PASS var target = {}; Object.assign(target, false); Object.getOwnPropertyNames(target).length === 0 is true
PASS var target = {}; Object.assign(target, NaN); Object.getOwnPropertyNames(target).length === 0 is true
PASS var target = {}; Object.assign(target, Infinity); Object.getOwnPropertyNames(target).length === 0 is true
PASS var target = {}; Object.assign(target, -Infinity); Object.getOwnPropertyNames(target).length === 0 is true
PASS var target = {}; Object.assign(target, 0); Object.getOwnPropertyNames(target).length === 0 is true
PASS var target = {}; Object.assign(target, -0); Object.getOwnPropertyNames(target).length === 0 is true
PASS var target = {}; Object.assign(target, Symbol('sym')); Object.getOwnPropertyNames(target).length === 0 is true
PASS var target = {}; Object.assign(target, ''); Object.getOwnPropertyNames(target).length === 0 is true
PASS var target = {}; Object.assign(target, 'abc'); Object.getOwnPropertyNames(target).length === 'abc'.length is true
primitives as target
PASS var target = Object.assign(true, { a: 1 }); isBoxedPrimitive(target, Boolean, true) && target.a === 1 is true
PASS var target = Object.assign(false, { a: 1 }); isBoxedPrimitive(target, Boolean, false) && target.a === 1 is true
PASS var target = Object.assign(NaN, { a: 1 }); isBoxedPrimitive(target, Number, NaN) && target.a === 1 is true
PASS var target = Object.assign(Infinity, { a: 1 }); isBoxedPrimitive(target, Number, Infinity) && target.a === 1 is true
PASS var target = Object.assign(-Infinity, { a: 1 }); isBoxedPrimitive(target, Number, -Infinity) && target.a === 1 is true
PASS var target = Object.assign(0, { a: 1 }); isBoxedPrimitive(target, Number, 0) && target.a === 1 is true
PASS var target = Object.assign(-0, { a: 1 }); isBoxedPrimitive(target, Number, -0) && target.a === 1 is true
PASS var sym = Symbol('sym'); var target = Object.assign(sym, { a: 1 }); isBoxedPrimitive(target, Symbol, sym) && target.a === 1 is true
PASS var target = Object.assign('', { a: 1 }); isBoxedPrimitive(target, String, '') && target.a === 1 is true
PASS var target = Object.assign('abc', { a: 1 }); isBoxedPrimitive(target, String, 'abc') && target.a === 1 is true
PASS successfullyParsed is true
TEST COMPLETE