Skip to content

Commit

Permalink
fix(plc4go/tools): fix atomic.Pointer support
Browse files Browse the repository at this point in the history
  • Loading branch information
sruehl committed Jun 19, 2023
1 parent 915b6b5 commit 7089ac3
Showing 1 changed file with 23 additions and 1 deletion.
24 changes: 23 additions & 1 deletion plc4go/tools/plc4xgenerator/gen.go
Original file line number Diff line number Diff line change
Expand Up @@ -284,7 +284,7 @@ func (g *Generator) generate(typeName string) {
xIdent, xIsIdent := fieldType.X.(*ast.Ident)
sel := fieldType.Sel
if xIsIdent && xIdent.Name == "atomic" && sel.Name == "Pointer" {
g.Printf(serializableFieldTemplate, "(*d."+field.name+".Load())", fieldNameUntitled)
g.Printf(atomicPointerFieldTemplate, "d."+field.name, field.name, fieldNameUntitled)
continue
}
}
Expand Down Expand Up @@ -556,6 +556,28 @@ var serializableFieldTemplate = `
}
`

var atomicPointerFieldTemplate = `
if %[2]sLoaded :=%[1]s.Load(); %[2]sLoaded != nil && *%[2]sLoaded != nil {
%[2]s := *%[2]sLoaded
if serializableField, ok := %[2]s.(utils.Serializable); ok {
if err := writeBuffer.PushContext(%[3]s); err != nil {
return err
}
if err := serializableField.SerializeWithWriteBuffer(ctx, writeBuffer); err != nil {
return err
}
if err := writeBuffer.PopContext(%[3]s); err != nil {
return err
}
} else {
stringValue := fmt.Sprintf("%%v", %[2]s)
if err := writeBuffer.WriteString(%[3]s, uint32(len(stringValue)*8), "UTF-8", stringValue); err != nil {
return err
}
}
}
`

var byteFieldSerialize = `
if err := writeBuffer.WriteByte(%[2]s, %[1]s); err != nil {
return err
Expand Down

0 comments on commit 7089ac3

Please sign in to comment.