Example #1
0
 public override void VisitForeachVar(ForeachVar x)
 {
     if (x != null)
     {
         _foreachVarCount++;
     }
     base.VisitForeachVar(x);
 }
Example #2
0
 public override void VisitForeachVar(ForeachVar x)
 {
     if (x.Alias)
     {
         ConsumeToken(Tokens.T_AMP, "&", x.Span.Start);
     }
     VisitElement(x.Target);
 }
Example #3
0
            public PhpTypeCode Emit(ForeachVar /*!*/ node, CodeGenerator codeGenerator)
            {
                var varuse = node.Variable;

                if (varuse != null)
                {
                    return(varuse.Emit(codeGenerator));
                }
                else
                {
                    // other epxressions are handled in EmitAssign only
                    return(PhpTypeCode.Unknown); // ignored
                }
            }
Example #4
0
            public void Analyze(ForeachVar /*!*/ node, Analyzer analyzer)
            {
                ExInfoFromParent info = new ExInfoFromParent(node);

                if (node.Alias)
                {
                    info.Access = AccessType.WriteRef;
                }
                else
                {
                    info.Access = AccessType.Write;
                }

                // retval not needed
                node.Expression.Analyze(analyzer, info);
            }
Example #5
0
            public PhpTypeCode EmitAssign(ForeachVar /*!*/ node, CodeGenerator codeGenerator)
            {
                // Object (or PhpReference) is on top of evaluation stack

                var varuse = node.Variable;

                if (varuse != null)
                {
                    return(VariableUseHelper.EmitAssign(varuse, codeGenerator));
                }
                else
                {
                    var listex = node.List;
                    if (listex != null)
                    {
                        return(listex.NodeCompiler <ListExCompiler>().EmitAssign(listex, codeGenerator));
                    }
                    else
                    {
                        throw new InvalidOperationException();
                    }
                }
            }
Example #6
0
        private ForeachStmt /*!*/ CreateForeachStmt(Position pos, Expression /*!*/ enumeree, ForeachVar /*!*/ var1,
                                                    Position pos1, ForeachVar var2, Statement /*!*/ body)
        {
            ForeachVar key, value;

            if (var2 != null)
            {
                key   = var1;
                value = var2;

                if (key.Alias)
                {
                    errors.Add(Errors.KeyAlias, SourceUnit, pos1);
                    key.Alias = false;
                }
            }
            else
            {
                key   = null;
                value = var1;
            }

            return(new ForeachStmt(pos, enumeree, key, value, body));
        }
Example #7
0
 /// <summary>
 /// Visit foreach variable used for value and key.
 /// </summary>
 /// <param name="x"></param>
 virtual public void VisitForeachVar(ForeachVar x)
 {
     VisitElement(x?.Target);
 }
Example #8
0
 public override LangElement Foreach(Span span, LangElement enumeree, ForeachVar keyOpt, ForeachVar value, LangElement body)
 => CountLE(base.Foreach(span, enumeree, keyOpt, value, body));
Example #9
0
 ForeachVar CountFV(ForeachVar i)
 {
     _foreachVarCount++;
     return(i);
 }
Example #10
0
 public static PhpTypeCode EmitAssign(this ForeachVar /*!*/ node, CodeGenerator codeGenerator)
 {
     return(node.NodeCompiler <IForeachVarCompiler>().EmitAssign(node, codeGenerator));
 }
Example #11
0
 public static void Analyze(this ForeachVar /*!*/ node, Analyzer analyzer)
 {
     node.NodeCompiler <IForeachVarCompiler>().Analyze(node, analyzer);
 }