objt-bitfields #8
@ -96,6 +96,17 @@ func (parser *ParsingOperation) parseObjtMember () (
|
||||
if err != nil { return }
|
||||
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) {
|
||||
|
@ -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
|
||||
|
@ -297,6 +297,10 @@ func (member ObjtMember) ToString (indent int) (output string) {
|
||||
output += member.permission.ToString() + " "
|
||||
output += member.name + ":"
|
||||
output += member.what.ToString()
|
||||
|
||||
if member.bitWidth > 0 {
|
||||
output += fmt.Sprint(" & ", member.bitWidth)
|
||||
}
|
||||
|
||||
isComplexInitialization :=
|
||||
member.defaultValue.kind == ArgumentKindObjectInitializationValues ||
|
||||
|
@ -178,8 +178,9 @@ type TypeSection struct {
|
||||
type ObjtMember struct {
|
||||
location file.Location
|
||||
name string
|
||||
|
||||
|
||||
what Type
|
||||
bitWidth uint64
|
||||
permission types.Permission
|
||||
defaultValue Argument
|
||||
}
|
||||
@ -188,7 +189,8 @@ type ObjtMember struct {
|
||||
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
|
||||
|
@ -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
|
||||
|
Reference in New Issue
Block a user