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());
}
}