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 <[email protected]> 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;
