58 static const int mode_token[] = {
116 int cur_token_length;
130 cur_token =
core_yylex(&(lvalp->core_yystype), llocp, yyscanner);
141 cur_token_length = 3;
144 cur_token_length = 5;
147 cur_token_length = 4;
163 *llocp + cur_token_length;
211 cur_token = NULLS_LA;
230 if (next_token == UESCAPE)
246 if (next_token != SCONST)
259 lvalp->core_yystype.str =
275 lvalp->core_yystype.str =
282 if (cur_token == UIDENT)
286 strlen(lvalp->core_yystype.str),
290 else if (cur_token == USCONST)
304 if (c >=
'0' && c <=
'9')
306 if (c >=
'a' && c <=
'f')
307 return c -
'a' + 0xA;
308 if (c >=
'A' && c <=
'F')
309 return c -
'A' + 0xA;
310 elog(
ERROR,
"invalid hexadecimal digit");
320 (
errcode(ERRCODE_SYNTAX_ERROR),
321 errmsg(
"invalid Unicode escape value")));
368 size_t out_dist = out -
new;
374 out =
new + out_dist;
384 in - str + position + 3);
392 else if (isxdigit((
unsigned char) in[1]) &&
393 isxdigit((
unsigned char) in[2]) &&
394 isxdigit((
unsigned char) in[3]) &&
395 isxdigit((
unsigned char) in[4]))
399 unicode = (
hexval(in[1]) << 12) +
418 pair_first = unicode;
426 else if (in[1] ==
'+' &&
427 isxdigit((
unsigned char) in[2]) &&
428 isxdigit((
unsigned char) in[3]) &&
429 isxdigit((
unsigned char) in[4]) &&
430 isxdigit((
unsigned char) in[5]) &&
431 isxdigit((
unsigned char) in[6]) &&
432 isxdigit((
unsigned char) in[7]))
436 unicode = (
hexval(in[2]) << 20) +
457 pair_first = unicode;
467 (
errcode(ERRCODE_SYNTAX_ERROR),
468 errmsg(
"invalid Unicode escape"),
469 errhint(
"Unicode escapes must be \\XXXX or \\+XXXXXX.")));
496 (
errcode(ERRCODE_SYNTAX_ERROR),
497 errmsg(
"invalid Unicode surrogate pair"),
static PgChecksumMode mode
int errhint(const char *fmt,...)
static unsigned int hexval(unsigned char c)
int base_yyparse(core_yyscan_t yyscanner)
void cancel_scanner_errposition_callback(ScannerCallbackState *scbstate)
static bool is_valid_unicode_codepoint(pg_wchar c)
PGDLLIMPORT const uint16 ScanKeywordTokens[]
static bool is_utf16_surrogate_second(pg_wchar c)
int errcode(int sqlerrcode)
static bool next_token(char **lineptr, char *buf, int bufsz, bool *initial_quote, bool *terminating_comma, int elevel, char **err_msg)
static bool check_uescapechar(unsigned char escape)
PGDLLIMPORT const ScanKeywordList ScanKeywords
void scanner_yyerror(const char *message, core_yyscan_t yyscanner) pg_attribute_noreturn()
void truncate_identifier(char *ident, int len, bool warn)
#define MAX_UNICODE_EQUIVALENT_STRING
void setup_scanner_errposition_callback(ScannerCallbackState *scbstate, core_yyscan_t yyscanner, int location)
static char * str_udeescape(const char *str, char escape, int position, core_yyscan_t yyscanner)
void parser_init(base_yy_extra_type *yyext)
core_yyscan_t scanner_init(const char *str, core_yy_extra_type *yyext, const ScanKeywordList *keywordlist, const uint16 *keyword_tokens)
static pg_wchar surrogate_pair_to_codepoint(pg_wchar first, pg_wchar second)
int base_yylex(YYSTYPE *lvalp, YYLTYPE *llocp, core_yyscan_t yyscanner)
int scanner_errposition(int location, core_yyscan_t yyscanner)
void pg_unicode_to_server(pg_wchar c, unsigned char *s)
bool scanner_isspace(char ch)
int core_yylex(core_YYSTYPE *lvalp, YYLTYPE *llocp, core_yyscan_t yyscanner)
#define pg_yyget_extra(yyscanner)
#define ereport(elevel,...)
#define Assert(condition)
static void check_unicode_value(pg_wchar c)
void * repalloc(void *pointer, Size size)
static core_yyscan_t yyscanner
int errmsg(const char *fmt,...)
void scanner_finish(core_yyscan_t yyscanner)
static bool is_utf16_surrogate_first(pg_wchar c)
List * raw_parser(const char *str, RawParseMode mode)