Incremental Compile Issues
First, my $ZVERSION:
Cache for OpenVMS/ALPHA V7.x (Alpha) 2010.1.6 (Build 952_2 + Adhoc 17754) 3-JAN-2018 14:32:54.07
Second, my issue:
I believe my current villain is “incremental compiling.” I was able to compare early compile output with later compile output:
Compilation started on 04/10/2019 10:46:32 with qualifiers 'cuk' Compiling class UnitTests.Task3496 incremental compile detected Compiling routine UnitTests.Task3496.2 Compilation finished successfully in 0.800s.
... several compiles later...
Compilation started on 04/10/2019 13:35:33 with qualifiers 'cuk' Compiling class UnitTests.Task3496 Compiling routine UnitTests.Task3496.1 Compilation finished successfully in 0.999s.
The problem that I am having today is that the %STACK is showing my code executing code that has been commented out:
%STACK(15)=Lev: 14 - DO at zTestFLATFILEOPENtS340039V3+10^UnitTests.Task3496.1 +1 code line omitted
Notice that the routine version is “.1” and the compiler output says that it compiled the “.1” version
Yesterday, the %STACK was showing that my code was expecting code that had been all together deleted, but it was executing the “.2” version of the code, and I was compiling “.1” versions
I believe that this is being caused by the incremental compile detected messages while I am compiling my work. Any Idea on how to prevent those, or turn off incremental compilation all together? Any ideas on what purpose it serves, or why it is on? As a preliminary, I have tried turning of the "u" option in the compiler and using forced compiled ("-u"):
Compilation started on 04/10/2019 13:36:18 with qualifiers 'cuk-u' Compiling class UnitTests.Task3496 Compiling routine UnitTests.Task3496.1 Compilation finished successfully in 0.836s.
Compilation started on 04/10/2019 14:01:37 with qualifiers 'k' Compiling class UnitTests.Task3496 Compiling routine UnitTests.Task3496.1 Compilation finished successfully in 0.882s.
Comments
There is a qualifier /incremental that allows incremental compilation.
Check if it's enabled and try to disable it:
See "Flags and Qualifiers" section: https://docs.intersystems.com/ens20101/csp/docbook/DocBook.UI.Page.cls?KEY=AMISC#AMISC_FlagsQualifiers
This is not version nor index, it is part of the routine name. Each class compiles at the routines. There is always <classname>.0 routine with class descriptor (always only as .OBJ code), where it holds the information what code it should run for particular property/method.
It then generates number of routines with generated code. For most classes there is only one - <classname>.1
If incremental compile is detected, it does not recreate <classname>.1 routine but creates a new routine <classname>.2 with the new code and updates the class descriptor to reflect it.
AFAIK .1 or .2 for that matter is not version, just index of sorts.