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); }
//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); }
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); }
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(); } ); }