private AbcInstance Build() { var instanceName = _abc.DefineName(QName.PfxPackage("prop_ptr")); var instance = _abc.DefineEmptyInstance(instanceName, false); var obj = instance.CreatePrivateSlot("_obj", AvmTypeCode.Object); var ns = instance.CreatePrivateSlot("_ns", AvmTypeCode.Namespace); var name = instance.CreatePrivateSlot("_name", AvmTypeCode.String); instance.Initializer = _abc.DefineTraitsInitializer(obj, ns, name); instance.DefineMethod( Sig.ptr_get, code => { code.LoadThis(); code.GetProperty(obj); code.LoadThis(); code.GetProperty(ns); code.LoadThis(); code.GetProperty(name); code.GetRuntimeProperty(); code.ReturnValue(); }); instance.DefineMethod( Sig.ptr_set, code => { code.LoadThis(); code.GetProperty(obj); code.LoadThis(); code.GetProperty(ns); code.LoadThis(); code.GetProperty(name); code.GetLocal(1); //value code.SetRuntimeProperty(); code.ReturnVoid(); }); return(instance); }
private AbcInstance Build() { var name = _abc.DefineName(QName.PfxPackage("func_ptr")); var instance = _abc.DefineEmptyInstance(name, false); var getter = instance.CreatePrivateSlot("_getter", AvmTypeCode.Function); var setter = instance.CreatePrivateSlot("_setter", AvmTypeCode.Function); instance.Initializer = _abc.DefineTraitsInitializer(getter, setter); instance.DefineMethod( Sig.ptr_get, code => { code.LoadThis(); code.GetProperty(getter); code.PushNull(); code.CallFunction(1); //this code.ReturnValue(); }); instance.DefineMethod( Sig.ptr_set, code => { code.LoadThis(); code.GetProperty(setter); code.PushNull(); code.GetLocal(1); //value code.CallFunction(2); //this + value code.Pop(); code.ReturnVoid(); }); return(instance); }