| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237 |
- //
- // System.CodeDom.Compiler CodeGenerator class
- //
- // Author:
- // Miguel de Icaza ([email protected])
- //
- // (C) 2001 Ximian, Inc.
- //
- using System.CodeDom;
- using System.Reflection;
- using System.IO;
-
- namespace System.CodeDom.Compiler {
- public abstract class CodeGenerator : ICodeGenerator {
- protected TextWriter output;
-
- protected virtual void ContinueOnNewLine (string st)
- {
- }
- CodeGenerator ()
- {
- indent = 8;
- }
-
- //
- // Code Generation methods
- //
- protected abstract void GenerateArrayCreateExpression (CodeArrayCreateExpression e);
- protected abstract void GenerateAssignStatement (CodeAssignStatement s);
- protected abstract void GenerateAttachEventStatement (CodeAttachEventStatement s);
- protected abstract void GenerateBaseReferenceExpression (CodeBaseReferenceExpression e);
- protected abstract void GenerateBinaryOperatorExpression (CodeBinaryOperatorExpression x);
- protected abstract void GenerateCastExpression (CodeCastExpression x);
- protected abstract void GenerateClasses (CodeNamespace x);
- protected abstract void GenerateCommentStatement (CodeCommentStatement x);
- protected abstract void GenerateConstructor (CodeConstructor x, CodeTypeDeclaration c);
- protected abstract void GenerateDelegateCreateExpression (CodeDelegateCreateExpression x);
- protected abstract void GenerateDelegateInvokeExpression (CodeDelegateInvokeExpression x);
- protected abstract void GenerateEvent (CodeMemberEvent x, CodeTypeDeclaration c);
- protected abstract void GenerateExpression (CodeExpression x);
- protected abstract void GenerateField (CodeMemberField x);
- protected abstract void GenerateFieldReferenceExpression (CodeFieldReferenceExpression x);
- protected abstract void GenerateIndexerExpression (CodeIndexerExpression x);
- protected abstract void GenerateLinePragmaStart (CodeLinePragma x);
- protected abstract void GenerateLinePragmaEnd (CodeLinePragma x);
- protected abstract void GenerateMethod (CodeMemberMethod m, CodeTypeDeclaration c);
- protected abstract void GenerateMethodInvokeExpression (CodeMethodInvokeExpression x);
- protected abstract void GenerateMethodReturnStatement (CodeMethodReturnStatement x);
- protected abstract void GenerateNamespace (CodeNamespace x);
- protected abstract void GenerateNamespaceStart (CodeNamespace x);
- protected abstract void GenerateNamespaceEnd (CodeNamespace x);
- protected abstract void GenerateNamespaceImport (CodeNamespaceImport i);
- protected abstract void GenerateNamespaceImports (CodeNamespace i);
- protected abstract void GenerateObjectCreateExpression (CodeObjectCreateExpression x);
- protected abstract void GenerateParameterDeclarationExpression (CodeParameterDeclarationExpression x);
- protected abstract void GeneratePrimitiveExpression (CodePrimitiveExpression x);
- protected abstract void GenerateProperty (CodeMemberProperty e, CodeTypeDeclaration c);
- protected abstract void GeneratePropertyReferenceExpression (CodePropertyReferenceExpression x);
- protected abstract void GenerateStatement (CodeStatement x);
- protected abstract void GenerateStatementCollection (CodeStatementCollection x);
- protected abstract void GenerateThisReferenceExpression (CodeThisReferenceExpression x);
- protected abstract void GenerateThrowExceptionStatement (CodeThrowExceptionStatement x);
- protected abstract void GenerateTryCatchFinallyStatement (CodeTryCatchFinallyStatement x);
- protected abstract void GenerateTypeOfExpression (CodeTypeOfExpression x);
- protected abstract void GenerateTypeReferenceExpression (CodeTypeReferenceExpression x);
- protected abstract void GenerateVariableDeclarationStatement (CodeVariableDeclarationStatement x);
- //
- // Other members
- //
- protected abstract string GetNullToken ();
- public abstract bool IsValidIdentifier (string value);
- public static bool IsValidLanguateIndependentIdentifier (string value)
- {
- /* FIXME: implement */
- return true;
- }
- //
- // Output functions
- //
- protected virtual void OutputAttributeArgument (CodeAttributeArgument arg)
- {
- }
- protected virtual void OutputDirection (FieldDirection dir)
- {
- }
- protected virtual void OutputExpressionList (CodeExpressionCollection c)
- {
- }
- protected virtual void OutputExpressionLIst (CodeExpressionCollection c, bool useNewlines)
- {
- }
- protected virtual void OutputFieldScopeModifier (MemberAttributes attrs)
- {
- }
- protected virtual void OutputIdentifier (string ident)
- {
- }
- protected virtual void OutputMemberAccessModifier (MemberAttributes attrs)
- {
- }
- protected virtual void OutputMemberScopeModifier (MemberAttributes attrs)
- {
- }
- protected virtual void OutputOperator (CodeBinaryOperatorType op)
- {
- }
- protected virtual void OutputParameters (CodeParameterDeclarationExpressionCollection pars)
- {
- }
- protected virtual void OutputType (string typeRef)
- {
- }
- protected virtual void OutputTypeAttributes (TypeAttributes attrs)
- {
- }
- protected virtual void OutputTypeNamePair (string typeRef, string name)
- {
- }
- protected abstract string QuoteLiteralString (string value);
- public virtual void ValidateIdentifier (string value)
- {
- }
- //
- // Properties
- //
- protected string currentClassName;
- protected string CurrentClassName {
- get {
- return currentClassName;
- }
- }
-
- protected CodeTypeMember codeClassMember;
- protected CodeTypeMember CurrentMember {
- get {
- return codeClassMember;
- }
- }
- protected string CurrentMemberName {
- get {
- return codeClassMember.Name;
- }
- }
- int indent;
- protected int Indent {
- get {
- return indent;
- }
- set {
- indent = value;
- }
- }
- //
- // This concept seems broken, I should not really be using
- // a flag, I should be "probing" what is being generated.
- // at least the Start/End
- // functions should not be abstract, or abstract could
- // have an implementation piece?
- //
- public bool isCurrentClass;
- protected bool IsCurrentClass {
- get {
- return isCurrentClass;
- }
- }
- public bool isCurrentDelegate;
- protected bool IsCurrentDelegate {
- get {
- return isCurrentDelegate;
- }
- }
- public bool isCurrentEnum;
- protected bool IsCurrentEnum {
- get {
- return isCurrentEnum;
- }
- }
- public bool isCurrentInterface;
- protected bool IsCurrentInterface {
- get {
- return isCurrentInterface;
- }
- }
- public bool isCurrentStruct;
- protected bool IsCurrentStruct {
- get {
- return isCurrentStruct;
- }
- }
- protected TextWriter Output {
- get {
- return output;
- }
- set {
- output = value;
- }
- }
- public abstract void GenerateCodeFromExpression (TextWriter output, CodeExpression expression);
- public abstract void GenerateCodeFromNamespace (TextWriter output, CodeExpression expression);
- public abstract void GenerateCodeFromStatement (TextWriter output, CodeStatement expression);
-
- }
- }
|