rearranged struct, no change in functionality

git-svn-id: https://svn.code.sf.net/p/acme-crossass/code-0/trunk@399 4df02467-bbd4-4a76-a152-e7ce94205b78
This commit is contained in:
marcobaye 2024-08-18 17:23:23 +00:00
parent fc296d6abd
commit 0af42c7a8a
8 changed files with 42 additions and 36 deletions

View File

@ -343,12 +343,12 @@ static void perform_pass(void)
encoding_passinit(); // set default encoding
section_passinit(); // set initial zone (untitled)
// init variables
pass.undefined_count = 0;
//pass.needvalue_count = 0; FIXME - use
pass.changed_count = 0;
pass.error_count = 0;
pass.warning_count = 0;
// Process toplevel files
pass.counters.undefineds = 0;
//pass.counters.needvalue = 0; FIXME - use
pass.counters.symbolchanges = 0;
pass.counters.errors = 0;
pass.counters.warnings = 0;
// process toplevel files
for (ii = 0; ii < toplevel_src_count; ++ii) {
fd = fopen(toplevel_sources_plat[ii], FILE_READBINARY);
if (fd) {
@ -358,7 +358,7 @@ static void perform_pass(void)
fprintf(stderr, "Error: Cannot open toplevel file \"%s\".\n", toplevel_sources_plat[ii]);
if (toplevel_sources_plat[ii][0] == '-')
fprintf(stderr, "Options (starting with '-') must be given _before_ source files!\n");
++pass.error_count;
++pass.counters.errors;
}
}
output_endofpass(); // make sure last code segment is closed
@ -366,8 +366,8 @@ static void perform_pass(void)
// in the future to two general expressions, this is the point where
// they would need to be evaluated.
if (config.process_verbosity >= 8)
printf("Undefined expressions: %d. Symbol updates: %d.\n", pass.undefined_count, pass.changed_count);
if (pass.error_count)
printf("Undefined expressions: %d. Symbol updates: %d.\n", pass.counters.undefineds, pass.counters.symbolchanges);
if (pass.counters.errors)
exit(ACME_finalize(EXIT_FAILURE));
// now increment pass number
// this must be done _after_ the pass because assignments done via
@ -396,11 +396,11 @@ static void do_actual_work(void)
perform_pass(); // first pass
pass.flags.do_segment_checks = FALSE; // FIXME - do in _last_ pass instead!
// pretend there has been a previous pass, with one more undefined result
undefs_before = pass.undefined_count + 1;
undefs_before = pass.counters.undefineds + 1;
// keep doing passes as long as the number of undefined results keeps decreasing.
// stop on zero (FIXME - zero-check pass.needvalue_count instead!)
while ((pass.undefined_count && (pass.undefined_count < undefs_before)) || pass.changed_count) {
undefs_before = pass.undefined_count;
// stop on zero (FIXME - zero-check pass.counters.needvalue instead!)
while ((pass.counters.undefineds && (pass.counters.undefineds < undefs_before)) || pass.counters.symbolchanges) {
undefs_before = pass.counters.undefineds;
perform_pass();
if (--sanity.passes_left < 0) {
// FIXME - exit with error
@ -410,7 +410,7 @@ static void do_actual_work(void)
}
}
// any errors left?
if (pass.undefined_count == 0) { // FIXME - use pass.needvalue_count instead!
if (pass.counters.undefineds == 0) { // FIXME - use pass.counters.needvalue instead!
// if listing report is wanted and there were no errors,
// do another pass to generate listing report
if (config.report_filename) {

View File

@ -2513,7 +2513,7 @@ static int parse_expression(struct expression *expression)
// not empty. undefined?
if (!(result->type->is_defined(result))) {
// then count (in all passes)
++pass.undefined_count;
++pass.counters.undefineds;
}
}
// do some checks depending on int/float

View File

@ -533,15 +533,15 @@ void throw_message(enum debuglevel level, const char msg[], struct location *opt
// (assembly stops, for example if outbuffer overruns).
PLATFORM_SERIOUS(msg);
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.counters.errors; // FIXME - needed when problem below is solved
exit(ACME_finalize(EXIT_FAILURE)); // FIXME - this inhibits output of macro call stack
case DEBUGLEVEL_ERROR:
// output an error
// (something is wrong, no output file will be generated).
PLATFORM_ERROR(msg);
throw_msg(msg, "\033[31m", "Error", opt_alt_loc); // red
++pass.error_count;
if (pass.error_count >= config.max_errors)
++pass.counters.errors;
if (pass.counters.errors >= config.max_errors)
exit(ACME_finalize(EXIT_FAILURE));
break;
case DEBUGLEVEL_WARNING:
@ -552,11 +552,11 @@ void throw_message(enum debuglevel level, const char msg[], struct location *opt
break;
PLATFORM_WARNING(msg);
throw_msg(msg, "\033[33m", "Warning", opt_alt_loc); // yellow
++pass.warning_count;
++pass.counters.warnings;
// then check if warnings should be handled like errors:
if (config.all_warnings_are_errors) {
++pass.error_count;
if (pass.error_count >= config.max_errors)
++pass.counters.errors;
if (pass.counters.errors >= config.max_errors)
exit(ACME_finalize(EXIT_FAILURE));
}
break;

View File

@ -106,11 +106,17 @@ extern struct config config;
struct pass {
int number; // counts up from one
int undefined_count; // counts undefined expression results (if this stops decreasing, next pass must list them as errors)
//int needvalue_count; // counts undefined expression results actually needed for output (when this hits zero, we're done) FIXME - use
int changed_count; // count symbol changes (if nonzero, another pass is needed)
int error_count;
int warning_count;
struct {
int undefineds; // counts undefined expression results (if this stops decreasing, next pass must list them as errors)
//int needvalue; // counts undefined expression results actually needed for output (when this hits zero, we're done) FIXME - use
int symbolchanges; // count symbol changes (if nonzero, another pass is needed)
int errors;
int warnings;
// FIXME - add a counter for "errors not reported because pass flags
// said so", because then we can read the value after all symbol changes
// have finally settled and know if the next pass is a victory lap or an
// error output pass.
} counters;
struct {
char complain_about_undefined; // will be FALSE until error pass is needed
char do_segment_checks; // atm only used in pass 1, should be used in _last_ pass!

View File

@ -244,7 +244,7 @@ void macro_parse_call(void) // Now GotByte = first char of macro name
inputchange_new_ram(&icb);
inputchange_macro1_params(&actual_macro->definition, actual_macro->parameter_list);
outer_msg_sum = pass.warning_count + pass.error_count; // remember for call stack decision
outer_msg_sum = pass.counters.warnings + pass.counters.errors; // remember for call stack decision
// remember old section
outer_section = section_now;
@ -300,7 +300,7 @@ void macro_parse_call(void) // Now GotByte = first char of macro name
inputchange_back(&icb);
// if needed, dump call stack
if (outer_msg_sum != pass.warning_count + pass.error_count)
if (outer_msg_sum != pass.counters.warnings + pass.counters.errors)
Throw_warning("...called from here.");
parser_ensure_EOS();

View File

@ -189,11 +189,11 @@ void output_newdefault(void)
{
// init memory
fill_completely(config.mem_init_value);
// enforce another pass
if (pass.undefined_count == 0)
pass.undefined_count = 1;
//if (pass.needvalue_count == 0) FIXME - use? instead or additionally?
// pass.needvalue_count = 1;
// enforce another pass (FIXME - no, just do a separate output pass anyway!)
if (pass.counters.undefineds == 0)
pass.counters.undefineds = 1;
//if (pass.counters.needvalue == 0) FIXME - use? instead or additionally?
// pass.counters.needvalue = 1;
// enforcing another pass is not needed if there hasn't been any
// output yet. But that's tricky to detect without too much overhead.
// The old solution was to add &&(out->lowest_written < out->highest_written+1) to "if" above

View File

@ -571,8 +571,8 @@ static enum eos po_binary(void)
// check whether including is a waste of time
// FIXME - future changes ("several-projects-at-once")
// may be incompatible with this!
if ((size.val.intval >= 0) && (pass.undefined_count || pass.error_count)) {
//if ((size.val.intval >= 0) && (pass.needvalue_count || pass.error_count)) { FIXME - use!
if ((size.val.intval >= 0) && (pass.counters.undefineds || pass.counters.errors)) {
//if ((size.val.intval >= 0) && (pass.counters.needvalue || pass.counters.errors)) { FIXME - use!
output_skip(size.val.intval); // really including is useless anyway
} else {
// really insert file

View File

@ -9,7 +9,7 @@
#define RELEASE "0.97" // update before release FIXME
#define CODENAME "Zem" // update before release
#define CHANGE_DATE "1 Aug" // update before release FIXME
#define CHANGE_DATE "2 Aug" // update before release FIXME
#define CHANGE_YEAR "2024" // update before release
//#define HOME_PAGE "http://home.pages.de/~mac_bacon/smorbrod/acme/"
#define HOME_PAGE "http://sourceforge.net/p/acme-crossass/" // FIXME