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());
        }
Exemple #2
0
        /// <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;
        }
Exemple #3
0
 public LoopContext(LocalElement index)
 {
     Index = index;
 }
 public void ReleaseVariable(LocalElement element)
 {
     currentPool[element.LoadedType].Where(_1 => _1.Variable == element)
     .Single().IsFree = true;
 }