2022-12-29 12:32:55 +00:00
|
|
|
#include "compiler/CPreprocess.h"
|
|
|
|
#include "compiler/CError.h"
|
|
|
|
#include "compiler/CMachine.h"
|
|
|
|
#include "compiler/CParser.h"
|
|
|
|
#include "compiler/CPrep.h"
|
|
|
|
#include "compiler/CPrepTokenizer.h"
|
|
|
|
#include "compiler/CompilerTools.h"
|
|
|
|
#include "cos.h"
|
|
|
|
|
|
|
|
void CPrep_PreprocessDumpNewLine(void) {
|
|
|
|
if (copts.line_prepdump && pplist.data && filesp >= 0)
|
|
|
|
AppendGListData(&pplist, "\r", 1);
|
|
|
|
}
|
|
|
|
|
|
|
|
void CPrep_PreprocessDumpFileInfo(Boolean flag) {
|
|
|
|
char linebuf[512];
|
|
|
|
int size;
|
|
|
|
SInt16 tmp16;
|
|
|
|
SInt32 tmp32;
|
|
|
|
Str255 filename;
|
|
|
|
|
|
|
|
if (pplist.data && filesp >= 0) {
|
|
|
|
if (nlflag && flag && pplist.size > 0)
|
|
|
|
AppendGListName(&pplist, "\r");
|
|
|
|
|
|
|
|
if (copts.line_prepdump)
|
2023-01-14 13:20:48 +00:00
|
|
|
size = sprintf(linebuf, "#line % " PRId32 "\t\"", linenumber);
|
2022-12-29 12:32:55 +00:00
|
|
|
else
|
2023-01-14 13:20:48 +00:00
|
|
|
size = sprintf(linebuf, "/* #line % " PRId32 "\t\"", linenumber);
|
2022-12-29 12:32:55 +00:00
|
|
|
AppendGListData(&pplist, linebuf, size);
|
|
|
|
|
|
|
|
if (copts.fullpath_prepdump) {
|
|
|
|
if (prep_file->nameNode) {
|
|
|
|
AppendGListData(&pplist, prep_file->nameNode->name, strlen(prep_file->nameNode->name));
|
|
|
|
} else {
|
|
|
|
COS_FileGetPathName(linebuf, &prep_file->textfile, &tmp32);
|
|
|
|
AppendGListData(&pplist, linebuf, strlen(linebuf));
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
if (prep_file->nameNode) {
|
|
|
|
char *work = prep_file->nameNode->name + strlen(prep_file->nameNode->name);
|
|
|
|
while (work > prep_file->nameNode->name && !strchr("/\\:", work[-1]))
|
|
|
|
work--;
|
|
|
|
|
|
|
|
AppendGListData(&pplist, work, strlen(work));
|
|
|
|
} else {
|
|
|
|
COS_FileGetFSSpecInfo(&prep_file->textfile, &tmp16, &tmp32, filename);
|
|
|
|
AppendGListData(&pplist, &filename[1], filename[0]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-01-14 13:20:48 +00:00
|
|
|
size = sprintf(linebuf, "\"\t/* stack depth % " PRId32 " */", filesp);
|
2022-12-29 12:32:55 +00:00
|
|
|
AppendGListData(&pplist, linebuf, size);
|
|
|
|
|
|
|
|
if (copts.line_prepdump && flag)
|
|
|
|
CPrep_PreprocessDumpNewLine();
|
|
|
|
|
|
|
|
nlflag = 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void CPrep_DumpWString(UInt16 *str, short len) {
|
|
|
|
int divisor;
|
|
|
|
int i;
|
|
|
|
|
|
|
|
while (len--) {
|
|
|
|
if (*str < 32) {
|
|
|
|
AppendGListByte(&pplist, '\\');
|
|
|
|
switch (*str) {
|
|
|
|
case 7:
|
|
|
|
AppendGListByte(&pplist, 'a');
|
|
|
|
break;
|
|
|
|
case 8:
|
|
|
|
AppendGListByte(&pplist, 'b');
|
|
|
|
break;
|
|
|
|
case 27:
|
|
|
|
AppendGListByte(&pplist, 'e');
|
|
|
|
break;
|
|
|
|
case 12:
|
|
|
|
AppendGListByte(&pplist, 'f');
|
|
|
|
break;
|
|
|
|
case 10:
|
|
|
|
AppendGListByte(&pplist, 'n');
|
|
|
|
break;
|
|
|
|
case 13:
|
|
|
|
AppendGListByte(&pplist, 'r');
|
|
|
|
break;
|
|
|
|
case 9:
|
|
|
|
AppendGListByte(&pplist, 't');
|
|
|
|
break;
|
|
|
|
case 11:
|
|
|
|
AppendGListByte(&pplist, 'v');
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
if (*str >= 8)
|
|
|
|
AppendGListByte(&pplist, '0' + (*str / 8));
|
|
|
|
AppendGListByte(&pplist, '0' + (*str % 8));
|
|
|
|
}
|
|
|
|
} else if (*str > 255) {
|
|
|
|
AppendGListByte(&pplist, '\\');
|
|
|
|
AppendGListByte(&pplist, 'x');
|
|
|
|
|
|
|
|
divisor = 0x1000;
|
|
|
|
for (i = 0; i < 4; i++) {
|
|
|
|
AppendGListByte(&pplist, "0123456789ABCDEF"[(*str / divisor) % 16]);
|
|
|
|
divisor /= 16;
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
switch (*str) {
|
|
|
|
case '"':
|
|
|
|
case '\\':
|
|
|
|
AppendGListByte(&pplist, '\\');
|
|
|
|
default:
|
|
|
|
AppendGListByte(&pplist, *str);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
str++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void CPrep_DumpString(UInt8 *str, short len) {
|
|
|
|
while (len--) {
|
|
|
|
if (*str < 32) {
|
|
|
|
AppendGListByte(&pplist, '\\');
|
|
|
|
switch (*str) {
|
|
|
|
case 7:
|
|
|
|
AppendGListByte(&pplist, 'a');
|
|
|
|
break;
|
|
|
|
case 8:
|
|
|
|
AppendGListByte(&pplist, 'b');
|
|
|
|
break;
|
|
|
|
case 12:
|
|
|
|
AppendGListByte(&pplist, 'f');
|
|
|
|
break;
|
|
|
|
case 10:
|
|
|
|
AppendGListByte(&pplist, 'n');
|
|
|
|
break;
|
|
|
|
case 13:
|
|
|
|
AppendGListByte(&pplist, 'r');
|
|
|
|
break;
|
|
|
|
case 9:
|
|
|
|
AppendGListByte(&pplist, 't');
|
|
|
|
break;
|
|
|
|
case 11:
|
|
|
|
AppendGListByte(&pplist, 'v');
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
if (*str >= 8)
|
|
|
|
AppendGListByte(&pplist, '0' + (*str / 8));
|
|
|
|
AppendGListByte(&pplist, '0' + (*str % 8));
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
switch (*str) {
|
|
|
|
case '"':
|
|
|
|
case '\\':
|
|
|
|
AppendGListByte(&pplist, '\\');
|
|
|
|
default:
|
|
|
|
AppendGListByte(&pplist, *str);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
str++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void CPrep_Preprocess(void) {
|
|
|
|
short innertoken;
|
|
|
|
short token;
|
|
|
|
char startToken;
|
|
|
|
char endToken;
|
|
|
|
int depth;
|
|
|
|
Boolean save_asmpoundcomment; // r16
|
|
|
|
Boolean save_cplusplus; // r15
|
|
|
|
char *p;
|
|
|
|
|
|
|
|
startToken = 0;
|
|
|
|
depth = 0;
|
|
|
|
|
|
|
|
if (InitGList(&pplist, 10000))
|
|
|
|
CError_NoMem();
|
|
|
|
|
|
|
|
nlflag = 0;
|
|
|
|
spaceskip = 0;
|
|
|
|
|
|
|
|
if ((token = lex())) {
|
|
|
|
do {
|
|
|
|
if (nlflag) {
|
|
|
|
if (!copts.line_prepdump)
|
|
|
|
AppendGListData(&pplist, "\r", 1);
|
|
|
|
} else {
|
|
|
|
if (spaceskip)
|
|
|
|
AppendGListByte(&pplist, ' ');
|
|
|
|
}
|
|
|
|
|
|
|
|
while (1) {
|
|
|
|
switch ((innertoken = token)) {
|
|
|
|
case '(':
|
|
|
|
case ')':
|
|
|
|
case '{':
|
|
|
|
case '}':
|
|
|
|
AppendGListByte(&pplist, token);
|
|
|
|
if (cprep_nostring) {
|
|
|
|
if (innertoken == startToken) {
|
|
|
|
depth++;
|
|
|
|
} else if (innertoken == endToken) {
|
|
|
|
if (--depth == 0) {
|
|
|
|
cprep_nostring = 0;
|
|
|
|
in_assembler = 0;
|
|
|
|
copts.cplusplus = save_cplusplus;
|
|
|
|
copts.asmpoundcomment = save_asmpoundcomment;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
case TK_INTCONST:
|
|
|
|
case TK_FLOATCONST:
|
|
|
|
if (tokenstacklevel > 0)
|
|
|
|
p = macropos;
|
|
|
|
else
|
|
|
|
p = prep_file_start + ts_current[-1].tokenoffset;
|
|
|
|
AppendGListData(&pplist, p, pos - p);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case TK_IDENTIFIER:
|
|
|
|
AppendGListData(&pplist, tkidentifier->name, strlen(tkidentifier->name));
|
|
|
|
break;
|
|
|
|
|
|
|
|
case TK_AUTO:
|
|
|
|
AppendGListData(&pplist, "auto", 4);
|
|
|
|
break;
|
|
|
|
case TK_REGISTER:
|
|
|
|
AppendGListData(&pplist, "register", 8);
|
|
|
|
break;
|
|
|
|
case TK_STATIC:
|
|
|
|
AppendGListData(&pplist, "static", 6);
|
|
|
|
break;
|
|
|
|
case TK_EXTERN:
|
|
|
|
AppendGListData(&pplist, "extern", 6);
|
|
|
|
break;
|
|
|
|
case TK_TYPEDEF:
|
|
|
|
AppendGListData(&pplist, "typedef", 7);
|
|
|
|
break;
|
|
|
|
case TK_INLINE:
|
|
|
|
AppendGListData(&pplist, "inline", 6);
|
|
|
|
break;
|
|
|
|
case TK_VOID:
|
|
|
|
AppendGListData(&pplist, "void", 4);
|
|
|
|
break;
|
|
|
|
case TK_CHAR:
|
|
|
|
AppendGListData(&pplist, "char", 4);
|
|
|
|
break;
|
|
|
|
case TK_SHORT:
|
|
|
|
AppendGListData(&pplist, "short", 5);
|
|
|
|
break;
|
|
|
|
case TK_INT:
|
|
|
|
AppendGListData(&pplist, "int", 3);
|
|
|
|
break;
|
|
|
|
case TK_LONG:
|
|
|
|
AppendGListData(&pplist, "long", 4);
|
|
|
|
break;
|
|
|
|
case TK_FLOAT:
|
|
|
|
AppendGListData(&pplist, "float", 5);
|
|
|
|
break;
|
|
|
|
case TK_DOUBLE:
|
|
|
|
AppendGListData(&pplist, "double", 6);
|
|
|
|
break;
|
|
|
|
case TK_SIGNED:
|
|
|
|
AppendGListData(&pplist, "signed", 6);
|
|
|
|
break;
|
|
|
|
case TK_UNSIGNED:
|
|
|
|
AppendGListData(&pplist, "unsigned", 8);
|
|
|
|
break;
|
|
|
|
case TK_STRUCT:
|
|
|
|
AppendGListData(&pplist, "struct", 6);
|
|
|
|
break;
|
|
|
|
case TK_UNION:
|
|
|
|
AppendGListData(&pplist, "union", 5);
|
|
|
|
break;
|
|
|
|
case TK_ENUM:
|
|
|
|
AppendGListData(&pplist, "enum", 4);
|
|
|
|
break;
|
|
|
|
case TK_CLASS:
|
|
|
|
AppendGListData(&pplist, "class", 5);
|
|
|
|
break;
|
|
|
|
case TK_CONST:
|
|
|
|
AppendGListData(&pplist, "const", 5);
|
|
|
|
break;
|
|
|
|
case TK_VOLATILE:
|
|
|
|
AppendGListData(&pplist, "volatile", 8);
|
|
|
|
break;
|
|
|
|
case TK_PASCAL:
|
|
|
|
AppendGListData(&pplist, "pascal", 6);
|
|
|
|
break;
|
|
|
|
case TK_UU_FAR:
|
|
|
|
AppendGListData(&pplist, "__far", 5);
|
|
|
|
break;
|
|
|
|
case TK_ONEWAY:
|
|
|
|
AppendGListData(&pplist, "oneway", 6);
|
|
|
|
break;
|
|
|
|
case TK_IN:
|
|
|
|
AppendGListData(&pplist, "in", 2);
|
|
|
|
break;
|
|
|
|
case TK_OUT:
|
|
|
|
AppendGListData(&pplist, "out", 3);
|
|
|
|
break;
|
|
|
|
case TK_INOUT:
|
|
|
|
AppendGListData(&pplist, "inout", 5);
|
|
|
|
break;
|
|
|
|
case TK_BYCOPY:
|
|
|
|
AppendGListData(&pplist, "bycopy", 6);
|
|
|
|
break;
|
|
|
|
case TK_BYREF:
|
|
|
|
AppendGListData(&pplist, "byref", 5);
|
|
|
|
break;
|
|
|
|
case TK_ASM:
|
|
|
|
AppendGListData(&pplist, "asm", 3);
|
|
|
|
endToken = 0;
|
|
|
|
startToken = 0;
|
|
|
|
AppendGListByte(&pplist, ' ');
|
|
|
|
token = lex();
|
|
|
|
if (token == TK_VOLATILE || (token == TK_IDENTIFIER && !strcmp(tkidentifier->name, "__volatile__"))) {
|
|
|
|
AppendGListData(&pplist, "volatile", 8);
|
|
|
|
token = lex();
|
|
|
|
}
|
|
|
|
if (token) {
|
|
|
|
if (token < ' ' || token > 255)
|
|
|
|
continue;
|
|
|
|
AppendGListByte(&pplist, token);
|
|
|
|
|
|
|
|
if (token == '(') {
|
|
|
|
startToken = '(';
|
|
|
|
endToken = ')';
|
|
|
|
} else if (token == '{') {
|
|
|
|
startToken = '{';
|
|
|
|
endToken = '}';
|
|
|
|
} else {
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
cprep_nostring = 1;
|
|
|
|
in_assembler = 1;
|
|
|
|
depth = 1;
|
|
|
|
save_asmpoundcomment = copts.asmpoundcomment;
|
|
|
|
save_cplusplus = copts.cplusplus;
|
|
|
|
|
|
|
|
token = lex();
|
|
|
|
if (token == '"') {
|
|
|
|
AppendGListByte(&pplist, token);
|
|
|
|
copts.cplusplus = 0;
|
|
|
|
copts.asmpoundcomment = 1;
|
|
|
|
break;
|
|
|
|
} else if (token == 0) {
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
case TK_CASE:
|
|
|
|
AppendGListData(&pplist, "case", 4);
|
|
|
|
break;
|
|
|
|
case TK_DEFAULT:
|
|
|
|
AppendGListData(&pplist, "default", 7);
|
|
|
|
break;
|
|
|
|
case TK_IF:
|
|
|
|
AppendGListData(&pplist, "if", 2);
|
|
|
|
break;
|
|
|
|
case TK_ELSE:
|
|
|
|
AppendGListData(&pplist, "else", 4);
|
|
|
|
break;
|
|
|
|
case TK_SWITCH:
|
|
|
|
AppendGListData(&pplist, "switch", 6);
|
|
|
|
break;
|
|
|
|
case TK_WHILE:
|
|
|
|
AppendGListData(&pplist, "while", 5);
|
|
|
|
break;
|
|
|
|
case TK_DO:
|
|
|
|
AppendGListData(&pplist, "do", 2);
|
|
|
|
break;
|
|
|
|
case TK_FOR:
|
|
|
|
AppendGListData(&pplist, "for", 3);
|
|
|
|
break;
|
|
|
|
case TK_GOTO:
|
|
|
|
AppendGListData(&pplist, "goto", 4);
|
|
|
|
break;
|
|
|
|
case TK_CONTINUE:
|
|
|
|
AppendGListData(&pplist, "continue", 8);
|
|
|
|
break;
|
|
|
|
case TK_BREAK:
|
|
|
|
AppendGListData(&pplist, "break", 5);
|
|
|
|
break;
|
|
|
|
case TK_RETURN:
|
|
|
|
AppendGListData(&pplist, "return", 6);
|
|
|
|
break;
|
|
|
|
case TK_SIZEOF:
|
|
|
|
AppendGListData(&pplist, "sizeof", 6);
|
|
|
|
break;
|
|
|
|
case TK_CATCH:
|
|
|
|
AppendGListData(&pplist, "catch", 5);
|
|
|
|
break;
|
|
|
|
case TK_DELETE:
|
|
|
|
AppendGListData(&pplist, "delete", 6);
|
|
|
|
break;
|
|
|
|
case TK_FRIEND:
|
|
|
|
AppendGListData(&pplist, "friend", 6);
|
|
|
|
break;
|
|
|
|
case TK_NEW:
|
|
|
|
AppendGListData(&pplist, "new", 3);
|
|
|
|
break;
|
|
|
|
case TK_OPERATOR:
|
|
|
|
AppendGListData(&pplist, "operator", 8);
|
|
|
|
break;
|
|
|
|
case TK_PRIVATE:
|
|
|
|
AppendGListData(&pplist, "private", 7);
|
|
|
|
break;
|
|
|
|
case TK_PROTECTED:
|
|
|
|
AppendGListData(&pplist, "protected", 9);
|
|
|
|
break;
|
|
|
|
case TK_PUBLIC:
|
|
|
|
AppendGListData(&pplist, "public", 6);
|
|
|
|
break;
|
|
|
|
case TK_TEMPLATE:
|
|
|
|
AppendGListData(&pplist, "template", 8);
|
|
|
|
break;
|
|
|
|
case TK_THIS:
|
|
|
|
AppendGListData(&pplist, "this", 4);
|
|
|
|
break;
|
|
|
|
case TK_THROW:
|
|
|
|
AppendGListData(&pplist, "throw", 5);
|
|
|
|
break;
|
|
|
|
case TK_TRY:
|
|
|
|
AppendGListData(&pplist, "try", 3);
|
|
|
|
break;
|
|
|
|
case TK_VIRTUAL:
|
|
|
|
AppendGListData(&pplist, "virtual", 7);
|
|
|
|
break;
|
|
|
|
case TK_INHERITED:
|
|
|
|
AppendGListData(&pplist, "inherited", 9);
|
|
|
|
break;
|
|
|
|
case TK_CONST_CAST:
|
|
|
|
AppendGListData(&pplist, "const_cast", 10);
|
|
|
|
break;
|
|
|
|
case TK_DYNAMIC_CAST:
|
|
|
|
AppendGListData(&pplist, "dynamic_cast", 12);
|
|
|
|
break;
|
|
|
|
case TK_EXPLICIT:
|
|
|
|
AppendGListData(&pplist, "explicit", 8);
|
|
|
|
break;
|
|
|
|
case TK_MUTABLE:
|
|
|
|
AppendGListData(&pplist, "mutable", 7);
|
|
|
|
break;
|
|
|
|
case TK_NAMESPACE:
|
|
|
|
AppendGListData(&pplist, "namespace", 9);
|
|
|
|
break;
|
|
|
|
case TK_REINTERPRET_CAST:
|
|
|
|
AppendGListData(&pplist, "reinterpret_cast", 16);
|
|
|
|
break;
|
|
|
|
case TK_STATIC_CAST:
|
|
|
|
AppendGListData(&pplist, "static_cast", 11);
|
|
|
|
break;
|
|
|
|
case TK_USING:
|
|
|
|
AppendGListData(&pplist, "using", 5);
|
|
|
|
break;
|
|
|
|
case TK_WCHAR_T:
|
|
|
|
AppendGListData(&pplist, "wchar_t", 7);
|
|
|
|
break;
|
|
|
|
case TK_TYPENAME:
|
|
|
|
AppendGListData(&pplist, "typename", 8);
|
|
|
|
break;
|
|
|
|
case TK_TRUE:
|
|
|
|
AppendGListData(&pplist, "true", 4);
|
|
|
|
break;
|
|
|
|
case TK_FALSE:
|
|
|
|
AppendGListData(&pplist, "false", 5);
|
|
|
|
break;
|
|
|
|
case TK_TYPEID:
|
|
|
|
AppendGListData(&pplist, "typeid", 6);
|
|
|
|
break;
|
|
|
|
case TK_EXPORT:
|
|
|
|
AppendGListData(&pplist, "export", 6);
|
|
|
|
break;
|
|
|
|
case TK_UU_STDCALL:
|
|
|
|
AppendGListData(&pplist, "__stdcall", 9);
|
|
|
|
break;
|
|
|
|
case TK_UU_CDECL:
|
|
|
|
AppendGListData(&pplist, "__cdecl", 7);
|
|
|
|
break;
|
|
|
|
case TK_UU_FASTCALL:
|
|
|
|
AppendGListData(&pplist, "__fastcall", 10);
|
|
|
|
break;
|
|
|
|
case TK_UU_DECLSPEC:
|
|
|
|
AppendGListData(&pplist, "__declspec", 10);
|
|
|
|
break;
|
|
|
|
case TK_MULT_ASSIGN:
|
|
|
|
AppendGListData(&pplist, "*=", 2);
|
|
|
|
break;
|
|
|
|
case TK_DIV_ASSIGN:
|
|
|
|
AppendGListData(&pplist, "/=", 2);
|
|
|
|
break;
|
|
|
|
case TK_MOD_ASSIGN:
|
|
|
|
AppendGListData(&pplist, "%=", 2);
|
|
|
|
break;
|
|
|
|
case TK_ADD_ASSIGN:
|
|
|
|
AppendGListData(&pplist, "+=", 2);
|
|
|
|
break;
|
|
|
|
case TK_SUB_ASSIGN:
|
|
|
|
AppendGListData(&pplist, "-=", 2);
|
|
|
|
break;
|
|
|
|
case TK_SHL_ASSIGN:
|
|
|
|
AppendGListData(&pplist, "<<=", 3);
|
|
|
|
break;
|
|
|
|
case TK_SHR_ASSIGN:
|
|
|
|
AppendGListData(&pplist, ">>=", 3);
|
|
|
|
break;
|
|
|
|
case TK_AND_ASSIGN:
|
|
|
|
AppendGListData(&pplist, "&=", 2);
|
|
|
|
break;
|
|
|
|
case TK_XOR_ASSIGN:
|
|
|
|
AppendGListData(&pplist, "^=", 2);
|
|
|
|
break;
|
|
|
|
case TK_OR_ASSIGN:
|
|
|
|
AppendGListData(&pplist, "|=", 2);
|
|
|
|
break;
|
|
|
|
case TK_LOGICAL_OR:
|
|
|
|
AppendGListData(&pplist, "||", 2);
|
|
|
|
break;
|
|
|
|
case TK_LOGICAL_AND:
|
|
|
|
AppendGListData(&pplist, "&&", 2);
|
|
|
|
break;
|
|
|
|
case TK_LOGICAL_EQ:
|
|
|
|
AppendGListData(&pplist, "==", 2);
|
|
|
|
break;
|
|
|
|
case TK_LOGICAL_NE:
|
|
|
|
AppendGListData(&pplist, "!=", 2);
|
|
|
|
break;
|
|
|
|
case TK_LESS_EQUAL:
|
|
|
|
AppendGListData(&pplist, "<=", 2);
|
|
|
|
break;
|
|
|
|
case TK_GREATER_EQUAL:
|
|
|
|
AppendGListData(&pplist, ">=", 2);
|
|
|
|
break;
|
|
|
|
case TK_SHL:
|
|
|
|
AppendGListData(&pplist, "<<", 2);
|
|
|
|
break;
|
|
|
|
case TK_SHR:
|
|
|
|
AppendGListData(&pplist, ">>", 2);
|
|
|
|
break;
|
|
|
|
case TK_INCREMENT:
|
|
|
|
AppendGListData(&pplist, "++", 2);
|
|
|
|
break;
|
|
|
|
case TK_DECREMENT:
|
|
|
|
AppendGListData(&pplist, "--", 2);
|
|
|
|
break;
|
|
|
|
case TK_ARROW:
|
|
|
|
AppendGListData(&pplist, "->", 2);
|
|
|
|
break;
|
|
|
|
case TK_ELLIPSIS:
|
|
|
|
AppendGListData(&pplist, "...", 3);
|
|
|
|
break;
|
|
|
|
case TK_DOT_STAR:
|
|
|
|
AppendGListData(&pplist, ".*", 2);
|
|
|
|
break;
|
|
|
|
case TK_ARROW_STAR:
|
|
|
|
AppendGListData(&pplist, "->*", 3);
|
|
|
|
break;
|
|
|
|
case TK_COLON_COLON:
|
|
|
|
AppendGListData(&pplist, "::", 2);
|
|
|
|
break;
|
|
|
|
case TK_AT_INTERFACE:
|
|
|
|
AppendGListData(&pplist, "@interface", 10);
|
|
|
|
break;
|
|
|
|
case TK_AT_IMPLEMENTATION:
|
|
|
|
AppendGListData(&pplist, "@implementation", 15);
|
|
|
|
break;
|
|
|
|
case TK_AT_PROTOCOL:
|
|
|
|
AppendGListData(&pplist, "@protocol", 9);
|
|
|
|
break;
|
|
|
|
case TK_AT_END:
|
|
|
|
AppendGListData(&pplist, "@end", 4);
|
|
|
|
break;
|
|
|
|
case TK_AT_PRIVATE:
|
|
|
|
AppendGListData(&pplist, "@private", 8);
|
|
|
|
break;
|
|
|
|
case TK_AT_PROTECTED:
|
|
|
|
AppendGListData(&pplist, "@protected", 10);
|
|
|
|
break;
|
|
|
|
case TK_AT_PUBLIC:
|
|
|
|
AppendGListData(&pplist, "@public", 7);
|
|
|
|
break;
|
|
|
|
case TK_AT_CLASS:
|
|
|
|
AppendGListData(&pplist, "@class", 6);
|
|
|
|
break;
|
|
|
|
case TK_AT_SELECTOR:
|
|
|
|
AppendGListData(&pplist, "@selector", 9);
|
|
|
|
break;
|
|
|
|
case TK_AT_ENCODE:
|
|
|
|
AppendGListData(&pplist, "@encode", 7);
|
|
|
|
break;
|
|
|
|
case TK_AT_DEFS:
|
|
|
|
AppendGListData(&pplist, "@defs", 5);
|
|
|
|
break;
|
|
|
|
case TK_SELF:
|
|
|
|
AppendGListData(&pplist, "self", 4);
|
|
|
|
break;
|
|
|
|
case TK_SUPER:
|
|
|
|
AppendGListData(&pplist, "super", 5);
|
|
|
|
break;
|
|
|
|
case TK_BOOL:
|
|
|
|
if (!copts.cplusplus && copts.c9x)
|
|
|
|
AppendGListData(&pplist, "_Bool", 5);
|
|
|
|
else
|
|
|
|
AppendGListData(&pplist, "bool", 4);
|
|
|
|
break;
|
|
|
|
case TK_RESTRICT:
|
|
|
|
if (copts.c9x)
|
|
|
|
AppendGListData(&pplist, "restrict", 8);
|
|
|
|
else
|
|
|
|
AppendGListData(&pplist, "__restrict", 10);
|
|
|
|
break;
|
|
|
|
case TK_UU_VECTOR:
|
|
|
|
AppendGListData(&pplist, "__vector", 8);
|
|
|
|
break;
|
|
|
|
case TK_UU_TYPEOF_UU:
|
|
|
|
AppendGListData(&pplist, "__typeof__", 10);
|
|
|
|
break;
|
|
|
|
case TK_UU_ATTRIBUTE_UU:
|
|
|
|
AppendGListData(&pplist, "__attribute__", 13);
|
|
|
|
break;
|
|
|
|
case TK_UU_ALIGNOF_UU:
|
|
|
|
AppendGListData(&pplist, "__alignof__", 11);
|
|
|
|
break;
|
|
|
|
case TK_UU_UUIDOF:
|
|
|
|
AppendGListData(&pplist, "__uuidof", 8);
|
|
|
|
break;
|
|
|
|
case TK_U_COMPLEX:
|
|
|
|
AppendGListData(&pplist, "_Complex", 8);
|
|
|
|
break;
|
|
|
|
case TK_U_IMAGINARY:
|
|
|
|
AppendGListData(&pplist, "_Imaginary", 10);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case TK_STRING:
|
|
|
|
if (ispascalstring) {
|
|
|
|
AppendGListData(&pplist, "\"\\p", 3);
|
|
|
|
CPrep_DumpString((UInt8 *) tkstring + 1, tksize - 1);
|
|
|
|
} else {
|
|
|
|
AppendGListByte(&pplist, '"');
|
|
|
|
CPrep_DumpString((UInt8 *) tkstring, tksize - 1);
|
|
|
|
}
|
|
|
|
AppendGListByte(&pplist, '"');
|
|
|
|
break;
|
|
|
|
|
|
|
|
case TK_STRING_WIDE:
|
|
|
|
AppendGListData(&pplist, "L\"", 2);
|
|
|
|
CPrep_DumpWString((UInt16 *) tkstring, (tksize / stwchar.size) - 1);
|
|
|
|
AppendGListByte(&pplist, '"');
|
|
|
|
break;
|
|
|
|
|
|
|
|
default:
|
|
|
|
if (token >= 32 && token <= 255)
|
|
|
|
AppendGListByte(&pplist, token);
|
|
|
|
else
|
|
|
|
CError_FATAL(563);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
CPrep_TokenStreamFlush();
|
|
|
|
nlflag = 0;
|
|
|
|
spaceskip = 0;
|
|
|
|
} while ((token = lex()));
|
|
|
|
}
|
|
|
|
|
|
|
|
AppendGListByte(&pplist, 0);
|
|
|
|
COS_ResizeHandle(pplist.data, pplist.size);
|
|
|
|
}
|