avm2: Don't repeatedly call class.write(mc)

This commit is contained in:
Adrian Wielgosik 2021-05-04 19:50:29 +02:00 committed by Mike Welsh
parent b82391726f
commit 8312243f42
3 changed files with 75 additions and 71 deletions

View File

@ -1228,145 +1228,147 @@ pub fn create_class<'gc>(mc: MutationContext<'gc, '_>) -> GcCell<'gc, Class<'gc>
mc,
);
class.write(mc).define_instance_trait(Trait::from_getter(
let mut write = class.write(mc);
write.define_instance_trait(Trait::from_getter(
QName::new(Namespace::public(), "length"),
Method::from_builtin(length),
));
class.write(mc).define_instance_trait(Trait::from_setter(
write.define_instance_trait(Trait::from_setter(
QName::new(Namespace::public(), "length"),
Method::from_builtin(set_length),
));
class.write(mc).define_instance_trait(Trait::from_method(
write.define_instance_trait(Trait::from_method(
QName::new(Namespace::as3_namespace(), "concat"),
Method::from_builtin(concat),
));
class.write(mc).define_instance_trait(Trait::from_method(
write.define_instance_trait(Trait::from_method(
QName::new(Namespace::as3_namespace(), "join"),
Method::from_builtin(join),
));
class.write(mc).define_instance_trait(Trait::from_method(
write.define_instance_trait(Trait::from_method(
QName::new(Namespace::public(), "toString"),
Method::from_builtin(to_string),
));
class.write(mc).define_instance_trait(Trait::from_method(
write.define_instance_trait(Trait::from_method(
QName::new(Namespace::public(), "toLocaleString"),
Method::from_builtin(to_locale_string),
));
class.write(mc).define_instance_trait(Trait::from_method(
write.define_instance_trait(Trait::from_method(
QName::new(Namespace::public(), "valueOf"),
Method::from_builtin(value_of),
));
class.write(mc).define_instance_trait(Trait::from_method(
write.define_instance_trait(Trait::from_method(
QName::new(Namespace::as3_namespace(), "forEach"),
Method::from_builtin(for_each),
));
class.write(mc).define_instance_trait(Trait::from_method(
write.define_instance_trait(Trait::from_method(
QName::new(Namespace::as3_namespace(), "map"),
Method::from_builtin(map),
));
class.write(mc).define_instance_trait(Trait::from_method(
write.define_instance_trait(Trait::from_method(
QName::new(Namespace::as3_namespace(), "filter"),
Method::from_builtin(filter),
));
class.write(mc).define_instance_trait(Trait::from_method(
write.define_instance_trait(Trait::from_method(
QName::new(Namespace::as3_namespace(), "every"),
Method::from_builtin(every),
));
class.write(mc).define_instance_trait(Trait::from_method(
write.define_instance_trait(Trait::from_method(
QName::new(Namespace::as3_namespace(), "some"),
Method::from_builtin(some),
));
class.write(mc).define_instance_trait(Trait::from_method(
write.define_instance_trait(Trait::from_method(
QName::new(Namespace::as3_namespace(), "indexOf"),
Method::from_builtin(index_of),
));
class.write(mc).define_instance_trait(Trait::from_method(
write.define_instance_trait(Trait::from_method(
QName::new(Namespace::as3_namespace(), "lastIndexOf"),
Method::from_builtin(last_index_of),
));
class.write(mc).define_instance_trait(Trait::from_method(
write.define_instance_trait(Trait::from_method(
QName::new(Namespace::as3_namespace(), "pop"),
Method::from_builtin(pop),
));
class.write(mc).define_instance_trait(Trait::from_method(
write.define_instance_trait(Trait::from_method(
QName::new(Namespace::as3_namespace(), "push"),
Method::from_builtin(push),
));
class.write(mc).define_instance_trait(Trait::from_method(
write.define_instance_trait(Trait::from_method(
QName::new(Namespace::as3_namespace(), "reverse"),
Method::from_builtin(reverse),
));
class.write(mc).define_instance_trait(Trait::from_method(
write.define_instance_trait(Trait::from_method(
QName::new(Namespace::as3_namespace(), "shift"),
Method::from_builtin(shift),
));
class.write(mc).define_instance_trait(Trait::from_method(
write.define_instance_trait(Trait::from_method(
QName::new(Namespace::as3_namespace(), "unshift"),
Method::from_builtin(unshift),
));
class.write(mc).define_instance_trait(Trait::from_method(
write.define_instance_trait(Trait::from_method(
QName::new(Namespace::as3_namespace(), "slice"),
Method::from_builtin(slice),
));
class.write(mc).define_instance_trait(Trait::from_method(
write.define_instance_trait(Trait::from_method(
QName::new(Namespace::as3_namespace(), "splice"),
Method::from_builtin(splice),
));
class.write(mc).define_instance_trait(Trait::from_method(
write.define_instance_trait(Trait::from_method(
QName::new(Namespace::as3_namespace(), "sort"),
Method::from_builtin(sort),
));
class.write(mc).define_instance_trait(Trait::from_method(
write.define_instance_trait(Trait::from_method(
QName::new(Namespace::as3_namespace(), "sortOn"),
Method::from_builtin(sort_on),
));
class.write(mc).define_class_trait(Trait::from_const(
write.define_class_trait(Trait::from_const(
QName::new(Namespace::public(), "CASEINSENSITIVE"),
Multiname::from(QName::new(Namespace::public(), "uint")),
Some(SortOptions::CASE_INSENSITIVE.bits().into()),
));
class.write(mc).define_class_trait(Trait::from_const(
write.define_class_trait(Trait::from_const(
QName::new(Namespace::public(), "DESCENDING"),
Multiname::from(QName::new(Namespace::public(), "uint")),
Some(SortOptions::DESCENDING.bits().into()),
));
class.write(mc).define_class_trait(Trait::from_const(
write.define_class_trait(Trait::from_const(
QName::new(Namespace::public(), "NUMERIC"),
Multiname::from(QName::new(Namespace::public(), "uint")),
Some(SortOptions::NUMERIC.bits().into()),
));
class.write(mc).define_class_trait(Trait::from_const(
write.define_class_trait(Trait::from_const(
QName::new(Namespace::public(), "RETURNINDEXEDARRAY"),
Multiname::from(QName::new(Namespace::public(), "uint")),
Some(SortOptions::RETURN_INDEXED_ARRAY.bits().into()),
));
class.write(mc).define_class_trait(Trait::from_const(
write.define_class_trait(Trait::from_const(
QName::new(Namespace::public(), "UNIQUESORT"),
Multiname::from(QName::new(Namespace::public(), "uint")),
Some(SortOptions::UNIQUE_SORT.bits().into()),

View File

@ -740,188 +740,190 @@ pub fn create_class<'gc>(mc: MutationContext<'gc, '_>) -> GcCell<'gc, Class<'gc>
mc,
);
class.write(mc).set_attributes(ClassAttributes::SEALED);
let mut write = class.write(mc);
class.write(mc).define_instance_trait(Trait::from_method(
write.set_attributes(ClassAttributes::SEALED);
write.define_instance_trait(Trait::from_method(
QName::new(Namespace::public(), "writeByte"),
Method::from_builtin(write_byte),
));
class.write(mc).define_instance_trait(Trait::from_method(
write.define_instance_trait(Trait::from_method(
QName::new(Namespace::public(), "writeBytes"),
Method::from_builtin(write_bytes),
));
class.write(mc).define_instance_trait(Trait::from_method(
write.define_instance_trait(Trait::from_method(
QName::new(Namespace::public(), "readBytes"),
Method::from_builtin(read_bytes),
));
class.write(mc).define_instance_trait(Trait::from_method(
write.define_instance_trait(Trait::from_method(
QName::new(Namespace::public(), "toString"),
Method::from_builtin(to_string),
));
class.write(mc).define_instance_trait(Trait::from_method(
write.define_instance_trait(Trait::from_method(
QName::new(Namespace::public(), "readShort"),
Method::from_builtin(read_short),
));
class.write(mc).define_instance_trait(Trait::from_method(
write.define_instance_trait(Trait::from_method(
QName::new(Namespace::public(), "writeShort"),
Method::from_builtin(write_short),
));
class.write(mc).define_instance_trait(Trait::from_method(
write.define_instance_trait(Trait::from_method(
QName::new(Namespace::public(), "readUnsignedShort"),
Method::from_builtin(read_unsigned_short),
));
class.write(mc).define_instance_trait(Trait::from_method(
write.define_instance_trait(Trait::from_method(
QName::new(Namespace::public(), "readDouble"),
Method::from_builtin(read_double),
));
class.write(mc).define_instance_trait(Trait::from_method(
write.define_instance_trait(Trait::from_method(
QName::new(Namespace::public(), "writeDouble"),
Method::from_builtin(write_double),
));
class.write(mc).define_instance_trait(Trait::from_method(
write.define_instance_trait(Trait::from_method(
QName::new(Namespace::public(), "readFloat"),
Method::from_builtin(read_float),
));
class.write(mc).define_instance_trait(Trait::from_method(
write.define_instance_trait(Trait::from_method(
QName::new(Namespace::public(), "writeFloat"),
Method::from_builtin(write_float),
));
class.write(mc).define_instance_trait(Trait::from_method(
write.define_instance_trait(Trait::from_method(
QName::new(Namespace::public(), "readInt"),
Method::from_builtin(read_int),
));
class.write(mc).define_instance_trait(Trait::from_method(
write.define_instance_trait(Trait::from_method(
QName::new(Namespace::public(), "writeInt"),
Method::from_builtin(write_int),
));
class.write(mc).define_instance_trait(Trait::from_method(
write.define_instance_trait(Trait::from_method(
QName::new(Namespace::public(), "readUnsignedInt"),
Method::from_builtin(read_unsigned_int),
));
class.write(mc).define_instance_trait(Trait::from_method(
write.define_instance_trait(Trait::from_method(
QName::new(Namespace::public(), "writeUnsignedInt"),
Method::from_builtin(write_unsigned_int),
));
class.write(mc).define_instance_trait(Trait::from_method(
write.define_instance_trait(Trait::from_method(
QName::new(Namespace::public(), "readBoolean"),
Method::from_builtin(read_boolean),
));
class.write(mc).define_instance_trait(Trait::from_method(
write.define_instance_trait(Trait::from_method(
QName::new(Namespace::public(), "writeBoolean"),
Method::from_builtin(write_boolean),
));
class.write(mc).define_instance_trait(Trait::from_method(
write.define_instance_trait(Trait::from_method(
QName::new(Namespace::public(), "readByte"),
Method::from_builtin(read_byte),
));
class.write(mc).define_instance_trait(Trait::from_method(
write.define_instance_trait(Trait::from_method(
QName::new(Namespace::public(), "readUnsignedByte"),
Method::from_builtin(read_unsigned_byte),
));
class.write(mc).define_instance_trait(Trait::from_method(
write.define_instance_trait(Trait::from_method(
QName::new(Namespace::public(), "writeUTF"),
Method::from_builtin(write_utf),
));
class.write(mc).define_instance_trait(Trait::from_method(
write.define_instance_trait(Trait::from_method(
QName::new(Namespace::public(), "readUTF"),
Method::from_builtin(read_utf),
));
class.write(mc).define_instance_trait(Trait::from_method(
write.define_instance_trait(Trait::from_method(
QName::new(Namespace::public(), "clear"),
Method::from_builtin(clear),
));
class.write(mc).define_instance_trait(Trait::from_method(
write.define_instance_trait(Trait::from_method(
QName::new(Namespace::public(), "compress"),
Method::from_builtin(compress),
));
class.write(mc).define_instance_trait(Trait::from_method(
write.define_instance_trait(Trait::from_method(
QName::new(Namespace::public(), "uncompress"),
Method::from_builtin(uncompress),
));
class.write(mc).define_instance_trait(Trait::from_method(
write.define_instance_trait(Trait::from_method(
QName::new(Namespace::public(), "inflate"),
Method::from_builtin(inflate),
));
class.write(mc).define_instance_trait(Trait::from_method(
write.define_instance_trait(Trait::from_method(
QName::new(Namespace::public(), "deflate"),
Method::from_builtin(deflate),
));
class.write(mc).define_instance_trait(Trait::from_method(
write.define_instance_trait(Trait::from_method(
QName::new(Namespace::public(), "writeMultiByte"),
Method::from_builtin(write_multibyte),
));
class.write(mc).define_instance_trait(Trait::from_method(
write.define_instance_trait(Trait::from_method(
QName::new(Namespace::public(), "readMultiByte"),
Method::from_builtin(read_multibyte),
));
class.write(mc).define_instance_trait(Trait::from_method(
write.define_instance_trait(Trait::from_method(
QName::new(Namespace::public(), "writeUTFBytes"),
Method::from_builtin(write_utf_bytes),
));
class.write(mc).define_instance_trait(Trait::from_method(
write.define_instance_trait(Trait::from_method(
QName::new(Namespace::public(), "readUTFBytes"),
Method::from_builtin(read_utf_bytes),
));
class.write(mc).define_instance_trait(Trait::from_getter(
write.define_instance_trait(Trait::from_getter(
QName::new(Namespace::public(), "bytesAvailable"),
Method::from_builtin(bytes_available),
));
class.write(mc).define_instance_trait(Trait::from_getter(
write.define_instance_trait(Trait::from_getter(
QName::new(Namespace::public(), "length"),
Method::from_builtin(length),
));
class.write(mc).define_instance_trait(Trait::from_setter(
write.define_instance_trait(Trait::from_setter(
QName::new(Namespace::public(), "length"),
Method::from_builtin(set_length),
));
class.write(mc).define_instance_trait(Trait::from_getter(
write.define_instance_trait(Trait::from_getter(
QName::new(Namespace::public(), "position"),
Method::from_builtin(position),
));
class.write(mc).define_instance_trait(Trait::from_setter(
write.define_instance_trait(Trait::from_setter(
QName::new(Namespace::public(), "position"),
Method::from_builtin(set_position),
));
class.write(mc).define_instance_trait(Trait::from_getter(
write.define_instance_trait(Trait::from_getter(
QName::new(Namespace::public(), "endian"),
Method::from_builtin(endian),
));
class.write(mc).define_instance_trait(Trait::from_setter(
write.define_instance_trait(Trait::from_setter(
QName::new(Namespace::public(), "endian"),
Method::from_builtin(set_endian),
));

View File

@ -35,16 +35,16 @@ pub fn create_class<'gc>(mc: MutationContext<'gc, '_>) -> GcCell<'gc, Class<'gc>
mc,
);
class
.write(mc)
.set_attributes(ClassAttributes::FINAL | ClassAttributes::SEALED);
class.write(mc).define_class_trait(Trait::from_const(
let mut write = class.write(mc);
write.set_attributes(ClassAttributes::FINAL | ClassAttributes::SEALED);
write.define_class_trait(Trait::from_const(
QName::new(Namespace::public(), "LITTLE_ENDIAN"),
QName::new(Namespace::public(), "String").into(),
Some("littleEndian".into()),
));
class.write(mc).define_class_trait(Trait::from_const(
write.define_class_trait(Trait::from_const(
QName::new(Namespace::public(), "BIG_ENDIAN"),
QName::new(Namespace::public(), "String").into(),
Some("bigEndian".into()),