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.
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.
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.
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.
Don’t think it has to do with the Implements. It has to do with construct and destruct. I am using my own template to generate the class methods as a local class and the moment I add a construct and destruct method, I get the ISL error on compile, delete those two methods and it compiles fine
Turns out that removing the Construct and Destruct just delayed the issue, because when you call CInt.Init() or CInt.Kill() you are back to the ISL Error. Calling any of the other methods work fine.
The compilation process very roughly can be divided to 3 phases:
parsing of source files with checking of syntax
optimization
generating the object code files or the assembler source files
In TopSpeed compilers including the Clarion compiler ISL is a layer performing last two phases.
The parser/syntax analyzer builds a graph for every program static (in Clarion - procedures, ROUTINEs, static data objects, entities like FILEs orVIEWs). Nodes of such graph are representing different abstract entities and primitive operations corresponding to data objects and statements working with them in the program static.
ISL does different modifications with the graph during optimization phase: some nodes can be replaced with others, some edges between nodes can be changed and if some sub-graph becomes isolated it can be removed, etc. At the end of this phase the graph consists of nodes representing virtual registers and instructions of some abstract processor.
ISL on the generation phase walks through the graph and “translates” virtual registers and instructions of an abstract processor to OBJ files records containing data declarations and code for processors with the IA-32 architecture and with information for the linker how to join parts of this and other OBJ files to an executable file.
The ISL Error: 0 error means that some incosistency has been detected in the graph structure, usually some node is missed or has unexpected type. It is a real problem to show more meaningful information about such errors. Changes to do this were sent to SV.