mirror of
https://github.com/uffejakobsen/acme.git
synced 2024-11-25 23:49:25 +00:00
"input_now" ptr is no longer exported
git-svn-id: https://svn.code.sf.net/p/acme-crossass/code-0/trunk@388 4df02467-bbd4-4a76-a152-e7ce94205b78
This commit is contained in:
parent
7015508538
commit
25fcf4f1f4
11
src/flow.c
11
src/flow.c
@ -144,6 +144,7 @@ void flow_forloop(struct for_loop *loop)
|
|||||||
|
|
||||||
|
|
||||||
// read condition, make copy, link to struct
|
// read condition, make copy, link to struct
|
||||||
|
// FIXME - change to some input_line_getcopy() fn, like input_block_getcopy()!
|
||||||
static void copy_condition(struct condition *condition, char terminator)
|
static void copy_condition(struct condition *condition, char terminator)
|
||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
@ -172,8 +173,11 @@ static void copy_condition(struct condition *condition, char terminator)
|
|||||||
// call with GotByte = first interesting character
|
// call with GotByte = first interesting character
|
||||||
void flow_store_doloop_condition(struct condition *condition, char terminator)
|
void flow_store_doloop_condition(struct condition *condition, char terminator)
|
||||||
{
|
{
|
||||||
|
struct location loc;
|
||||||
|
|
||||||
// write line number
|
// write line number
|
||||||
condition->block.line_number = input_now->location.line_number;
|
input_get_location(&loc); // FIXME - get rid of this when changing copy_condition to input_line_getcopy!
|
||||||
|
condition->block.line_number = loc.line_number;
|
||||||
// set defaults
|
// set defaults
|
||||||
condition->invert = FALSE;
|
condition->invert = FALSE;
|
||||||
condition->block.body = NULL;
|
condition->block.body = NULL;
|
||||||
@ -202,7 +206,10 @@ void flow_store_doloop_condition(struct condition *condition, char terminator)
|
|||||||
// call with GotByte = first interesting character
|
// call with GotByte = first interesting character
|
||||||
void flow_store_while_condition(struct condition *condition)
|
void flow_store_while_condition(struct condition *condition)
|
||||||
{
|
{
|
||||||
condition->block.line_number = input_now->location.line_number;
|
struct location loc;
|
||||||
|
|
||||||
|
input_get_location(&loc); // FIXME - get rid of this when changing copy_condition to input_line_getcopy!
|
||||||
|
condition->block.line_number = loc.line_number;
|
||||||
condition->invert = FALSE;
|
condition->invert = FALSE;
|
||||||
copy_condition(condition, CHAR_SOB);
|
copy_condition(condition, CHAR_SOB);
|
||||||
}
|
}
|
||||||
|
39
src/global.c
39
src/global.c
@ -491,7 +491,8 @@ bits parser_get_force_bit(void)
|
|||||||
// This function will do the actual output for warnings, errors and serious
|
// This function will do the actual output for warnings, errors and serious
|
||||||
// errors. It shows the given message string, as well as the current
|
// errors. It shows the given message string, as well as the current
|
||||||
// context: file name, line number, source type and source title.
|
// context: file name, line number, source type and source title.
|
||||||
static void throw_msg(const char *message, const char *ansicolor, const char *type)
|
// if the "optional alternative location" given is NULL, the current location is used
|
||||||
|
static void throw_msg(const char *message, const char *ansicolor, const char *type, struct location *opt_alt_loc)
|
||||||
{
|
{
|
||||||
const char *resetcolor = "\033[0m";
|
const char *resetcolor = "\033[0m";
|
||||||
struct location location;
|
struct location location;
|
||||||
@ -501,7 +502,11 @@ static void throw_msg(const char *message, const char *ansicolor, const char *ty
|
|||||||
resetcolor = "";
|
resetcolor = "";
|
||||||
}
|
}
|
||||||
|
|
||||||
input_get_location(&location);
|
// optional alternative location given?
|
||||||
|
if (opt_alt_loc)
|
||||||
|
location = *opt_alt_loc; // use alternative location
|
||||||
|
else
|
||||||
|
input_get_location(&location); // use current location
|
||||||
|
|
||||||
if (config.format_msvc) {
|
if (config.format_msvc) {
|
||||||
fprintf(config.msg_stream, "%s(%d) : %s%s%s (%s %s): %s\n",
|
fprintf(config.msg_stream, "%s(%d) : %s%s%s (%s %s): %s\n",
|
||||||
@ -517,7 +522,8 @@ static void throw_msg(const char *message, const char *ansicolor, const char *ty
|
|||||||
}
|
}
|
||||||
|
|
||||||
// generate debug/info/warning/error message
|
// generate debug/info/warning/error message
|
||||||
void throw_message(enum debuglevel level, const char msg[])
|
// if the "optional alternative location" given is NULL, the current location is used
|
||||||
|
void throw_message(enum debuglevel level, const char msg[], struct location *opt_alt_loc)
|
||||||
{
|
{
|
||||||
// if level is taken from source, ensure valid value:
|
// if level is taken from source, ensure valid value:
|
||||||
if (level < DEBUGLEVEL_SERIOUS)
|
if (level < DEBUGLEVEL_SERIOUS)
|
||||||
@ -528,14 +534,14 @@ void throw_message(enum debuglevel level, const char msg[])
|
|||||||
// output a serious error
|
// output a serious error
|
||||||
// (assembly stops, for example if outbuffer overruns).
|
// (assembly stops, for example if outbuffer overruns).
|
||||||
PLATFORM_SERIOUS(msg);
|
PLATFORM_SERIOUS(msg);
|
||||||
throw_msg(msg, "\033[1m\033[31m", "Serious error"); // bold + red
|
throw_msg(msg, "\033[1m\033[31m", "Serious error", opt_alt_loc); // bold + red
|
||||||
//++pass.error_count; // FIXME - needed when problem below is solved
|
//++pass.error_count; // FIXME - needed when problem below is solved
|
||||||
exit(ACME_finalize(EXIT_FAILURE)); // FIXME - this inhibits output of macro call stack
|
exit(ACME_finalize(EXIT_FAILURE)); // FIXME - this inhibits output of macro call stack
|
||||||
case DEBUGLEVEL_ERROR:
|
case DEBUGLEVEL_ERROR:
|
||||||
// output an error
|
// output an error
|
||||||
// (something is wrong, no output file will be generated).
|
// (something is wrong, no output file will be generated).
|
||||||
PLATFORM_ERROR(msg);
|
PLATFORM_ERROR(msg);
|
||||||
throw_msg(msg, "\033[31m", "Error"); // red
|
throw_msg(msg, "\033[31m", "Error", opt_alt_loc); // red
|
||||||
++pass.error_count;
|
++pass.error_count;
|
||||||
if (pass.error_count >= config.max_errors)
|
if (pass.error_count >= config.max_errors)
|
||||||
exit(ACME_finalize(EXIT_FAILURE));
|
exit(ACME_finalize(EXIT_FAILURE));
|
||||||
@ -547,7 +553,7 @@ void throw_message(enum debuglevel level, const char msg[])
|
|||||||
if (in_nowarn_block || (statement_flags & SF_NOWARN_PREFIX))
|
if (in_nowarn_block || (statement_flags & SF_NOWARN_PREFIX))
|
||||||
break;
|
break;
|
||||||
PLATFORM_WARNING(msg);
|
PLATFORM_WARNING(msg);
|
||||||
throw_msg(msg, "\033[33m", "Warning"); // yellow
|
throw_msg(msg, "\033[33m", "Warning", opt_alt_loc); // yellow
|
||||||
++pass.warning_count;
|
++pass.warning_count;
|
||||||
// then check if warnings should be handled like errors:
|
// then check if warnings should be handled like errors:
|
||||||
if (config.all_warnings_are_errors) {
|
if (config.all_warnings_are_errors) {
|
||||||
@ -557,11 +563,11 @@ void throw_message(enum debuglevel level, const char msg[])
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case DEBUGLEVEL_INFO:
|
case DEBUGLEVEL_INFO:
|
||||||
throw_msg(msg, "\033[32m", "Info"); // green
|
throw_msg(msg, "\033[32m", "Info", opt_alt_loc); // green
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
// debug
|
// debug
|
||||||
throw_msg(msg, "\033[36m", "Debug"); // cyan
|
throw_msg(msg, "\033[36m", "Debug", opt_alt_loc); // cyan
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -572,25 +578,20 @@ void throw_message(enum debuglevel level, const char msg[])
|
|||||||
// reach the maximum error limit inbetween.
|
// reach the maximum error limit inbetween.
|
||||||
void throw_redef_error(struct location *old_def, const char msg[])
|
void throw_redef_error(struct location *old_def, const char msg[])
|
||||||
{
|
{
|
||||||
struct location buffered_location;
|
|
||||||
const char *buffered_section_type;
|
const char *buffered_section_type;
|
||||||
char *buffered_section_title;
|
char *buffered_section_title;
|
||||||
|
|
||||||
// CAUTION, ugly kluge: fiddle with input_now and section_now
|
// CAUTION, ugly kluge: fiddle with section_now data to generate
|
||||||
// data so error message is actually helpful
|
// "earlier definition" section.
|
||||||
// FIXME: maybe better pass "old location" as an optional arg to throw_message!
|
// buffer old section
|
||||||
// buffer old data
|
|
||||||
input_get_location(&buffered_location);
|
|
||||||
buffered_section_type = section_now->type;
|
buffered_section_type = section_now->type;
|
||||||
buffered_section_title = section_now->title;
|
buffered_section_title = section_now->title;
|
||||||
// set new (fake) data
|
// set new (fake) section
|
||||||
input_now->location = *old_def;
|
|
||||||
section_now->type = "earlier";
|
section_now->type = "earlier";
|
||||||
section_now->title = "definition";
|
section_now->title = "definition";
|
||||||
// show warning with location of earlier definition
|
// show warning with location of earlier definition
|
||||||
Throw_warning(msg); // FIXME - throw as info?
|
throw_message(DEBUGLEVEL_WARNING, msg, old_def); // FIXME - throw as info?
|
||||||
// restore old data
|
// restore old section
|
||||||
input_now->location = buffered_location;
|
|
||||||
section_now->type = buffered_section_type;
|
section_now->type = buffered_section_type;
|
||||||
section_now->title = buffered_section_title;
|
section_now->title = buffered_section_title;
|
||||||
// show error with location of current definition
|
// show error with location of current definition
|
||||||
|
@ -201,15 +201,16 @@ extern void parse_source_code_file(FILE *fd, const char *eternal_plat_filename);
|
|||||||
extern bits parser_get_force_bit(void);
|
extern bits parser_get_force_bit(void);
|
||||||
|
|
||||||
// generate a debug/info/warning/error message
|
// generate a debug/info/warning/error message
|
||||||
extern void throw_message(enum debuglevel level, const char msg[]);
|
// if the "optional alternative location" given is NULL, the current location is used
|
||||||
|
extern void throw_message(enum debuglevel level, const char msg[], struct location *opt_alt_loc);
|
||||||
|
|
||||||
// output a warning (something looks wrong, like "label name starts with shift-space character")
|
// output a warning (something looks wrong, like "label name starts with shift-space character")
|
||||||
#define Throw_warning(msg) throw_message(DEBUGLEVEL_WARNING, msg)
|
#define Throw_warning(msg) throw_message(DEBUGLEVEL_WARNING, msg, NULL)
|
||||||
|
|
||||||
// output an error (something is wrong, no output file will be generated).
|
// output an error (something is wrong, no output file will be generated).
|
||||||
// the assembler will try to go on with the assembly, so the user gets to know
|
// the assembler will try to go on with the assembly, so the user gets to know
|
||||||
// about more than one of his typos at a time.
|
// about more than one of his typos at a time.
|
||||||
#define Throw_error(msg) throw_message(DEBUGLEVEL_ERROR, msg)
|
#define Throw_error(msg) throw_message(DEBUGLEVEL_ERROR, msg, NULL)
|
||||||
|
|
||||||
// throw "macro twice" error (FIXME - also use for "symbol twice"!)
|
// throw "macro twice" error (FIXME - also use for "symbol twice"!)
|
||||||
// first output a warning, then an error, this guarantees that ACME does not
|
// first output a warning, then an error, this guarantees that ACME does not
|
||||||
@ -222,7 +223,7 @@ extern void throw_redef_error(struct location *old_def, const char msg[]);
|
|||||||
extern void throw_symbol_error(const char *msg);
|
extern void throw_symbol_error(const char *msg);
|
||||||
|
|
||||||
// output a serious error (assembly stops, for example if outbuffer overruns).
|
// output a serious error (assembly stops, for example if outbuffer overruns).
|
||||||
#define Throw_serious_error(msg) throw_message(DEBUGLEVEL_SERIOUS, msg)
|
#define Throw_serious_error(msg) throw_message(DEBUGLEVEL_SERIOUS, msg, NULL)
|
||||||
|
|
||||||
// handle bugs
|
// handle bugs
|
||||||
extern void BUG(const char *msg, int code);
|
extern void BUG(const char *msg, int code);
|
||||||
|
@ -47,7 +47,6 @@ extern const char FILE_READBINARY[];
|
|||||||
|
|
||||||
|
|
||||||
// Variables
|
// Variables
|
||||||
extern struct input *input_now; // current input structure
|
|
||||||
extern char GotByte; // last byte read (processed)
|
extern char GotByte; // last byte read (processed)
|
||||||
// name of source file used for resolving relative paths
|
// name of source file used for resolving relative paths
|
||||||
// (i.e. not changed during macro execution):
|
// (i.e. not changed during macro execution):
|
||||||
|
@ -99,7 +99,7 @@ static void border_crossed(int current_offset)
|
|||||||
if (current_offset >= config.outbuf_size)
|
if (current_offset >= config.outbuf_size)
|
||||||
Throw_serious_error("Reached memory limit.");
|
Throw_serious_error("Reached memory limit.");
|
||||||
if (pass.flags.do_segment_checks) {
|
if (pass.flags.do_segment_checks) {
|
||||||
throw_message(config.debuglevel_segmentprobs, "Segment reached another one, overwriting it.");
|
throw_message(config.debuglevel_segmentprobs, "Segment reached another one, overwriting it.", NULL);
|
||||||
find_segment_max(current_offset + 1); // find new (next) limit
|
find_segment_max(current_offset + 1); // find new (next) limit
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -282,7 +282,7 @@ static void check_segment(intval_t new_pc)
|
|||||||
while (test_segment->start <= new_pc) {
|
while (test_segment->start <= new_pc) {
|
||||||
if ((test_segment->start + test_segment->length) > new_pc) {
|
if ((test_segment->start + test_segment->length) > new_pc) {
|
||||||
// TODO - include overlap size in error message!
|
// TODO - include overlap size in error message!
|
||||||
throw_message(config.debuglevel_segmentprobs, "Segment starts inside another one, overwriting it.");
|
throw_message(config.debuglevel_segmentprobs, "Segment starts inside another one, overwriting it.", NULL);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1351,7 +1351,7 @@ static enum eos throw_src_string(enum debuglevel level, const char prefix[])
|
|||||||
}
|
}
|
||||||
} while (input_accept_comma());
|
} while (input_accept_comma());
|
||||||
dynabuf_append(user_message, '\0');
|
dynabuf_append(user_message, '\0');
|
||||||
throw_message(level, user_message->buffer);
|
throw_message(level, user_message->buffer, NULL);
|
||||||
return ENSURE_EOS;
|
return ENSURE_EOS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
#define RELEASE "0.97" // update before release FIXME
|
#define RELEASE "0.97" // update before release FIXME
|
||||||
#define CODENAME "Zem" // update before release
|
#define CODENAME "Zem" // update before release
|
||||||
#define CHANGE_DATE "24 Jul" // update before release FIXME
|
#define CHANGE_DATE "25 Jul" // update before release FIXME
|
||||||
#define CHANGE_YEAR "2024" // update before release
|
#define CHANGE_YEAR "2024" // update before release
|
||||||
//#define HOME_PAGE "http://home.pages.de/~mac_bacon/smorbrod/acme/"
|
//#define HOME_PAGE "http://home.pages.de/~mac_bacon/smorbrod/acme/"
|
||||||
#define HOME_PAGE "http://sourceforge.net/p/acme-crossass/" // FIXME
|
#define HOME_PAGE "http://sourceforge.net/p/acme-crossass/" // FIXME
|
||||||
|
Loading…
Reference in New Issue
Block a user