You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by cd...@apache.org on 2022/03/09 08:50:05 UTC

[plc4x] 01/03: fix(codegen): Enabled the virtual field tests and fixed a related bug in plc4go

This is an automated email from the ASF dual-hosted git repository.

cdutz pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/plc4x.git

commit a5f8e6a9c0bbd5a85f7fb221fcb0893b8930c182
Author: cdutz <ch...@c-ware.de>
AuthorDate: Wed Mar 9 09:48:45 2022 +0100

    fix(codegen): Enabled the virtual field tests and fixed a related bug in plc4go
---
 .../resources/templates/go/model-template.go.ftlh  |  6 ++---
 .../src/main/resources/protocols/test/test.mspec   | 26 ++++++++++++----------
 2 files changed, 17 insertions(+), 15 deletions(-)

diff --git a/code-generation/language-go/src/main/resources/templates/go/model-template.go.ftlh b/code-generation/language-go/src/main/resources/templates/go/model-template.go.ftlh
index d30e11a..256bf73 100644
--- a/code-generation/language-go/src/main/resources/templates/go/model-template.go.ftlh
+++ b/code-generation/language-go/src/main/resources/templates/go/model-template.go.ftlh
@@ -261,7 +261,7 @@ func (m *${type.name}) Get${field.name?cap_first}() <#if helper.needsPointerAcce
 	${field.name} := m.${field.name?cap_first}
 	_ = ${field.name}
   	  </#list>
-	return ${helper.toSerializationExpression(field, field.type, field.valueExpression, parserArguments)}
+	return ${helper.getLanguageTypeNameForTypeReference(typeRef)}(${helper.toSerializationExpression(field, field.type, field.valueExpression, parserArguments)})
 }
 
 	</#list>
@@ -273,7 +273,7 @@ func (m *${type.name}) Get${field.name?cap_first}() <#if helper.needsPointerAcce
 <#if type.constFields?has_content>
 ///////////////////////////////////////////////////////////
 ///////////////////////////////////////////////////////////
-/////////////////////// Accessors for conts fields.
+/////////////////////// Accessors for const fields.
 ///////////////////////
 	<#list type.constFields as field>
 		<#assign typeRef=field.asTypedField().orElseThrow().type>
@@ -609,7 +609,7 @@ func (m *${type.name}) GetParentLengthInBits() uint16 {
 				<#if simpleTypeReference.isSimpleTypeReference()>
 					<#if discriminatorField.type.isVstringTypeReference()>
                         <#assign vstringTypeReference = discriminatorField.type.asVstringTypeReference().orElseThrow()>
-	lengthInBits += uint16(${helper.toSerializationExpression(discriminatorField, helper.intTypeReference, discriminatorField.lengthExpression, parserArguments)})
+	lengthInBits += uint16(${helper.toSerializationExpression(discriminatorField, helper.intTypeReference, vstringTypeReference.lengthExpression, parserArguments)})
 					<#else>
 	lengthInBits += ${simpleTypeReference.asSimpleTypeReference().orElseThrow().sizeInBits};
 					</#if>
diff --git a/code-generation/protocol-test/src/main/resources/protocols/test/test.mspec b/code-generation/protocol-test/src/main/resources/protocols/test/test.mspec
index d3400cd..010c02c 100644
--- a/code-generation/protocol-test/src/main/resources/protocols/test/test.mspec
+++ b/code-generation/protocol-test/src/main/resources/protocols/test/test.mspec
@@ -202,16 +202,16 @@
     [reserved       uint 8  '0x00']
 ]
 
-//TODO: Virtual fields fail for GO, haven't checked C assuming fails.
-//[type VirtualFieldTest
-//    [simple  uint 8 simpleField]
-//    [virtual bit  virtualBitField 'simpleField == 0']
-//    [virtual int 8  virtualIntField 'simpleField']
-//    [virtual uint 8  virtualUintField 'simpleField']
-//    [virtual float 32  virtualFloatField 'simpleField']
-//    [virtual float 64  virtualDoubleField 'simpleField']
-//    [virtual string 24  virtualStringField 'simpleField']
-//]
+// TODO: So far only trouble in GO, C seems OK.
+[type VirtualFieldTest
+    [simple  uint 8 simpleField]
+    [virtual bit  virtualBitField 'simpleField == 0']
+    [virtual int 8  virtualIntField 'simpleField']
+    [virtual uint 8  virtualUintField 'simpleField']
+    [virtual float 32  virtualFloatField 'simpleField']
+    [virtual float 64  virtualDoubleField 'simpleField']
+    [virtual string 24  virtualStringField 'simpleField']
+]
 
 //TODO: Virtual fields fail for GO, haven't checked C assuming fails.
 //[discriminatedType DiscriminatedVirtualTypeTest
@@ -247,8 +247,8 @@
     [simple uint 64 QuadIntField]
 ]
 
-//Specific test confirming a continous loop isn't formed when working out the length.
-[type LentghLoopTest
+//Specific test confirming a continuous loop isn't formed when working out the length.
+[type LengthLoopTest
     [simple        uint 16 commandType]
     [implicit      uint 16 len 'lengthInBytes - 8']
 ]
@@ -336,6 +336,7 @@
 
 
 //Test to check if we can include concrete types as fields. Doesn't work in any language at the moment.
+// TODO: Check why this is commented out
 //[discriminatedType SimpleDiscriminatedType
 //    [discriminator uint 8 discr]
 //    [typeSwitch discr
@@ -345,6 +346,7 @@
 //    ]
 //]
 
+// TODO: Check why this is commented out
 //[discriminatedType AnotherSimpleDiscriminatedType
 //    [discriminator uint 8 discr]
 //    [typeSwitch discr