diff options
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 |
