/// <summary> /// Calls entry point (Main method). /// //NOTE: This method always adds return instruction /// </summary> /// <param name="code"></param> internal void CallEntryPoint(AbcCode code) { //Note: in swf entry point will be called in ctor of root sprite if (EntryPoint == null) { code.ReturnVoid(); return; } var main = EntryPoint.AbcMethod(); if (main == null) { throw new InvalidOperationException("Invalid entry point"); } code.Getlex(main); if (AbcGenConfig.ParameterlessEntryPoint) { code.Add(InstructionCode.Callpropvoid, main.TraitName, 0); code.ReturnVoid(); } else { //TODO: pass process args int n = EntryPoint.Parameters.Count; for (int i = 0; i < n; ++i) { //code.GetLocal(i + 1); code.PushNull(); } bool isVoid = EntryPoint.IsVoid(); if (isVoid || IsSwf) { code.Add(InstructionCode.Callpropvoid, main.Trait.Name, n); code.ReturnVoid(); } else { code.Add(InstructionCode.Callproperty, main.Trait.Name, n); code.ReturnValue(); } } }