mirror of
https://github.com/netwide-assembler/nasm.git
synced 2025-03-19 18:00:23 +08:00
%error, %warning out on the final pass, add %fatal
Only process %error or %warning directives on the final pass. Add a new %fatal directive which terminates assembly immediately.
This commit is contained in:
parent
7f596e7aa8
commit
8e3f75ea6e
@ -14,6 +14,10 @@ since 2007.
|
||||
|
||||
\b New \c{%warning} directive to issue user-controlled warnings.
|
||||
|
||||
\b \c{%error} directives are now deferred to the final assembly phase.
|
||||
|
||||
\b New \c{%fatal} directive to immediately terminate assembly.
|
||||
|
||||
\b \c{__utf16__} and \c{__utf32__} operators to generate UTF-16 and UTF-32
|
||||
strings.
|
||||
|
||||
|
@ -3389,7 +3389,7 @@ the construction of an appropriately sized ENTER instruction
|
||||
as shown in the example.
|
||||
|
||||
|
||||
\H{pperror} Reporting \i{User-Defined Errors}: \i\c{%error} and \i\c{%warning}
|
||||
\H{pperror} Reporting \i{User-Defined Errors}: \i\c{%error}, \i\c{%warning}, \i\c{%fatal}
|
||||
|
||||
The preprocessor directive \c{%error} will cause NASM to report an
|
||||
error if it occurs in assembled code. So if other users are going to
|
||||
@ -3420,10 +3420,19 @@ Similarly, \c{%warning} issues a warning, but allows assembly to continue:
|
||||
\c %define F1
|
||||
\c %endif
|
||||
|
||||
It is optional for the message string after \c{%error} or \c{%warning}
|
||||
to be quoted. If it is \e{not}, then single-line macros are expanded
|
||||
in it, which can be used to display more information to the user. For
|
||||
example:
|
||||
\c{%error} and \c{%warning} are issued only on the final assembly
|
||||
pass. This makes them safe to use in conjunction with tests that
|
||||
depend on symbol values.
|
||||
|
||||
\c{%fatal} terminates assembly immediately, regardless of pass. This
|
||||
is useful when there is no point in continuing the assembly further,
|
||||
and doing so is likely just going to cause a spew of confusing error
|
||||
messages.
|
||||
|
||||
It is optional for the message string after \c{%error}, \c{%warning}
|
||||
or \c{%fatal} to be quoted. If it is \e{not}, then single-line macros
|
||||
are expanded in it, which can be used to display more information to
|
||||
the user. For example:
|
||||
|
||||
\c %if foo > 64
|
||||
\c %assign foo_over foo-64
|
||||
|
16
preproc.c
16
preproc.c
@ -1938,6 +1938,7 @@ static int do_directive(Token * tline)
|
||||
MMacro *tmp_defining; /* Used when manipulating rep_nest */
|
||||
int64_t count;
|
||||
size_t len;
|
||||
int severity;
|
||||
|
||||
origline = tline;
|
||||
|
||||
@ -2363,12 +2364,21 @@ static int do_directive(Token * tline)
|
||||
free_tlist(origline);
|
||||
return DIRECTIVE_FOUND;
|
||||
|
||||
case PP_FATAL:
|
||||
severity = ERR_FATAL|ERR_NO_SEVERITY;
|
||||
goto issue_error;
|
||||
case PP_ERROR:
|
||||
severity = ERR_NONFATAL|ERR_NO_SEVERITY;
|
||||
goto issue_error;
|
||||
case PP_WARNING:
|
||||
severity = ERR_WARNING|ERR_NO_SEVERITY;
|
||||
goto issue_error;
|
||||
|
||||
issue_error:
|
||||
{
|
||||
int severity = (i == PP_ERROR)
|
||||
? ERR_NONFATAL|ERR_NO_SEVERITY
|
||||
: ERR_WARNING|ERR_NO_SEVERITY;
|
||||
/* Only error out if this is the final pass */
|
||||
if (pass != 2 && i != PP_FATAL)
|
||||
return DIRECTIVE_FOUND;
|
||||
|
||||
tline->next = expand_smacro(tline->next);
|
||||
tline = tline->next;
|
||||
|
133
test/fwdoptpp.asm
Normal file
133
test/fwdoptpp.asm
Normal file
@ -0,0 +1,133 @@
|
||||
;Testname=test; Arguments=-fbin -ofwdoptpp.bin; Files=.stdout .stderr fwdoptpp.bin
|
||||
n0: jmp n1
|
||||
n1: jmp n2
|
||||
n2: jmp n3
|
||||
n3: jmp n4
|
||||
n4: jmp n5
|
||||
n5: jmp n6
|
||||
n6: jmp n7
|
||||
n7: jmp n8
|
||||
n8: jmp n9
|
||||
n9: jmp n10
|
||||
n10: jmp n11
|
||||
n11: jmp n12
|
||||
n12: jmp n13
|
||||
n13: jmp n14
|
||||
n14: jmp n15
|
||||
n15: jmp n16
|
||||
n16: jmp n17
|
||||
n17: jmp n18
|
||||
n18: jmp n19
|
||||
n19: jmp n20
|
||||
n20: jmp n21
|
||||
n21: jmp n22
|
||||
n22: jmp n23
|
||||
n23: jmp n24
|
||||
n24: jmp n25
|
||||
n25: jmp n26
|
||||
n26: jmp n27
|
||||
n27: jmp n28
|
||||
n28: jmp n29
|
||||
n29: jmp n30
|
||||
n30: jmp n31
|
||||
n31: jmp n32
|
||||
n32: jmp n33
|
||||
n33: jmp n34
|
||||
n34: jmp n35
|
||||
n35: jmp n36
|
||||
n36: jmp n37
|
||||
n37: jmp n38
|
||||
n38: jmp n39
|
||||
n39: jmp n40
|
||||
n40: jmp n41
|
||||
n41: jmp n42
|
||||
n42: jmp n43
|
||||
n43: jmp n44
|
||||
n44: jmp n45
|
||||
n45: jmp n46
|
||||
n46: jmp n47
|
||||
n47: jmp n48
|
||||
n48: jmp n49
|
||||
n49: jmp n50
|
||||
n50: jmp n51
|
||||
n51: jmp n52
|
||||
n52: jmp n53
|
||||
n53: jmp n54
|
||||
n54: jmp n55
|
||||
n55: jmp n56
|
||||
n56: jmp n57
|
||||
n57: jmp n58
|
||||
n58: jmp n59
|
||||
n59: jmp n60
|
||||
n60: jmp n61
|
||||
n61: jmp n62
|
||||
n62: jmp n63
|
||||
n63: jmp n64
|
||||
n64: jmp n65
|
||||
n65: jmp n66
|
||||
n66: jmp n67
|
||||
n67: jmp n68
|
||||
n68: jmp n69
|
||||
n69: jmp n70
|
||||
n70: jmp n71
|
||||
n71: jmp n72
|
||||
n72: jmp n73
|
||||
n73: jmp n74
|
||||
n74: jmp n75
|
||||
n75: jmp n76
|
||||
n76: jmp n77
|
||||
n77: jmp n78
|
||||
n78: jmp n79
|
||||
n79: jmp n80
|
||||
n80: jmp n81
|
||||
n81: jmp n82
|
||||
n82: jmp n83
|
||||
n83: jmp n84
|
||||
n84: jmp n85
|
||||
n85: jmp n86
|
||||
n86: jmp n87
|
||||
n87: jmp n88
|
||||
n88: jmp n89
|
||||
n89: jmp n90
|
||||
n90: jmp n91
|
||||
n91: jmp n92
|
||||
n92: jmp n93
|
||||
n93: jmp n94
|
||||
n94: jmp n95
|
||||
n95: jmp n96
|
||||
n96: jmp n97
|
||||
n97: jmp n98
|
||||
n98: jmp n99
|
||||
n99: jmp n100
|
||||
n100: jmp n101
|
||||
n101: jmp n102
|
||||
n102: jmp n103
|
||||
n103: jmp n104
|
||||
n104: jmp n105
|
||||
n105: jmp n106
|
||||
n106: jmp n107
|
||||
n107: jmp n108
|
||||
n108: jmp n109
|
||||
n109: jmp n110
|
||||
n110: jmp n111
|
||||
n111: jmp n112
|
||||
n112: jmp n113
|
||||
n113: jmp n114
|
||||
n114: jmp n115
|
||||
n115: jmp n116
|
||||
n116: jmp n117
|
||||
n117: jmp n118
|
||||
n118: jmp n119
|
||||
n119: jmp n120
|
||||
n120: jmp n121
|
||||
n121: jmp n122
|
||||
n122: jmp n123
|
||||
n123: jmp n124
|
||||
n124: jmp n125
|
||||
n125: jmp n126
|
||||
n126: jmp n127
|
||||
n127: jmp n0
|
||||
|
||||
%if ($-$$) > 257
|
||||
%fatal "Out of space!"
|
||||
%endif
|
Loading…
x
Reference in New Issue
Block a user