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); }