Bug 1531788 - Use Value::type in js::GetProperty. r=jandem

Differential Revision: https://phabricator.services.mozilla.com/D21708

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Tom Schuster 2019-03-04 09:28:00 +00:00
parent af69d17ff0
commit 87e0946053

View File

@ -4422,18 +4422,32 @@ bool js::GetProperty(JSContext* cx, HandleValue v, HandlePropertyName name,
// create a wrapper object.
if (v.isPrimitive() && !v.isNullOrUndefined()) {
NativeObject* proto;
if (v.isNumber()) {
proto = GlobalObject::getOrCreateNumberPrototype(cx, cx->global());
} else if (v.isString()) {
proto = GlobalObject::getOrCreateStringPrototype(cx, cx->global());
} else if (v.isBoolean()) {
proto = GlobalObject::getOrCreateBooleanPrototype(cx, cx->global());
} else if (v.isBigInt()) {
proto = GlobalObject::getOrCreateBigIntPrototype(cx, cx->global());
} else {
MOZ_ASSERT(v.isSymbol());
proto = GlobalObject::getOrCreateSymbolPrototype(cx, cx->global());
switch (v.type()) {
case ValueType::Double:
case ValueType::Int32:
proto = GlobalObject::getOrCreateNumberPrototype(cx, cx->global());
break;
case ValueType::Boolean:
proto = GlobalObject::getOrCreateBooleanPrototype(cx, cx->global());
break;
case ValueType::String:
proto = GlobalObject::getOrCreateStringPrototype(cx, cx->global());
break;
case ValueType::Symbol:
proto = GlobalObject::getOrCreateSymbolPrototype(cx, cx->global());
break;
case ValueType::BigInt:
proto = GlobalObject::getOrCreateBigIntPrototype(cx, cx->global());
break;
case ValueType::Undefined:
case ValueType::Null:
case ValueType::Magic:
case ValueType::PrivateGCThing:
case ValueType::Object:
MOZ_CRASH("unexpected type");
}
if (!proto) {
return false;
}