示例#1
0
        private static AssertionError CreateVMError(ErrorInfo info)
        {
            var message    = new StringBuilder();
            var expression = String.Empty;
            var kind       = String.Empty;

            var offenders = new List <string>();
            var parts     = new List <string>();

            message.Append(ErrorKindString[info.Kind]);
            message.Append(": ");

            switch (info.Code)
            {
            case ErrorCode.BinaryOperationInvalidOperand:
                offenders.Add(Stringify.Object((Object)info.Offenders.First()));
                offenders.Add(Stringify.Opcode((byte)info.Offenders[1]));
                offenders.Add(Stringify.Object((Object)info.Offenders.Last()));
                expression = ComposeExpression(info, offenders, arrow: true);
                parts.Add(expression);
                parts.Add(Stringify.Kind(((Object)info.Offenders.First()).Kind));
                break;
            }

            message.Append(ComposeErrorMessage(parts, ErrorMessages[info.Code]));

            return(new AssertionError(message.ToString()));
        }
示例#2
0
        private static string StringifyHash(Object obj)
        {
            var hashtable = (Dictionary <string, Object>)obj.Value;
            var sb        = new StringBuilder();

            sb.Append("{ ");

            hashtable.Keys.ToList().ForEach(key =>
            {
                sb.Append(key);
                sb.Append(": ");
                sb.Append(Stringify.Object(hashtable[key]));
            });

            sb.Append(" }");

            return(sb.ToString());
        }
示例#3
0
        private static string StringifyArray(Object obj)
        {
            var array = (List <Object>)obj.Value;
            var sb    = new StringBuilder();

            sb.Append("[");

            array.ForEach(element =>
            {
                sb.Append(Stringify.Object(element));

                if (element != array.Last())
                {
                    sb.Append(", ");
                }
            });

            sb.Append("]");

            return(sb.ToString());
        }
示例#4
0
        private static AssertionError CreateParseError(ErrorInfo info)
        {
            var    sb   = new StringBuilder();
            string kind = String.Empty;
            string expression;

            sb.Append(ErrorKindString[info.Kind]);
            sb.Append(": ");

            switch (info.Code)
            {
            case ErrorCode.ExpectedCommaToken:
            case ErrorCode.ExpectedColonToken:
                expression = ComposeExpression(info, arrow: true, placeholder: default(string));
                break;

            case ErrorCode.MissingExpressionToken:
                expression = ComposeExpression(info, arrow: false, placeholder: DeterminePlaceholder(SyntaxKind.Int));
                break;

            case ErrorCode.MissingLetAssignToken:
                expression = ComposeExpression(info, arrow: false, placeholder: default(string));
                break;

            case ErrorCode.MissingColon:
                expression = ComposeExpression(info, arrow: false, placeholder: DeterminePlaceholder(SyntaxKind.Colon));
                break;

            case ErrorCode.MissingComma:
                expression = ComposeExpression(info, arrow: false, placeholder: DeterminePlaceholder(SyntaxKind.Comma));
                break;

            case ErrorCode.MissingOpeningToken:
            case ErrorCode.MissingClosingToken:
                expression = ComposeExpression(info, arrow: false, placeholder: DeterminePlaceholder((SyntaxKind)info.Offenders.First()));
                kind       = Stringify.Kind((SyntaxKind)info.Offenders.First());
                break;

            case ErrorCode.InvalidLetExpression:
            case ErrorCode.InvalidLetIdentifierToken:
            case ErrorCode.InvalidLetAssignToken:
            case ErrorCode.InvalidReturnExpression:
            case ErrorCode.InvalidToken:
                expression = ComposeExpression(info, arrow: true, placeholder: default(string));
                break;

            default:
                expression = String.Empty;
                break;
            }

            List <string> offenders = new List <string> {
                expression
            };

            if (kind != String.Empty)
            {
                offenders.Add(kind);
            }

            sb.Append(ComposeErrorMessage(offenders, ErrorMessages[info.Code]));

            return(new AssertionError(sb.ToString()));
        }
示例#5
0
        private static AssertionError CreateEvaluationError(ErrorInfo info)
        {
            List <string> offenders = new List <string>();
            var           sb        = new StringBuilder();

            sb.Append(ErrorKindString[info.Kind]);
            sb.Append(": ");

            switch (info.Code)
            {
            case ErrorCode.ArrayExpressionEvaluation:
            case ErrorCode.ArrayIndexExpressionEvaluation:
            case ErrorCode.HashIndexExpressionEvaluation:
            case ErrorCode.InfixExpressionEvaluation:
                offenders = new List <String>
                {
                    Stringify.Object((Object)info.Offenders.First()),
                    Stringify.Object((Object)info.Offenders.Last())
                };
                break;

            case ErrorCode.BangOperatorExpressionEvaluation:
                offenders = new List <String> {
                    Stringify.Object((Object)info.Offenders.First())
                };
                break;

            case ErrorCode.IdentifierExpressionEvaluation:
                offenders = new List <String> {
                    Stringify.Object(info.Offenders.First())
                };
                break;

            case ErrorCode.MinusOperatorExpressionEvaluation:
                offenders = new List <String>
                {
                    Stringify.Object((Object)info.Offenders.First()),
                    Stringify.Kind(((Object)info.Offenders.First()).Kind)
                };
                break;

            case ErrorCode.InfixExpressionOperatorEvaluation:
                offenders = new List <String>
                {
                    Stringify.Object((Object)info.Offenders.First()),
                    ((Token)info.Offenders[1]).Literal,
                    Stringify.Object((Object)info.Offenders.Last())
                };
                break;

            case ErrorCode.BooleanInfixExpressionEvaluation:
            case ErrorCode.StringExpressionOperatorEvaluation:
                offenders = new List <String>
                {
                    Stringify.Object(info.Offenders.First()),
                    ((Token)info.Offenders[1]).Literal,
                    Stringify.Object(info.Offenders.Last())
                };
                break;

            case ErrorCode.BuiltInLenUnexpectedNoOfArguments:
            case ErrorCode.BuiltInFirstUnexpectedNoOfArguments:
            case ErrorCode.BuiltInLastUnexpectedNoOfArguments:
            case ErrorCode.BuiltInRestUnexpectedNoOfArguments:
            case ErrorCode.BuiltInPushUnexpectedNoOfArguments:
                offenders = new List <String> {
                    info.Offenders.First().ToString()
                };
                break;

            case ErrorCode.BuiltInLenInvalidArgument:
            case ErrorCode.BuiltInFirstInvalidArgument:
            case ErrorCode.BuiltInLastInvalidArgument:
            case ErrorCode.BuiltInRestInvalidArgument:
                offenders = new List <String>
                {
                    info.Offenders.First().ToString(),
                        Stringify.Object((Object)info.Offenders.Last())
                };
                break;

            case ErrorCode.BuiltInPushInvalidArgument:
                offenders = new List <String>
                {
                    info.Offenders.First().ToString(),
                        Stringify.Object((Object)info.Offenders[1]),
                    Stringify.Object((Object)info.Offenders.Last())
                };
                break;

            case ErrorCode.UnknownOperator:
                offenders = new List <string> {
                    ((Token)info.Offenders.First()).Literal
                };
                break;
            }

            sb.Append(ComposeErrorMessage(offenders, ErrorMessages[info.Code]));

            return(new AssertionError(sb.ToString()));
        }