Exemple #1
0
        /// <summary>
        /// Process the interchange version identifier of the interchange file.
        /// Set internal state based on the version identifier.
        /// </summary>
        /// <param name="chunk">Chunk of source code that is supposed to contain the version identifier.</param>
        /// <returns></returns>
        private bool ProcessVersionSpecification(InterchangeChunk chunk)
        {
            InterchangeFormatParser parser = parser = new InterchangeFormatParser(new StringReader(chunk.SourceChunk));

            parser.ErrorSink = chunk;
            InterchangeVersionIdentifierNode vidNode = parser.ParseVersionId(); // Parser always returns a node.

            if (vidNode.VersionId != null)
            {
                this.Version = vidNode.VersionId.Value;
            }

            if ((vidNode.VersionId != null) && !this.SetVersionService())
            {
                if (this.ErrorSink != null)
                {
                    this.ErrorSink.AddInterchangeError(
                        chunk.TranslateSourcePosition(vidNode.VersionId.StartPosition),
                        chunk.TranslateSourcePosition(vidNode.VersionId.StopPosition),
                        InterchangeFormatErrors.InvalidVersionId);
                }
                return(false); // Cannot process this version
            }
            return(true);
        }
        protected internal virtual InterchangeVersionIdentifierNode ParseVersionId()
        {
            // TODO : Move constants out of code into a the InterchangeFormatConstants class

            // PARSE: <interchangeVersionIdentifier> ::= 'Smalltalk' 'interchangeVersion:' <versionId>
            //      <versionId> ::= quotedString
            InterchangeVersionIdentifierNode result = this.CreateInterchangeVersionIdentifierNode();
            Token           token = this.GetNextTokenxx();
            IdentifierToken idt   = token as IdentifierToken;

            if ((idt == null) || (idt.Value != "Smalltalk"))
            {
                this.ReportParserError(result, InterchangeFormatErrors.MissingInterchangeVersionIdentifier, token);
                return(result);
            }

            token = this.GetNextTokenxx();
            KeywordToken kwt = token as KeywordToken;

            if ((kwt == null) || (kwt.Value != "interchangeVersion:"))
            {
                this.ReportParserError(result, InterchangeFormatErrors.MissingInterchangeVersionIdentifier, token);
                return(result);
            }

            token = this.GetNextTokenxx();
            StringToken versionId = token as StringToken;

            if (versionId == null)
            {
                this.ReportParserError(result, InterchangeFormatErrors.MissingInterchangeVersionIdentifier, token);
                return(result);
            }

            return(new InterchangeVersionIdentifierNode(versionId));
        }
 /// <summary>
 /// Visits the Interchange Version Identifier node.
 /// </summary>
 /// <param name="node">The node to visit.</param>
 public override bool VisitInterchangeVersionIdentifier(InterchangeVersionIdentifierNode node)
 {
     if (node.VersionId == null)
         return false;
     return true;
 }
 /// <summary>
 /// Visits the Interchange Version Identifier node.
 /// </summary>
 /// <param name="node">The node to visit.</param>
 public virtual TResult VisitInterchangeVersionIdentifier(InterchangeVersionIdentifierNode node)
 {
     return(default(TResult)); // The default naive implementation
 }