Exemplo n.º 1
0
        private void HandleSequenceParserException(SequenceParserException ex)
        {
            if (ex.Name == null &&
                ex.Kind != SequenceParserError.TypeMismatch &&
                ex.Kind != SequenceParserError.MatchClassError &&
                ex.Kind != SequenceParserError.MatchClassNotImplementedError &&
                ex.Kind != SequenceParserError.FilterError &&
                ex.Kind != SequenceParserError.FilterParameterError &&
                ex.Kind != SequenceParserError.OperatorNotFound)
            {
                Console.Error.WriteLine("Unknown " + ex.DefinitionTypeName + ": \"{0}\"", ex.Name);
                return;
            }

            switch (ex.Kind)
            {
            case SequenceParserError.BadNumberOfParameters:
                if (seqHelper.actionsTypeInformation.InputTypes(ex.Name).Count != ex.NumGiven)
                {
                    Console.Error.WriteLine("Wrong number of parameters for " + ex.DefinitionTypeName + " \"" + ex.Name + "\"!");
                }
                else
                {
                    goto default;
                }
                break;

            case SequenceParserError.BadNumberOfReturnParameters:
                if (seqHelper.actionsTypeInformation.OutputTypes(ex.Name).Count != ex.NumGiven)
                {
                    Console.Error.WriteLine("Wrong number of return values for " + ex.DefinitionTypeName + " \"" + ex.Name + "\"!");
                }
                else
                {
                    goto default;
                }
                break;

            case SequenceParserError.BadParameter:
                Console.Error.WriteLine("The " + (ex.BadParamIndex + 1) + ". parameter is not valid for " + ex.DefinitionTypeName + " \"" + ex.Name + "\"!");
                break;

            case SequenceParserError.BadReturnParameter:
                Console.Error.WriteLine("The " + (ex.BadParamIndex + 1) + ". return parameter is not valid for " + ex.DefinitionTypeName + " \"" + ex.Name + "\"!");
                break;

            case SequenceParserError.MatchClassError:
                Console.Error.WriteLine("Unknown match class \"" + ex.Name + "\" in filter call \"" + ex.FilterName + "\"!");
                break;

            case SequenceParserError.MatchClassNotImplementedError:
                Console.Error.WriteLine("Match class \"" + ex.Name + "\" is not implemented by rule \"" + ex.FilterName + "\"!");
                break;

            case SequenceParserError.FilterError:
                Console.Error.WriteLine("Can't apply filter " + ex.FilterName + " to rule (or match class) " + ex.Name + "!");
                return;

            case SequenceParserError.FilterParameterError:
                Console.Error.WriteLine("Filter parameter mismatch for filter \"" + ex.FilterName + "\" applied to \"" + ex.Name + "\"!");
                return;

            case SequenceParserError.OperatorNotFound:
                Console.Error.WriteLine("Operator not found/arguments not of correct type: " + ex.Expression);
                return;

            case SequenceParserError.RuleNameUsedByVariable:
                Console.Error.WriteLine("The name of the variable conflicts with the name of action/sequence \"" + ex.Name + "\"!");
                return;

            case SequenceParserError.VariableUsedWithParametersOrReturnParameters:
                Console.Error.WriteLine("The variable \"" + ex.Name + "\" may neither receive parameters nor return values!");
                return;

            case SequenceParserError.UnknownAttribute:
                Console.WriteLine("Unknown attribute \"" + ex.Name + "\"!");
                return;

            case SequenceParserError.UnknownMatchMember:
                Console.WriteLine("Unknown member (of match type) \"" + ex.Name + "\"!");
                return;

            case SequenceParserError.UnknownProcedure:
                Console.WriteLine("Unknown procedure \"" + ex.Name + "\"!");
                return;

            case SequenceParserError.UnknownFunction:
                Console.WriteLine("Unknown function \"" + ex.Name + "\"!");
                return;

            case SequenceParserError.TypeMismatch:
                Console.Error.WriteLine("The construct \"" + ex.VariableOrFunctionName + "\" expects:" + ex.ExpectedType + " but is / is given " + ex.GivenType + "!");
                return;

            default:
                throw new ArgumentException("Invalid error kind: " + ex.Kind);
            }

            if (seqHelper.actionsTypeInformation.rulesToInputTypes.ContainsKey(ex.Name))
            {
                Console.Error.Write("Signature of rule/test: {0}", ex.Name);
                PrintInputParams(seqHelper.actionsTypeInformation.rulesToInputTypes[ex.Name]);
                PrintOutputParams(seqHelper.actionsTypeInformation.rulesToOutputTypes[ex.Name]);
                Console.Error.WriteLine();
            }
            else if (seqHelper.actionsTypeInformation.sequencesToInputTypes.ContainsKey(ex.Name))
            {
                Console.Error.Write("Signature of sequence: {0}", ex.Name);
                PrintInputParams(seqHelper.actionsTypeInformation.sequencesToInputTypes[ex.Name]);
                PrintOutputParams(seqHelper.actionsTypeInformation.sequencesToOutputTypes[ex.Name]);
                Console.Error.WriteLine();
            }
            else if (seqHelper.actionsTypeInformation.proceduresToInputTypes.ContainsKey(ex.Name))
            {
                Console.Error.Write("Signature procedure: {0}", ex.Name);
                PrintInputParams(seqHelper.actionsTypeInformation.proceduresToInputTypes[ex.Name]);
                PrintOutputParams(seqHelper.actionsTypeInformation.proceduresToOutputTypes[ex.Name]);
                Console.Error.WriteLine();
            }
            else if (seqHelper.actionsTypeInformation.functionsToInputTypes.ContainsKey(ex.Name))
            {
                Console.Error.Write("Signature of function: {0}", ex.Name);
                PrintInputParams(seqHelper.actionsTypeInformation.functionsToInputTypes[ex.Name]);
                Console.Error.Write(" : ");
                Console.Error.Write(seqHelper.actionsTypeInformation.functionsToOutputType[ex.Name]);
                Console.Error.WriteLine();
            }
        }
 void IDebuggerEnvironment.HandleSequenceParserException(SequenceParserException ex)
 {
     impl.HandleSequenceParserException(ex);
 }