diff --git a/assets/logo.svg b/assets/logo.svg index 04dad09..329ebb4 100644 --- a/assets/logo.svg +++ b/assets/logo.svg @@ -1,8 +1,8 @@ - - - - - - + + + + + + diff --git a/lexer/token.go b/lexer/token.go index f74e575..06e26c3 100644 --- a/lexer/token.go +++ b/lexer/token.go @@ -45,6 +45,8 @@ const ( TokenKindPercent TokenKindTilde + // TODO: add equal to, less than or equal to, greater than or equal to, + // not equal to TokenKindLessThan TokenKindLShift TokenKindGreaterThan diff --git a/parser/face.go b/parser/face.go index 3a53381..ca4a3d2 100644 --- a/parser/face.go +++ b/parser/face.go @@ -32,7 +32,7 @@ func (parser *ParsingOperation) parseFaceSection () ( if err != nil { return } err = parser.nextToken(lexer.TokenKindName) if err != nil { return } - section.inherits = parser.token.Value().(string) + section.inherits, err = parser.parseIdentifier() if err != nil { return } err = parser.nextToken(lexer.TokenKindNewline) if err != nil { return } diff --git a/parser/objt.go b/parser/objt.go index ec64e08..255881b 100644 --- a/parser/objt.go +++ b/parser/objt.go @@ -13,10 +13,7 @@ func (parser *ParsingOperation) parseObjtSection () ( err = parser.expect(lexer.TokenKindName) if err != nil { return } - section = &ObjtSection { - location: parser.token.Location(), - members: make(map[string] ObjtMember), - } + section = &ObjtSection { location: parser.token.Location() } // get permission err = parser.nextToken(lexer.TokenKindPermission) @@ -33,7 +30,7 @@ func (parser *ParsingOperation) parseObjtSection () ( if err != nil { return } err = parser.nextToken() if err != nil { return } - section.inherits, err = parser.parseType() + section.inherits, err = parser.parseIdentifier() if err != nil { return } err = parser.expect(lexer.TokenKindNewline) if err != nil { return } @@ -68,7 +65,7 @@ func (parser *ParsingOperation) parseObjtMembers ( // add member to object section var member ObjtMember member, err = parser.parseObjtMember() - into.members[member.name] = member + into.members = append(into.members, member) if err != nil { return } } } diff --git a/parser/objt_test.go b/parser/objt_test.go index 16a5439..4490f38 100644 --- a/parser/objt_test.go +++ b/parser/objt_test.go @@ -13,17 +13,17 @@ objt ro BitFields:Obj ro that:Int & 1 ro this:Int & 24 298 objt ro ComplexInit:Obj - ro basic:Int 87 + ro whatever:{Int 3} + 230984 + 849 + 394580 ro complex0:Bird .that 98 .this 2 ro complex1:Bird .that 98902 .this 235 - ro whatever:{Int 3} - 230984 - 849 - 394580 + ro basic:Int 87 objt ro Init:Obj ro that:String "hello world" ro this:Int 23 diff --git a/parser/tree-tostring.go b/parser/tree-tostring.go index 114f681..4ce9a14 100644 --- a/parser/tree-tostring.go +++ b/parser/tree-tostring.go @@ -327,8 +327,8 @@ func (section *ObjtSection) ToString (indent int) (output string) { section.name, ":", section.inherits.ToString(), "\n") - for _, name := range sortMapKeysAlphabetically(section.members) { - output += section.members[name].ToString(indent + 1) + for _, member := range section.members { + output += member.ToString(indent + 1) } return } @@ -367,7 +367,7 @@ func (section *FaceSection) ToString (indent int) (output string) { "face ", section.permission.ToString(), " ", section.name, ":", - section.inherits, "\n") + section.inherits.ToString(), "\n") for _, name := range sortMapKeysAlphabetically(section.behaviors) { behavior := section.behaviors[name] diff --git a/parser/tree.go b/parser/tree.go index e1f2292..8d247c7 100644 --- a/parser/tree.go +++ b/parser/tree.go @@ -190,12 +190,9 @@ type ObjtSection struct { location file.Location name string - // TODO: make this Identifier instead of Type - inherits Type + inherits Identifier 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 []ObjtMember } type EnumMember struct { @@ -227,8 +224,7 @@ type FaceBehavior struct { type FaceSection struct { location file.Location name string - // TODO: make this Identifier instead of string - inherits string + inherits Identifier permission types.Permission behaviors map[string] FaceBehavior