aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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