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, 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"), QName::new(Namespace::public(), "length"),
Method::from_builtin(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"), QName::new(Namespace::public(), "length"),
Method::from_builtin(set_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"), QName::new(Namespace::as3_namespace(), "concat"),
Method::from_builtin(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"), QName::new(Namespace::as3_namespace(), "join"),
Method::from_builtin(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"), QName::new(Namespace::public(), "toString"),
Method::from_builtin(to_string), 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"), QName::new(Namespace::public(), "toLocaleString"),
Method::from_builtin(to_locale_string), 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"), QName::new(Namespace::public(), "valueOf"),
Method::from_builtin(value_of), 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"), QName::new(Namespace::as3_namespace(), "forEach"),
Method::from_builtin(for_each), 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"), QName::new(Namespace::as3_namespace(), "map"),
Method::from_builtin(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"), QName::new(Namespace::as3_namespace(), "filter"),
Method::from_builtin(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"), QName::new(Namespace::as3_namespace(), "every"),
Method::from_builtin(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"), QName::new(Namespace::as3_namespace(), "some"),
Method::from_builtin(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"), QName::new(Namespace::as3_namespace(), "indexOf"),
Method::from_builtin(index_of), 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"), QName::new(Namespace::as3_namespace(), "lastIndexOf"),
Method::from_builtin(last_index_of), 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"), QName::new(Namespace::as3_namespace(), "pop"),
Method::from_builtin(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"), QName::new(Namespace::as3_namespace(), "push"),
Method::from_builtin(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"), QName::new(Namespace::as3_namespace(), "reverse"),
Method::from_builtin(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"), QName::new(Namespace::as3_namespace(), "shift"),
Method::from_builtin(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"), QName::new(Namespace::as3_namespace(), "unshift"),
Method::from_builtin(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"), QName::new(Namespace::as3_namespace(), "slice"),
Method::from_builtin(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"), QName::new(Namespace::as3_namespace(), "splice"),
Method::from_builtin(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"), QName::new(Namespace::as3_namespace(), "sort"),
Method::from_builtin(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"), QName::new(Namespace::as3_namespace(), "sortOn"),
Method::from_builtin(sort_on), 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"), QName::new(Namespace::public(), "CASEINSENSITIVE"),
Multiname::from(QName::new(Namespace::public(), "uint")), Multiname::from(QName::new(Namespace::public(), "uint")),
Some(SortOptions::CASE_INSENSITIVE.bits().into()), 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"), QName::new(Namespace::public(), "DESCENDING"),
Multiname::from(QName::new(Namespace::public(), "uint")), Multiname::from(QName::new(Namespace::public(), "uint")),
Some(SortOptions::DESCENDING.bits().into()), 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"), QName::new(Namespace::public(), "NUMERIC"),
Multiname::from(QName::new(Namespace::public(), "uint")), Multiname::from(QName::new(Namespace::public(), "uint")),
Some(SortOptions::NUMERIC.bits().into()), 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"), QName::new(Namespace::public(), "RETURNINDEXEDARRAY"),
Multiname::from(QName::new(Namespace::public(), "uint")), Multiname::from(QName::new(Namespace::public(), "uint")),
Some(SortOptions::RETURN_INDEXED_ARRAY.bits().into()), 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"), QName::new(Namespace::public(), "UNIQUESORT"),
Multiname::from(QName::new(Namespace::public(), "uint")), Multiname::from(QName::new(Namespace::public(), "uint")),
Some(SortOptions::UNIQUE_SORT.bits().into()), 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, 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"), QName::new(Namespace::public(), "writeByte"),
Method::from_builtin(write_byte), 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"), QName::new(Namespace::public(), "writeBytes"),
Method::from_builtin(write_bytes), 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"), QName::new(Namespace::public(), "readBytes"),
Method::from_builtin(read_bytes), 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"), QName::new(Namespace::public(), "toString"),
Method::from_builtin(to_string), 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"), QName::new(Namespace::public(), "readShort"),
Method::from_builtin(read_short), 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"), QName::new(Namespace::public(), "writeShort"),
Method::from_builtin(write_short), 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"), QName::new(Namespace::public(), "readUnsignedShort"),
Method::from_builtin(read_unsigned_short), 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"), QName::new(Namespace::public(), "readDouble"),
Method::from_builtin(read_double), 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"), QName::new(Namespace::public(), "writeDouble"),
Method::from_builtin(write_double), 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"), QName::new(Namespace::public(), "readFloat"),
Method::from_builtin(read_float), 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"), QName::new(Namespace::public(), "writeFloat"),
Method::from_builtin(write_float), 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"), QName::new(Namespace::public(), "readInt"),
Method::from_builtin(read_int), 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"), QName::new(Namespace::public(), "writeInt"),
Method::from_builtin(write_int), 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"), QName::new(Namespace::public(), "readUnsignedInt"),
Method::from_builtin(read_unsigned_int), 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"), QName::new(Namespace::public(), "writeUnsignedInt"),
Method::from_builtin(write_unsigned_int), 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"), QName::new(Namespace::public(), "readBoolean"),
Method::from_builtin(read_boolean), 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"), QName::new(Namespace::public(), "writeBoolean"),
Method::from_builtin(write_boolean), 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"), QName::new(Namespace::public(), "readByte"),
Method::from_builtin(read_byte), 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"), QName::new(Namespace::public(), "readUnsignedByte"),
Method::from_builtin(read_unsigned_byte), 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"), QName::new(Namespace::public(), "writeUTF"),
Method::from_builtin(write_utf), 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"), QName::new(Namespace::public(), "readUTF"),
Method::from_builtin(read_utf), 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"), QName::new(Namespace::public(), "clear"),
Method::from_builtin(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"), QName::new(Namespace::public(), "compress"),
Method::from_builtin(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"), QName::new(Namespace::public(), "uncompress"),
Method::from_builtin(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"), QName::new(Namespace::public(), "inflate"),
Method::from_builtin(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"), QName::new(Namespace::public(), "deflate"),
Method::from_builtin(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"), QName::new(Namespace::public(), "writeMultiByte"),
Method::from_builtin(write_multibyte), 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"), QName::new(Namespace::public(), "readMultiByte"),
Method::from_builtin(read_multibyte), 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"), QName::new(Namespace::public(), "writeUTFBytes"),
Method::from_builtin(write_utf_bytes), 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"), QName::new(Namespace::public(), "readUTFBytes"),
Method::from_builtin(read_utf_bytes), 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"), QName::new(Namespace::public(), "bytesAvailable"),
Method::from_builtin(bytes_available), 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"), QName::new(Namespace::public(), "length"),
Method::from_builtin(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"), QName::new(Namespace::public(), "length"),
Method::from_builtin(set_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"), QName::new(Namespace::public(), "position"),
Method::from_builtin(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"), QName::new(Namespace::public(), "position"),
Method::from_builtin(set_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"), QName::new(Namespace::public(), "endian"),
Method::from_builtin(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"), QName::new(Namespace::public(), "endian"),
Method::from_builtin(set_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, mc,
); );
class let mut write = class.write(mc);
.write(mc)
.set_attributes(ClassAttributes::FINAL | ClassAttributes::SEALED); write.set_attributes(ClassAttributes::FINAL | ClassAttributes::SEALED);
class.write(mc).define_class_trait(Trait::from_const( write.define_class_trait(Trait::from_const(
QName::new(Namespace::public(), "LITTLE_ENDIAN"), QName::new(Namespace::public(), "LITTLE_ENDIAN"),
QName::new(Namespace::public(), "String").into(), QName::new(Namespace::public(), "String").into(),
Some("littleEndian".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(), "BIG_ENDIAN"),
QName::new(Namespace::public(), "String").into(), QName::new(Namespace::public(), "String").into(),
Some("bigEndian".into()), Some("bigEndian".into()),