While experimenting with a (trivial) custom instance of Array (to determine
whether I may hope to use some of the new updating syntax with a more
substantial instance), I encounter the following compile error:
Error in backend: File backend.c, Line 654 (!(originalsdef->sdef_arfun ==
BEArrayUpdateFun))
clm: reading compiler result failed: No such file or directory
I get the same message, whether using clm 2.4 on Mac OS X or 2.3 on Linux.
I am alerting you to this error, as it seems to represent an undesired failure
mode. But I also wonder in particular, does the current release support
creating a custom instance of Array, and then exploiting the special updating
syntax?
The repro follows.
Best Regards,
David Norris
-------------------
TestArray.icl
-------------------
module TestArray
import _ArrayTest
Start:: Ar3 Int
Start # x = (A3 1 2 3)
= {x & [2] = 7}
// Note that, by contrast, the following code compiles fine:
// Start:: (Int, Ar3 Int)
// Start # x = (A3 1 2 3)
// = replace x 2 7
//
// and gives the expected output:
// (2,(A3 1 7 3))
-------------------
_ArrayTest.dcl
-------------------
definition module _ArrayTest
import StdEnv, StdInt, StdArray
import StdOverloaded
// Make a 3-element instance of Array
::Ar3 a = A3 a a a
instance Array Ar3 a
-------------------
_ArrayTest.icl
-------------------
implementation module _ArrayTest
import StdEnv, StdInt, StdArray
import StdOverloaded
instance Array Ar3 a
where
select (A3 x y z) index
| index == 1 = x
| index == 2 = y
| index == 3 = z
= abort "Index out of range"
uselect (A3 x y z) index
| index == 1 = (x, A3 x y z)
| index == 2 = (y, A3 x y z)
| index == 3 = (z, A3 x y z)
= abort "Index out of range"
size arr = 3
usize arr = (3, arr)
update (A3 x y z) index el
| index == 1 = A3 el y z
| index == 2 = A3 x el z
| index == 3 = A3 x y el
= abort "Index out of range"
createArray size el = A3 el el el
_createArray size =
abort "_createArray should not be called"
replace (A3 x y z) index el
| index == 1 = (x, A3 el y z)
| index == 2 = (y, A3 x el z)
| index == 3 = (z, A3 x y el)
= abort "Index out of range"
_______________________________________________
clean-list mailing list
[email protected]
http://mailman.science.ru.nl/mailman/listinfo/clean-list