ADD_NAME(context, warn);
ADD_NAME(context, disable);
+ ADD_NAME(context, defined);
+
+ ADD_NAME_STR(context, ___LINE__, "__LINE__");
+ ADD_NAME_STR(context, ___FILE__, "__FILE__");
+ ADD_NAME(context, __VERSION__);
+
+ ADD_NAME(context, optimize);
+ ADD_NAME(context, debug);
+
+ ADD_NAME(context, off);
+ ADD_NAME(context, on);
+
+ ADD_NAME(context, define);
+ ADD_NAME(context, elif);
+ ADD_NAME_STR(context, _else, "else");
+ ADD_NAME(context, endif);
+ ADD_NAME(context, error);
+ ADD_NAME(context, extension);
+ ADD_NAME_STR(context, _if, "if");
+ ADD_NAME(context, ifdef);
+ ADD_NAME(context, ifndef);
+ ADD_NAME(context, line);
+ ADD_NAME(context, pragma);
+ ADD_NAME(context, undef);
+
+ ADD_NAME(context, version);
+
return 0;
}
int enable;
int warn;
int disable;
+
+ int defined;
+
+ int ___LINE__;
+ int ___FILE__;
+ int __VERSION__;
+
+ int optimize;
+ int debug;
+
+ int off;
+ int on;
+
+ int define;
+ int elif;
+ int _else;
+ int endif;
+ int error;
+ int extension;
+ int _if;
+ int ifdef;
+ int ifndef;
+ int line;
+ int pragma;
+ int undef;
+
+ int version;
};
break;
case SL_PP_IDENTIFIER:
- {
- const char *id = sl_pp_context_cstr(context, input[i].data.identifier);
-
- if (!strcmp(id, "defined")) {
- i++;
- if (_parse_defined(context, input, &i, &state)) {
- free(state.out);
- return -1;
- }
- } else {
- if (sl_pp_macro_expand(context, input, &i, NULL, &state, 0)) {
- free(state.out);
- return -1;
- }
+ if (input[i].data.identifier == context->dict.defined) {
+ i++;
+ if (_parse_defined(context, input, &i, &state)) {
+ free(state.out);
+ return -1;
+ }
+ } else {
+ if (sl_pp_macro_expand(context, input, &i, NULL, &state, 0)) {
+ free(state.out);
+ return -1;
}
}
break;
int mute)
{
int macro_name;
- const char *macro_str;
struct sl_pp_macro *macro = NULL;
struct sl_pp_macro *actual_arg = NULL;
unsigned int j;
}
macro_name = input[*pi].data.identifier;
- macro_str = sl_pp_context_cstr(context, macro_name);
- if (!strcmp(macro_str, "__LINE__")) {
+ if (macro_name == context->dict.___LINE__) {
if (!mute && _out_number(context, state, context->line)) {
return -1;
}
(*pi)++;
return 0;
}
- if (!strcmp(macro_str, "__FILE__")) {
+ if (macro_name == context->dict.___FILE__) {
if (!mute && _out_number(context, state, context->file)) {
return -1;
}
(*pi)++;
return 0;
}
- if (!strcmp(macro_str, "__VERSION__")) {
+ if (macro_name == context->dict.__VERSION__) {
if (!mute && _out_number(context, state, 110)) {
return -1;
}
unsigned int last,
struct sl_pp_process_state *state)
{
- const char *pragma_name = NULL;
+ int pragma_name = -1;
struct sl_pp_token_info out;
- const char *arg_name = NULL;
+ int arg_name = -1;
if (first < last && input[first].token == SL_PP_IDENTIFIER) {
- pragma_name = sl_pp_context_cstr(context, input[first].data.identifier);
+ pragma_name = input[first].data.identifier;
first++;
}
- if (!pragma_name) {
+ if (pragma_name == -1) {
return 0;
}
- if (!strcmp(pragma_name, "optimize")) {
+ if (pragma_name == context->dict.optimize) {
out.token = SL_PP_PRAGMA_OPTIMIZE;
- } else if (!strcmp(pragma_name, "debug")) {
+ } else if (pragma_name == context->dict.debug) {
out.token = SL_PP_PRAGMA_DEBUG;
} else {
return 0;
}
if (first < last && input[first].token == SL_PP_IDENTIFIER) {
- arg_name = sl_pp_context_cstr(context, input[first].data.identifier);
+ arg_name = input[first].data.identifier;
first++;
}
- if (!arg_name) {
+ if (arg_name == -1) {
return 0;
}
- if (!strcmp(arg_name, "off")) {
+ if (arg_name == context->dict.off) {
out.data.pragma = 0;
- } else if (!strcmp(arg_name, "on")) {
+ } else if (arg_name == context->dict.on) {
out.data.pragma = 1;
} else {
return 0;
switch (input[i].token) {
case SL_PP_IDENTIFIER:
{
- const char *name;
+ int name;
int found_eol = 0;
unsigned int first;
unsigned int last;
struct sl_pp_token_info endof;
/* Directive name. */
- name = sl_pp_context_cstr(context, input[i].data.identifier);
+ name = input[i].data.identifier;
i++;
skip_whitespace(input, &i);
last = i - 1;
- if (!strcmp(name, "if")) {
+ if (name == context->dict._if) {
if (sl_pp_process_if(context, input, first, last)) {
return -1;
}
- } else if (!strcmp(name, "ifdef")) {
+ } else if (name == context->dict.ifdef) {
if (sl_pp_process_ifdef(context, input, first, last)) {
return -1;
}
- } else if (!strcmp(name, "ifndef")) {
+ } else if (name == context->dict.ifndef) {
if (sl_pp_process_ifndef(context, input, first, last)) {
return -1;
}
- } else if (!strcmp(name, "elif")) {
+ } else if (name == context->dict.elif) {
if (sl_pp_process_elif(context, input, first, last)) {
return -1;
}
- } else if (!strcmp(name, "else")) {
+ } else if (name == context->dict._else) {
if (sl_pp_process_else(context, input, first, last)) {
return -1;
}
- } else if (!strcmp(name, "endif")) {
+ } else if (name == context->dict.endif) {
if (sl_pp_process_endif(context, input, first, last)) {
return -1;
}
} else if (context->if_value) {
- if (!strcmp(name, "define")) {
+ if (name == context->dict.define) {
if (sl_pp_process_define(context, input, first, last)) {
return -1;
}
- } else if (!strcmp(name, "error")) {
+ } else if (name == context->dict.error) {
sl_pp_process_error(context, input, first, last);
return -1;
- } else if (!strcmp(name, "extension")) {
+ } else if (name == context->dict.extension) {
if (sl_pp_process_extension(context, input, first, last, &state)) {
return -1;
}
- } else if (!strcmp(name, "line")) {
+ } else if (name == context->dict.line) {
if (sl_pp_process_line(context, input, first, last, &state)) {
return -1;
}
- } else if (!strcmp(name, "pragma")) {
+ } else if (name == context->dict.pragma) {
if (sl_pp_process_pragma(context, input, first, last, &state)) {
return -1;
}
- } else if (!strcmp(name, "undef")) {
+ } else if (name == context->dict.undef) {
if (sl_pp_process_undef(context, input, first, last)) {
return -1;
}
break;
case SL_PP_IDENTIFIER:
- {
- const char *id = sl_pp_context_cstr(context, input[i].data.identifier);
-
- if (!id) {
- return -1;
- }
- if (strcmp(id, "version")) {
- return 0;
- }
- i++;
- found_version = 1;
+ if (input[i].data.identifier != context->dict.version) {
+ return 0;
}
+ i++;
+ found_version = 1;
break;
default: