public ParameterStructure(string name, ParameterAttributes attr, TypeStructure pt, CilStructure def) { Name = name; Attributes = attr; ParamType = pt; DefaultValue = def; AppendChild(DefaultValue); }
public LoopLocalStructure(string name, TypeStructure dt, CilStructure def) : base(dt) { Name = name; DataType = dt; DefaultValue = def; Local = new LocalStructure(name, dt); AppendChild(DefaultValue); AppendChild(Local); }
internal void ChildBuildCode(CilStructure stru, bool isRet) { for (var i = 0; i < this.Count; ++i) { if (i == this.Count - 1 && isRet) { this[i].BuildCode(); } else { PopBuildCode(this[i]); } } }
internal void BuildCall(CilStructure variant, CodeGenerator cg) { var ls = RenewBaseInstance as LoadStoreStructure; if(ls != null) { ls.BuildCall(variant, cg); } else if (RenewBaseInstance is MethodStructure) { cg.GenerateCall(this); } else { RenewBaseInstance.BuildCall(cg); } }
public CallStructure(TypeStructure rt, BuilderStructure call, ExpressionStructure pre, CilStructure variant) : base(rt) { Call = call; Pre = pre; Access = pre; Variant = variant; Arguments = new List<ExpressionStructure>(); Converters = new List<BuilderStructure>(); if (Access != null) { AppendChild(Access); } if (Arguments != null) { AppendChild(Arguments); } }
public CallStructure(TypeStructure rt, BuilderStructure call, ExpressionStructure pre, CilStructure access, CilStructure variant, IReadOnlyList<ExpressionStructure> args, IReadOnlyList<BuilderStructure> convs, bool isVariadic = false) : base(rt) { Call = call; Pre = pre; Access = access; Variant = variant; Arguments = args; Converters = convs; IsVariadic = isVariadic; if (Access != null) { AppendChild(Access); } if (Arguments != null) { AppendChild(Arguments); } }
internal void BuildCall(CilStructure variant, CodeGenerator cg) { var b = variant as BuilderStructure; if(b != null && BaseInstance != null) { variant = b.RenewInstance(BaseInstance); } var f = variant as FieldStructure; if(f != null) { if(f.IsEnumField) { cg.GeneratePrimitive((dynamic)f.DefaultValue); } else if (IsStore) { if(f.IsStatic) { cg.GenerateStore(f); cg.GenerateLoad(f); } else { cg.GenerateCode(OpCodes.Dup); var temp = new LocalStructure(f.DataType, cg); cg.GenerateStore(temp); cg.GenerateStore(f); cg.GenerateLoad(temp); } } else { cg.GenerateLoad(f); } return; } var l = variant as LocalStructure; if (l != null) { if (IsStore) { cg.GenerateStore(l); } cg.GenerateLoad(l); return; } var p = variant as ParameterStructure; if(p != null) { if (IsStore) { cg.GenerateStore(p); } cg.GenerateLoad(p); return; } var lo = variant as LoopLocalStructure; if (lo != null) { if (IsStore) { cg.GenerateStore(lo.Local); } cg.GenerateLoad(lo.Local); return; } var v = variant as ValueStructure; if(v != null) { cg.GeneratePrimitive(v.Value); return; } throw new InvalidOperationException(); }
internal void TraversalPreBuild(CilStructure stru) { var c = stru as BuilderStructure; if (c != null) { c.RelayPreBuild(); } foreach (var v in stru) { TraversalPreBuild(v); } }
internal void TraversalPostBuild(CilStructure stru) { foreach (var v in stru.Reverse()) { TraversalPostBuild(v); } var c = stru as BuilderStructure; if(c != null) { c.RelayPostBuild(); } }