glsl: Handle file numbering.
This commit is contained in:
@@ -38,6 +38,7 @@ sl_pp_context_init(struct sl_pp_context *context)
|
||||
context->if_value = 1;
|
||||
memset(context->error_msg, 0, sizeof(context->error_msg));
|
||||
context->line = 1;
|
||||
context->file = 0;
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@@ -50,6 +50,7 @@ struct sl_pp_context {
|
||||
char error_msg[SL_PP_MAX_ERROR_MSG];
|
||||
|
||||
unsigned int line;
|
||||
unsigned int file;
|
||||
};
|
||||
|
||||
void
|
||||
|
||||
@@ -134,7 +134,26 @@ sl_pp_process_line(struct sl_pp_context *context,
|
||||
context->line = line;
|
||||
}
|
||||
|
||||
/* TODO: Do something with the file number. */
|
||||
if (file_number != -1) {
|
||||
unsigned int file;
|
||||
|
||||
str = sl_pp_context_cstr(context, file_number);
|
||||
if (_parse_integer(str, &file)) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
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)) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
context->file = file;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -138,9 +138,8 @@ sl_pp_macro_expand(struct sl_pp_context *context,
|
||||
(*pi)++;
|
||||
return 0;
|
||||
}
|
||||
/* TODO: Having the following built-ins hardcoded is a bit lame. */
|
||||
if (!strcmp(macro_str, "__FILE__")) {
|
||||
if (!mute && _out_number(context, state, 0)) {
|
||||
if (!mute && _out_number(context, state, context->file)) {
|
||||
return -1;
|
||||
}
|
||||
(*pi)++;
|
||||
|
||||
@@ -97,6 +97,7 @@ enum sl_pp_token {
|
||||
SL_PP_EXTENSION_DISABLE,
|
||||
|
||||
SL_PP_LINE,
|
||||
SL_PP_FILE,
|
||||
|
||||
SL_PP_EOF
|
||||
};
|
||||
@@ -108,6 +109,7 @@ union sl_pp_token_data {
|
||||
int pragma;
|
||||
int extension;
|
||||
unsigned int line;
|
||||
unsigned int file;
|
||||
};
|
||||
|
||||
struct sl_pp_token_info {
|
||||
|
||||
Reference in New Issue
Block a user