Skip to content

Commit

Permalink
feat(bacnet): implement BACnetTagApplicationDate and BACnetTagApplica…
Browse files Browse the repository at this point in the history
…tionTime

+ fixed golang not propagating virtual fields
+ fixed virtual field assignment with field indirection
  • Loading branch information
sruehl committed Nov 30, 2021
1 parent 5e6cc92 commit f19d8f7
Show file tree
Hide file tree
Showing 20 changed files with 797 additions and 75 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -360,16 +360,16 @@ public String getWriteBufferWriteMethodCall(SimpleTypeReference simpleTypeRefere
}

public String getWriteBufferWriteMethodCall(String logicalName, SimpleTypeReference simpleTypeReference, Term valueTerm, TypedField field, String... writerArgs) {
if(valueTerm instanceof BooleanLiteral) {
if (valueTerm instanceof BooleanLiteral) {
return getWriteBufferWriteMethodCall(logicalName, simpleTypeReference, Boolean.toString(((BooleanLiteral) valueTerm).getValue()), field, writerArgs);
}
if(valueTerm instanceof NumericLiteral) {
if (valueTerm instanceof NumericLiteral) {
return getWriteBufferWriteMethodCall(logicalName, simpleTypeReference, ((NumericLiteral) valueTerm).getNumber().toString(), field, writerArgs);
}
if(valueTerm instanceof HexadecimalLiteral) {
if (valueTerm instanceof HexadecimalLiteral) {
return getWriteBufferWriteMethodCall(logicalName, simpleTypeReference, ((HexadecimalLiteral) valueTerm).getHexString(), field, writerArgs);
}
if(valueTerm instanceof StringLiteral) {
if (valueTerm instanceof StringLiteral) {
return getWriteBufferWriteMethodCall(logicalName, simpleTypeReference, "\"" + ((StringLiteral) valueTerm).getValue() + "\"", field, writerArgs);
}
throw new RuntimeException("Outputting " + valueTerm.toString() + " not implemented yet. Please continue defining other types in the GoLanguageHelper.getWriteBufferWriteMethodCall.");
Expand Down Expand Up @@ -558,13 +558,14 @@ private String toBinaryTermExpression(Field field, TypeReference fieldType, Bina
Term a = binaryTerm.getA();
Term b = binaryTerm.getB();
String operation = binaryTerm.getOperation();
String castExpressionForTypeReference = getCastExpressionForTypeReference(fieldType);
switch (operation) {
case "^":
tracer = tracer.dive("^");
emitRequiredImport("math");
return tracer + "Math.pow(" +
getCastExpressionForTypeReference(fieldType) + "(" + toExpression(field, fieldType, a, parserArguments, serializerArguments, serialize, false) + "), " +
getCastExpressionForTypeReference(fieldType) + "(" + toExpression(field, fieldType, b, parserArguments, serializerArguments, serialize, false) + "))";
castExpressionForTypeReference + "(" + toExpression(field, fieldType, a, parserArguments, serializerArguments, serialize, false) + "), " +
castExpressionForTypeReference + "(" + toExpression(field, fieldType, b, parserArguments, serializerArguments, serialize, false) + "))";
// If we start casting for comparisons, equals or non equals, really messy things happen.
case "==":
case "!=":
Expand All @@ -577,9 +578,9 @@ private String toBinaryTermExpression(Field field, TypeReference fieldType, Bina
// Except for doing a nil or not-nil check :-(
// So in case of such a check, we need to suppress the pointer-access.
boolean suppressPointerAccessOverride = (operation.equals("==") || operation.equals("!=")) && ((a instanceof NullLiteral) || (b instanceof NullLiteral));
return tracer + "bool((" + toExpression(field, null, a, parserArguments, serializerArguments, serialize, suppressPointerAccessOverride) + ") " +
operation +
" (" + toExpression(field, null, b, parserArguments, serializerArguments, serialize, suppressPointerAccessOverride) + "))";
String aExpression = toExpression(field, null, a, parserArguments, serializerArguments, serialize, suppressPointerAccessOverride);
String bExpression = toExpression(field, null, b, parserArguments, serializerArguments, serialize, suppressPointerAccessOverride);
return tracer + "bool((" + aExpression + ") " + operation + " (" + bExpression + "))";
default:
tracer = tracer.dive("default");
if (fieldType instanceof StringTypeReference) {
Expand All @@ -588,9 +589,10 @@ private String toBinaryTermExpression(Field field, TypeReference fieldType, Bina
operation + " " +
toExpression(field, fieldType, b, parserArguments, serializerArguments, serialize, false);
}
return tracer + getCastExpressionForTypeReference(fieldType) + "(" + toExpression(field, fieldType, a, parserArguments, serializerArguments, serialize, false) + ") " +
return tracer +
castExpressionForTypeReference + "(" + toExpression(field, fieldType, a, parserArguments, serializerArguments, serialize, false) + ") " +
operation + " " +
getCastExpressionForTypeReference(fieldType) + "(" + toExpression(field, fieldType, b, parserArguments, serializerArguments, serialize, false) + ")";
castExpressionForTypeReference + "(" + toExpression(field, fieldType, b, parserArguments, serializerArguments, serialize, false) + ")";
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1085,7 +1085,8 @@ func ${type.name}Parse(readBuffer utils.ReadBuffer<#if hasParserArguments>, ${pa
<#assign virtualField = field.asVirtualField().orElseThrow()>

// Virtual field
${virtualField.name} := ${helper.toParseExpression(virtualField, virtualField.type, virtualField.valueExpression, parserArguments)}
_${virtualField.name} := ${helper.toParseExpression(virtualField, virtualField.type, virtualField.valueExpression, parserArguments)}
${virtualField.name} := ${helper.getLanguageTypeNameForTypeReference(virtualField.type)}(_${virtualField.name})
<#break>
</#switch>
</#list>
Expand All @@ -1104,6 +1105,9 @@ func ${type.name}Parse(readBuffer utils.ReadBuffer<#if hasParserArguments>, ${pa
<#list type.propertyFields as field>
${field.name?cap_first}: <#if helper.isComplex(field) && !helper.isEnumField(field) && !field.isArrayField()>Cast${helper.getLanguageTypeNameForField(field)}(</#if>${field.name}<#if helper.isComplex(field) && !helper.isEnumField(field) && !field.isArrayField()>)</#if>,
</#list>
<#list type.virtualFields as field>
${field.name?cap_first}: <#if helper.isComplex(field) && !helper.isEnumField(field) && !field.isArrayField()>Cast${helper.getLanguageTypeNameForField(field)}(</#if>${field.name}<#if helper.isComplex(field) && !helper.isEnumField(field) && !field.isArrayField()>)</#if>,
</#list>
Parent: &${type.parentType.name}{},
}
_child.Parent.Child = _child
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit f19d8f7

Please sign in to comment.