diff --git a/enum.go b/enum.go index 2e979d9..2db0474 100644 --- a/enum.go +++ b/enum.go @@ -160,7 +160,7 @@ func (f *EnumField) parse(p *Parser) error { } i, err := p.nextInteger() if err != nil { - return p.unexpected(lit, "enum field integer", f) + return p.unexpected(err.Error(), "enum field integer", f) } f.Integer = i pos, tok, lit = p.next() diff --git a/enum_test.go b/enum_test.go index 5efa381..bf7a89f 100644 --- a/enum_test.go +++ b/enum_test.go @@ -90,3 +90,21 @@ enum EnumAllowingAlias { t.Errorf("got [%v] want [%v]", got, want) } } + +func TestEnumWithHex(t *testing.T) { + src := `enum Flags { + FLAG1 = 0x11; + }` + p := newParserOn(src) + enum := new(Enum) + p.next() + if err := enum.parse(p); err != nil { + t.Fatal(err) + } + if got, want := len(enum.Elements), 1; got != want { + t.Errorf("got [%v] want [%v]", got, want) + } + if got, want := enum.Elements[0].(*EnumField).Integer, 17; got != want { + t.Errorf("got [%v] want [%v]", got, want) + } +} diff --git a/parser.go b/parser.go index 9e39042..4077db7 100644 --- a/parser.go +++ b/parser.go @@ -143,6 +143,11 @@ func (p *Parser) nextInteger() (i int, err error) { if tok != tIDENT { return 0, errors.New("non integer") } + if strings.HasPrefix(lit, "0x") { + // hex decode + i64, err := strconv.ParseInt(lit, 0, 64) + return int(i64), err + } i, err = strconv.Atoi(lit) return }