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 2020/06/17 19:27:58 UTC

[plc4x] 01/02: - Fixed the last syntax-error issue (for now) in the code-generation of the parser code.

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

cdutz pushed a commit to branch feature/c-code-generation-tagged-unions
in repository https://gitbox.apache.org/repos/asf/plc4x.git

commit 65a8c4059a3c4e84ba6bb7867b70f530cd49ed79
Author: Christofer Dutz <ch...@c-ware.de>
AuthorDate: Wed Jun 17 21:11:52 2020 +0200

    - Fixed the last syntax-error issue (for now) in the code-generation of the parser code.
---
 .../plc4x/language/c/CLanguageTemplateHelper.java      | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)

diff --git a/build-utils/language-c/src/main/java/org/apache/plc4x/language/c/CLanguageTemplateHelper.java b/build-utils/language-c/src/main/java/org/apache/plc4x/language/c/CLanguageTemplateHelper.java
index ab8808a..a3e5bd5 100644
--- a/build-utils/language-c/src/main/java/org/apache/plc4x/language/c/CLanguageTemplateHelper.java
+++ b/build-utils/language-c/src/main/java/org/apache/plc4x/language/c/CLanguageTemplateHelper.java
@@ -140,12 +140,16 @@ public class CLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHelpe
      * @return true if the access needs to be using pointers
      */
     public boolean requiresPointerAccess(ComplexTypeDefinition typeDefinition, String propertyName) {
-        final Optional<NamedField> typeField = typeDefinition.getFields().stream().filter(field -> field instanceof NamedField).map(field -> (NamedField) field).filter(namedField -> namedField.getName().equals(propertyName)).findFirst();
+        final Optional<NamedField> namedFieldOptional = typeDefinition.getFields().stream().filter(field -> field instanceof NamedField).map(field -> (NamedField) field).filter(namedField -> namedField.getName().equals(propertyName)).findFirst();
         // If the property name refers to a field, check if it's an optional field.
         // If it is, pointer access is required, if not, it's not.
-        if(typeField.isPresent()) {
-            final NamedField namedField = typeField.get();
-            return namedField instanceof OptionalField;
+        if(namedFieldOptional.isPresent()) {
+            final NamedField namedField = namedFieldOptional.get();
+            if(namedField instanceof TypedField) {
+                TypedField typedField = (TypedField) namedField;
+                return !(namedField instanceof EnumField) && (isComplexTypeReference(typedField.getType()));
+            }
+            return false;
         }
         final Optional<Argument> parserArgument = Arrays.stream(typeDefinition.getParserArguments()).filter(argument -> argument.getName().equals(propertyName)).findFirst();
         // If the property name refers to a parser argument, as soon as it's a complex type,
@@ -497,15 +501,15 @@ public class CLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHelpe
             } else {
                 sb.append(getCTypeName(castType.getName()));
             }
-            sb.append(requiresPointerAccess(baseType, sourceTerm.getName()) ? "*" : "").append(") (");
+            sb.append("*) (");
             sb.append(toVariableParseExpression(baseType, field, sourceTerm, parserArguments)).append("))");
             if(vl.getChild() != null) {
                 if(castType.getParentType() != null) {
                     // Change the name of the property to contain the sub-type-prefix.
-                    sb.append(requiresPointerAccess(baseType, sourceTerm.getName()) ? "->" : ".").append(camelCaseToSnakeCase(castType.getName())).append("_");
+                    sb.append("->").append(camelCaseToSnakeCase(castType.getName())).append("_");
                     appendVariableExpressionRest(sb, vl.getChild());
                 } else {
-                    sb.append(requiresPointerAccess(baseType, sourceTerm.getName()) ? "->" : ".");
+                    sb.append("->");
                     appendVariableExpressionRest(sb, vl.getChild());
                 }
             }