示例#1
0
        void BuildSystemManagerInfo(AbcFile abc, AbcInstance instance)
        {
            var objType = abc.BuiltinTypes.Object;

            if (_cacheInfoObject)
            {
                var method = instance.DefineMethod(Sig.@this("$info$", objType), null);
                _compiler.AddLateMethod(method, BuildSystemManagerInfo);

                var infoField = instance.DefineSlot("__info", AvmTypeCode.Object);

                instance.DefineMethod(
                    Sig.@virtual("info", objType).@override(),
                    code =>
                {
                    code.LoadThis();
                    code.GetProperty(infoField);

                    var br = code.IfNotNull();
                    code.LoadThis();
                    code.LoadThis();
                    code.Call(method);
                    code.SetProperty(infoField);

                    br.BranchTarget = code.Label();
                    code.LoadThis();
                    code.GetProperty(infoField);
                    code.ReturnValue();
                });
            }
            else
            {
                var method = instance.DefineMethod(Sig.@virtual("info", objType).@override(), null);
                _compiler.AddLateMethod(method, BuildSystemManagerInfo);
            }
        }