Beispiel #1
0
        private static XElement ToXml(AbcScript script)
        {
            var res = new XElement("script");

            if (script.Traits.Count > 0)
            {
                res.Add(script.Traits.ToXml());
            }
            //todo: script initializer
            return(res);
        }
Beispiel #2
0
        //Generates method for script initializer
        private AbcMethod DefineMainScriptInit(AbcScript script, AbcInstance instance)
        {
#if DEBUG
            DebugService.LogInfo("DefineScriptInit started");
#endif

            var method = new AbcMethod();

            bool notSwf = !IsSwf;

            //Note: entry point also can contains arguments
            //Note: but in swf entry point can not have arguments
            if (EntryPoint != null && notSwf)
            {
                method.ReturnType = _generator.TypeBuilder.BuildReturnType(EntryPoint.Type);
                _generator.MethodBuilder.BuildParameters(method, EntryPoint);
            }

            var body = new AbcMethodBody(method);
            _generator.Abc.AddMethod(method);

            _mainScriptBody = body;

            var code = new AbcCode(Abc);

            _mainScriptCode = code;
            code.PushThisScope();
            code.InitClassProperties(script);

            //code.Trace("Initialization of " + instance.FullName);

            _insertIndexOfNewApi = code.Count;
            //code.AddRange(_newAPI);
            _generator.StaticCtors.Call(code, instance);

            if (notSwf) //abc?
            {
                _generator.NUnit.Main(code);
                CallEntryPoint(code);
            }
            else
            {
                code.ReturnVoid();
            }

            //body.Finish(code);

#if DEBUG
            DebugService.LogInfo("DefineScriptInit succeeded");
#endif
            return(method);
        }
Beispiel #3
0
        public void BuildMainScript()
        {
            var instance = _generator.MainInstance;

            if (instance == null)
            {
                return;
            }

            instance.IsApp = true;

            var script = new AbcScript {
                IsMain = true
            };

            Abc.Scripts.Add(script);

            script.DefineClassTraits(instance);
            script.Initializer = DefineMainScriptInit(script, instance);
        }
Beispiel #4
0
        private void DefineScript(AbcInstance instance)
        {
            var script = new AbcScript();

            Abc.Scripts.Add(script);

            script.DefineClassTraits(instance);

            script.Initializer = Abc.DefineMethod(
                Sig.@void(),
                code =>
            {
                code.PushThisScope();

                if (IsSwc && instance.Type.Is(SystemTypeCode.Object))
                {
                    code.AddRange(_generator.NewApi);
                }

                var list = GetBaseTypesWithCctors(instance);

                const int arr = 1;
                code.Add(InstructionCode.Newarray, 0);
                code.SetLocal(arr);

                _generator.StaticCtors.DelayCalls(code, list, arr);
                code.InitClassProperties(script);
                _generator.StaticCtors.UndelayCalls(code, list, arr);

                //code.Trace("Initialization of " + instance.FullName);

                _generator.StaticCtors.Call(code, instance);
                _generator.StaticCtors.CallRange(code, list);

                code.ReturnVoid();
            }
                );
        }