aboutsummaryrefslogtreecommitdiffstats
path: root/pkg
diff options
context:
space:
mode:
authorPaul Chaignon <paul.chaignon@gmail.com>2023-11-18 22:54:46 +0100
committerAleksandr Nogikh <nogikh@google.com>2023-12-05 13:40:28 +0000
commit4ee90773d9aa928ec274a59e7ed206692b74637b (patch)
treef834230902a443b4e07395fcd3a610c14a1767b3 /pkg
parent781340bec8eda54d9d8edbd09dde6f7454911ce4 (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')
-rw-r--r--pkg/ast/ast.go1
-rw-r--r--pkg/ast/format.go2
-rw-r--r--pkg/ast/parser.go4
-rw-r--r--pkg/ast/testdata/all.txt3
-rw-r--r--pkg/ast/testdata/errors.txt4
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