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/08/25 08:32:24 UTC
[plc4x] 02/05: chore(code-gen): Added support for STR_LEN to the go code-generation.
This is an automated email from the ASF dual-hosted git repository.
cdutz pushed a commit to branch feature/ads-symbol-discovery
in repository https://gitbox.apache.org/repos/asf/plc4x.git
commit 0cd8dc52ca21f0521d5bf886c75e9bffee8de846
Author: Christofer Dutz <ch...@c-ware.de>
AuthorDate: Thu Aug 25 10:28:29 2022 +0200
chore(code-gen): Added support for STR_LEN to the go code-generation.
---
.../language/go/GoLanguageTemplateHelper.java | 30 +++++++++++++++++++++-
1 file changed, 29 insertions(+), 1 deletion(-)
diff --git a/code-generation/language-go/src/main/java/org/apache/plc4x/language/go/GoLanguageTemplateHelper.java b/code-generation/language-go/src/main/java/org/apache/plc4x/language/go/GoLanguageTemplateHelper.java
index d6ce46996..0afc466df 100644
--- a/code-generation/language-go/src/main/java/org/apache/plc4x/language/go/GoLanguageTemplateHelper.java
+++ b/code-generation/language-go/src/main/java/org/apache/plc4x/language/go/GoLanguageTemplateHelper.java
@@ -782,6 +782,8 @@ public class GoLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHelp
return toArraySizeInBytesVariableExpression(field, typeReference, variableLiteral, parserArguments, serializerArguments, suppressPointerAccess, tracer);
} else if ("CEIL".equals(variableLiteralName)) {
return toCeilVariableExpression(field, variableLiteral, parserArguments, serializerArguments, serialize, suppressPointerAccess, tracer);
+ } else if ("STR_LEN".equals(variableLiteralName)) {
+ return toStrLenVariableExpression(field, typeReference, variableLiteral, parserArguments, serializerArguments, serialize, suppressPointerAccess, tracer);
}
// All uppercase names are not fields, but utility methods.
// TODO: It seems we also run into this, in case of using enum constants in type-switches.
@@ -954,6 +956,20 @@ public class GoLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHelp
"))";
}
+ private String toStrLenVariableExpression(Field field, TypeReference typeReference, VariableLiteral variableLiteral, List<Argument> parserArguments, List<Argument> serializerArguments, boolean serialize, boolean suppressPointerAccess, Tracer tracer) {
+ tracer = tracer.dive("str-len");
+ VariableLiteral countLiteral = variableLiteral.getArgs()
+ .orElseThrow(() -> new RuntimeException("Str-len needs at least one arg"))
+ .get(0)
+ .asLiteral()
+ .orElseThrow(() -> new RuntimeException("Str-len needs a literal"))
+ .asVariableLiteral()
+ .orElseThrow(() -> new RuntimeException("Str-len needs a variable literal"));
+ return tracer + (typeReference instanceof SimpleTypeReference ? getCastExpressionForTypeReference(typeReference) : "") + "(len(" +
+ toVariableExpression(field, typeReference, countLiteral, parserArguments, serializerArguments, serialize, suppressPointerAccess) +
+ "))";
+ }
+
private String toStaticCallVariableExpression(Field field, TypeReference typeReference, VariableLiteral variableLiteral, List<Argument> parserArguments, List<Argument> serializerArguments, boolean serialize, boolean suppressPointerAccess, Tracer tracer) {
tracer = tracer.dive("STATIC_CALL");
StringBuilder sb = new StringBuilder();
@@ -1377,7 +1393,7 @@ public class GoLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHelp
return result;
}
- public boolean requiresStartPosAndCurPos() {
+ public boolean requiresCurPos() {
if (thisType instanceof ComplexTypeDefinition) {
ComplexTypeDefinition complexTypeDefinition = (ComplexTypeDefinition) this.thisType;
for (Field curField : complexTypeDefinition.getFields()) {
@@ -1389,6 +1405,18 @@ public class GoLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHelp
return false;
}
+ public boolean requiresStartPos() {
+ if (thisType instanceof ComplexTypeDefinition) {
+ ComplexTypeDefinition complexTypeDefinition = (ComplexTypeDefinition) this.thisType;
+ for (Field curField : complexTypeDefinition.getFields()) {
+ if (requiresVariable(curField, "startPos")) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
public boolean requiresVariable(Field curField, String variable) {
if (curField.isArrayField()) {
ArrayField arrayField = (ArrayField) curField;