コード例 #1
0
        internal static int GetId(StringConstant str, Builder.Localization.Locale locale)
        {
            int output = GetId(str.Value);

            if (output == -1)
            {
                throw ParserException.ThrowException(
                          locale,
                          Builder.Localization.ErrorMessages.UNKNOWN_CORE_FUNCTION_ID,
                          str.FirstToken,
                          str.Value);
            }
            return(output);
        }
コード例 #2
0
        public void EnsureCanAssignToA(Token throwToken, ResolvedType targetType)
        {
            if (!CanAssignToA(targetType))
            {
                Builder.Localization.Locale en = Builder.Localization.Locale.Get("en");

                // TODO: use the correct locale
                string msg = "Cannot assign a value of type '";
                msg += this.ToUserString(en);
                msg += "' to '";
                msg += targetType.ToUserString(en);
                msg += "'";

                throw new ParserException(throwToken, msg);
            }
        }
コード例 #3
0
        private void ToUserStringImpl(System.Text.StringBuilder sb, Builder.Localization.Locale locale)
        {
            switch (this.Category)
            {
            case ResolvedTypeCategory.BOOLEAN: sb.Append("boolean"); return;

            case ResolvedTypeCategory.FLOAT: sb.Append("float"); return;

            case ResolvedTypeCategory.INTEGER: sb.Append("integer"); return;

            case ResolvedTypeCategory.OBJECT: sb.Append("object"); return;

            case ResolvedTypeCategory.NULL: sb.Append("null"); return;

            case ResolvedTypeCategory.STRING: sb.Append("string"); return;

            case ResolvedTypeCategory.LIST:
                sb.Append("List<");
                this.Generics[0].ToUserStringImpl(sb, locale);
                sb.Append('>');
                return;

            case ResolvedTypeCategory.DICTIONARY:
                sb.Append("Dictionary<");
                this.Generics[0].ToUserStringImpl(sb, locale);
                sb.Append(", ");
                this.Generics[1].ToUserStringImpl(sb, locale);
                sb.Append('>');
                return;

            case ResolvedTypeCategory.VOID: sb.Append("void"); return;

            case ResolvedTypeCategory.NULLABLE:
                this.Generics[0].ToUserStringImpl(sb, locale);
                sb.Append('?');
                return;

            case ResolvedTypeCategory.INSTANCE:
                sb.Append(this.ClassTypeOrReference.GetFullyQualifiedLocalizedName(locale));
                return;

            case ResolvedTypeCategory.CLASS_DEFINITION:
                sb.Append("Class<");
                sb.Append(this.ClassTypeOrReference.GetFullyQualifiedLocalizedName(locale));
                sb.Append('>');
                return;

            case ResolvedTypeCategory.ANY:
                sb.Append("[ANY]");
                return;

            case ResolvedTypeCategory.FUNCTION_POINTER:
                sb.Append("Func<");
                for (int i = 0; i < this.FunctionArgs.Length; ++i)
                {
                    this.FunctionArgs[i].ToUserStringImpl(sb, locale);
                    sb.Append(", ");
                }
                this.FunctionReturnType.ToUserStringImpl(sb, locale);
                sb.Append('>');
                return;

            default:
#if DEBUG
                throw new System.NotImplementedException(this.ToString());
#else
                sb.Append("<???>");
                return;
#endif
            }
        }
コード例 #4
0
 public string ToUserString(Builder.Localization.Locale locale)
 {
     System.Text.StringBuilder sb = new System.Text.StringBuilder();
     this.ToUserStringImpl(sb, locale);
     return(sb.ToString());
 }
コード例 #5
0
 internal ParserException(Builder.Localization.ErrorMessages errorType, Token token, Builder.Localization.Locale locale)
     : this(token, locale.Strings.Get(errorType.ToString()))
 {
     this.TokenInfo       = token;
     this.OriginalMessage = locale.Strings.Get(errorType.ToString());
 }
コード例 #6
0
 // Throws an exception, but also returns an exception so that you can use 'throw' syntax
 // at the calling site to prevent the compiler from complaining about control flow branches
 // that aren't actually accessible.
 internal static ParserException ThrowException(Builder.Localization.Locale locale, Builder.Localization.ErrorMessages errorType, Token token, params string[] args)
 {
     throw new ParserException(token, locale.Strings.Get(errorType.ToString(), args));
 }