X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-psi;a=blobdiff_plain;f=src%2Fparser.c;h=719c551fdb7bdd1bc76a7229d26c929e959d89f2;hp=dfeb9701542f1b4f5144df73cf10ff7ad44bfb3a;hb=c0873cbbe9e5a83305adbc2bbd94aede5437f33d;hpb=f24325648c601d4b0835074f271072f4832e4478 diff --git a/src/parser.c b/src/parser.c index dfeb970..719c551 100644 --- a/src/parser.c +++ b/src/parser.c @@ -1,4 +1,4 @@ -/* Generated by re2c 1.1.1 on Thu Nov 1 08:10:31 2018 */ +/* Generated by re2c 1.1.1 on Fri Nov 2 08:39:44 2018 */ #line 1 "src/parser.re" /******************************************************************************* Copyright (c) 2016, Michael Wallner . @@ -52,8 +52,6 @@ struct psi_parser *psi_parser_init(struct psi_parser *P, psi_error_cb error, uns P->preproc = psi_cpp_init(P); - psi_cpp_load_defaults(P->preproc); - return P; } @@ -103,7 +101,7 @@ struct psi_parser_input *psi_parser_open_file(struct psi_parser *P, const char * } fb->length = sb.st_size; - fb->file = zend_string_init(filename, strlen(filename), 1); + fb->file = zend_string_init_interned(filename, strlen(filename), 1); return fb; } @@ -123,7 +121,7 @@ struct psi_parser_input *psi_parser_open_string(struct psi_parser *P, const char memset(sb->buffer + length, 0, YYMAXFILL); sb->length = length; - sb->file = zend_string_init("", strlen(""), 1); + sb->file = zend_string_init_interned("", strlen(""), 1); return sb; } @@ -172,7 +170,7 @@ void psi_parser_postprocess(struct psi_parser *P) smart_str_appendl_ex(&ns_name, ZEND_STRL("psi\\"), 1); smart_str_append_ex(&ns_name, name, 1); name_str = smart_str_extract(&ns_name); - type_str = zend_string_init(ZEND_STRL(""), 1); + type_str = zend_string_init_interned(ZEND_STRL(""), 1); num = psi_num_exp_copy(scope.macro->exp); def = psi_impl_def_val_init(PSI_T_NUMBER, num); @@ -197,7 +195,7 @@ void psi_parser_postprocess(struct psi_parser *P) smart_str_appendl_ex(&ns_name, ZEND_STRL("psi\\"), 1); smart_str_append_ex(&ns_name, name, 1); name_str = smart_str_extract(&ns_name); - type_str = zend_string_init(ZEND_STRL("string"), 1); + type_str = zend_string_init_interned(ZEND_STRL("string"), 1); type = psi_impl_type_init(PSI_T_STRING, type_str); def = psi_impl_def_val_init(PSI_T_QUOTED_STRING, t->text); @@ -264,17 +262,19 @@ void psi_parser_free(struct psi_parser **P) ++I->lines #define NEWTOKEN(t) \ - token = psi_token_init(t, tok, cur - tok, tok - eol + 1, I->lines, I->file); \ + if (t == PSI_T_COMMENT || t == PSI_T_WHITESPACE) { \ + token = psi_token_init(t, "", 0, tok - eol + 1, I->lines, I->file); \ + } else { \ + token = psi_token_init(t, tok, cur - tok, tok - eol + 1, I->lines, I->file); \ + } \ tokens = psi_plist_add(tokens, &token); \ if (P->flags & PSI_DEBUG) { \ fprintf(stderr, "PSI< "); \ psi_token_dump(2, token); \ } -union int_suffix { - char s[4]; - uint32_t i; -}; + + struct psi_plist *psi_parser_scan(struct psi_parser *P, struct psi_parser_input *I) {