type-section-rework #6

Merged
sashakoshka merged 46 commits from type-section-rework into main 2022-09-17 10:36:27 -06:00
3 changed files with 102 additions and 30 deletions
Showing only changes of commit 319b60bfcd - Show all commits

View File

@ -12,25 +12,55 @@ data ro cIntegerPointer:{Int}
data ro dMutIntegerPointer:{Int}:mut data ro dMutIntegerPointer:{Int}:mut
data ro eIntegerArray16:Int:16 data ro eIntegerArray16:Int:16
data ro fIntegerArrayVariable:{Int ..} data ro fIntegerArrayVariable:{Int ..}
data ro gIntegerArrayInitialized:Int:16:< data ro gIntegerArrayInitialized:Int:16:
3948 293 293049 948 912 <
340 0 2304 0 4785 92> 3948
data ro jObject:Obj:( 293
293049
948
912
340
0
2304
0
4785
92
>
data ro jObject:Obj:
(
.this:<324> .this:<324>
.that:<324>) .that:<324>
data ro kNestedObject:Obj:( )
data ro kNestedObject:Obj:
(
.ro newMember:Int:<9023> .ro newMember:Int:<9023>
.this:( .this:
(
.bird0:<324> .bird0:<324>
.bird1:<"hello world">) .bird1:<"hello world">
.that:( )
.that:
(
.bird2:<123.8439> .bird2:<123.8439>
.bird3:<9328.21348239>)) .bird3:<9328.21348239>
)
)
data ro lMutIntegerArray16:Int:16:mut data ro lMutIntegerArray16:Int:16:mut
data ro mExternalData:Int:8 data ro mExternalData:Int:8
external external
data ro nIntegerArrayInitialized:Int:16:mut:< data ro nIntegerArrayInitialized:Int:16:mut:
3948 293 293049 948 912 <
340 0 2304 0 4785 92> 3948
293
293049
948
912
340
0
2304
0
4785
92
>
`, test) `, test)
} }

View File

