/// <summary> /// Defines instance initializer which init given traits. /// </summary> /// <param name="args"></param> /// <returns></returns> public AbcMethod DefineTraitsInitializer(params object[] args) { var pairs = args .Pairwise(x => x is string? 1 : 0) .Select(x => { var t = x.First as AbcTrait; if (t == null) { throw new InvalidOperationException(); } if (!t.IsSlot) { throw new InvalidOperationException(); } return(new KeyValuePair <AbcTrait, string>(t, x.Second as string)); }) .ToList(); var traits = pairs.Select(x => x.Key).ToList(); return(DefineMethod( Sig.global(AvmTypeCode.Void, args), code => { code.PushThisScope(); code.ConstructSuper(); for (int i = 0; i < traits.Count; ++i) { code.LoadThis(); code.GetLocal(i + 1); code.SetProperty(traits[i]); } code.ReturnVoid(); } )); }
public AbcMethod DefineEmptyMethod() { return(DefineMethod( Sig.global(null), code => code.ReturnVoid())); }