History

div fixes

- Makefile: don't produce unknown targets - libtcc.c: tcc_set_linker(): improve parser - tcc.h: tcc_internal_error(): don't record __FILE__ (for privacy reasons) - tccgen.c: - reject pointer + float operation - use 'int level' for builtin_frame/return_address - save_regs(): remove VT_ARRAY (confuses riscv64-gen) - tccpe.c: store just basename of loaded dlls (rather than full path) - tccpp.c: remove unused TAL defines - *-link.c: add missing ST_FUNC - i386-gen.c: fix thiscall - riscv64-asm.c/arm-asm.c: stay simple C89 - avoid .designators, decl after statement - avoid multiple instances of same static const objects - use skip() instead of next() & expect() - use cstr_printf() instead of snprintf() & cstr_cat() - tcc_error(), expect(): never return

grischka committed 2 years ago

Commit 6b78e561 parent 3b943be20 files · +227 −508Browse files

Showing the changes to tccpp.c (1 of 20 files). Show all

Unified · Split

tccpp.c+32−31
@@ -92,7 +92,6 @@ static const unsigned char tok_two_chars[] = · 91 unmodified lines
92 '-','>', TOK_ARROW,92 '-','>', TOK_ARROW,
93 '.','.', TOK_TWODOTS,93 '.','.', TOK_TWODOTS,
94 '#','#', TOK_TWOSHARPS,94 '#','#', TOK_TWOSHARPS,
95 '#','#', TOK_PPJOIN,
96 095 0
97};96};
98 97
@@ -137,10 +136,8 @@ ST_FUNC void expect(const char *msg) · 38 unmodified lines
137 136
138#define TOKSYM_TAL_SIZE (768 * 1024) /* allocator for tiny TokenSym in table_ident */137#define TOKSYM_TAL_SIZE (768 * 1024) /* allocator for tiny TokenSym in table_ident */
139#define TOKSTR_TAL_SIZE (768 * 1024) /* allocator for tiny TokenString instances */138#define TOKSTR_TAL_SIZE (768 * 1024) /* allocator for tiny TokenString instances */
140#define CSTR_TAL_SIZE (256 * 1024) /* allocator for tiny CString instances */139#define TOKSYM_TAL_LIMIT 256 /* prefer unique limits to distinguish allocators debug msgs */
141#define TOKSYM_TAL_LIMIT 256 /* prefer unique limits to distinguish allocators debug msgs */140#define TOKSTR_TAL_LIMIT 1024 /* 256 * sizeof(int) */
142#define TOKSTR_TAL_LIMIT 128 /* 32 * sizeof(int) */
143#define CSTR_TAL_LIMIT 1024
144 141
145typedef struct TinyAlloc {142typedef struct TinyAlloc {
146 unsigned limit;143 unsigned limit;
@@ -185,8 +182,8 @@ tail_call: · 38 unmodified lines
185 if (!al)182 if (!al)
186 return;183 return;
187#ifdef TAL_INFO184#ifdef TAL_INFO
188 fprintf(stderr, "limit=%5d, size=%5g MB, nb_peak=%6d, nb_total=%8d, nb_missed=%6d, usage=%5.1f%%\n",185 fprintf(stderr, "limit %4d size %7d nb_peak %5d nb_total %7d nb_missed %5d usage %5.1f%%\n",
189 al->limit, al->size / 1024.0 / 1024.0, al->nb_peak, al->nb_total, al->nb_missed,186 al->limit, al->size, al->nb_peak, al->nb_total, al->nb_missed,
190 (al->peak_p - al->buffer) * 100.0 / al->size);187 (al->peak_p - al->buffer) * 100.0 / al->size);
191#endif188#endif
192#if TAL_DEBUG && TAL_DEBUG != 3 /* do not check TAL leaks with -DMEM_DEBUG=3 */189#if TAL_DEBUG && TAL_DEBUG != 3 /* do not check TAL leaks with -DMEM_DEBUG=3 */
@@ -345,7 +342,7 @@ ST_INLN void cstr_ccat(CString *cstr, int ch) · 152 unmodified lines
345 size = cstr->size + 1;342 size = cstr->size + 1;
346 if (size > cstr->size_allocated)343 if (size > cstr->size_allocated)
347 cstr_realloc(cstr, size);344 cstr_realloc(cstr, size);
348 ((unsigned char *)cstr->data)[size - 1] = ch;345 cstr->data[size - 1] = ch;
349 cstr->size = size;346 cstr->size = size;
350}347}
351 348
@@ -368,6 +365,7 @@ ST_INLN void cstr_u8cat(CString *cstr, int ch) · 16 unmodified lines
368 cstr_cat(cstr, buf, e - buf);365 cstr_cat(cstr, buf, e - buf);
369}366}
370 367
368/* add string of 'len', or of its len/len+1 when 'len' == -1/0 */
371ST_FUNC void cstr_cat(CString *cstr, const char *str, int len)369ST_FUNC void cstr_cat(CString *cstr, const char *str, int len)
372{370{
373 int size;371 int size;
@@ -376,7 +374,7 @@ ST_FUNC void cstr_cat(CString *cstr, const char *str, int len) · 2 unmodified lines
376 size = cstr->size + len;374 size = cstr->size + len;
377 if (size > cstr->size_allocated)375 if (size > cstr->size_allocated)
378 cstr_realloc(cstr, size);376 cstr_realloc(cstr, size);
379 memmove(((unsigned char *)cstr->data) + cstr->size, str, len);377 memmove(cstr->data + cstr->size, str, len);
380 cstr->size = size;378 cstr->size = size;
381}379}
382 380
@@ -387,7 +385,7 @@ ST_FUNC void cstr_wccat(CString *cstr, int ch) · 4 unmodified lines
387 size = cstr->size + sizeof(nwchar_t);385 size = cstr->size + sizeof(nwchar_t);
388 if (size > cstr->size_allocated)386 if (size > cstr->size_allocated)
389 cstr_realloc(cstr, size);387 cstr_realloc(cstr, size);
390 *(nwchar_t *)(((unsigned char *)cstr->data) + size - sizeof(nwchar_t)) = ch;388 *(nwchar_t *)(cstr->data + size - sizeof(nwchar_t)) = ch;
391 cstr->size = size;389 cstr->size = size;
392}390}
393 391
@@ -418,7 +416,7 @@ ST_FUNC int cstr_vprintf(CString *cstr, const char *fmt, va_list ap) · 24 unmodified lines
418 cstr_realloc(cstr, size);416 cstr_realloc(cstr, size);
419 size = cstr->size_allocated - cstr->size;417 size = cstr->size_allocated - cstr->size;
420 va_copy(v, ap);418 va_copy(v, ap);
421 len = vsnprintf((char*)cstr->data + cstr->size, size, fmt, v);419 len = vsnprintf(cstr->data + cstr->size, size, fmt, v);
422 va_end(v);420 va_end(v);
423 if (len >= 0 && len < size)421 if (len >= 0 && len < size)
424 break;422 break;
@@ -1920,7 +1918,8 @@ ST_FUNC void preprocess(int is_bof) · 1495 unmodified lines
1920 if (file->fd > 0)1918 if (file->fd > 0)
1921 total_lines += file->line_num - n;1919 total_lines += file->line_num - n;
1922 file->line_num = n;1920 file->line_num = n;
1923 break;1921 goto ignore; /* skip optional level number */
1922
1924 case TOK_ERROR:1923 case TOK_ERROR:
1925 case TOK_WARNING:1924 case TOK_WARNING:
1926 q = buf;1925 q = buf;
@@ -3070,12 +3069,13 @@ static int *macro_arg_subst(Sym **nested_list, const int *macro_str, Sym *args) · 1143 unmodified lines
3070/* handle the '##' operator. return the resulting string (which must be freed). */3069/* handle the '##' operator. return the resulting string (which must be freed). */
3071static inline int *macro_twosharps(const int *ptr0)3070static inline int *macro_twosharps(const int *ptr0)
3072{3071{
3073 int t1, t2, n;3072 int t1, t2, n, l;
3074 CValue cv1, cv2;3073 CValue cv1, cv2;
3075 TokenString macro_str1;3074 TokenString macro_str1;
3076 const int *ptr;3075 const int *ptr;
3077 3076
3078 tok_str_new(&macro_str1);3077 tok_str_new(&macro_str1);
3078 cstr_reset(&tokcstr);
3079 for (ptr = ptr0;;) {3079 for (ptr = ptr0;;) {
3080 TOK_GET(&t1, &ptr, &cv1);3080 TOK_GET(&t1, &ptr, &cv1);
3081 if (t1 == 0)3081 if (t1 == 0)
@@ -3090,29 +3090,31 @@ static inline int *macro_twosharps(const int *ptr0) · 8 unmodified lines
3090 while ((t2 = *++ptr) == ' ' || t2 == TOK_PPJOIN)3090 while ((t2 = *++ptr) == ' ' || t2 == TOK_PPJOIN)
3091 ;3091 ;
3092 TOK_GET(&t2, &ptr, &cv2);3092 TOK_GET(&t2, &ptr, &cv2);
3093 if (t1 == TOK_PLCHLDR && t2 == TOK_PLCHLDR)3093 if (t2 == TOK_PLCHLDR)
3094 continue;3094 continue;
3095 cstr_reset(&tokcstr);3095 if (t1 != TOK_PLCHLDR) {
3096 if (t1 != TOK_PLCHLDR)
3097 cstr_cat(&tokcstr, get_tok_str(t1, &cv1), -1);3096 cstr_cat(&tokcstr, get_tok_str(t1, &cv1), -1);
3098 n = tokcstr.size;3097 t1 = TOK_PLCHLDR;
3099 if (t2 != TOK_PLCHLDR)3098 }
3100 cstr_cat(&tokcstr, get_tok_str(t2, &cv2), -1);3099 cstr_cat(&tokcstr, get_tok_str(t2, &cv2), -1);
3101 cstr_ccat(&tokcstr, '\0');3100 }
3102 //printf("paste <%s>\n", (char*)tokcstr.data);3101 if (tokcstr.size) {
3102 cstr_ccat(&tokcstr, 0);
3103 tcc_open_bf(tcc_state, ":paste:", tokcstr.size);3103 tcc_open_bf(tcc_state, ":paste:", tokcstr.size);
3104 memcpy(file->buffer, tokcstr.data, tokcstr.size);3104 memcpy(file->buffer, tokcstr.data, tokcstr.size);
3105 tok_flags = 0; /* don't interpret '#' */3105 tok_flags = 0; /* don't interpret '#' */
3106 next_nomacro();3106 for (n = 0;;n = l) {
3107 if (*file->buf_ptr == 0) {3107 next_nomacro();
3108 t1 = tok, cv1 = tokc;3108 tok_str_add2(&macro_str1, tok, &tokc);
3109 } else {3109 if (*file->buf_ptr == 0)
3110 break;
3111 tok_str_add(&macro_str1, ' ');
3112 l = file->buf_ptr - file->buffer;
3110 tcc_warning("pasting \"%.*s\" and \"%s\" does not give a valid"3113 tcc_warning("pasting \"%.*s\" and \"%s\" does not give a valid"
3111 " preprocessing token", n, file->buffer, file->buffer + n);3114 " preprocessing token", l - n, file->buffer + n, file->buf_ptr);
3112 tok_str_add2(&macro_str1, t1, &cv1);
3113 t1 = t2, cv1 = cv2;
3114 }3115 }
3115 tcc_close();3116 tcc_close();
3117 cstr_reset(&tokcstr);
3116 }3118 }
3117 if (t1 != TOK_PLCHLDR)3119 if (t1 != TOK_PLCHLDR)
3118 tok_str_add2(&macro_str1, t1, &cv1);3120 tok_str_add2(&macro_str1, t1, &cv1);
@@ -3450,9 +3452,8 @@ redo: · 331 unmodified lines
3450 /* do nothing */3452 /* do nothing */
3451 } else {3453 } else {
3452 ++macro_ptr;3454 ++macro_ptr;
3453 if (t >= TOK_IDENT) {3455 t &= ~SYM_FIELD; /* remove 'nosubst' marker */
3454 t &= ~SYM_FIELD; /* remove 'nosubst' marker */3456 if (t == '\\') {
3455 } else if (t == '\\') {
3456 if (!(parse_flags & PARSE_FLAG_ACCEPT_STRAYS))3457 if (!(parse_flags & PARSE_FLAG_ACCEPT_STRAYS))
3457 tcc_error("stray '\\' in program");3458 tcc_error("stray '\\' in program");
3458 }3459 }

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t