glsl/pp: Store both line number and file index in a single token.

This commit is contained in:
Michal Krol 2009-09-24 08:43:05 +02:00
parent 8212e4d9fa
commit 9a1447d449
3 changed files with 16 additions and 25 deletions

View file

@ -42,6 +42,7 @@ sl_pp_process_line(struct sl_pp_context *context,
int line_number = -1;
int file_number = -1;
unsigned int line;
unsigned int file;
memset(&state, 0, sizeof(state));
for (i = first; i < last;) {
@ -94,37 +95,25 @@ sl_pp_process_line(struct sl_pp_context *context,
free(state.out);
line = atoi(sl_pp_context_cstr(context, line_number));
if (file_number != -1) {
file = atoi(sl_pp_context_cstr(context, file_number));
} else {
file = context->file;
}
if (context->line != line) {
if (context->line != line || context->file != file) {
struct sl_pp_token_info ti;
ti.token = SL_PP_LINE;
ti.data.line = line;
ti.data.line.lineno = line;
ti.data.line.fileno = file;
if (sl_pp_process_out(pstate, &ti)) {
strcpy(context->error_msg, "out of memory");
return -1;
}
context->line = line;
}
if (file_number != -1) {
unsigned int file;
file = atoi(sl_pp_context_cstr(context, file_number));
if (context->file != file) {
struct sl_pp_token_info ti;
ti.token = SL_PP_FILE;
ti.data.file = file;
if (sl_pp_process_out(pstate, &ti)) {
strcpy(context->error_msg, "out of memory");
return -1;
}
context->file = file;
}
context->file = file;
}
return 0;

View file

@ -79,7 +79,8 @@ sl_pp_process(struct sl_pp_context *context,
struct sl_pp_token_info ti;
ti.token = SL_PP_LINE;
ti.data.line = context->line - 1;
ti.data.line.lineno = context->line - 1;
ti.data.line.fileno = context->file;
if (sl_pp_process_out(&state, &ti)) {
strcpy(context->error_msg, "out of memory");
return -1;

View file

@ -96,7 +96,6 @@ enum sl_pp_token {
SL_PP_EXTENSION_DISABLE,
SL_PP_LINE,
SL_PP_FILE,
SL_PP_EOF
};
@ -108,8 +107,10 @@ union sl_pp_token_data {
char other;
int pragma;
int extension;
unsigned int line;
unsigned int file;
union {
unsigned int lineno: 24;
unsigned int fileno: 8;
} line;
};
struct sl_pp_token_info {