diff options
| author | Paul Chaignon <paul.chaignon@gmail.com> | 2023-11-18 22:54:46 +0100 |
|---|---|---|
| committer | Aleksandr Nogikh <nogikh@google.com> | 2023-12-05 13:40:28 +0000 |
| commit | 4ee90773d9aa928ec274a59e7ed206692b74637b (patch) | |
| tree | f834230902a443b4e07395fcd3a610c14a1767b3 /pkg/ast | |
| parent | 781340bec8eda54d9d8edbd09dde6f7454911ce4 (diff) | |
ast: accept idents in string flags
A subsequent commit will allow string flags to refer to other string
flags (nested definitions). For that to happen, the parser must accept
idents as part of the string flags definitions, as follows.
strflags0 = "foo", strflags1
strflags1 = "bar"
Signed-off-by: Paul Chaignon <paul.chaignon@gmail.com>
Diffstat (limited to 'pkg/ast')
| -rw-r--r-- | pkg/ast/ast.go | 1 | ||||
| -rw-r--r-- | pkg/ast/format.go | 2 | ||||
| -rw-r--r-- | pkg/ast/parser.go | 4 | ||||
| -rw-r--r-- | pkg/ast/testdata/all.txt | 3 | ||||
| -rw-r--r-- | pkg/ast/testdata/errors.txt | 4 |
5 files changed, 11 insertions, 3 deletions
diff --git a/pkg/ast/ast.go b/pkg/ast/ast.go index f0403a07b..e225c69b2 100644 --- a/pkg/ast/ast.go +++ b/pkg/ast/ast.go @@ -194,6 +194,7 @@ type StrFmt int const ( StrFmtRaw StrFmt = iota StrFmtHex + StrFmtIdent ) type Int struct { diff --git a/pkg/ast/format.go b/pkg/ast/format.go index f4a01d37b..420eac916 100644 --- a/pkg/ast/format.go +++ b/pkg/ast/format.go @@ -57,6 +57,8 @@ func FormatStr(v string, format StrFmt) string { return fmt.Sprintf(`"%v"`, v) case StrFmtHex: return fmt.Sprintf("`%x`", v) + case StrFmtIdent: + return fmt.Sprintf("%v", v) default: panic(fmt.Sprintf("unknown str format %v", format)) } diff --git a/pkg/ast/parser.go b/pkg/ast/parser.go index bb08a0b7e..c87d43f5e 100644 --- a/pkg/ast/parser.go +++ b/pkg/ast/parser.go @@ -497,7 +497,7 @@ func (p *parser) parseIdent() *Ident { } func (p *parser) parseString() *String { - p.expect(tokString, tokStringHex) + p.expect(tokString, tokStringHex, tokIdent) str := &String{ Pos: p.pos, Value: p.lit, @@ -513,6 +513,8 @@ func strTokToFmt(tok token) StrFmt { return StrFmtRaw case tokStringHex: return StrFmtHex + case tokIdent: + return StrFmtIdent default: panic("bad string token") } diff --git a/pkg/ast/testdata/all.txt b/pkg/ast/testdata/all.txt index 7b5fa7c37..c9569840c 100644 --- a/pkg/ast/testdata/all.txt +++ b/pkg/ast/testdata/all.txt @@ -5,3 +5,6 @@ meta noextract meta arches["foo", "bar", "386"] incdir <some/path> + +strflags0 = "foo", strflags1 +strflags1 = "bar" diff --git a/pkg/ast/testdata/errors.txt b/pkg/ast/testdata/errors.txt index 2b022c149..266babf8f 100644 --- a/pkg/ast/testdata/errors.txt +++ b/pkg/ast/testdata/errors.txt @@ -21,8 +21,8 @@ int_flags4 = 1, -2- ### bad integer "-2-" str_flags0 = "foo", "bar" str_flags1 = "non terminated ### string literal is not terminated str_flags2 = "bad chars здесь" ### illegal character U+00D0 'Ð' in string literal -str_flags3 = "string", not a string ### unexpected identifier, expecting string, hex string -str_flags4 = "string", 42 ### unexpected int, expecting string, hex string +str_flags3 = "string", not a string ### unexpected identifier, expecting '\n' +str_flags4 = "string", 42 ### unexpected int, expecting string, hex string, identifier str_flags5 = `x` ### bad hex string literal: encoding/hex: invalid byte: U+0078 'x' call(foo ,int32 , bar int32) ### unexpected ',', expecting int, identifier, string |
