Skip to content

Commit

Permalink
Limit casting to only basic types
Browse files Browse the repository at this point in the history
  • Loading branch information
heshanpadmasiri committed Jan 2, 2024
1 parent 662a015 commit ca4c44b
Showing 1 changed file with 6 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2468,7 +2468,7 @@ private void createSimpleVarDefStmt(BLangSimpleVariable simpleVariable, BLangBlo

@Override
public void visit(BLangAssignment assignNode) {
boolean isOptionalFieldAssignment = isOptionalFieldAssignment(assignNode);
boolean isOptionalFieldAssignment = isOptionalBasicTypeFieldAssignment(assignNode);
assignNode.varRef = rewriteExpr(assignNode.varRef);
assignNode.expr = rewriteExpr(assignNode.expr);
BType castingType = assignNode.varRef.getBType();
Expand All @@ -2479,7 +2479,7 @@ public void visit(BLangAssignment assignNode) {
result = assignNode;
}

private boolean isOptionalFieldAssignment(BLangAssignment assignNode) {
private boolean isOptionalBasicTypeFieldAssignment(BLangAssignment assignNode) {
if (assignNode.varRef.getKind() != NodeKind.FIELD_BASED_ACCESS_EXPR) {
return false;
}
Expand All @@ -2490,10 +2490,12 @@ private boolean isOptionalFieldAssignment(BLangAssignment assignNode) {
}
BRecordType recordType = (BRecordType) targetType;
BField field = recordType.fields.get(fieldAccessNode.field.value);
if (field == null) {
if (field == null || (field.symbol.flags & Flags.OPTIONAL) != Flags.OPTIONAL) {
return false;
}
return (field.symbol.flags & Flags.OPTIONAL) == Flags.OPTIONAL;
BType fieldType = field.getType();
return fieldType.getKind() == TypeKind.BOOLEAN || fieldType.getKind() == TypeKind.FLOAT ||
TypeTags.isIntegerTypeTag(fieldType.tag);
}

@Override
Expand Down

0 comments on commit ca4c44b

Please sign in to comment.