Implemented #27, easy coercion from int to float

This commit is contained in:
2022-09-14 16:30:54 +01:00
parent 0f6be5ead7
commit 29b1c41064
3 changed files with 27 additions and 0 deletions

View File

@@ -544,6 +544,11 @@ static bool execVarDecl(Interpreter* interpreter, bool lng) {
parseCompoundToPureValues(interpreter, &val);
}
//BUGFIX: allow easy coercion on decl
if (AS_TYPE(type).typeOf == LITERAL_FLOAT && IS_INTEGER(val)) {
val = TO_FLOAT_LITERAL(AS_INTEGER(val));
}
if (!IS_NULL(val) && !setScopeVariable(interpreter->scope, identifier, val, false)) {
interpreter->errorOutput("Incorrect type assigned to variable \"");
printLiteralCustom(identifier, interpreter->errorOutput);
@@ -635,6 +640,12 @@ static bool execVarAssign(Interpreter* interpreter) {
return false;
}
//BUGFIX: allow easy coercion on assign
Literal type = getScopeType(interpreter->scope, lhs);
if (AS_TYPE(type).typeOf == LITERAL_FLOAT && IS_INTEGER(rhs)) {
rhs = TO_FLOAT_LITERAL(AS_INTEGER(rhs));
}
if (!setScopeVariable(interpreter->scope, lhs, rhs, true)) {
interpreter->errorOutput("Incorrect type assigned to variable \"");
printLiteralCustom(lhs, interpreter->errorOutput);
@@ -642,11 +653,13 @@ static bool execVarAssign(Interpreter* interpreter) {
freeLiteral(lhs);
freeLiteral(rhs);
freeLiteral(type);
return false;
}
freeLiteral(lhs);
freeLiteral(rhs);
freeLiteral(type);
return true;
}