@ -66,12 +66,22 @@ func (identifier Identifier) ToString () (output string) {
return return
} }
func (what Type) ToString () (output string) { func (values ObjectDefaultValues) ToString (indent int) (output string) {
return
}
func (values ArrayDefaultValues) ToString (indent int) (output string) {
return
}
func (what Type) ToString (indent int) (output string) {
if what.kind == TypeKindBasic { if what.kind == TypeKindBasic {
output += what.name.ToString() output += what.name.ToString()
} else { } else {
output += "{" output += "{"
output += what.points.ToString() output += what.points.ToString(indent)
if what.kind == TypeKindVariableArray { if what.kind == TypeKindVariableArray {
output += " .." output += " .."
@ -88,13 +98,38 @@ func (what Type) ToString () (output string) {
output += ":mut" output += ":mut"
} }
// TODO: print out default value if what.members != nil {
output += ":("
for _, member := range what.members {
output += doIndent (
indent,
"\n" + member.ToString(indent + 1))
}
output += ")"
}
defaultValueKind := what.defaultValue.kind
if defaultValueKind != ArgumentKindNil {
isComplexDefaultValue :=
defaultValueKind == ArgumentKindObjectDefaultValues ||
defaultValueKind == ArgumentKindArrayDefaultValues
if isComplexDefaultValue {
output += ":\n"
output += what.defaultValue.ToString(indent, true)
}
}
if what.defaultValue.kind == ArgumentKindObjectDefaultValues {
} else if what.defaultValue.kind != ArgumentKindNil {
output += ":<" + what.defaultValue.ToString(indent, true) + ">"
}
return return
} }
func (declaration Declaration) ToString () (output string) { func (declaration Declaration) ToString (indent int) (output string) {
output += declaration.name + ":" output += declaration.name + ":"
output += declaration.what.ToString() output += declaration.what.ToString(indent)
return return
} }
@ -112,8 +147,13 @@ func (argument Argument) ToString (indent int, breakLine bool) (output string) {
indent, indent,
breakLine) breakLine)
case ArgumentKindArrayDefaultValues, ArgumentKindObjectDefaultValues: case ArgumentKindObjectDefaultValues:
output += "DEFAULT VALUES IN WRONG PLACE" output += argument.value.(ObjectDefaultValues).
ToString(indent)
case ArgumentKindArrayDefaultValues:
output += argument.value.(ArrayDefaultValues).
ToString(indent)
case ArgumentKindIdentifier: case ArgumentKindIdentifier:
output += doIndent ( output += doIndent (
@ -124,7 +164,7 @@ func (argument Argument) ToString (indent int, breakLine bool) (output string) {
case ArgumentKindDeclaration: case ArgumentKindDeclaration:
output += doIndent ( output += doIndent (
indent, indent,
argument.value.(Declaration).ToString()) argument.value.(Declaration).ToString(indent))
if breakLine { output += "\n" } if breakLine { output += "\n" }
case ArgumentKindInt, ArgumentKindUInt, ArgumentKindFloat: case ArgumentKindInt, ArgumentKindUInt, ArgumentKindFloat:
@ -222,7 +262,7 @@ func (section DataSection) ToString (indent int) (output string) {
"type ", "type ",
section.permission.ToString(), " ", section.permission.ToString(), " ",
section.name, ":", section.name, ":",
section.what.ToString(), "\n") section.what.ToString(indent), "\n")
return return
} }
@ -231,7 +271,7 @@ func (member TypeMember) ToString (indent int) (output string) {
output += member.permission.ToString() + " " output += member.permission.ToString() + " "
output += member.name + ":" output += member.name + ":"
output += member.what.ToString() output += member.what.ToString(indent)
if member.bitWidth > 0 { if member.bitWidth > 0 {
output += fmt.Sprint(" & ", member.bitWidth) output += fmt.Sprint(" & ", member.bitWidth)
@ -248,7 +288,7 @@ func (section TypeSection) ToString (indent int) (output string) {
"type ", "type ",
section.permission.ToString(), " ", section.permission.ToString(), " ",
section.name, ":", section.name, ":",
section.what.ToString(), "\n") section.what.ToString(indent), "\n")
return return
} }
@ -259,7 +299,7 @@ func (section EnumSection) ToString (indent int) (output string) {
"enum ", "enum ",
section.permission.ToString(), " ", section.permission.ToString(), " ",
section.name, ":", section.name, ":",
section.what.ToString(), "\n") section.what.ToString(indent), "\n")
for _, member := range section.members { for _, member := range section.members {
output += doIndent(indent + 1, member.name) output += doIndent(indent + 1, member.name)
@ -300,11 +340,11 @@ func (behavior FaceBehavior) ToString (indent int) (output string) {
output += doIndent(indent, behavior.name, "\n") output += doIndent(indent, behavior.name, "\n")
for _, inputItem := range behavior.inputs { for _, inputItem := range behavior.inputs {
output += doIndent(indent + 1, "> ", inputItem.ToString(), "\n") output += doIndent(indent + 1, "> ", inputItem.ToString(indent), "\n")
} }
for _, outputItem := range behavior.outputs { for _, outputItem := range behavior.outputs {
output += doIndent(indent + 1, "< ", outputItem.ToString(), "\n") output += doIndent(indent + 1, "< ", outputItem.ToString(indent), "\n")
} }
return return
@ -368,7 +408,7 @@ func (block Block) ToString (indent int) (output string) {
func (funcOutput FuncOutput) ToString (indent int) (output string) { func (funcOutput FuncOutput) ToString (indent int) (output string) {
output += doIndent ( output += doIndent (
indent + 1, indent + 1,
"< ", funcOutput.Declaration.ToString(), "\n") "< ", funcOutput.Declaration.ToString(indent), "\n")
return return
} }
@ -382,11 +422,11 @@ func (section FuncSection) ToString (indent int) (output string) {
if section.receiver != nil { if section.receiver != nil {
output += doIndent ( output += doIndent (
indent + 1, indent + 1,
"@ ", section.receiver.ToString(), "\n") "@ ", section.receiver.ToString(indent), "\n")
} }
for _, inputItem := range section.inputs { for _, inputItem := range section.inputs {
output += doIndent(indent + 1, "> ", inputItem.ToString(), "\n") output += doIndent(indent + 1, "> ", inputItem.ToString(indent), "\n")
} }
for _, outputItem := range section.outputs { for _, outputItem := range section.outputs {

View File

@ -285,6 +285,8 @@ func (parser *ParsingOperation) parseObjectNewMember () (
if err != nil { return } if err != nil { return }
member.what, err = parser.parseType() member.what, err = parser.parseType()
if err != nil { return } if err != nil { return }
// TODO: get bit width
return return
} }