private static Method GenerateTimelineScript(AbcCode abc, AS3ClassDef timelineClass)
{
Multiname mnMovieClip = timelineClass.Supername;
Namespace nsFlashDisplay = mnMovieClip.NS;
Namespace nsEmptyPackage = abc.CreateNamespace(Namespace.NamespaceKind.Package, string.Empty);
Namespace nsFlashEvents = abc.CreateNamespace(Namespace.NamespaceKind.Package, "flash.events");
Multiname mnObject = abc.CreateMultiname(Multiname.MultinameKind.QName, "Object", nsEmptyPackage, null);
Multiname mnEventDispatcher = abc.CreateMultiname(Multiname.MultinameKind.QName, "EventDispatcher", nsFlashEvents, null);
Multiname mnDisplayObject = abc.CreateMultiname(Multiname.MultinameKind.QName, "DisplayObject", nsFlashDisplay, null);
Multiname mnInteractiveObject = abc.CreateMultiname(Multiname.MultinameKind.QName, "InteractiveObject", nsFlashDisplay, null);
Multiname mnDisplayObjectContainer = abc.CreateMultiname(Multiname.MultinameKind.QName, "DisplayObjectContainer", nsFlashDisplay, null);
Multiname mnSprite = abc.CreateMultiname(Multiname.MultinameKind.QName, "Sprite", nsFlashDisplay, null);
return abc.CreateMethod("Timeline.abc", 2, 1, 1, 9,
/* The above magic numbers come from the numbers generated by IDE versions of this function.
* I have no real ideal about how I'd work them out for myself, which would obviously be
* more ideal. */
abc.Op(Opcode.Mnemonics.GetLocal0),
abc.Op(Opcode.Mnemonics.PushScope),
abc.Op(Opcode.Mnemonics.GetScopeObject, (byte)0),
abc.Op(Opcode.Mnemonics.GetLex, mnObject),
abc.Op(Opcode.Mnemonics.PushScope),
abc.Op(Opcode.Mnemonics.GetLex, mnEventDispatcher),
abc.Op(Opcode.Mnemonics.PushScope),
abc.Op(Opcode.Mnemonics.GetLex, mnDisplayObject),
abc.Op(Opcode.Mnemonics.PushScope),
abc.Op(Opcode.Mnemonics.GetLex, mnInteractiveObject),
abc.Op(Opcode.Mnemonics.PushScope),
abc.Op(Opcode.Mnemonics.GetLex, mnDisplayObjectContainer),
abc.Op(Opcode.Mnemonics.PushScope),
abc.Op(Opcode.Mnemonics.GetLex, mnSprite),
abc.Op(Opcode.Mnemonics.PushScope),
abc.Op(Opcode.Mnemonics.GetLex, mnMovieClip),
abc.Op(Opcode.Mnemonics.PushScope),
abc.Op(Opcode.Mnemonics.GetLex, mnMovieClip),
abc.Op(Opcode.Mnemonics.NewClass, timelineClass),
abc.Op(Opcode.Mnemonics.PopScope),
abc.Op(Opcode.Mnemonics.PopScope),
abc.Op(Opcode.Mnemonics.PopScope),
abc.Op(Opcode.Mnemonics.PopScope),
abc.Op(Opcode.Mnemonics.PopScope),
abc.Op(Opcode.Mnemonics.PopScope),
abc.Op(Opcode.Mnemonics.PopScope),
abc.Op(Opcode.Mnemonics.InitProperty, timelineClass.Name),
abc.Op(Opcode.Mnemonics.ReturnVoid));
}