Enum members are now ordered
This commit is contained in:
parent
a5477717eb
commit
0d366964ca
@ -11,10 +11,7 @@ func (parser *ParsingOperation) parseEnumSection () (
|
|||||||
err = parser.expect(lexer.TokenKindName)
|
err = parser.expect(lexer.TokenKindName)
|
||||||
if err != nil { return }
|
if err != nil { return }
|
||||||
|
|
||||||
section = &EnumSection {
|
section = &EnumSection { location: parser.token.Location() }
|
||||||
location: parser.token.Location(),
|
|
||||||
members: make(map[string] Argument),
|
|
||||||
}
|
|
||||||
|
|
||||||
// get permission
|
// get permission
|
||||||
err = parser.nextToken(lexer.TokenKindPermission)
|
err = parser.nextToken(lexer.TokenKindPermission)
|
||||||
@ -64,25 +61,27 @@ func (parser *ParsingOperation) parseEnumMembers (
|
|||||||
if !parser.token.Is(lexer.TokenKindIndent) { return }
|
if !parser.token.Is(lexer.TokenKindIndent) { return }
|
||||||
if parser.token.Value().(int) != 1 { return }
|
if parser.token.Value().(int) != 1 { return }
|
||||||
|
|
||||||
|
member := EnumMember { }
|
||||||
|
|
||||||
// get name
|
// get name
|
||||||
err = parser.nextToken(lexer.TokenKindName)
|
err = parser.nextToken(lexer.TokenKindName)
|
||||||
if err != nil { return }
|
if err != nil { return }
|
||||||
name := parser.token.Value().(string)
|
member.location = parser.token.Location()
|
||||||
|
member.name = parser.token.Value().(string)
|
||||||
err = parser.nextToken()
|
err = parser.nextToken()
|
||||||
if err != nil { return }
|
if err != nil { return }
|
||||||
|
|
||||||
// parse default value
|
// parse default value
|
||||||
var argument Argument
|
|
||||||
if parser.token.Is(lexer.TokenKindNewline) {
|
if parser.token.Is(lexer.TokenKindNewline) {
|
||||||
err = parser.nextToken()
|
err = parser.nextToken()
|
||||||
if err != nil { return }
|
if err != nil { return }
|
||||||
|
|
||||||
argument, err = parser.parseInitializationValues(1)
|
member.value, err = parser.parseInitializationValues(1)
|
||||||
into.members[name] = argument
|
into.members = append(into.members, member)
|
||||||
if err != nil { return }
|
if err != nil { return }
|
||||||
} else {
|
} else {
|
||||||
argument, err = parser.parseArgument()
|
member.value, err = parser.parseArgument()
|
||||||
into.members[name] = argument
|
into.members = append(into.members, member)
|
||||||
if err != nil { return }
|
if err != nil { return }
|
||||||
|
|
||||||
err = parser.expect(lexer.TokenKindNewline)
|
err = parser.expect(lexer.TokenKindNewline)
|
||||||
|
@ -179,17 +179,17 @@ enum ro AffrontToGod:{Int 4}
|
|||||||
3
|
3
|
||||||
4
|
4
|
||||||
enum ro NamedColor:U32
|
enum ro NamedColor:U32
|
||||||
blue 255
|
|
||||||
green 65280
|
|
||||||
red 16711680
|
red 16711680
|
||||||
|
green 65280
|
||||||
|
blue 255
|
||||||
enum ro Weekday:Int
|
enum ro Weekday:Int
|
||||||
friday
|
|
||||||
monday
|
|
||||||
saturday
|
|
||||||
sunday
|
sunday
|
||||||
thursday
|
monday
|
||||||
tuesday
|
tuesday
|
||||||
wednesday
|
wednesday
|
||||||
|
thursday
|
||||||
|
friday
|
||||||
|
saturday
|
||||||
`, test)
|
`, test)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -337,22 +337,20 @@ func (section *EnumSection) ToString (indent int) (output string) {
|
|||||||
section.name, ":",
|
section.name, ":",
|
||||||
section.what.ToString(), "\n")
|
section.what.ToString(), "\n")
|
||||||
|
|
||||||
for _, name := range sortMapKeysAlphabetically(section.members) {
|
for _, member := range section.members {
|
||||||
output += doIndent(indent + 1, name)
|
output += doIndent(indent + 1, member.name)
|
||||||
|
|
||||||
defaultValue := section.members[name]
|
|
||||||
|
|
||||||
isComplexInitialization :=
|
isComplexInitialization :=
|
||||||
defaultValue.kind == ArgumentKindObjectInitializationValues ||
|
member.value.kind == ArgumentKindObjectInitializationValues ||
|
||||||
defaultValue.kind == ArgumentKindArrayInitializationValues
|
member.value.kind == ArgumentKindArrayInitializationValues
|
||||||
|
|
||||||
if defaultValue.value == nil {
|
if member.value.value == nil {
|
||||||
output += "\n"
|
output += "\n"
|
||||||
} else if isComplexInitialization {
|
} else if isComplexInitialization {
|
||||||
output += "\n"
|
output += "\n"
|
||||||
output += defaultValue.ToString(indent + 2, true)
|
output += member.value.ToString(indent + 2, true)
|
||||||
} else {
|
} else {
|
||||||
output += " " + defaultValue.ToString(0, false)
|
output += " " + member.value.ToString(0, false)
|
||||||
output += "\n"
|
output += "\n"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -191,9 +191,17 @@ type ObjtSection struct {
|
|||||||
|
|
||||||
inherits Type
|
inherits Type
|
||||||
permission types.Permission
|
permission types.Permission
|
||||||
|
// TODO: order matters here we need to store these in an array
|
||||||
|
// TODO: add bitfield support (:n)
|
||||||
members map[string] ObjtMember
|
members map[string] ObjtMember
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type EnumMember struct {
|
||||||
|
location file.Location
|
||||||
|
name string
|
||||||
|
value Argument
|
||||||
|
}
|
||||||
|
|
||||||
// EnumSection represents an enumerated type section.
|
// EnumSection represents an enumerated type section.
|
||||||
type EnumSection struct {
|
type EnumSection struct {
|
||||||
location file.Location
|
location file.Location
|
||||||
@ -201,8 +209,7 @@ type EnumSection struct {
|
|||||||
|
|
||||||
what Type
|
what Type
|
||||||
permission types.Permission
|
permission types.Permission
|
||||||
// TODO: order matters here we need to store these in an array
|
members []EnumMember
|
||||||
members map[string] Argument
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// FaceBehavior represents a behavior of an interface section.
|
// FaceBehavior represents a behavior of an interface section.
|
||||||
|
Reference in New Issue
Block a user