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}.")); } }
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; }