mirror of
https://github.com/uffejakobsen/acme.git
synced 2024-11-25 23:49:25 +00:00
ACME Release 0.95.8: Errors in macros are now shown with call stack.
git-svn-id: https://svn.code.sf.net/p/acme-crossass/code-0/trunk@75 4df02467-bbd4-4a76-a152-e7ce94205b78
This commit is contained in:
parent
7fd4bc6539
commit
222f06c905
@ -12,6 +12,14 @@ platform used. There should be another help file in this archive
|
|||||||
outlining the platform specific changes.
|
outlining the platform specific changes.
|
||||||
|
|
||||||
|
|
||||||
|
----------------------------------------------------------------------
|
||||||
|
Section: New in release 0.95.8
|
||||||
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
|
Warnings and errors inside macros now cause the call stack to be
|
||||||
|
displayed as well (does not yet work for serious errors, though).
|
||||||
|
|
||||||
|
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
Section: New in release 0.95.7
|
Section: New in release 0.95.7
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
@ -19,9 +27,9 @@ Section: New in release 0.95.7
|
|||||||
New pseudo opcodes:
|
New pseudo opcodes:
|
||||||
"!be16", "!be24" and "!be32" for big-endian byte order output.
|
"!be16", "!be24" and "!be32" for big-endian byte order output.
|
||||||
"!le16", "!le24" and "!le32" for little-endian byte order output.
|
"!le16", "!le24" and "!le32" for little-endian byte order output.
|
||||||
The old pseudo opcodes ("!16", "!24", "!32") will now use the correct
|
The old pseudo opcodes ("!16", "!24", "!32") will now use the
|
||||||
byte order for the chosen CPU (which is always little-endian, because
|
correct byte order for the chosen CPU (which is always little-
|
||||||
there is no support for any big-endian CPU yet. ;))
|
endian, because there is no support for any big-endian CPU yet.;))
|
||||||
|
|
||||||
|
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
@ -214,8 +222,8 @@ Added "apple" output format.
|
|||||||
Section: New in release 0.94.3
|
Section: New in release 0.94.3
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
"Target out of range" error now includes info on how much the range was
|
"Target out of range" error now includes info on how much the range
|
||||||
exceeded. Thanks to Bitbreaker/VOZ for the suggestion.
|
was exceeded. Thanks to Bitbreaker/VOZ for the suggestion.
|
||||||
|
|
||||||
|
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
@ -223,12 +231,12 @@ Section: New in release 0.94.2
|
|||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Added missing newline after "no output file specified" message.
|
Added missing newline after "no output file specified" message.
|
||||||
Fixed bug in "!to" and "!sl" (colon in filename is interpreted as command
|
Fixed bug in "!to" and "!sl" (colon in filename is interpreted as
|
||||||
separator in later passes).
|
command separator in later passes).
|
||||||
Changed verbose output hex prefix from $ to 0x.
|
Changed verbose output hex prefix from $ to 0x.
|
||||||
Changed --help output
|
Changed --help output
|
||||||
Changed EOR to XOR in docs and comments (the ACME operator, not the 6502
|
Changed EOR to XOR in docs and comments (the ACME operator, not the
|
||||||
opcode)
|
6502 opcode)
|
||||||
|
|
||||||
|
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
@ -149,6 +149,11 @@ Wrong type for loop's END value - must match type of START value.
|
|||||||
In "!for" loops, START and END must have the same type, which then
|
In "!for" loops, START and END must have the same type, which then
|
||||||
gets used for the loop counter.
|
gets used for the loop counter.
|
||||||
|
|
||||||
|
...called from here.
|
||||||
|
If warnings and/or errors are output during a macro call, messages
|
||||||
|
with this text are added to display the call stack (because you
|
||||||
|
might need to fix the call instead of the macro itself).
|
||||||
|
|
||||||
|
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
Section: Errors during assembly
|
Section: Errors during assembly
|
||||||
|
@ -310,11 +310,19 @@ int Parse_optional_block(void)
|
|||||||
|
|
||||||
// Error handling
|
// Error handling
|
||||||
|
|
||||||
|
// error/warning counter so macro calls can find out whether to show a call stack
|
||||||
|
static int throw_counter = 0;
|
||||||
|
int Throw_get_counter(void)
|
||||||
|
{
|
||||||
|
return throw_counter;
|
||||||
|
}
|
||||||
|
|
||||||
// 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_message(const char *message, const char *type)
|
static void throw_message(const char *message, const char *type)
|
||||||
{
|
{
|
||||||
|
++throw_counter;
|
||||||
if (format_msvc)
|
if (format_msvc)
|
||||||
fprintf(msg_stream, "%s(%d) : %s (%s %s): %s\n",
|
fprintf(msg_stream, "%s(%d) : %s (%s %s): %s\n",
|
||||||
Input_now->original_filename, Input_now->line_number,
|
Input_now->original_filename, Input_now->line_number,
|
||||||
@ -366,6 +374,7 @@ void Throw_serious_error(const char *message)
|
|||||||
{
|
{
|
||||||
PLATFORM_SERIOUS(message);
|
PLATFORM_SERIOUS(message);
|
||||||
throw_message(message, "Serious error");
|
throw_message(message, "Serious error");
|
||||||
|
// FIXME - exiting immediately inhibits output of macro call stack!
|
||||||
exit(ACME_finalize(EXIT_FAILURE));
|
exit(ACME_finalize(EXIT_FAILURE));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -112,6 +112,8 @@ extern void Parse_until_eob_or_eof(void);
|
|||||||
// Otherwise (if there is no block), return FALSE.
|
// Otherwise (if there is no block), return FALSE.
|
||||||
// Don't forget to call EnsureEOL() afterwards.
|
// Don't forget to call EnsureEOL() afterwards.
|
||||||
extern int Parse_optional_block(void);
|
extern int Parse_optional_block(void);
|
||||||
|
// error/warning counter so macro calls can find out whether to show a call stack
|
||||||
|
extern int Throw_get_counter(void);
|
||||||
// Output a warning.
|
// Output a warning.
|
||||||
// This means the produced code looks as expected. But there has been a
|
// This means the produced code looks as expected. But there has been a
|
||||||
// situation that should be reported to the user, for example ACME may have
|
// situation that should be reported to the user, for example ACME may have
|
||||||
|
10
src/macro.c
10
src/macro.c
@ -236,6 +236,7 @@ void Macro_parse_call(void) // Now GotByte = dot or first char of macro name
|
|||||||
scope_t macro_scope,
|
scope_t macro_scope,
|
||||||
symbol_scope;
|
symbol_scope;
|
||||||
int arg_count = 0;
|
int arg_count = 0;
|
||||||
|
int outer_err_count;
|
||||||
|
|
||||||
// Enter deeper nesting level
|
// Enter deeper nesting level
|
||||||
// Quit program if recursion too deep.
|
// Quit program if recursion too deep.
|
||||||
@ -284,6 +285,7 @@ void Macro_parse_call(void) // Now GotByte = dot or first char of macro name
|
|||||||
// make macro_node point to the macro struct
|
// make macro_node point to the macro struct
|
||||||
actual_macro = macro_node->body;
|
actual_macro = macro_node->body;
|
||||||
local_gotbyte = GotByte; // CAUTION - ugly kluge
|
local_gotbyte = GotByte; // CAUTION - ugly kluge
|
||||||
|
|
||||||
// set up new input
|
// set up new input
|
||||||
new_input.original_filename = actual_macro->def_filename;
|
new_input.original_filename = actual_macro->def_filename;
|
||||||
new_input.line_number = actual_macro->def_line_number;
|
new_input.line_number = actual_macro->def_line_number;
|
||||||
@ -294,6 +296,9 @@ void Macro_parse_call(void) // Now GotByte = dot or first char of macro name
|
|||||||
outer_input = Input_now;
|
outer_input = Input_now;
|
||||||
// activate new input
|
// activate new input
|
||||||
Input_now = &new_input;
|
Input_now = &new_input;
|
||||||
|
|
||||||
|
outer_err_count = Throw_get_counter(); // remember error count (for call stack decision)
|
||||||
|
|
||||||
// remember old section
|
// remember old section
|
||||||
outer_section = section_now;
|
outer_section = section_now;
|
||||||
// start new section (with new scope)
|
// start new section (with new scope)
|
||||||
@ -342,6 +347,11 @@ void Macro_parse_call(void) // Now GotByte = dot or first char of macro name
|
|||||||
Input_now = outer_input;
|
Input_now = outer_input;
|
||||||
// restore old Gotbyte context
|
// restore old Gotbyte context
|
||||||
GotByte = local_gotbyte; // CAUTION - ugly kluge
|
GotByte = local_gotbyte; // CAUTION - ugly kluge
|
||||||
|
|
||||||
|
// if needed, output call stack
|
||||||
|
if (Throw_get_counter() != outer_err_count)
|
||||||
|
Throw_warning("...called from here.");
|
||||||
|
|
||||||
Input_ensure_EOS();
|
Input_ensure_EOS();
|
||||||
}
|
}
|
||||||
++macro_recursions_left; // leave this nesting level
|
++macro_recursions_left; // leave this nesting level
|
||||||
|
@ -7,9 +7,9 @@
|
|||||||
#define version_H
|
#define version_H
|
||||||
|
|
||||||
|
|
||||||
#define RELEASE "0.95.7" // update before release (FIXME)
|
#define RELEASE "0.95.8" // update before release (FIXME)
|
||||||
#define CODENAME "Fenchurch" // update before release
|
#define CODENAME "Fenchurch" // update before release
|
||||||
#define CHANGE_DATE "5 Aug" // update before release
|
#define CHANGE_DATE "8 Oct" // update before release
|
||||||
#define CHANGE_YEAR "2016" // update before release
|
#define CHANGE_YEAR "2016" // update before release
|
||||||
//#define HOME_PAGE "http://home.pages.de/~mac_bacon/smorbrod/acme/" // FIXME
|
//#define HOME_PAGE "http://home.pages.de/~mac_bacon/smorbrod/acme/" // FIXME
|
||||||
#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