dotgnu-pnet-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Dotgnu-pnet-commits] CVS: pnetlib/System/CodeDom/Compiler Validator.cs,


From: Rhys Weatherley <address@hidden>
Subject: [Dotgnu-pnet-commits] CVS: pnetlib/System/CodeDom/Compiler Validator.cs, NONE, 1.1 CodeGenerator.cs, 1.4, 1.5
Date: Mon, 21 Jul 2003 06:12:01 -0400

Update of /cvsroot/dotgnu-pnet/pnetlib/System/CodeDom/Compiler
In directory subversions:/tmp/cvs-serv1942/System/CodeDom/Compiler

Modified Files:
        CodeGenerator.cs 
Added Files:
        Validator.cs 
Log Message:


Implement identifier validation for the System.CodeDom routines.


--- NEW FILE ---
/*
 * Validator.cs - Implementation of the
 *              System.CodeDom.Compiler.Validator class.
 *
 * Copyright (C) 2002, 2003  Southern Storm Software, Pty Ltd.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */

namespace System.CodeDom.Compiler
{

#if CONFIG_CODEDOM

using System.IO;
using System.Reflection;
using System.Globalization;
using System.Collections;

// Helper class for validating the contents of a CodeDom tree.

internal sealed class Validator
{
        // Validate an identifier.
        private static void ValidateIdentifier(String value)
                        {
                                
if(!CodeGenerator.IsValidLanguageIndependentIdentifier(value))
                                {
                                        throw new 
ArgumentException(S._("Arg_InvalidIdentifier"));
                                }
                        }

        // Validate a qualified identifier.
        private static void ValidateQualifiedIdentifier
                                (String value, bool canBeNull)
                        {
                                if(value == null)
                                {
                                        if(!canBeNull)
                                        {
                                                throw new ArgumentException
                                                        
(S._("Arg_InvalidIdentifier"));
                                        }
                                }
                                else
                                {
                                        int posn = 0;
                                        int index;
                                        String component;
                                        while((index = value.IndexOf('.', 
posn)) != -1)
                                        {
                                                component = 
value.Substring(posn, index - posn);
                                                ValidateIdentifier(component);
                                                posn = index + 1;
                                        }
                                        component = value.Substring(posn);
                                        ValidateIdentifier(component);
                                }
                        }

