]> granicus.if.org Git - yasm/commitdiff
Support forced identifiers ($foo) in directives. This makes yasm match
authorPeter Johnson <peter@tortall.net>
Mon, 5 Feb 2007 08:11:52 +0000 (08:11 -0000)
committerPeter Johnson <peter@tortall.net>
Mon, 5 Feb 2007 08:11:52 +0000 (08:11 -0000)
NASM behavior with regards to e.g. extern $foo.

Unfortunately this makes yasm start not matching NASM behavior with regards
to the RDF module directive.  In NASM, module $foo results in a literal $foo
reference; yasm now requires either a double $ (e.g. $$foo) or quotes (e.g.
"$foo").  The special case for section (section $foo --> literal $foo) is
still present, but keeping this for other directives is extremely difficult.

svn path=/trunk/yasm/; revision=1754

modules/objfmts/elf/tests/Makefile.inc
modules/objfmts/elf/tests/nasm-forceident.asm [new file with mode: 0644]
modules/objfmts/elf/tests/nasm-forceident.hex [new file with mode: 0644]
modules/objfmts/rdf/tests/rdfext.asm
modules/parsers/nasm/nasm-token.re

index ffb8ffe092074cbcb992b9f44402ccc92e8d42f5..bf11203721d06a3638550c0a1a6fbc09d2b5a544 100644 (file)
@@ -45,6 +45,8 @@ EXTRA_DIST += modules/objfmts/elf/tests/elfvisibility.errwarn
 EXTRA_DIST += modules/objfmts/elf/tests/elfvisibility.hex
 EXTRA_DIST += modules/objfmts/elf/tests/nasm-sectname.asm
 EXTRA_DIST += modules/objfmts/elf/tests/nasm-sectname.hex
+EXTRA_DIST += modules/objfmts/elf/tests/nasm-forceident.asm
+EXTRA_DIST += modules/objfmts/elf/tests/nasm-forceident.hex
 
 EXTRA_DIST += modules/objfmts/elf/tests/amd64/Makefile.inc
 EXTRA_DIST += modules/objfmts/elf/tests/gas64/Makefile.inc
diff --git a/modules/objfmts/elf/tests/nasm-forceident.asm b/modules/objfmts/elf/tests/nasm-forceident.asm
new file mode 100644 (file)
index 0000000..dcd7705
--- /dev/null
@@ -0,0 +1,12 @@
+section ".text"
+
+section '.text'
+
+section $foo
+
+global $Test
+
+$Test:
+       mov ax, 0
+       ret
+
diff --git a/modules/objfmts/elf/tests/nasm-forceident.hex b/modules/objfmts/elf/tests/nasm-forceident.hex
new file mode 100644 (file)
index 0000000..4dda868
--- /dev/null
@@ -0,0 +1,448 @@
+7f 
+45 
+4c 
+46 
+01 
+01 
+01 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+01 
+00 
+03 
+00 
+01 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+d0 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+34 
+00 
+00 
+00 
+00 
+00 
+28 
+00 
+06 
+00 
+01 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+66 
+b8 
+00 
+00 
+c3 
+00 
+00 
+00 
+00 
+2e 
+74 
+65 
+78 
+74 
+00 
+24 
+66 
+6f 
+6f 
+00 
+2e 
+73 
+74 
+72 
+74 
+61 
+62 
+00 
+2e 
+73 
+79 
+6d 
+74 
+61 
+62 
+00 
+2e 
+73 
+68 
+73 
+74 
+72 
+74 
+61 
+62 
+00 
+00 
+00 
+00 
+2d 
+00 
+54 
+65 
+73 
+74 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+01 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+04 
+00 
+f1 
+ff 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+03 
+00 
+05 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+03 
+00 
+04 
+00 
+03 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+10 
+00 
+05 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+1c 
+00 
+00 
+00 
+03 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+48 
+00 
+00 
+00 
+26 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+0c 
+00 
+00 
+00 
+03 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+70 
+00 
+00 
+00 
+08 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+14 
+00 
+00 
+00 
+02 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+78 
+00 
+00 
+00 
+50 
+00 
+00 
+00 
+02 
+00 
+00 
+00 
+04 
+00 
+00 
+00 
+04 
+00 
+00 
+00 
+10 
+00 
+00 
+00 
+01 
+00 
+00 
+00 
+01 
+00 
+00 
+00 
+06 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+40 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+10 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+07 
+00 
+00 
+00 
+01 
+00 
+00 
+00 
+02 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+40 
+00 
+00 
+00 
+05 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+01 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
index 8bf5ea0fc81dd909b252ba23e1c7c4ec4376dad3..1239c4dd7d4aa333147ae137612f89c425efd532 100644 (file)
@@ -1,5 +1,5 @@
 module thismodule
-module $thismodule
+module "$thismodule"
 global foo:export
 global bar:export proc
 global bar2:export function
index 995af09e43e6a9087fcc831a77bfc959f6358eba..cd45b3b9f5013772ed0301ed21560cd66eee3dc3 100644 (file)
@@ -605,8 +605,14 @@ directive2:
            RETURN(s->tok[0]);
        }
 
+       /* forced identifier */
+       "$" [a-zA-Z0-9_$#@~.?]+ {
+           lvalp->str_val = yasm__xstrndup(TOK+1, TOKLEN-1);
+           RETURN(ID);
+       }
+
        /* identifier; within directive, no local label mechanism */
-       [a-zA-Z_$.?][a-zA-Z0-9_$#@~.?]* {
+       [a-zA-Z_.?][a-zA-Z0-9_$#@~.?]* {
            lvalp->str_val = yasm__xstrndup(TOK, TOKLEN);
            RETURN(ID);
        }