mirror of
https://github.com/irmen/prog8.git
synced 2024-11-27 03:50:27 +00:00
added error for unsupported sort(floatarray)
This commit is contained in:
parent
aa36acd65a
commit
fbecedaf41
@ -826,10 +826,18 @@ internal class AstChecker(private val program: Program,
|
|||||||
printWarning("result values of subroutine call are discarded (use void?)", functionCallStatement.position)
|
printWarning("result values of subroutine call are discarded (use void?)", functionCallStatement.position)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(functionCallStatement.target.nameInSource.last() == "sort") {
|
||||||
|
// sort is not supported on float arrays
|
||||||
|
val idref = functionCallStatement.args.singleOrNull() as? IdentifierReference
|
||||||
|
if(idref!=null && idref.inferType(program).istype(DataType.ARRAY_F)) {
|
||||||
|
checkResult.add(ExpressionError("sorting a floating point array is not supported", functionCallStatement.args.first().position))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if(functionCallStatement.target.nameInSource.last() in setOf("lsl", "lsr", "rol", "ror", "rol2", "ror2", "swap", "sort", "reverse")) {
|
if(functionCallStatement.target.nameInSource.last() in setOf("lsl", "lsr", "rol", "ror", "rol2", "ror2", "swap", "sort", "reverse")) {
|
||||||
// in-place modification, can't be done on literals
|
// in-place modification, can't be done on literals
|
||||||
if(functionCallStatement.args.any { it !is IdentifierReference && it !is RegisterExpr && it !is ArrayIndexedExpression && it !is DirectMemoryRead }) {
|
if(functionCallStatement.args.any { it !is IdentifierReference && it !is RegisterExpr && it !is ArrayIndexedExpression && it !is DirectMemoryRead }) {
|
||||||
checkResult.add(ExpressionError("can't use that as argument to a in-place modifying function", functionCallStatement.position))
|
checkResult.add(ExpressionError("can't use that as argument to a in-place modifying function", functionCallStatement.args.first().position))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
super.visit(functionCallStatement)
|
super.visit(functionCallStatement)
|
||||||
|
@ -512,7 +512,7 @@ internal class BuiltinFunctionsAsmGen(private val program: Program, private val
|
|||||||
""")
|
""")
|
||||||
asmgen.out(if(decl.datatype==DataType.ARRAY_UW) " jsr prog8_lib.sort_uw" else " jsr prog8_lib.sort_w")
|
asmgen.out(if(decl.datatype==DataType.ARRAY_UW) " jsr prog8_lib.sort_uw" else " jsr prog8_lib.sort_w")
|
||||||
}
|
}
|
||||||
DataType.ARRAY_F -> TODO("sort floats (consider another solution if possible - this will be very slow, if ever implemented)")
|
DataType.ARRAY_F -> throw AssemblyError("sorting of floating point array is not supported")
|
||||||
else -> throw AssemblyError("weird type")
|
else -> throw AssemblyError("weird type")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -713,9 +713,13 @@ sum(x)
|
|||||||
|
|
||||||
sort(array)
|
sort(array)
|
||||||
Sort the array in ascending order (in-place)
|
Sort the array in ascending order (in-place)
|
||||||
|
Note: sorting a floating-point array is not supported right now, as a general sorting routine for this will
|
||||||
|
be extremely slow. Either build one yourself or find another solution that doesn't require sorting
|
||||||
|
floating point values.
|
||||||
|
|
||||||
reverse(array)
|
reverse(array)
|
||||||
Reverse the values in the array (in-place). Can be used after sort() to sort an array in descending order.
|
Reverse the values in the array (in-place). Supports all data types including floats.
|
||||||
|
Can be used after sort() to sort an array in descending order.
|
||||||
|
|
||||||
len(x)
|
len(x)
|
||||||
Number of values in the array value x, or the number of characters in a string (excluding the size or 0-byte).
|
Number of values in the array value x, or the number of characters in a string (excluding the size or 0-byte).
|
||||||
|
@ -117,6 +117,8 @@ main {
|
|||||||
|
|
||||||
float[] fa = [1.1, 2.2, 3.3, 4.4, 5.5]
|
float[] fa = [1.1, 2.2, 3.3, 4.4, 5.5]
|
||||||
reverse(fa)
|
reverse(fa)
|
||||||
|
sort(uww3)
|
||||||
|
sort(fa)
|
||||||
for ub in 0 to len(fa)-1 {
|
for ub in 0 to len(fa)-1 {
|
||||||
c64flt.print_f(fa[ub])
|
c64flt.print_f(fa[ub])
|
||||||
c64scr.print(",")
|
c64scr.print(",")
|
||||||
|
Loading…
Reference in New Issue
Block a user