mirror of
https://github.com/irmen/prog8.git
synced 2024-10-18 16:24:26 +00:00
tweak check of DataType against multiple values
This commit is contained in:
parent
761aac7a23
commit
7b35b414e8
@ -519,7 +519,7 @@ internal class AstChecker(private val program: Program,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// FLOATS enabled?
|
// FLOATS enabled?
|
||||||
if(!compilerOptions.floats && decl.datatype in setOf(DataType.FLOAT, DataType.ARRAY_F) && decl.type!= VarDeclType.MEMORY)
|
if(!compilerOptions.floats && decl.datatype.oneOf(DataType.FLOAT, DataType.ARRAY_F) && decl.type!= VarDeclType.MEMORY)
|
||||||
err("floating point used, but that is not enabled via options")
|
err("floating point used, but that is not enabled via options")
|
||||||
|
|
||||||
if(decl.datatype == DataType.FLOAT && (decl.zeropage==ZeropageWish.REQUIRE_ZEROPAGE || decl.zeropage==ZeropageWish.PREFER_ZEROPAGE))
|
if(decl.datatype == DataType.FLOAT && (decl.zeropage==ZeropageWish.REQUIRE_ZEROPAGE || decl.zeropage==ZeropageWish.PREFER_ZEROPAGE))
|
||||||
|
@ -182,7 +182,7 @@ class TypecastsAdder(val program: Program, val errors: IErrorReporter) : AstWalk
|
|||||||
|
|
||||||
override fun after(typecast: TypecastExpression, parent: Node): Iterable<IAstModification> {
|
override fun after(typecast: TypecastExpression, parent: Node): Iterable<IAstModification> {
|
||||||
// warn about any implicit type casts to Float, because that may not be intended
|
// warn about any implicit type casts to Float, because that may not be intended
|
||||||
if(typecast.implicit && typecast.type in setOf(DataType.FLOAT, DataType.ARRAY_F)) {
|
if(typecast.implicit && typecast.type.oneOf(DataType.FLOAT, DataType.ARRAY_F)) {
|
||||||
errors.warn("integer implicitly converted to float. Suggestion: use float literals, add an explicit cast, or revert to integer arithmetic", typecast.position)
|
errors.warn("integer implicitly converted to float. Suggestion: use float literals, add an explicit cast, or revert to integer arithmetic", typecast.position)
|
||||||
}
|
}
|
||||||
return noModifications
|
return noModifications
|
||||||
|
@ -24,16 +24,17 @@ enum class DataType {
|
|||||||
*/
|
*/
|
||||||
infix fun isAssignableTo(targetType: DataType) =
|
infix fun isAssignableTo(targetType: DataType) =
|
||||||
when(this) {
|
when(this) {
|
||||||
UBYTE -> targetType in setOf(UBYTE, WORD, UWORD, FLOAT)
|
UBYTE -> targetType.oneOf(UBYTE, WORD, UWORD, FLOAT)
|
||||||
BYTE -> targetType in setOf(BYTE, WORD, FLOAT)
|
BYTE -> targetType.oneOf(BYTE, WORD, FLOAT)
|
||||||
UWORD -> targetType in setOf(UWORD, FLOAT)
|
UWORD -> targetType.oneOf(UWORD, FLOAT)
|
||||||
WORD -> targetType in setOf(WORD, FLOAT)
|
WORD -> targetType.oneOf(WORD, FLOAT)
|
||||||
FLOAT -> targetType == FLOAT
|
FLOAT -> targetType == FLOAT
|
||||||
STR -> targetType == STR
|
STR -> targetType == STR
|
||||||
in ArrayDatatypes -> targetType == this
|
in ArrayDatatypes -> targetType == this
|
||||||
else -> false
|
else -> false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun oneOf(vararg types: DataType) = this in types
|
||||||
infix fun isAssignableTo(targetTypes: Set<DataType>) = targetTypes.any { this isAssignableTo it }
|
infix fun isAssignableTo(targetTypes: Set<DataType>) = targetTypes.any { this isAssignableTo it }
|
||||||
infix fun isNotAssignableTo(targetType: DataType) = !this.isAssignableTo(targetType)
|
infix fun isNotAssignableTo(targetType: DataType) = !this.isAssignableTo(targetType)
|
||||||
infix fun isNotAssignableTo(targetTypes: Set<DataType>) = !this.isAssignableTo(targetTypes)
|
infix fun isNotAssignableTo(targetTypes: Set<DataType>) = !this.isAssignableTo(targetTypes)
|
||||||
|
@ -3,8 +3,9 @@ TODO
|
|||||||
|
|
||||||
For next compiler release
|
For next compiler release
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
replace checks against multiple types with .oneOf(...)
|
replace checks of InferredType against multiple types with .oneOf(...)
|
||||||
replace certain uses of inferredType.getOr(UNKNOWN) by i.getOrElse({ errorhandler })
|
replace certain uses of inferredType.getOr(UNKNOWN) by i.getOrElse({ errorhandler })
|
||||||
|
replace registerOrPair in setOf(..) by .oneOf(..) varargs function
|
||||||
|
|
||||||
|
|
||||||
Blocked by Commander-x16 v39 release
|
Blocked by Commander-x16 v39 release
|
||||||
|
Loading…
Reference in New Issue
Block a user