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); }
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); } }
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 } }
public string ToUserString(Builder.Localization.Locale locale) { System.Text.StringBuilder sb = new System.Text.StringBuilder(); this.ToUserStringImpl(sb, locale); return(sb.ToString()); }
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()); }
// 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)); }