public IParseTreeValue CreateDeclaredType(string expression, string declaredTypeName) { if (expression is null || declaredTypeName is null) { throw new ArgumentNullException(); } if (ParseTreeValue.TryGetNonPrintingControlCharCompareToken(expression, out string comparableToken)) { var charConversion = new TypeTokenPair(Tokens.String, comparableToken); return(ParseTreeValue.CreateValueType(charConversion)); } var goalTypeTokenPair = new TypeTokenPair(declaredTypeName, null); var typeToken = TypeTokenPair.ConformToType(declaredTypeName, expression); if (typeToken.HasValue) { if (LetCoerce.ExceedsValueTypeRange(typeToken.ValueType, typeToken.Token)) { return(ParseTreeValue.CreateOverflowExpression(expression, declaredTypeName)); } return(ParseTreeValue.CreateValueType(typeToken)); } return(ParseTreeValue.CreateExpression(new TypeTokenPair(declaredTypeName, expression))); }