avm2+tests: Implement Object.length and Object.init; add test for Object.length
This commit is contained in:
parent
942842c47a
commit
f5528aab75
|
@ -99,6 +99,7 @@ pub struct Avm2<'gc> {
|
||||||
system_classes: Option<SystemClasses<'gc>>,
|
system_classes: Option<SystemClasses<'gc>>,
|
||||||
|
|
||||||
pub public_namespace: Namespace<'gc>,
|
pub public_namespace: Namespace<'gc>,
|
||||||
|
pub internal_namespace: Namespace<'gc>,
|
||||||
pub as3_namespace: Namespace<'gc>,
|
pub as3_namespace: Namespace<'gc>,
|
||||||
pub vector_public_namespace: Namespace<'gc>,
|
pub vector_public_namespace: Namespace<'gc>,
|
||||||
pub vector_internal_namespace: Namespace<'gc>,
|
pub vector_internal_namespace: Namespace<'gc>,
|
||||||
|
@ -157,6 +158,7 @@ impl<'gc> Avm2<'gc> {
|
||||||
system_classes: None,
|
system_classes: None,
|
||||||
|
|
||||||
public_namespace: Namespace::package("", context),
|
public_namespace: Namespace::package("", context),
|
||||||
|
internal_namespace: Namespace::internal("", context),
|
||||||
as3_namespace: Namespace::package("http://adobe.com/AS3/2006/builtin", context),
|
as3_namespace: Namespace::package("http://adobe.com/AS3/2006/builtin", context),
|
||||||
vector_public_namespace: Namespace::package("__AS3__.vec", context),
|
vector_public_namespace: Namespace::package("__AS3__.vec", context),
|
||||||
vector_internal_namespace: Namespace::internal("__AS3__.vec", context),
|
vector_internal_namespace: Namespace::internal("__AS3__.vec", context),
|
||||||
|
|
|
@ -271,6 +271,15 @@ pub fn set_property_is_enumerable<'gc>(
|
||||||
Ok(Value::Undefined)
|
Ok(Value::Undefined)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Undocumented `Object.init`, which is a no-op
|
||||||
|
pub fn init<'gc>(
|
||||||
|
_activation: &mut Activation<'_, 'gc>,
|
||||||
|
_this: Option<Object<'gc>>,
|
||||||
|
_args: &[Value<'gc>],
|
||||||
|
) -> Result<Value<'gc>, Error<'gc>> {
|
||||||
|
Ok(Value::Undefined)
|
||||||
|
}
|
||||||
|
|
||||||
/// Construct `Object`'s class.
|
/// Construct `Object`'s class.
|
||||||
pub fn create_class<'gc>(activation: &mut Activation<'_, 'gc>) -> GcCell<'gc, Class<'gc>> {
|
pub fn create_class<'gc>(activation: &mut Activation<'_, 'gc>) -> GcCell<'gc, Class<'gc>> {
|
||||||
let gc_context = activation.context.gc_context;
|
let gc_context = activation.context.gc_context;
|
||||||
|
@ -291,7 +300,7 @@ pub fn create_class<'gc>(activation: &mut Activation<'_, 'gc>) -> GcCell<'gc, Cl
|
||||||
write.define_class_trait(Trait::from_const(
|
write.define_class_trait(Trait::from_const(
|
||||||
QName::new(activation.avm2().public_namespace, "length"),
|
QName::new(activation.avm2().public_namespace, "length"),
|
||||||
Multiname::new(activation.avm2().public_namespace, "int"),
|
Multiname::new(activation.avm2().public_namespace, "int"),
|
||||||
None,
|
Some(1.into()),
|
||||||
));
|
));
|
||||||
|
|
||||||
// Fixed traits (in AS3 namespace)
|
// Fixed traits (in AS3 namespace)
|
||||||
|
@ -306,5 +315,12 @@ pub fn create_class<'gc>(activation: &mut Activation<'_, 'gc>) -> GcCell<'gc, Cl
|
||||||
AS3_INSTANCE_METHODS,
|
AS3_INSTANCE_METHODS,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const INTERNAL_INIT_METHOD: &[(&str, NativeMethodImpl)] = &[("init", init)];
|
||||||
|
write.define_builtin_class_methods(
|
||||||
|
gc_context,
|
||||||
|
activation.avm2().internal_namespace,
|
||||||
|
INTERNAL_INIT_METHOD,
|
||||||
|
);
|
||||||
|
|
||||||
object_class
|
object_class
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
Object.length is: 1
|
||||||
RegExp.length is: 1
|
RegExp.length is: 1
|
||||||
String.length is: 1
|
String.length is: 1
|
||||||
XMLList.length is: 1
|
XMLList.length is: 1
|
||||||
|
|
|
@ -8,6 +8,7 @@ package
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
trace("Object.length is: " + Object.length);
|
||||||
trace("RegExp.length is: " + RegExp.length);
|
trace("RegExp.length is: " + RegExp.length);
|
||||||
trace("String.length is: " + String.length);
|
trace("String.length is: " + String.length);
|
||||||
trace("XMLList.length is: " + XMLList.length);
|
trace("XMLList.length is: " + XMLList.length);
|
||||||
|
|
Binary file not shown.
Loading…
Reference in New Issue