protected override IResponse InternalMake() { if (ctx.CurrentElement == null) { return(null); } LocalElement size = ctx.AdditionalContext as LocalElement; if (ctx.AdditionalContext == null) { size = ctx.VariablePool.GetNewVariable(typeof(uint)); ctx.AdditionalContext = size; size.Store(ctx.G, (ConstantElement <uint>) 0, Model.TypeOfContent.Value); } if (!typeSizeMap.ContainsKey(ctx.CurrentElement.LoadedType)) { return(null); } var sumElement = new GenericElement(typeof(uint)) { LoadAction = (g, type) => { size.Load(ctx.G, Model.TypeOfContent.Value); typeSizeMap[ctx.CurrentElement.LoadedType].Load(ctx.G, Model.TypeOfContent.Value); ctx.G.Add(); } }; size.Store(ctx.G, sumElement, Model.TypeOfContent.Value); return(new ContextModifiedBuildResponse()); }
/// <summary> /// Mark a variable as "not used" so that can be re-used subsequently. /// </summary> /// <param name="element">Element that represent the variable to release.</param> public void ReleaseVariable(LocalElement element) { if (element == null) { throw new ArgumentNullException("element"); } currentPool[element.LoadedType].Where(_1 => _1.Variable == element) .Single().IsFree = false; }
public LoopContext(LocalElement index) { Index = index; }
public void ReleaseVariable(LocalElement element) { currentPool[element.LoadedType].Where(_1 => _1.Variable == element) .Single().IsFree = true; }