F diff --git a/src/config.h b/src/config.h --- a/src/config.h +++ b/src/config.h{"./","/usr/include/",+ "/usr/include/linux/","/usr/include/x86_64-linux-gnu/",};#endifF diff --git a/src/environment/error/gcc_error.c b/src/environment/error/gcc_error.c --- a/src/environment/error/gcc_error.c +++ b/src/environment/error/gcc_error.creturn ret;}+ void push_generic_error_located(struct Program *program,const char *err_fmt,struct Source_Location *loc,...)+ {+ va_list args;+ va_start(args,err_fmt);+ push_generic_error_located_vargs(program,err_fmt,loc,args);+ va_end(args);+ }+ void push_generic_error_located_vargs(struct Program *program,const char *err_fmt,struct Source_Location *loc,va_list args)+ {+ Queue_Push(program->errors,get_wonky_message_vargs(WONKY_MESSAGE_TYPE_ERROR,WONKY_MESSAGE_SOURCE_END,loc->line,loc->column,loc->src->src_name->name,loc->src->src_name->name_size,err_fmt,args));+ }void push_generic_error(struct Program *program,const char *err_fmt,...){F diff --git a/src/environment/error/gcc_error.h b/src/environment/error/gcc_error.h --- a/src/environment/error/gcc_error.h +++ b/src/environment/error/gcc_error.hvoid push_generic_error(struct Program *program,const char *err_fmt,...);void push_generic_error_vargs(struct Program *program,const char *err_fmt,va_list args);+ void push_generic_error_located(struct Program *program,const char *err_fmt,struct Source_Location *loc,...);+ void push_generic_error_located_vargs(struct Program *program,const char *err_fmt,struct Source_Location *loc,va_list args);+void push_generic_note(struct Program *program,const char *note_fmt,...);void push_generic_note_vargs(struct Program *program,const char *note_fmt,va_list args);F diff --git a/src/frontend/lex/lex_preprocessing_directive.c b/src/frontend/lex/lex_preprocessing_directive.c --- a/src/frontend/lex/lex_preprocessing_directive.c +++ b/src/frontend/lex/lex_preprocessing_directive.cdirective->define->is_variadic=1;delete_token(hold_token);hold_token=preprocessing_extract_next_token(lexer_data);- if(hold_token->type==KW_OPEN_NORMAL)+ if(hold_token->type==KW_CLOSE_NORMAL){delete_token(hold_token);break;}else{- push_generic_error(lexer_data->program,"Expected ')' after '...' in functionlike macro");+ push_generic_error_located(lexer_data->program,"Expected ')' after '...' in functionlike macro",hold_token->location);break;}}else if(hold_token->type==KW_ID)F diff --git a/src/frontend/lex/lexer.c b/src/frontend/lex/lexer.c --- a/src/frontend/lex/lexer.c +++ b/src/frontend/lex/lexer.ccase KW_FLOAT_HEXADECIMAL_CONSTANT:case KW_CHAR_CONSTANT:case KW_WIDE_CHAR_CONSTANT:- return get_constant_token(finishing_node->keyword,token_location,lexer_data->src->src+start_position,lexer_data->where_in_src-start_position);+ if(finishing_node->data!=NULL)+ return get_constant_token(finishing_node->keyword,+ token_location,+ finishing_node->data,+ gstrnlen(finishing_node->data,1000));+ else+ return get_constant_token(finishing_node->keyword,+ token_location,+ lexer_data->src->src+start_position,+ lexer_data->where_in_src-start_position);case KW_STRING:case KW_WIDE_STRING:- return get_string_token(finishing_node->keyword,token_location,lexer_data->src->src+start_position+1,lexer_data->where_in_src-start_position-2);+ if(finishing_node->data!=NULL)+ return get_string_token(finishing_node->keyword,+ token_location,+ finishing_node->data,+ gstrnlen(finishing_node->data,1000));+ else+ return get_string_token(finishing_node->keyword,+ token_location,+ lexer_data->src->src+start_position+1,+ lexer_data->where_in_src-start_position-2);+case PKW_FILE_MACRO:return get_file_macro_token(token_location);case PKW_DATE_MACRO:F diff --git a/src/syntax/automatas/generator/keyword_list.c b/src/syntax/automatas/generator/keyword_list.c --- a/src/syntax/automatas/generator/keyword_list.c +++ b/src/syntax/automatas/generator/keyword_list.c={{+ .keyword="__x86_64__",+ .preprocessing_kw_string="PKW_STDC_MACRO",+ .kw_string="PKW_STDC_MACRO",+ .action_string="AUTOMATA_ACTION_DISPENSE_TOKEN",+ .data_string="NULL"+ },+ {.keyword="auto",.preprocessing_kw_string="KW_AUTO",.kw_string="KW_AUTO",},};+size_t number_of_chonky_keywords=sizeof(chonky_keywords)/sizeof(chonky_keywords[0]);#endifF diff --git a/src/syntax/automatas/generator/keyword_list.h b/src/syntax/automatas/generator/keyword_list.h --- a/src/syntax/automatas/generator/keyword_list.h +++ b/src/syntax/automatas/generator/keyword_list.hconst char *data_string;};+ enum Chonky_Special_Ids {+ CHONKY_SPECIAL_DEFINE__x86_64__,+ };+extern struct Keyword_Entry chonky_keywords[];extern size_t number_of_chonky_keywords;