What does "Internal Error: ISL ERROR: 0" mean?

It is a good idea not to try and create a class with the same label as a table in the DCT. At least in my case it wasn’t, I was getting a bunch of silly compiler errors and one that I had not seen before ISL ERROR: 0. Renamed the class… all is well!

Any other odd compiler errors you have seen lately?

Edit: Actually, I am still getting this even after renaming the class. Damn! I will keep looking.

Quoting Randy from the newsgroups:

ISL is an internal “language” that is used by all of the TopSpeed
programming languages, including c, c++, Modula-2, and Clarion
(but not the Assembler).
These languages are first translated into a common intermediate (ISL)
that is fed to the backend compiler.

An ISL error indicates that you have done something that can’t be
properly translated or that exceeds a linker requirement.

1 Like

Ok, so now it seems to be something to do with the implements on my class declaration. Totally weird. I will try and sort it out later and report back here.

Having this in a procedure is what was causing the compiler error:

MyClass                      CLASS(BaseWindowComponent),IMPLEMENTS(WindowComponent)
Construct                      PROCEDURE
Destruct                       PROCEDURE() ,VIRTUAL

MyClass.Construct                      PROCEDURE
MyClass.Destruct                       PROCEDURE()

If I move this out to inc/clw files then it is no problem.

Anyone know why that is?

Just a guess… but ,VIRTUAL seems out of place on .DESTRUCT
I can see adding ,REPLACE but even that is rare.

Remember that DESTRUCT has it own special rules for how it’s called.
It’s automatically called and the child .destruct fires before the parent.

.CONSTRUCT also automatically fires, but in that case the parent fires first

The help mentions that a Construct may not have VIRTUAL but it does not say the same for Destruct. I have a feeling I started putting it on the destructors for no good reason other than it was on there in examples when I was learning to write classes. It does seem odd though and I wonder if a parent destructor is automatically called when the VIRTUAL is present?

Pretty sure this is not the cause of the ISL ERROR though as from a quick look at the code I have done that in another place although admittedly not with a class that uses IMPLEMENTS.