Merge pull request 'objt-bitfields' (#8) from objt-bitfields into main

Reviewed-on: #8
This commit is contained in:
Sasha Koshka 2022-08-24 22:46:31 +00:00
commit 821fa0ecb3
5 changed files with 27 additions and 2 deletions

View File

@ -97,6 +97,17 @@ func (parser *ParsingOperation) parseObjtMember () (
member.what, err = parser.parseType()
if err != nil { return }
println(parser.token.Describe())
// if there is a bit width, get it
if parser.token.Is(lexer.TokenKindBinaryAnd) {
err = parser.nextToken(lexer.TokenKindUInt)
if err != nil { return }
member.bitWidth = parser.token.Value().(uint64)
err = parser.nextToken()
if err != nil { return }
}
// parse default value
if parser.token.Is(lexer.TokenKindNewline) {
err = parser.nextToken()

View File

@ -9,6 +9,9 @@ func TestObjt (test *testing.T) {
objt ro Basic:Obj
ro that:Basic
ro this:Basic
objt ro BitFields:Obj
ro that:Int & 1
ro this:Int & 24 298
objt ro ComplexInit:Obj
ro basic:Int 87
ro complex0:Bird

View File

@ -298,6 +298,10 @@ func (member ObjtMember) ToString (indent int) (output string) {
output += member.name + ":"
output += member.what.ToString()
if member.bitWidth > 0 {
output += fmt.Sprint(" & ", member.bitWidth)
}
isComplexInitialization :=
member.defaultValue.kind == ArgumentKindObjectInitializationValues ||
member.defaultValue.kind == ArgumentKindArrayInitializationValues

View File

@ -180,6 +180,7 @@ type ObjtMember struct {
name string
what Type
bitWidth uint64
permission types.Permission
defaultValue Argument
}
@ -189,6 +190,7 @@ type ObjtSection struct {
location file.Location
name string
// TODO: make this Identifier instead of Type
inherits Type
permission types.Permission
// TODO: order matters here we need to store these in an array
@ -225,6 +227,7 @@ type FaceBehavior struct {
type FaceSection struct {
location file.Location
name string
// TODO: make this Identifier instead of string
inherits string
permission types.Permission

View File

@ -4,6 +4,10 @@ objt ro Basic:Obj
ro that:Basic
ro this:Basic
objt ro BitFields:Obj
ro that:Int & 1
ro this:Int & 24 298
objt ro Init:Obj
ro that:String "hello world"
ro this:Int 23