diff --git a/parser/grammar.peg b/parser/grammar.peg index 53a9947..50ebda7 100644 --- a/parser/grammar.peg +++ b/parser/grammar.peg @@ -132,7 +132,7 @@ Enum ← "enum" _ name:Identifier __ '{' __ values:(EnumValue __)* '}' EOS { next := 0 for _, v := range vs { ev := v.([]interface{})[0].(*EnumValue) - if ev.Value < 0 { + if !ev.Set { ev.Value = next } if ev.Value >= next { @@ -146,10 +146,10 @@ Enum ← "enum" _ name:Identifier __ '{' __ values:(EnumValue __)* '}' EOS { EnumValue ← name:Identifier _ value:('=' _ IntConstant)? ListSeparator? { ev := &EnumValue{ Name: string(name.(Identifier)), - Value: -1, } if value != nil { ev.Value = int(value.([]interface{})[2].(int64)) + ev.Set = true } return ev, nil } diff --git a/parser/parser_test.go b/parser/parser_test.go index ba5cfdf..49610e6 100644 --- a/parser/parser_test.go +++ b/parser/parser_test.go @@ -191,10 +191,12 @@ func TestServiceParsing(t *testing.T) { "ADD": &EnumValue{ Name: "ADD", Value: 1, + Set: true, }, "SUBTRACT": &EnumValue{ Name: "SUBTRACT", Value: 2, + Set: true, }, }, } diff --git a/parser/types.go b/parser/types.go index b9fc495..69dc08b 100644 --- a/parser/types.go +++ b/parser/types.go @@ -15,6 +15,7 @@ type Type struct { type EnumValue struct { Name string Value int + Set bool } type Enum struct {