In the simplified mode of program specialization, you set the specialization variable to its value anywhere in the program except a data port. The value of the variable is "frozen in memory." The table below shows the result of using the simplified mode to specialize on the values CURYEAR = 1999, MONTH = 1, CURMONTH = 12,DAY1 = 4, and CURDAY = 7.
Source Program | Specialized Program | Comment |
---|---|---|
INP3. DISPLAY "INPUT DAY". ACCEPT DAY1. MOVE YEAR TO tmp1. PERFORM ISV. IF DAY1 > tt of MONTHS ( MONTH ) OR DAY1 < 1 THEN DISPLAY "WRONG DAY". |
INP3. DISPLAY "INPUT DAY". MOVE YEAR TO tmp1. PERFORM ISV. IF 0004 > TT OF MONTHS( MONTH ) THEN DISPLAY "WRONG DAY" END-IF. |
ACCEPT removed.
No changes in these statements (YEAR is a "free" variable). Value for DAY1 substituted. The 2nd condition for DAY1 is removed as always false. END-IF added. |
MAINCALC. IF YEAR > CURYEAR THEN MOVE YEAR TO INT0001 MOVE CURYEAR TO INT0002 MOVE 1 TO direction ELSE MOVE YEAR TO INT0002 MOVE 2 TO direction MOVE CURYEAR TO INT0001. |
MAINCALC. IF YEAR > 1999 THEN MOVE YEAR TO INT0001 MOVE 1999 TO INT0002 MOVE 1 TO direction ELSE MOVE YEAR TO INT0002 MOVE 2 TO direction MOVE 1999 TO INT0001. |
Value for CURYEAR substituted. |
MOVE int0001 TO tmp3. MOVE int0002 TO tmp4. IF YEAR NOT EQUAL CURYEAR THEN PERFORM YEARS. |
MOVE int0002 TO tmp4. IF YEAR NOT = 1999 THEN PERFORM YEARS. |
Component Maker removes the first line for tmp3, because this variable is never used again. Value for CURYEAR substituted. |
IF MONTH > CURMONTH THEN MOVE MONTH TO INT0001 MOVE CURMONTH TO INT0002 MOVE 1 TO direction |
Value for MONTH substituted, making the condition (1>12) false, so Component Maker removes the IF branch and then the whole conditional statement as such. | |
ELSE MOVE MONTH TO INT0002 MOVE 2 TO direction MOVE CURMONTH TO INT0001. |
MOVE 0001 TO INT0002 MOVE 2 TO direction MOVE 0012 TO INT0001. |
The three unconditional statements remain from the former ELSE branch. Value for CURMONTH substituted. |
IF MONTH NOT EQUAL CURMONTH THEN PERFORM MONTHS. |
PERFORM MONTHS. |
The condition is true, so the statement is made unconditional. |
IF DAY1 > CURDAY THEN MOVE DAY1 TO INT0001 MOVE CURDAY TO INT0002 MOVE 1 TO direction |
This condition (4>7) is false, so Component Maker removes the IF branch and then the whole conditional statement as such. | |
ELSE MOVE DAY1 TO INT0002 MOVE 2 TO direction MOVE CURDAY TO INT0001. |
MOVE 4 TO INT0002 MOVE 2 TO direction MOVE 0007 TO INT0001. |
The three unconditional statements remain from the former ELSE branch. Values for DAY1 and CURDAY substituted. |
IF day1 NOT EQUAL CURDAY THEN PERFORM DAYS. |
PERFORM DAYS. |
The condition is true, so the statement is made unconditional. |