        // Validate a code object.
        public static void Validate(Object e)
                        {
                                if(e == null)
                                {
                                        // Nothing to do here.
                                }
                                else if(e is ICollection)
                                {
                                        IEnumerator e = 
((ICollection)e).GetEnumerator();
                                        while(e.MoveNext())
                                        {
                                                Validate(e.Current);
                                        }
                                }
                                else if(e is CodeArrayCreateExpression)
                                {
                                        
Validate(((CodeArrayCreateExpression)e).CreateType);
                                        
Validate(((CodeArrayCreateExpression)e).Initializers);
                                        
Validate(((CodeArrayCreateExpression)e).SizeExpression);
                                }
                                else if(e is CodeAttachEventStatement)
                                {
                                        
Validate(((CodeAttachEventStatement)e).Event);
                                        
Validate(((CodeAttachEventStatement)e).Listener);
                                }
                                else if(e is CodeCastExpression)
                                {
                                        
Validate(((CodeCastExpression)e).TargetType);
                                        
Validate(((CodeCastExpression)e).Expression);
                                }
                                else if(e is CodeCatchClause)
                                {
                                        
ValidateIdentifier(((CodeCatchClause)e).LocalName);
                                        
Validate(((CodeCatchClause)e).CatchExceptionType);
                                        
Validate(((CodeCatchClause)e).Statements);
                                }
                                else if(e is CodeConditionStatement)
                                {
                                        
Validate(((CodeConditionStatement)e).Condition);
                                        
Validate(((CodeConditionStatement)e).TrueStatements);
                                        
Validate(((CodeConditionStatement)e).FalseStatements);
                                }
                                else if(e is CodeGotoStatement)
                                {
                                        
ValidateIdentifier(((CodeGotoStatement)e).Label);
                                }
                                else if(e is CodeMemberEvent)
                                {
                                        
Validate(((CodeMemberEvent)e).CustomAttributes);
                                        
ValidateIdentifier(((CodeMemberEvent)e).Name);
                                        
Validate(((CodeMemberEvent)e).ImplementationTypes);
                                        
Validate(((CodeMemberEvent)e).PrivateImplementationType);
                                        Validate(((CodeMemberEvent)e).Type);
                                }
                                else if(e is CodeMemberField)
                                {
                                        
Validate(((CodeMemberField)e).CustomAttributes);
                                        
ValidateIdentifier(((CodeMemberField)e).Name);
                                        Validate(((CodeMemberField)e).Type);
                                        
Validate(((CodeMemberField)e).InitExpression);
                                }
                                else if(e is CodeConstructor)
                                {
                                        
Validate(((CodeConstructor)e).CustomAttributes);
                                        
ValidateIdentifier(((CodeConstructor)e).Name);
                                        
Validate(((CodeConstructor)e).ImplementationTypes);
                                        
Validate(((CodeConstructor)e).Parameters);
                                        
Validate(((CodeConstructor)e).PrivateImplementationType);
                                        
Validate(((CodeConstructor)e).ReturnType);
                                        
Validate(((CodeConstructor)e).ReturnTypeCustomAttributes);
                                        
Validate(((CodeConstructor)e).Statements);
                                        
Validate(((CodeConstructor)e).BaseConstructorArgs);
                                        
Validate(((CodeConstructor)e).ChainedConstructorArgs);
                                }
                                else if(e is CodeMemberMethod)
                                {
                                        
Validate(((CodeMemberMethod)e).CustomAttributes);
                                        
ValidateIdentifier(((CodeMemberMethod)e).Name);
                                        
Validate(((CodeMemberMethod)e).ImplementationTypes);
                                        
Validate(((CodeMemberMethod)e).Parameters);
                                        
Validate(((CodeMemberMethod)e).PrivateImplementationType);
                                        
Validate(((CodeMemberMethod)e).ReturnType);
                                        
Validate(((CodeMemberMethod)e).ReturnTypeCustomAttributes);
                                        
Validate(((CodeMemberMethod)e).Statements);
                                }
                                else if(e is CodeMemberProperty)
                                {
                                        
Validate(((CodeMemberProperty)e).CustomAttributes);
                                        
ValidateIdentifier(((CodeMemberProperty)e).Name);
                                        
Validate(((CodeMemberProperty)e).GetStatements);
                                        
Validate(((CodeMemberProperty)e).ImplementationTypes);
                                        
Validate(((CodeMemberProperty)e).Parameters);
                                        
Validate(((CodeMemberProperty)e).PrivateImplementationType);
                                        
Validate(((CodeMemberProperty)e).SetStatements);
                                        Validate(((CodeMemberProperty)e).Type);
                                }
                                else if(e is CodeMethodInvokeExpression)
                                {
                                        
Validate(((CodeMethodInvokeExpression)e).Method);
                                        
Validate(((CodeMethodInvokeExpression)e).Parameters);
                                }
                                else if(e is CodeNamespace)
                                {
                                        Validate(((CodeNamespace)e).Imports);
                                        
ValidateQualifiedIdentifier(((CodeNamespace)e).Name, false);
                                        Validate(((CodeNamespace)e).Types);
                                }
                                else if(e is CodeNamespaceImport)
                                {
                                        ValidateQualifiedIdentifier
                                                
(((CodeNamespaceImport)e).Namespace, false);
                                }
                                else if(e is CodeObjectCreateExpression)
                                {
                                        
Validate(((CodeObjectCreateExpression)e).CreateType);
                                        
Validate(((CodeObjectCreateExpression)e).Parameters);
                                }
                                else if(e is CodeParameterDeclarationExpression)
                                {
                                        
Validate(((CodeParameterDeclarationExpression)e)
                                                                
.CustomAttributes);
                                        ValidateIdentifier
                                                
(((CodeParameterDeclarationExpression)e).Name);
                                        
Validate(((CodeParameterDeclarationExpression)e).Type);
                                }
                                else if(e is CodeRemoveEventStatement)
                                {
                                        
Validate(((CodeRemoveEventStatement)e).Event);
                                        
Validate(((CodeRemoveEventStatement)e).Listener);
                                }
                                else if(e is CodeTypeDelegate)
                                {
                                        
Validate(((CodeTypeDelegate)e).CustomAttributes);
                                        
ValidateIdentifier(((CodeTypeDelegate)e).Name);
                                        
Validate(((CodeTypeDelegate)e).BaseTypes);
                                        Validate(((CodeTypeDelegate)e).Members);
                                        
Validate(((CodeTypeDelegate)e).Parameters);
                                        
Validate(((CodeTypeDelegate)e).ReturnType);
                                }
                                else if(e is CodeTypeDeclaration)
                                {
                                        
Validate(((CodeTypeDeclaration)e).CustomAttributes);
                                        
ValidateIdentifier(((CodeTypeDeclaration)e).Name);
                                        
Validate(((CodeTypeDeclaration)e).BaseTypes);
                                        
Validate(((CodeTypeDeclaration)e).Members);
                                }
                                else if(e is CodeTypeOfExpression)
                                {
                                        
Validate(((CodeTypeOfExpression)e).Type);
                                }
                                else if(e is CodeTypeReference)
                                {
                                        
Validate(((CodeTypeReference)e).ArrayElementType);
                                        ValidateQualifiedIdentifier
                                                
(((CodeTypeReference)e).BaseType, true);
                                }
                                else if(e is CodeTypeReferenceExpression)
                                {
                                        
Validate(((CodeTypeReferenceExpression)e).Type);
                                }
                                else if(e is CodeVariableDeclarationStatement)
                                {
                                        Validate
                                                
(((CodeVariableDeclarationStatement)e).InitExpression);
                                        ValidateIdentifier
                                                
(((CodeVariableDeclarationStatement)e).Name);
                                        
Validate(((CodeVariableDeclarationStatement)e).Type);
                                }
                                else if(e is CodeArgumentReferenceExpression)
                                {
                                        ValidateIdentifier
                                                
(((CodeArgumentReferenceExpression)e).ParameterName);
                                }
                                else if(e is CodeArrayIndexerExpression)
                                {
                                        
Validate(((CodeArrayIndexerExpression)e).TargetObject);
                                        
Validate(((CodeArrayIndexerExpression)e).Indices);
                                }
                                else if(e is CodeAssignStatement)
                                {
                                        Validate(((CodeAssignStatement)e).Left);
                                        
Validate(((CodeAssignStatement)e).Right);
                                }
                                else if(e is CodeAttributeArgument)
                                {
                                        
ValidateIdentifier(((CodeAttributeArgument)e).Name);
                                        
Validate(((CodeAttributeArgument)e).Value);
                                }
                                else if(e is CodeAttributeDeclaration)
                                {
                                        
ValidateIdentifier(((CodeAttributeDeclaration)e).Name);
                                        
Validate(((CodeAttributeDeclaration)e).Arguments);
                                }
                                else if(e is CodeBinaryOperatorExpression)
                                {
                                        
Validate(((CodeBinaryOperatorExpression)e).Left);
                                        
Validate(((CodeBinaryOperatorExpression)e).Right);
                                }
                                else if(e is CodeCompileUnit)
                                {
                                        
Validate(((CodeCompileUnit)e).AssemblyCustomAttributes);
                                        
Validate(((CodeCompileUnit)e).Namespaces);
                                }
                                else if(e is CodeDelegateCreateExpression)
                                {
                                        
Validate(((CodeDelegateCreateExpression)e).DelegateType);
                                        
Validate(((CodeDelegateCreateExpression)e).TargetObject);
                                        ValidateIdentifier
                                                
(((CodeDelegateCreateExpression)e).MethodName);
                                }
                                else if(e is CodeDelegateInvokeExpression)
                                {
                                        
Validate(((CodeDelegateInvokeExpression)e).TargetObject);
                                        
Validate(((CodeDelegateInvokeExpression)e).Parameters);
                                }
                                else if(e is CodeDirectionExpression)
                                {
                                        
Validate(((CodeDirectionExpression)e).Expression);
                                }
                                else if(e is CodeEventReferenceExpression)
                                {
                                        
Validate(((CodeEventReferenceExpression)e).TargetObject);
                                        ValidateIdentifier
                                                
(((CodeEventReferenceExpression)e).EventName);
                                }
                                else if(e is CodeExpressionStatement)
                                {
                                        
Validate(((CodeExpressionStatement)e).Expression);
                                }
                                else if(e is CodeFieldReferenceExpression)
                                {
                                        
Validate(((CodeFieldReferenceExpression)e).TargetObject);
                                        ValidateIdentifier
                                                
(((CodeFieldReferenceExpression)e).FieldName);
                                }
                                else if(e is CodeIndexerExpression)
                                {
                                        
Validate(((CodeIndexerExpression)e).TargetObject);
                                        
Validate(((CodeIndexerExpression)e).Indices);
                                }
                                else if(e is CodeIterationStatement)
                                {
                                        
Validate(((CodeIterationStatement)e).InitStatement);
                                        
Validate(((CodeIterationStatement)e).TestExpression);
                                        
Validate(((CodeIterationStatement)e).IncrementStatement);
                                        
Validate(((CodeIterationStatement)e).Statements);
                                }
                                else if(e is CodeLabeledStatement)
                                {
                                        
ValidateIdentifier(((CodeLabeledStatement)e).Label);
                                        
Validate(((CodeLabeledStatement)e).Statement);
                                }
                                else if(e is CodeMethodReferenceExpression)
                                {
                                        
Validate(((CodeMethodReferenceExpression)e).TargetObject);
                                        ValidateIdentifier
                                                
(((CodeMethodReferenceExpression)e).MethodName);
                                }
                                else if(e is CodeMethodReturnStatement)
                                {
                                        
Validate(((CodeMethodReturnStatement)e).Expression);
                                }
                                else if(e is CodePropertyReferenceExpression)
                                {
                                        
Validate(((CodePropertyReferenceExpression)e).TargetObject);
                                        ValidateIdentifier
                                                
(((CodePropertyReferenceExpression)e).PropertyName);
                                }
                                else if(e is CodeThrowExceptionStatement)
                                {
                                        
Validate(((CodeThrowExceptionStatement)e).ToThrow);
                                }
                                else if(e is CodeTryCatchFinallyStatement)
                                {
                                        
Validate(((CodeTryCatchFinallyStatement)e).TryStatements);
                                        
Validate(((CodeTryCatchFinallyStatement)e).CatchClauses);
                                        Validate
                                                
(((CodeTryCatchFinallyStatement)e).FinallyStatements);
                                }
                                else if(e is CodeVariableReferenceExpression)
                                {
                                        ValidateIdentifier
                                                
(((CodeVariableReferenceExpression)e).VariableName);
                                }
                        }

}; // class Validator

#endif // CONFIG_CODEDOM

}; // namespace System.CodeDom.Compiler

Index: CodeGenerator.cs
===================================================================
RCS file: 
/cvsroot/dotgnu-pnet/pnetlib/System/CodeDom/Compiler/CodeGenerator.cs,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -r1.4 -r1.5
*** CodeGenerator.cs    29 May 2003 01:22:39 -0000      1.4
--- CodeGenerator.cs    21 Jul 2003 10:11:58 -0000      1.5
***************
*** 1300,1307 ****
  
        // Validate all identifiers in a CodeDom tree.
-       [TODO]
        public static void ValidateIdentifiers(CodeObject e)
                        {
!                               // TODO
                        }
  
--- 1300,1306 ----
  
        // Validate all identifiers in a CodeDom tree.
        public static void ValidateIdentifiers(CodeObject e)
                        {
!                               Validator.Validate(e);
                        }
  





reply via email to

[Prev in Thread] Current Thread [Next in Thread]