Add braces to Bison .y files

This commit is contained in:
Rangi42
2025-01-27 19:46:23 -05:00
committed by Rangi
parent cae31005f8
commit 4e44958d26

View File

@@ -455,22 +455,23 @@ if:
POP_IF iconst NEWLINE { POP_IF iconst NEWLINE {
lexer_IncIFDepth(); lexer_IncIFDepth();
if ($2) if ($2) {
lexer_RunIFBlock(); lexer_RunIFBlock();
else } else {
lexer_SetMode(LEXER_SKIP_TO_ELIF); lexer_SetMode(LEXER_SKIP_TO_ELIF);
} }
}
; ;
elif: elif:
POP_ELIF iconst NEWLINE { POP_ELIF iconst NEWLINE {
if (lexer_GetIFDepth() == 0) if (lexer_GetIFDepth() == 0) {
fatalerror("Found ELIF outside of an IF construct\n"); fatalerror("Found ELIF outside of an IF construct\n");
}
if (lexer_RanIFBlock()) { if (lexer_RanIFBlock()) {
if (lexer_ReachedELSEBlock()) if (lexer_ReachedELSEBlock()) {
fatalerror("Found ELIF after an ELSE block\n"); fatalerror("Found ELIF after an ELSE block\n");
}
lexer_SetMode(LEXER_SKIP_TO_ENDC); lexer_SetMode(LEXER_SKIP_TO_ENDC);
} else if ($2) { } else if ($2) {
lexer_RunIFBlock(); lexer_RunIFBlock();
@@ -482,13 +483,13 @@ elif:
else: else:
POP_ELSE NEWLINE { POP_ELSE NEWLINE {
if (lexer_GetIFDepth() == 0) if (lexer_GetIFDepth() == 0) {
fatalerror("Found ELSE outside of an IF construct\n"); fatalerror("Found ELSE outside of an IF construct\n");
}
if (lexer_RanIFBlock()) { if (lexer_RanIFBlock()) {
if (lexer_ReachedELSEBlock()) if (lexer_ReachedELSEBlock()) {
fatalerror("Found ELSE after an ELSE block\n"); fatalerror("Found ELSE after an ELSE block\n");
}
lexer_SetMode(LEXER_SKIP_TO_ENDC); lexer_SetMode(LEXER_SKIP_TO_ENDC);
} else { } else {
lexer_RunIFBlock(); lexer_RunIFBlock();
@@ -816,13 +817,15 @@ assert:
} }
} }
| POP_STATIC_ASSERT assert_type iconst { | POP_STATIC_ASSERT assert_type iconst {
if ($3 == 0) if ($3 == 0) {
failAssert($2); failAssert($2);
} }
}
| POP_STATIC_ASSERT assert_type iconst COMMA string { | POP_STATIC_ASSERT assert_type iconst COMMA string {
if ($3 == 0) if ($3 == 0) {
failAssertMsg($2, $5); failAssertMsg($2, $5);
} }
}
; ;
shift: shift:
@@ -853,9 +856,10 @@ load:
rept: rept:
POP_REPT uconst NEWLINE capture_rept endofline { POP_REPT uconst NEWLINE capture_rept endofline {
if ($4.span.ptr) if ($4.span.ptr) {
fstk_RunRept($2, $4.lineNo, $4.span); fstk_RunRept($2, $4.lineNo, $4.span);
} }
}
; ;
for: for:
@@ -864,9 +868,10 @@ for:
} ID { } ID {
lexer_ToggleStringExpansion(true); lexer_ToggleStringExpansion(true);
} COMMA for_args NEWLINE capture_rept endofline { } COMMA for_args NEWLINE capture_rept endofline {
if ($8.span.ptr) if ($8.span.ptr) {
fstk_RunFor($3, $6.start, $6.stop, $6.step, $8.lineNo, $8.span); fstk_RunFor($3, $6.start, $6.stop, $6.step, $8.lineNo, $8.span);
} }
}
; ;
capture_rept: capture_rept:
@@ -895,9 +900,10 @@ for_args:
break: break:
label POP_BREAK endofline { label POP_BREAK endofline {
if (fstk_Break()) if (fstk_Break()) {
lexer_SetMode(LEXER_SKIP_TO_ENDR); lexer_SetMode(LEXER_SKIP_TO_ENDR);
} }
}
; ;
def_macro: def_macro:
@@ -906,9 +912,10 @@ def_macro:
} ID { } ID {
lexer_ToggleStringExpansion(true); lexer_ToggleStringExpansion(true);
} NEWLINE capture_macro endofline { } NEWLINE capture_macro endofline {
if ($6.span.ptr) if ($6.span.ptr) {
sym_AddMacro($3, $6.lineNo, $6.span); sym_AddMacro($3, $6.lineNo, $6.span);
} }
}
; ;
capture_macro: capture_macro:
@@ -1084,8 +1091,9 @@ purge:
POP_PURGE { POP_PURGE {
lexer_ToggleStringExpansion(false); lexer_ToggleStringExpansion(false);
} purge_args trailing_comma { } purge_args trailing_comma {
for (std::string &arg : $3) for (std::string &arg : $3) {
sym_Purge(arg); sym_Purge(arg);
}
lexer_ToggleStringExpansion(true); lexer_ToggleStringExpansion(true);
} }
; ;
@@ -1122,27 +1130,31 @@ export_def:
include: include:
label POP_INCLUDE string endofline { label POP_INCLUDE string endofline {
fstk_RunInclude($3, false); fstk_RunInclude($3, false);
if (failedOnMissingInclude) if (failedOnMissingInclude) {
YYACCEPT; YYACCEPT;
} }
}
; ;
incbin: incbin:
POP_INCBIN string { POP_INCBIN string {
sect_BinaryFile($2, 0); sect_BinaryFile($2, 0);
if (failedOnMissingInclude) if (failedOnMissingInclude) {
YYACCEPT; YYACCEPT;
} }
}
| POP_INCBIN string COMMA iconst { | POP_INCBIN string COMMA iconst {
sect_BinaryFile($2, $4); sect_BinaryFile($2, $4);
if (failedOnMissingInclude) if (failedOnMissingInclude) {
YYACCEPT; YYACCEPT;
} }
}
| POP_INCBIN string COMMA iconst COMMA iconst { | POP_INCBIN string COMMA iconst COMMA iconst {
sect_BinaryFileSlice($2, $4, $6); sect_BinaryFileSlice($2, $4, $6);
if (failedOnMissingInclude) if (failedOnMissingInclude) {
YYACCEPT; YYACCEPT;
} }
}
; ;
charmap: charmap:
@@ -1521,9 +1533,10 @@ relocexpr_no_str:
uconst: uconst:
iconst { iconst {
$$ = $1; $$ = $1;
if ($$ < 0) if ($$ < 0) {
fatalerror("Constant must not be negative: %d\n", $$); fatalerror("Constant must not be negative: %d\n", $$);
} }
}
; ;
iconst: iconst:
@@ -1597,15 +1610,17 @@ string:
Symbol *sym = sym_FindScopedValidSymbol($3); Symbol *sym = sym_FindScopedValidSymbol($3);
if (!sym) { if (!sym) {
if (sym_IsPurgedScoped($3)) if (sym_IsPurgedScoped($3)) {
fatalerror("Unknown symbol \"%s\"; it was purged\n", $3.c_str()); fatalerror("Unknown symbol \"%s\"; it was purged\n", $3.c_str());
else } else {
fatalerror("Unknown symbol \"%s\"\n", $3.c_str()); fatalerror("Unknown symbol \"%s\"\n", $3.c_str());
} }
}
Section const *section = sym->getSection(); Section const *section = sym->getSection();
if (!section) if (!section) {
fatalerror("\"%s\" does not belong to any section\n", sym->name.c_str()); fatalerror("\"%s\" does not belong to any section\n", sym->name.c_str());
}
// Section names are capped by rgbasm's maximum string length, // Section names are capped by rgbasm's maximum string length,
// so this currently can't overflow. // so this currently can't overflow.
$$ = section->name; $$ = section->name;
@@ -1987,9 +2002,10 @@ c_ind: LBRACK MODE_C RBRACK;
ff00_c_ind: ff00_c_ind:
LBRACK relocexpr OP_ADD MODE_C RBRACK { LBRACK relocexpr OP_ADD MODE_C RBRACK {
// This has to use `relocexpr`, not `iconst`, to avoid a shift/reduce conflict // This has to use `relocexpr`, not `iconst`, to avoid a shift/reduce conflict
if ($2.getConstVal() != 0xFF00) if ($2.getConstVal() != 0xFF00) {
::error("Base value must be equal to $FF00 for $FF00+C\n"); ::error("Base value must be equal to $FF00 for $FF00+C\n");
} }
}
; ;
sm83_ld: sm83_ld:
@@ -2057,11 +2073,12 @@ sm83_ld_r_no_a:
sect_RelByte($4, 1); sect_RelByte($4, 1);
} }
| SM83_LD reg_r_no_a COMMA reg_r { | SM83_LD reg_r_no_a COMMA reg_r {
if ($2 == REG_HL_IND && $4 == REG_HL_IND) if ($2 == REG_HL_IND && $4 == REG_HL_IND) {
::error("LD [HL], [HL] is not a valid instruction\n"); ::error("LD [HL], [HL] is not a valid instruction\n");
else } else {
sect_ConstByte(0x40 | ($2 << 3) | $4); sect_ConstByte(0x40 | ($2 << 3) | $4);
} }
}
; ;
sm83_ld_a: sm83_ld_a:
@@ -2206,11 +2223,12 @@ sm83_rrca:
sm83_rst: sm83_rst:
SM83_RST reloc_8bit { SM83_RST reloc_8bit {
$2.makeCheckRST(); $2.makeCheckRST();
if (!$2.isKnown()) if (!$2.isKnown()) {
sect_RelByte($2, 0); sect_RelByte($2, 0);
else } else {
sect_ConstByte(0xC7 | $2.value()); sect_ConstByte(0xC7 | $2.value());
} }
}
; ;
sm83_sbc: sm83_sbc:
@@ -2485,9 +2503,10 @@ static uint32_t strToNum(std::vector<int32_t> const &s) {
warning(WARNING_OBSOLETE, "Treating multi-unit strings as numbers is deprecated\n"); warning(WARNING_OBSOLETE, "Treating multi-unit strings as numbers is deprecated\n");
for (int32_t v : s) { for (int32_t v : s) {
if (!checkNBit(v, 8, "All character units")) if (!checkNBit(v, 8, "All character units")) {
break; break;
} }
}
uint32_t r = 0; uint32_t r = 0;
@@ -2523,8 +2542,9 @@ static size_t strlenUTF8(std::string const &str) {
} }
// Check for partial code point. // Check for partial code point.
if (state != 0) if (state != 0) {
error("STRLEN: Incomplete UTF-8 character\n"); error("STRLEN: Incomplete UTF-8 character\n");
}
return len; return len;
} }
@@ -2552,10 +2572,11 @@ static std::string strsubUTF8(std::string const &str, uint32_t pos, uint32_t len
// A position 1 past the end of the string is allowed, but will trigger the // A position 1 past the end of the string is allowed, but will trigger the
// "Length too big" warning below if the length is nonzero. // "Length too big" warning below if the length is nonzero.
if (!ptr[index] && pos > curPos) if (!ptr[index] && pos > curPos) {
warning( warning(
WARNING_BUILTIN_ARG, "STRSUB: Position %" PRIu32 " is past the end of the string\n", pos WARNING_BUILTIN_ARG, "STRSUB: Position %" PRIu32 " is past the end of the string\n", pos
); );
}
size_t startIndex = index; size_t startIndex = index;
uint32_t curLen = 0; uint32_t curLen = 0;
@@ -2574,12 +2595,14 @@ static std::string strsubUTF8(std::string const &str, uint32_t pos, uint32_t len
index++; index++;
} }
if (curLen < len) if (curLen < len) {
warning(WARNING_BUILTIN_ARG, "STRSUB: Length too big: %" PRIu32 "\n", len); warning(WARNING_BUILTIN_ARG, "STRSUB: Length too big: %" PRIu32 "\n", len);
}
// Check for partial code point. // Check for partial code point.
if (state != 0) if (state != 0) {
error("STRSUB: Incomplete UTF-8 character\n"); error("STRSUB: Incomplete UTF-8 character\n");
}
return std::string(ptr + startIndex, ptr + index); return std::string(ptr + startIndex, ptr + index);
} }
@@ -2598,17 +2621,19 @@ static std::string charsubUTF8(std::string const &str, uint32_t pos) {
size_t charLen = 1; size_t charLen = 1;
// Advance to starting position in source string. // Advance to starting position in source string.
for (uint32_t curPos = 1; charLen && curPos < pos; curPos++) for (uint32_t curPos = 1; charLen && curPos < pos; curPos++) {
charLen = charmap_ConvertNext(view, nullptr); charLen = charmap_ConvertNext(view, nullptr);
}
std::string_view start = view; std::string_view start = view;
if (!charmap_ConvertNext(view, nullptr)) if (!charmap_ConvertNext(view, nullptr)) {
warning( warning(
WARNING_BUILTIN_ARG, WARNING_BUILTIN_ARG,
"CHARSUB: Position %" PRIu32 " is past the end of the string\n", "CHARSUB: Position %" PRIu32 " is past the end of the string\n",
pos pos
); );
}
start = start.substr(0, start.length() - view.length()); start = start.substr(0, start.length() - view.length());
return std::string(start); return std::string(start);
@@ -2617,8 +2642,9 @@ static std::string charsubUTF8(std::string const &str, uint32_t pos) {
static uint32_t adjustNegativePos(int32_t pos, size_t len, char const *functionName) { static uint32_t adjustNegativePos(int32_t pos, size_t len, char const *functionName) {
// STRSUB and CHARSUB adjust negative `pos` arguments the same way, // STRSUB and CHARSUB adjust negative `pos` arguments the same way,
// such that position -1 is the last character of a string. // such that position -1 is the last character of a string.
if (pos < 0) if (pos < 0) {
pos += len + 1; pos += len + 1;
}
if (pos < 1) { if (pos < 1) {
warning(WARNING_BUILTIN_ARG, "%s: Position starts at 1\n", functionName); warning(WARNING_BUILTIN_ARG, "%s: Position starts at 1\n", functionName);
pos = 1; pos = 1;
@@ -2672,8 +2698,9 @@ static std::string
while (c != '\0') { while (c != '\0') {
fmt.useCharacter(c); fmt.useCharacter(c);
if (fmt.isFinished()) if (fmt.isFinished()) {
break; break;
}
c = spec[++i]; c = spec[++i];
} }
@@ -2698,14 +2725,15 @@ static std::string
argIndex++; argIndex++;
} }
if (argIndex < args.size()) if (argIndex < args.size()) {
error("STRFMT: %zu unformatted argument(s)\n", args.size() - argIndex); error("STRFMT: %zu unformatted argument(s)\n", args.size() - argIndex);
else if (argIndex > args.size()) } else if (argIndex > args.size()) {
error( error(
"STRFMT: Not enough arguments for format spec, got: %zu, need: %zu\n", "STRFMT: Not enough arguments for format spec, got: %zu, need: %zu\n",
args.size(), args.size(),
argIndex argIndex
); );
}
return str; return str;
} }