WONKY



LOG | FILES | OVERVIEW


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/",
};
#endif
F 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.c
return 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.h
void 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.c
directive->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.c
case 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]);
#endif
F 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.h
const 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;