diff --git a/CLOBBER b/CLOBBER index d2b7b9f7a637..763d9991e788 100644 --- a/CLOBBER +++ b/CLOBBER @@ -22,4 +22,4 @@ # changes to stick? As of bug 928195, this shouldn't be necessary! Please # don't change CLOBBER for WebIDL changes any more. -Bug 973238 part 8 needs clobber due to self-hosted code (bug 1019955). +Bug 973238 part 9 needs clobber due to self-hosted code (bug 1019955). diff --git a/js/src/builtin/SIMD.cpp b/js/src/builtin/SIMD.cpp index 63a403e1698e..d460659acb31 100644 --- a/js/src/builtin/SIMD.cpp +++ b/js/src/builtin/SIMD.cpp @@ -51,7 +51,7 @@ static bool GetX4Lane(JSContext *cx, unsigned argc, Value *vp) { TypedObject &typedObj = args.thisv().toObject().as(); TypeDescr &descr = typedObj.typeDescr(); - if (descr.kind() != TypeDescr::X4 || descr.as().type() != Type32x4::type) { + if (descr.kind() != type::X4 || descr.as().type() != Type32x4::type) { JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, JSMSG_INCOMPATIBLE_PROTO, X4TypeDescr::class_.name, laneNames[lane], InformalValueTypeName(args.thisv())); @@ -94,7 +94,7 @@ static bool SignMask(JSContext *cx, unsigned argc, Value *vp) { TypedObject &typedObj = args.thisv().toObject().as(); TypeDescr &descr = typedObj.typeDescr(); - if (descr.kind() != TypeDescr::X4 || descr.as().type() != Type32x4::type) { + if (descr.kind() != type::X4 || descr.as().type() != Type32x4::type) { JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, JSMSG_INCOMPATIBLE_PROTO, X4TypeDescr::class_.name, "signMask", InformalValueTypeName(args.thisv())); @@ -216,7 +216,7 @@ CreateX4Class(JSContext *cx, if (!x4) return nullptr; - x4->initReservedSlot(JS_DESCR_SLOT_KIND, Int32Value(TypeDescr::X4)); + x4->initReservedSlot(JS_DESCR_SLOT_KIND, Int32Value(type::X4)); x4->initReservedSlot(JS_DESCR_SLOT_STRING_REPR, StringValue(stringRepr)); x4->initReservedSlot(JS_DESCR_SLOT_ALIGNMENT, Int32Value(X4TypeDescr::size(type))); x4->initReservedSlot(JS_DESCR_SLOT_SIZE, Int32Value(X4TypeDescr::alignment(type))); @@ -399,7 +399,7 @@ IsVectorObject(HandleValue v) return false; TypeDescr &typeRepr = obj.as().typeDescr(); - if (typeRepr.kind() != TypeDescr::X4) + if (typeRepr.kind() != type::X4) return false; return typeRepr.as().type() == V::type; diff --git a/js/src/builtin/TypedObject.cpp b/js/src/builtin/TypedObject.cpp index 556626d0f211..b7b3a41dec3f 100644 --- a/js/src/builtin/TypedObject.cpp +++ b/js/src/builtin/TypedObject.cpp @@ -1015,7 +1015,7 @@ StructMetaTypeDescr::create(JSContext *cx, if (!descr) return nullptr; - descr->initReservedSlot(JS_DESCR_SLOT_KIND, Int32Value(TypeDescr::Struct)); + descr->initReservedSlot(JS_DESCR_SLOT_KIND, Int32Value(type::Struct)); descr->initReservedSlot(JS_DESCR_SLOT_STRING_REPR, StringValue(stringRepr)); descr->initReservedSlot(JS_DESCR_SLOT_ALIGNMENT, Int32Value(alignment)); descr->initReservedSlot(JS_DESCR_SLOT_SIZE, Int32Value(totalSize.value())); @@ -1120,13 +1120,13 @@ StructMetaTypeDescr::construct(JSContext *cx, unsigned int argc, Value *vp) } size_t -StructTypeDescr::fieldCount() +StructTypeDescr::fieldCount() const { return getReservedSlot(JS_DESCR_SLOT_STRUCT_FIELD_NAMES).toObject().getDenseInitializedLength(); } bool -StructTypeDescr::fieldIndex(jsid id, size_t *out) +StructTypeDescr::fieldIndex(jsid id, size_t *out) const { JSObject &fieldNames = getReservedSlot(JS_DESCR_SLOT_STRUCT_FIELD_NAMES).toObject(); size_t l = fieldNames.getDenseInitializedLength(); @@ -1141,14 +1141,14 @@ StructTypeDescr::fieldIndex(jsid id, size_t *out) } JSAtom & -StructTypeDescr::fieldName(size_t index) +StructTypeDescr::fieldName(size_t index) const { JSObject &fieldNames = getReservedSlot(JS_DESCR_SLOT_STRUCT_FIELD_NAMES).toObject(); return fieldNames.getDenseElement(index).toString()->asAtom(); } int32_t -StructTypeDescr::fieldOffset(size_t index) +StructTypeDescr::fieldOffset(size_t index) const { JSObject &fieldOffsets = getReservedSlot(JS_DESCR_SLOT_STRUCT_FIELD_OFFSETS).toObject(); @@ -1157,7 +1157,7 @@ StructTypeDescr::fieldOffset(size_t index) } SizedTypeDescr& -StructTypeDescr::fieldDescr(size_t index) +StructTypeDescr::fieldDescr(size_t index) const { JSObject &fieldDescrs = getReservedSlot(JS_DESCR_SLOT_STRUCT_FIELD_TYPES).toObject(); @@ -1513,16 +1513,16 @@ static int32_t TypedObjLengthFromType(TypeDescr &descr) { switch (descr.kind()) { - case TypeDescr::Scalar: - case TypeDescr::Reference: - case TypeDescr::Struct: - case TypeDescr::X4: + case type::Scalar: + case type::Reference: + case type::Struct: + case type::X4: return 0; - case TypeDescr::SizedArray: + case type::SizedArray: return descr.as().length(); - case TypeDescr::UnsizedArray: + case type::UnsizedArray: MOZ_ASSUME_UNREACHABLE("TypedObjLengthFromType() invoked on unsized type"); } MOZ_ASSUME_UNREACHABLE("Invalid kind"); @@ -1562,11 +1562,11 @@ TypedObject::createZeroed(JSContext *cx, // Allocate and initialize the memory for this instance. // Also initialize the JS_TYPEDOBJ_SLOT_LENGTH slot. switch (descr->kind()) { - case TypeDescr::Scalar: - case TypeDescr::Reference: - case TypeDescr::Struct: - case TypeDescr::X4: - case TypeDescr::SizedArray: + case type::Scalar: + case type::Reference: + case type::Struct: + case type::X4: + case type::SizedArray: { size_t totalSize = descr->as().size(); Rooted buffer(cx); @@ -1578,7 +1578,7 @@ TypedObject::createZeroed(JSContext *cx, return obj; } - case TypeDescr::UnsizedArray: + case type::UnsizedArray: { Rooted elementTypeRepr(cx); elementTypeRepr = &descr->as().elementType(); @@ -1639,15 +1639,15 @@ TypedObject::obj_trace(JSTracer *trace, JSObject *object) return; switch (descr.kind()) { - case TypeDescr::Scalar: - case TypeDescr::Reference: - case TypeDescr::Struct: - case TypeDescr::SizedArray: - case TypeDescr::X4: + case type::Scalar: + case type::Reference: + case type::Struct: + case type::SizedArray: + case type::X4: descr.as().traceInstances(trace, mem, 1); break; - case TypeDescr::UnsizedArray: + case type::UnsizedArray: descr.as().elementType().traceInstances(trace, mem, typedObj.length()); break; } @@ -1662,13 +1662,13 @@ TypedObject::obj_lookupGeneric(JSContext *cx, HandleObject obj, HandleId id, Rooted descr(cx, &obj->as().typeDescr()); switch (descr->kind()) { - case TypeDescr::Scalar: - case TypeDescr::Reference: - case TypeDescr::X4: + case type::Scalar: + case type::Reference: + case type::X4: break; - case TypeDescr::SizedArray: - case TypeDescr::UnsizedArray: + case type::SizedArray: + case type::UnsizedArray: { uint32_t index; if (js_IdIsIndex(id, &index)) @@ -1682,7 +1682,7 @@ TypedObject::obj_lookupGeneric(JSContext *cx, HandleObject obj, HandleId id, break; } - case TypeDescr::Struct: + case type::Struct: { StructTypeDescr &structDescr = descr->as(); size_t index; @@ -1788,15 +1788,15 @@ TypedObject::obj_getGeneric(JSContext *cx, HandleObject obj, HandleObject receiv // Handle everything else here: switch (typedObj->typeDescr().kind()) { - case TypeDescr::Scalar: - case TypeDescr::Reference: + case type::Scalar: + case type::Reference: break; - case TypeDescr::X4: + case type::X4: break; - case TypeDescr::SizedArray: - case TypeDescr::UnsizedArray: + case type::SizedArray: + case type::UnsizedArray: if (JSID_IS_ATOM(id, cx->names().length)) { if (typedObj->owner().isNeutered() || !typedObj->typedMem()) { // unattached JS_ReportErrorNumber( @@ -1810,7 +1810,7 @@ TypedObject::obj_getGeneric(JSContext *cx, HandleObject obj, HandleObject receiv } break; - case TypeDescr::Struct: { + case type::Struct: { Rooted descr(cx, &typedObj->typeDescr().as()); size_t fieldIndex; @@ -1849,17 +1849,17 @@ TypedObject::obj_getElement(JSContext *cx, HandleObject obj, HandleObject receiv Rooted descr(cx, &typedObj->typeDescr()); switch (descr->kind()) { - case TypeDescr::Scalar: - case TypeDescr::Reference: - case TypeDescr::X4: - case TypeDescr::Struct: + case type::Scalar: + case type::Reference: + case type::X4: + case type::Struct: break; - case TypeDescr::SizedArray: + case type::SizedArray: return obj_getArrayElement(cx, typedObj, descr, index, vp); - case TypeDescr::UnsizedArray: + case type::UnsizedArray: return obj_getArrayElement(cx, typedObj, descr, index, vp); } @@ -1905,15 +1905,15 @@ TypedObject::obj_setGeneric(JSContext *cx, HandleObject obj, HandleId id, return obj_setElement(cx, obj, index, vp, strict); switch (typedObj->typeDescr().kind()) { - case ScalarTypeDescr::Scalar: - case TypeDescr::Reference: + case type::Scalar: + case type::Reference: break; - case ScalarTypeDescr::X4: + case type::X4: break; - case ScalarTypeDescr::SizedArray: - case ScalarTypeDescr::UnsizedArray: + case type::SizedArray: + case type::UnsizedArray: if (JSID_IS_ATOM(id, cx->names().length)) { JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, JSMSG_CANT_REDEFINE_ARRAY_LENGTH); @@ -1921,7 +1921,7 @@ TypedObject::obj_setGeneric(JSContext *cx, HandleObject obj, HandleId id, } break; - case ScalarTypeDescr::Struct: { + case type::Struct: { Rooted descr(cx, &typedObj->typeDescr().as()); size_t fieldIndex; @@ -1955,16 +1955,16 @@ TypedObject::obj_setElement(JSContext *cx, HandleObject obj, uint32_t index, Rooted descr(cx, &typedObj->typeDescr()); switch (descr->kind()) { - case TypeDescr::Scalar: - case TypeDescr::Reference: - case TypeDescr::X4: - case TypeDescr::Struct: + case type::Scalar: + case type::Reference: + case type::X4: + case type::Struct: break; - case TypeDescr::SizedArray: + case type::SizedArray: return obj_setArrayElement(cx, typedObj, descr, index, vp); - case TypeDescr::UnsizedArray: + case type::UnsizedArray: return obj_setArrayElement(cx, typedObj, descr, index, vp); } @@ -2000,15 +2000,15 @@ TypedObject::obj_getGenericAttributes(JSContext *cx, HandleObject obj, uint32_t index; Rooted typedObj(cx, &obj->as()); switch (typedObj->typeDescr().kind()) { - case TypeDescr::Scalar: - case TypeDescr::Reference: + case type::Scalar: + case type::Reference: break; - case TypeDescr::X4: + case type::X4: break; - case TypeDescr::SizedArray: - case TypeDescr::UnsizedArray: + case type::SizedArray: + case type::UnsizedArray: if (js_IdIsIndex(id, &index)) { *attrsp = JSPROP_ENUMERATE | JSPROP_PERMANENT; return true; @@ -2019,7 +2019,7 @@ TypedObject::obj_getGenericAttributes(JSContext *cx, HandleObject obj, } break; - case TypeDescr::Struct: + case type::Struct: size_t index; if (typedObj->typeDescr().as().fieldIndex(id, &index)) { *attrsp = JSPROP_ENUMERATE | JSPROP_PERMANENT; @@ -2043,16 +2043,16 @@ IsOwnId(JSContext *cx, HandleObject obj, HandleId id) uint32_t index; Rooted typedObj(cx, &obj->as()); switch (typedObj->typeDescr().kind()) { - case TypeDescr::Scalar: - case TypeDescr::Reference: - case TypeDescr::X4: + case type::Scalar: + case type::Reference: + case type::X4: return false; - case TypeDescr::SizedArray: - case TypeDescr::UnsizedArray: + case type::SizedArray: + case type::UnsizedArray: return js_IdIsIndex(id, &index) || JSID_IS_ATOM(id, cx->names().length); - case TypeDescr::Struct: + case type::Struct: size_t index; if (typedObj->typeDescr().as().fieldIndex(id, &index)) return true; @@ -2102,9 +2102,9 @@ TypedObject::obj_enumerate(JSContext *cx, HandleObject obj, JSIterateOp enum_op, Rooted typedObj(cx, &obj->as()); Rooted descr(cx, &typedObj->typeDescr()); switch (descr->kind()) { - case TypeDescr::Scalar: - case TypeDescr::Reference: - case TypeDescr::X4: + case type::Scalar: + case type::Reference: + case type::X4: switch (enum_op) { case JSENUMERATE_INIT_ALL: case JSENUMERATE_INIT: @@ -2118,8 +2118,8 @@ TypedObject::obj_enumerate(JSContext *cx, HandleObject obj, JSIterateOp enum_op, } break; - case TypeDescr::SizedArray: - case TypeDescr::UnsizedArray: + case type::SizedArray: + case type::UnsizedArray: switch (enum_op) { case JSENUMERATE_INIT_ALL: case JSENUMERATE_INIT: @@ -2146,7 +2146,7 @@ TypedObject::obj_enumerate(JSContext *cx, HandleObject obj, JSIterateOp enum_op, } break; - case TypeDescr::Struct: + case type::Struct: switch (enum_op) { case JSENUMERATE_INIT_ALL: case JSENUMERATE_INIT: @@ -2262,16 +2262,16 @@ static int32_t LengthForType(TypeDescr &descr) { switch (descr.kind()) { - case TypeDescr::Scalar: - case TypeDescr::Reference: - case TypeDescr::Struct: - case TypeDescr::X4: + case type::Scalar: + case type::Reference: + case type::Struct: + case type::X4: return 0; - case TypeDescr::SizedArray: + case type::SizedArray: return descr.as().length(); - case TypeDescr::UnsizedArray: + case type::UnsizedArray: return 0; } @@ -3080,15 +3080,15 @@ visitReferences(SizedTypeDescr &descr, return; switch (descr.kind()) { - case TypeDescr::Scalar: - case TypeDescr::X4: + case type::Scalar: + case type::X4: return; - case TypeDescr::Reference: + case type::Reference: visitor.visitReference(descr.as(), mem); return; - case TypeDescr::SizedArray: + case type::SizedArray: { SizedArrayTypeDescr &arrayDescr = descr.as(); SizedTypeDescr &elementDescr = arrayDescr.elementType(); @@ -3099,12 +3099,12 @@ visitReferences(SizedTypeDescr &descr, return; } - case TypeDescr::UnsizedArray: + case type::UnsizedArray: { MOZ_ASSUME_UNREACHABLE("Only Sized Type representations"); } - case TypeDescr::Struct: + case type::Struct: { StructTypeDescr &structDescr = descr.as(); for (size_t i = 0; i < structDescr.fieldCount(); i++) { diff --git a/js/src/builtin/TypedObject.h b/js/src/builtin/TypedObject.h index e7f76810e5ef..e02db2527d29 100644 --- a/js/src/builtin/TypedObject.h +++ b/js/src/builtin/TypedObject.h @@ -126,6 +126,33 @@ static T ConvertScalar(double d) } } +namespace type { + +enum Kind { + Scalar = JS_TYPEREPR_SCALAR_KIND, + Reference = JS_TYPEREPR_REFERENCE_KIND, + X4 = JS_TYPEREPR_X4_KIND, + Struct = JS_TYPEREPR_STRUCT_KIND, + SizedArray = JS_TYPEREPR_SIZED_ARRAY_KIND, + UnsizedArray = JS_TYPEREPR_UNSIZED_ARRAY_KIND, +}; + +static inline bool isSized(type::Kind kind) { + return kind > JS_TYPEREPR_MAX_UNSIZED_KIND; +} + +} + +/////////////////////////////////////////////////////////////////////////// +// Typed Prototypes + +class SizedTypeDescr; +class SimpleTypeDescr; +class ComplexTypeDescr; +class X4TypeDescr; +class StructTypeDescr; +class SizedTypedProto; + /* * The prototype for a typed object. Currently, carries a link to the * type descriptor. Eventually will carry most of the type information @@ -154,25 +181,21 @@ class TypeDescr : public JSObject // fun and rejoicing. static const Class class_; - enum Kind { - Scalar = JS_TYPEREPR_SCALAR_KIND, - Reference = JS_TYPEREPR_REFERENCE_KIND, - X4 = JS_TYPEREPR_X4_KIND, - Struct = JS_TYPEREPR_STRUCT_KIND, - SizedArray = JS_TYPEREPR_SIZED_ARRAY_KIND, - UnsizedArray = JS_TYPEREPR_UNSIZED_ARRAY_KIND, - }; - - static bool isSized(Kind kind) { + public: + static bool isSized(type::Kind kind) { return kind > JS_TYPEREPR_MAX_UNSIZED_KIND; } + TypedProto &typedProto() const { + return getReservedSlot(JS_DESCR_SLOT_TYPROTO).toObject().as(); + } + JSAtom &stringRepr() const { return getReservedSlot(JS_DESCR_SLOT_STRING_REPR).toString()->asAtom(); } - TypeDescr::Kind kind() const { - return (TypeDescr::Kind) getReservedSlot(JS_DESCR_SLOT_KIND).toInt32(); + type::Kind kind() const { + return (type::Kind) getReservedSlot(JS_DESCR_SLOT_KIND).toInt32(); } bool opaque() const { @@ -183,7 +206,7 @@ class TypeDescr : public JSObject return !opaque(); } - int32_t alignment() { + int32_t alignment() const { return getReservedSlot(JS_DESCR_SLOT_ALIGNMENT).toInt32(); } }; @@ -193,7 +216,7 @@ typedef Handle HandleTypeDescr; class SizedTypeDescr : public TypeDescr { public: - int32_t size() { + int32_t size() const { return getReservedSlot(JS_DESCR_SLOT_SIZE).toInt32(); } @@ -233,7 +256,7 @@ class ScalarTypeDescr : public SimpleTypeDescr }; static const int32_t TYPE_MAX = TYPE_UINT8_CLAMPED + 1; - static const TypeDescr::Kind Kind = TypeDescr::Scalar; + static const type::Kind Kind = type::Scalar; static const bool Opaque = false; static int32_t size(Type t); static int32_t alignment(Type t); @@ -282,7 +305,7 @@ class ReferenceTypeDescr : public SimpleTypeDescr static const int32_t TYPE_MAX = TYPE_STRING + 1; static const char *typeName(Type type); - static const TypeDescr::Kind Kind = TypeDescr::Reference; + static const type::Kind Kind = type::Reference; static const bool Opaque = true; static const Class class_; static int32_t size(Type t); @@ -328,7 +351,7 @@ class X4TypeDescr : public ComplexTypeDescr TYPE_FLOAT32 = JS_X4TYPEREPR_FLOAT32, }; - static const TypeDescr::Kind Kind = TypeDescr::X4; + static const type::Kind Kind = type::X4; static const bool Opaque = false; static const Class class_; static int32_t size(Type t); @@ -407,13 +430,13 @@ class UnsizedArrayTypeDescr : public TypeDescr { public: static const Class class_; - static const TypeDescr::Kind Kind = TypeDescr::UnsizedArray; + static const type::Kind Kind = type::UnsizedArray; // This is the sized method on unsized array type objects. It // produces a sized variant. static bool dimension(JSContext *cx, unsigned int argc, jsval *vp); - SizedTypeDescr &elementType() { + SizedTypeDescr &elementType() const { return getReservedSlot(JS_DESCR_SLOT_ARRAY_ELEM_TYPE).toObject().as(); } }; @@ -425,13 +448,13 @@ class SizedArrayTypeDescr : public ComplexTypeDescr { public: static const Class class_; - static const TypeDescr::Kind Kind = TypeDescr::SizedArray; + static const type::Kind Kind = type::SizedArray; - SizedTypeDescr &elementType() { + SizedTypeDescr &elementType() const { return getReservedSlot(JS_DESCR_SLOT_ARRAY_ELEM_TYPE).toObject().as(); } - int32_t length() { + int32_t length() const { return getReservedSlot(JS_DESCR_SLOT_SIZED_ARRAY_LENGTH).toInt32(); } }; @@ -469,20 +492,20 @@ class StructTypeDescr : public ComplexTypeDescr static const Class class_; // Returns the number of fields defined in this struct. - size_t fieldCount(); + size_t fieldCount() const; // Set `*out` to the index of the field named `id` and returns true, // or return false if no such field exists. - bool fieldIndex(jsid id, size_t *out); + bool fieldIndex(jsid id, size_t *out) const; // Return the name of the field at index `index`. - JSAtom &fieldName(size_t index); + JSAtom &fieldName(size_t index) const; // Return the type descr of the field at index `index`. - SizedTypeDescr &fieldDescr(size_t index); + SizedTypeDescr &fieldDescr(size_t index) const; // Return the offset of the field at index `index`. - int32_t fieldOffset(size_t index); + int32_t fieldOffset(size_t index) const; }; typedef Handle HandleStructTypeDescr; @@ -670,14 +693,14 @@ class TypedObject : public ArrayBufferViewObject int32_t size() const { switch (typeDescr().kind()) { - case TypeDescr::Scalar: - case TypeDescr::X4: - case TypeDescr::Reference: - case TypeDescr::Struct: - case TypeDescr::SizedArray: + case type::Scalar: + case type::X4: + case type::Reference: + case type::Struct: + case type::SizedArray: return typeDescr().as().size(); - case TypeDescr::UnsizedArray: { + case type::UnsizedArray: { SizedTypeDescr &elementType = typeDescr().as().elementType(); return elementType.size() * length(); } diff --git a/js/src/jit/IonBuilder.cpp b/js/src/jit/IonBuilder.cpp index b4327b9b5423..fe45c436bba7 100644 --- a/js/src/jit/IonBuilder.cpp +++ b/js/src/jit/IonBuilder.cpp @@ -6770,19 +6770,19 @@ IonBuilder::getElemTryTypedObject(bool *emitted, MDefinition *obj, MDefinition * return true; switch (elemDescrs.kind()) { - case TypeDescr::X4: + case type::X4: // FIXME (bug 894105): load into a MIRType_float32x4 etc return true; - case TypeDescr::Struct: - case TypeDescr::SizedArray: + case type::Struct: + case type::SizedArray: return getElemTryComplexElemOfTypedObject(emitted, obj, index, objDescrs, elemDescrs, elemSize); - case TypeDescr::Scalar: + case type::Scalar: return getElemTryScalarElemOfTypedObject(emitted, obj, index, @@ -6790,10 +6790,10 @@ IonBuilder::getElemTryTypedObject(bool *emitted, MDefinition *obj, MDefinition * elemDescrs, elemSize); - case TypeDescr::Reference: + case type::Reference: return true; - case TypeDescr::UnsizedArray: + case type::UnsizedArray: MOZ_ASSUME_UNREACHABLE("Unsized arrays cannot be element types"); } @@ -7683,18 +7683,18 @@ IonBuilder::setElemTryTypedObject(bool *emitted, MDefinition *obj, return true; switch (elemTypeDescrs.kind()) { - case TypeDescr::X4: + case type::X4: // FIXME (bug 894105): store a MIRType_float32x4 etc return true; - case TypeDescr::Reference: - case TypeDescr::Struct: - case TypeDescr::SizedArray: - case TypeDescr::UnsizedArray: + case type::Reference: + case type::Struct: + case type::SizedArray: + case type::UnsizedArray: // For now, only optimize storing scalars. return true; - case TypeDescr::Scalar: + case type::Scalar: return setElemTryScalarElemOfTypedObject(emitted, obj, index, @@ -8708,15 +8708,15 @@ IonBuilder::getPropTryTypedObject(bool *emitted, MDefinition *obj, PropertyName return true; switch (fieldDescrs.kind()) { - case TypeDescr::Reference: + case type::Reference: return true; - case TypeDescr::X4: + case type::X4: // FIXME (bug 894104): load into a MIRType_float32x4 etc return true; - case TypeDescr::Struct: - case TypeDescr::SizedArray: + case type::Struct: + case type::SizedArray: return getPropTryComplexPropOfTypedObject(emitted, obj, fieldOffset, @@ -8724,14 +8724,14 @@ IonBuilder::getPropTryTypedObject(bool *emitted, MDefinition *obj, PropertyName fieldIndex, resultTypes); - case TypeDescr::Scalar: + case type::Scalar: return getPropTryScalarPropOfTypedObject(emitted, obj, fieldOffset, fieldDescrs, resultTypes); - case TypeDescr::UnsizedArray: + case type::UnsizedArray: MOZ_ASSUME_UNREACHABLE("Field of unsized array type"); } @@ -9362,18 +9362,18 @@ IonBuilder::setPropTryTypedObject(bool *emitted, MDefinition *obj, return true; switch (fieldDescrs.kind()) { - case TypeDescr::X4: + case type::X4: // FIXME (bug 894104): store into a MIRType_float32x4 etc return true; - case TypeDescr::Reference: - case TypeDescr::Struct: - case TypeDescr::SizedArray: - case TypeDescr::UnsizedArray: + case type::Reference: + case type::Struct: + case type::SizedArray: + case type::UnsizedArray: // For now, only optimize storing scalars. return true; - case TypeDescr::Scalar: + case type::Scalar: return setPropTryScalarPropOfTypedObject(emitted, obj, fieldOffset, value, fieldDescrs); } @@ -10402,7 +10402,7 @@ IonBuilder::lookupTypedObjectField(MDefinition *typedObj, return false; // Must be accessing a struct. - if (!objDescrs.allOfKind(TypeDescr::Struct)) + if (!objDescrs.allOfKind(type::Struct)) return true; // Determine the type/offset of the field `name`, if any. diff --git a/js/src/jit/MCallOptimize.cpp b/js/src/jit/MCallOptimize.cpp index 42f0328c4e5b..4f5f0631ac53 100644 --- a/js/src/jit/MCallOptimize.cpp +++ b/js/src/jit/MCallOptimize.cpp @@ -1460,7 +1460,7 @@ IonBuilder::elementAccessIsTypedObjectArrayOfScalarType(MDefinition* obj, MDefin if (!objDescrs.arrayElementType(*this, &elemDescrs)) return false; - if (elemDescrs.empty() || elemDescrs.kind() != TypeDescr::Scalar) + if (elemDescrs.empty() || elemDescrs.kind() != type::Scalar) return false; JS_ASSERT(TypeDescr::isSized(elemDescrs.kind())); diff --git a/js/src/jit/TypeDescrSet.cpp b/js/src/jit/TypeDescrSet.cpp index 9c787f16c8b1..5335a627a5b9 100644 --- a/js/src/jit/TypeDescrSet.cpp +++ b/js/src/jit/TypeDescrSet.cpp @@ -176,14 +176,14 @@ TypeDescrSet::allOfArrayKind() return false; switch (kind()) { - case TypeDescr::SizedArray: - case TypeDescr::UnsizedArray: + case type::SizedArray: + case type::UnsizedArray: return true; - case TypeDescr::X4: - case TypeDescr::Reference: - case TypeDescr::Scalar: - case TypeDescr::Struct: + case type::X4: + case type::Reference: + case type::Scalar: + case type::Struct: return false; } @@ -191,7 +191,7 @@ TypeDescrSet::allOfArrayKind() } bool -TypeDescrSet::allOfKind(TypeDescr::Kind aKind) +TypeDescrSet::allOfKind(type::Kind aKind) { if (empty()) return false; @@ -226,7 +226,7 @@ TypeDescrSet::knownPrototype() const return &get(0)->as().instancePrototype(); } -TypeDescr::Kind +type::Kind TypeDescrSet::kind() { JS_ASSERT(!empty()); @@ -237,7 +237,7 @@ template bool TypeDescrSet::genericType(typename T::Type *out) { - JS_ASSERT(allOfKind(TypeDescr::Scalar)); + JS_ASSERT(allOfKind(type::Scalar)); typename T::Type type = get(0)->as().type(); for (size_t i = 1; i < length(); i++) { @@ -271,10 +271,10 @@ bool TypeDescrSet::hasKnownArrayLength(int32_t *l) { switch (kind()) { - case TypeDescr::UnsizedArray: + case type::UnsizedArray: return false; - case TypeDescr::SizedArray: + case type::SizedArray: { const size_t result = get(0)->as().length(); for (size_t i = 1; i < length(); i++) { @@ -297,12 +297,12 @@ TypeDescrSet::arrayElementType(IonBuilder &builder, TypeDescrSet *out) TypeDescrSetBuilder elementTypes; for (size_t i = 0; i < length(); i++) { switch (kind()) { - case TypeDescr::UnsizedArray: + case type::UnsizedArray: if (!elementTypes.insert(&get(i)->as().elementType())) return false; break; - case TypeDescr::SizedArray: + case type::SizedArray: if (!elementTypes.insert(&get(i)->as().elementType())) return false; break; @@ -321,7 +321,7 @@ TypeDescrSet::fieldNamed(IonBuilder &builder, TypeDescrSet *out, size_t *index) { - JS_ASSERT(kind() == TypeDescr::Struct); + JS_ASSERT(kind() == type::Struct); // Initialize `*offset` and `*out` for the case where incompatible // or absent fields are found. diff --git a/js/src/jit/TypeDescrSet.h b/js/src/jit/TypeDescrSet.h index 8ef0a7079d84..1ca256a446e6 100644 --- a/js/src/jit/TypeDescrSet.h +++ b/js/src/jit/TypeDescrSet.h @@ -86,7 +86,7 @@ class TypeDescrSet { // Query the set bool empty() const; - bool allOfKind(TypeDescr::Kind kind); + bool allOfKind(type::Kind kind); // Returns true only when non-empty and `kind()` is // `TypeDescr::Array` @@ -108,7 +108,7 @@ class TypeDescrSet { ////////////////////////////////////////////////////////////////////// // The following operations are only valid on a non-empty set: - TypeDescr::Kind kind(); + type::Kind kind(); // Returns the prototype that a typed object whose type is within // this TypeDescrSet would have. Returns `null` if this cannot be @@ -118,7 +118,7 @@ class TypeDescrSet { ////////////////////////////////////////////////////////////////////// // Scalar operations // - // Only valid when `kind() == TypeDescr::Scalar` + // Only valid when `kind() == type::Scalar` // If all type descrs in this set have a single type, returns true // and sets *out. Else returns false. @@ -127,7 +127,7 @@ class TypeDescrSet { ////////////////////////////////////////////////////////////////////// // Reference operations // - // Only valid when `kind() == TypeDescr::Reference` + // Only valid when `kind() == type::Reference` // If all type descrs in this set have a single type, returns true // and sets *out. Else returns false. @@ -136,7 +136,7 @@ class TypeDescrSet { ////////////////////////////////////////////////////////////////////// // Reference operations // - // Only valid when `kind() == TypeDescr::X4` + // Only valid when `kind() == type::X4` // If all type descrs in this set have a single type, returns true // and sets *out. Else returns false. @@ -145,7 +145,7 @@ class TypeDescrSet { ////////////////////////////////////////////////////////////////////// // SizedArray operations // - // Only valid when `kind() == TypeDescr::SizedArray` + // Only valid when `kind() == type::SizedArray` // Determines whether all arrays in this set have the same, // statically known, array length and return that length @@ -160,7 +160,7 @@ class TypeDescrSet { ////////////////////////////////////////////////////////////////////// // Struct operations // - // Only valid when `kind() == TypeDescr::Struct` + // Only valid when `kind() == type::Struct` // Searches the type in the set for a field named `id`. All // possible types must agree on the offset of the field within the