mirror of
https://github.com/gbdev/rgbds.git
synced 2025-11-20 18:22:07 +00:00
SECTION(symbol) returns the name of a symbol's section (#1066)
Fixes #963 Co-authored-by: Eldred Habert <eldredhabert0@gmail.com>
This commit is contained in:
@@ -472,6 +472,11 @@ is a label, it returns the bank number the label is in.
|
||||
The result may be constant if
|
||||
.Nm
|
||||
is able to compute it.
|
||||
.It Fn SECTION symbol Ta Returns the name of the section that
|
||||
.Ar symbol
|
||||
is in.
|
||||
.Ar symbol
|
||||
must have been defined already.
|
||||
.It Fn SIZEOF arg Ta Returns the size of the section named
|
||||
.Ar arg .
|
||||
The result is not constant, since only RGBLINK can compute its value.
|
||||
|
||||
@@ -1589,6 +1589,19 @@ string : T_STRING
|
||||
strfmt($$, sizeof($$), $3.format, $3.nbArgs, $3.args);
|
||||
freeStrFmtArgList(&$3);
|
||||
}
|
||||
| T_POP_SECTION T_LPAREN scoped_anon_id T_RPAREN {
|
||||
struct Symbol *sym = sym_FindScopedSymbol($3);
|
||||
|
||||
if (!sym)
|
||||
fatalerror("Unknown symbol \"%s\"\n", $3);
|
||||
struct Section const *section = sym_GetSection(sym);
|
||||
|
||||
if (!section)
|
||||
fatalerror("\"%s\" does not belong to any section\n", sym->name);
|
||||
// Section names are capped by rgbasm's maximum string length,
|
||||
// so this currently can't overflow.
|
||||
strcpy($$, section->name);
|
||||
}
|
||||
;
|
||||
|
||||
strcat_args : string
|
||||
|
||||
2
test/asm/long-section-name.asm
Normal file
2
test/asm/long-section-name.asm
Normal file
@@ -0,0 +1,2 @@
|
||||
SECTION "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit", ROM0[0]
|
||||
println "This is section ", SECTION(@)
|
||||
2
test/asm/long-section-name.err
Normal file
2
test/asm/long-section-name.err
Normal file
@@ -0,0 +1,2 @@
|
||||
warning: long-section-name.asm(1): [-Wlong-string]
|
||||
String constant too long
|
||||
1
test/asm/long-section-name.out
Normal file
1
test/asm/long-section-name.out
Normal file
@@ -0,0 +1 @@
|
||||
This is section Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor i
|
||||
0
test/asm/long-section-name.out.bin
Normal file
0
test/asm/long-section-name.out.bin
Normal file
7
test/asm/section-name-invalid.asm
Normal file
7
test/asm/section-name-invalid.asm
Normal file
@@ -0,0 +1,7 @@
|
||||
SECTION "test", ROM0
|
||||
|
||||
Label:
|
||||
println SECTION(Label) ; OK
|
||||
|
||||
DEF Value EQU 42
|
||||
println SECTION(Value) ; not OK
|
||||
2
test/asm/section-name-invalid.err
Normal file
2
test/asm/section-name-invalid.err
Normal file
@@ -0,0 +1,2 @@
|
||||
FATAL: section-name-invalid.asm(7):
|
||||
"Value" does not belong to any section
|
||||
1
test/asm/section-name-invalid.out
Normal file
1
test/asm/section-name-invalid.out
Normal file
@@ -0,0 +1 @@
|
||||
test
|
||||
19
test/asm/section-name.asm
Normal file
19
test/asm/section-name.asm
Normal file
@@ -0,0 +1,19 @@
|
||||
SECTION "aaa", ROM0[5]
|
||||
println SECTION(@)
|
||||
Label1: println SECTION(Label1)
|
||||
dw STARTOF(SECTION(@))
|
||||
|
||||
SECTION UNION "bbb", WRAM0
|
||||
println SECTION(@)
|
||||
Label2:
|
||||
.local1: println SECTION(Label2.local1)
|
||||
.local2: println SECTION(.local2)
|
||||
|
||||
SECTION FRAGMENT "ccc", HRAM
|
||||
println SECTION(@)
|
||||
: println SECTION(:-)
|
||||
|
||||
PUSHS
|
||||
SECTION "ddd", ROMX
|
||||
println SECTION(@)
|
||||
POPS
|
||||
0
test/asm/section-name.err
Normal file
0
test/asm/section-name.err
Normal file
8
test/asm/section-name.out
Normal file
8
test/asm/section-name.out
Normal file
@@ -0,0 +1,8 @@
|
||||
aaa
|
||||
aaa
|
||||
bbb
|
||||
bbb
|
||||
bbb
|
||||
ccc
|
||||
ccc
|
||||
ddd
|
||||
BIN
test/asm/section-name.out.bin
Normal file
BIN
test/asm/section-name.out.bin
Normal file
Binary file not shown.
Reference in New Issue
Block a user