check castability using type assignments

This commit is contained in:
Dave Holoway
2020-06-22 14:41:32 +01:00
parent 4fc616daa1
commit fbb275600a

View File

@@ -7,7 +7,7 @@ const { Expression } = require("./Expression");
const { AnyType, MultiValueType, TypeIdentType } = require('../anys'); const { AnyType, MultiValueType, TypeIdentType } = require('../anys');
const ParseProblem = require('../parsetypes/parse-problem'); const ParseProblem = require('../parsetypes/parse-problem');
const { JavaType, PrimitiveType, NullType, CEIType, ArrayType } = require('java-mti'); const { JavaType, PrimitiveType, NullType, CEIType, ArrayType } = require('java-mti');
const { getTypeInheritanceList } = require('../expression-resolver'); const { isTypeAssignable } = require('../expression-resolver');
const { NumberLiteral } = require('../expressiontypes/literals/Number'); const { NumberLiteral } = require('../expressiontypes/literals/Number');
class CastExpression extends Expression { class CastExpression extends Expression {
@@ -91,11 +91,11 @@ function isTypeCastable(source_type, cast_type) {
return true; return true;
} }
} }
// for other class casts, one type must be in the inheritence tree of the other // for other class casts, one type must be assignable to the other
if (getTypeInheritanceList(source_type).includes(cast_type)) { if (isTypeAssignable(source_type, cast_type)) {
return true; return true;
} }
if (getTypeInheritanceList(cast_type).includes(source_type)) { if (isTypeAssignable(cast_type, source_type)) {
return true; return true;
} }
return false; return false;