Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }