summaryrefslogtreecommitdiff
path: root/05/preprocess.b
diff options
context:
space:
mode:
Diffstat (limited to '05/preprocess.b')
-rw-r--r--05/preprocess.b16
1 files changed, 8 insertions, 8 deletions
diff --git a/05/preprocess.b b/05/preprocess.b
index 8a48766..8057d15 100644
--- a/05/preprocess.b
+++ b/05/preprocess.b
@@ -550,6 +550,7 @@ function translation_phase_4
:phase4_line
line_number += 1
+ :phase4_line_noinc
c = *1in
if c == 0 goto phase4_end
if c == '# goto pp_directive ; NOTE: ## cannot appear at the start of a line
@@ -869,7 +870,7 @@ function translation_phase_4
p = look_up_function_macro(macro_name)
if p != 0 goto process_pptoken ; macro is defined; keep processing
preprocessor_skip_if(filename, &line_number, &in, &out)
- goto process_pptoken
+ goto phase4_line_noinc
:pp_directive_ifndef
pptoken_skip(&in)
pptoken_skip_spaces(&in)
@@ -884,12 +885,12 @@ function translation_phase_4
goto process_pptoken ; macro not defined; keep processing
:ifndef_skip
preprocessor_skip_if(filename, &line_number, &in, &out)
- goto process_pptoken
+ goto phase4_line_noinc
:pp_directive_else
; assume we got here from an if, so skip this
pptoken_skip_to_newline(&in)
preprocessor_skip_if(filename, &line_number, &in, &out)
- goto process_pptoken
+ goto phase4_line_noinc
:pp_directive_endif
; assume we got here from an if/elif/else, just ignore it.
pptoken_skip(&in)
@@ -982,7 +983,7 @@ function translation_phase_4
evaluate_constant_expression(p, if_expr, &b)
if b == 0 goto pp_directive_if0
goto pp_if_done
- :pp_directive_if0
+ :pp_directive_if0
preprocessor_skip_if(filename, &line_number, &in, &out)
goto pp_if_done
:pp_bad_defined
@@ -992,7 +993,7 @@ function translation_phase_4
byte 0
:pp_if_done
free(if_pptokens)
- goto process_pptoken
+ goto phase4_line_noinc
:unrecognized_directive
compile_error(filename, line_number, .str_unrecognized_directive)
:str_unrecognized_directive
@@ -1040,7 +1041,7 @@ function translation_phase_4
; skip body of #if / #elif / #else. This will advance *p_in to:
-; - right before the next unmatched #elif, replacing it with a #if
+; - right at the next unmatched #elif, replacing it with a #if
; OR - right after the next #else
; OR - right after the next #endif
; whichever comes first
@@ -1104,8 +1105,7 @@ function preprocessor_skip_if
*1in = 'i
in += 1
*1in = 'f
- in -= 5
- *1in = 10 ; we need a newline so the #elif actually gets handled
+ in -= 3
goto preprocessor_skip_if_loop_end
:skip_if_inc_depth
if_depth += 1