示例#1
0
 public static ILInstruction GetTypeInstruction(ITypeInstruction instruction)
 {
     return(instruction == null ? null :
            new ILInstruction()
     {
         TypeInstruction = new TypeInstruction()
         {
             InstructionType = instruction.InstructionType,
             Token = instruction.Token
         }
     });
 }
示例#2
0
        public CodeNamespace GenerateCode(XmlReader reader)
        {
            CodeTypeDeclaration templateType = new CodeTypeDeclaration(defaultTypeName);

            templateType.Attributes = MemberAttributes.Family;
            templateType.IsPartial  = true;
            CodeNamespace templateNamespace = new CodeNamespace(defaultTargetNamespace);

            templateNamespace.Types.Add(templateType);
            AddCommonImports(templateNamespace);

            CodeMemberMethod renderMethod = new CodeMemberMethod();

            renderMethod.Name       = "Render";
            renderMethod.Attributes = MemberAttributes.Public | MemberAttributes.Final;
            renderMethod.Parameters.Add(new CodeParameterDeclarationExpression(
                                            typeof(XmlWriter), "writer"));

            CodeArgumentReferenceExpression writerExpression = new CodeArgumentReferenceExpression("writer");

            templateType.Members.Add(renderMethod);

            templateType.Members.Add(BuildConverter());

            while (reader.Read())
            {
                if (reader.NodeType == XmlNodeType.ProcessingInstruction)
                {
                    ThrowIfUnknownInstruction(reader);

                    if (typeInstructions.ContainsKey(reader.LocalName))
                    {
                        ITypeInstruction ti = typeInstructions[reader.LocalName];
                        ti.Process(reader.Value, templateNamespace, templateType, renderMethod);
                    }
                    if (inlineInstructions.ContainsKey(reader.LocalName))
                    {
                        IInlineInstruction      ii  = inlineInstructions[reader.LocalName];
                        CodeStatementCollection col = ii.Process(reader.Value);
                        renderMethod.Statements.AddRange(col);
                    }
                }
                else
                {
                    renderMethod.Statements.AddRange(
                        generationFunctions[reader.NodeType](reader, writerExpression));
                }
            }

            return(templateNamespace);
        }
 public virtual void VisitStoreObjectInstruction(ITypeInstruction instruction)
 {
     Visit(instruction);
 }
 public virtual void VisitStoreArrayElementInstruction(ITypeInstruction instruction)
 {
     Visit(instruction);
 }
 public virtual void VisitSizeOfInstruction(ITypeInstruction instruction)
 {
     Visit(instruction);
 }
 public virtual void VisitNewArrayInstruction(ITypeInstruction instruction)
 {
     Visit(instruction);
 }
 public virtual void VisitLoadTypeReferenceInstruction(ITypeInstruction instruction)
 {
     Visit(instruction);
 }
 public virtual void VisitBoxInstruction(ITypeInstruction instruction)
 {
     Visit(instruction);
 }
 public virtual void VisitLoadArrayElementAddressInstruction(ITypeInstruction instruction)
 {
     Visit(instruction);
 }
 public virtual void VisitIsInstanceOfClassInstruction(ITypeInstruction instruction)
 {
     Visit(instruction);
 }
 public virtual void VisitInitializeObjectInstruction(ITypeInstruction instruction)
 {
     Visit(instruction);
 }
 public virtual void VisitConstrainedInstruction(ITypeInstruction instruction)
 {
     Visit(instruction);
 }
 public virtual void VisitUnboxAnyInstruction(ITypeInstruction instruction)
 {
     Visit(instruction);
 }
 public static void VisitTypeInstruction(ITypeInstruction typeInstruction, IILInstructionVisitor visitor)
 {
     typeInstructionVisitor[typeInstruction.InstructionType](visitor)(typeInstruction);
 }