示例#1
0
 public override void ExitForeachStatement(ForeachStatement foreachStatement)
 {
     if (!foreachStatement.List.Type.IsList(foreachStatement.NearestAncestorOfType <Root>()))
     {
         Errors.Add(new CompilationError(foreachStatement.Context, $"Can not iterate over {foreachStatement.List.Type}."));
     }
 }
示例#2
0
        public override void EnterForeachStatement(ForeachStatement foreachStatement)
        {
            Visit(foreachStatement.List);
            if (!foreachStatement.List.Type.IsList(foreachStatement.NearestAncestorOfType <Root>()))
            {
                Errors.Add(new CompilationError(foreachStatement.Context, $"Can not iterate over {foreachStatement.List.Type}."));
                skipChildren = true;
                return;
            }

            var genericType = (GenericType)foreachStatement.List.Type;

            foreachStatement.Variable.AddChild(AstCloner.Clone(genericType.GenericTypes.Single()));
            Visit(foreachStatement.Body);
            skipChildren = true;
        }