Главная страница

компилятор ТСС. Tiny c compiler by Fabrice Bellard Описание алгоритмов


Скачать 191.99 Kb.
НазваниеTiny c compiler by Fabrice Bellard Описание алгоритмов
Анкоркомпилятор ТСС
Дата08.11.2019
Размер191.99 Kb.
Формат файлаodt
Имя файлаtcc book.odt
ТипДокументы
#94047
страница37 из 38
1   ...   30   31   32   33   34   35   36   37   38


void type_to_str(char *buf, int buf_size, CType *type, const char *varstr) Биты, кодирующие все типы (включая простые) переданного CType сохраняются в переменную. Биты кодирующие простые типы сохраняются bt В нулевой элемент массива buf записывается '\0'; Если t содержит бит VT_CONSTANT, вызывается pstrcat(), чтобы добавить в buf подстроку "const " Если t содержит бит VT_VOLATILE, вызывается pstrcat(), чтобы добавить в buf подстроку "volatile " Если t содержит бит VT_UNSIGNED, вызывается pstrcat(), чтобы добавить в buf подстроку "unsigned " Выполняется обработка bt Для VT_VOID, выставляется значение "void", упраление передается на add_tstr Для VT_BOOL, выставляется значение "_Bool", упраление передается на add_tstr Для VT_BYTE, выставляется значение "char", упраление передается на add_tstr Для VT_SHORT, выставляется значение "short", упраление передается на add_tstr Для VT_INT, выставляется значение "int", упраление передается на add_tstr Для VT_LONG, выставляется значение "long", упраление передается на add_tstr Для VT_LLONG, выставляется значение "long long", упраление передается на add_tstr Для VT_FLOAT, выставляется значение "float", упраление передается на add_tstr Для VT_DOUBLE, выставляется значение "double", упраление передается на add_tstr Для VT_LDOUBLE, выставляется значение "long double", вызывается pstrcat(), чтобы добавить в buf выставленное значение, перед этим вызовом размещена метка add_tstr 6316 case VT_ENUM: 6317 case VT_STRUCT: 6318 if (bt == VT_STRUCT) 6319 tstr = "struct "; 6320 else 6321 tstr = "enum "; 6322 pstrcat(buf, buf_size, tstr); 6323 v = type->ref->v &

SYM_STRUCT; 6324 if (v >= SYM_FIRST_ANOM) 6325 pstrcat(buf, buf_size, ""); 6326 else 6327 pstrcat(buf, buf_size, get_tok_str(v, NULL)); 6328 break; 6329 case VT_FUNC: 6330 s = type->ref; 6331 type_to_str(buf, buf_size, &s->type, varstr); 6332 pstrcat(buf, buf_size, "("); 6333 sa = s->next; 6334 while (sa != NULL) { 6335 type_to_str(buf1, sizeof(buf1), &sa->type, NULL); 6336 pstrcat(buf, buf_size, buf1); 6337 sa = sa->next; 6338 if (sa) 6339 pstrcat(buf, buf_size, ", "); 6340 } 6341 pstrcat(buf, buf_size, ")"); 6342 goto no_var; 6343 case VT_PTR: 6344 s = type->ref; 6345 pstrcpy(buf1, sizeof(buf1), "*"); 6346 if (varstr) 6347 pstrcat(buf1, sizeof(buf1), varstr); 6348 type_to_str(buf, buf_size, &s->type, buf1); 6349 goto no_var; 6350 } 6351 if (varstr) { 6352 pstrcat(buf, buf_size, " "); 6353 pstrcat(buf, buf_size, varstr); 6354 } 6355 no_var: ; 6356 }
1   ...   30   31   32   33   34   35   36   37   38


написать администратору сайта