LOCAL/GLOBAL VARIABLE +---------------------------+-----------------------------------------+-----------------------------------------+ | KEYWORD(S) | VALUE TYPE | REFERENCE TYPE | | +-------+------+-------+------------------+-------+------+-------+------------------+ | | CAN | CAN | CAN | INVARIANCE | CAN | CAN | CAN | INVARIANCE | | | MOD | MOD | MOD | BEGINS | MOD | MOD | MOD | BEGINS | | | DECL | DATA | DATA | | DECL | DATA | DATA | | | | REF | VIA | VIA | | REF | VIA | VIA | | | | | DECLR | OTHER | | | DECLR | OTHER | | | | | REF | REF | | | REF | REF | | +---------------------------+-------+-------+-------+-----------------+-------+-------+-------+-----------------+ | | NO(1) | YES | YES | N/A | YES | YES | YES | N/A | | invariant | NO(2) | NO | NO(3) | AT COMPILE TIME | NO | NO | NO(3) | COMPILE TIME(5) | | const | NO(2) | NO | NO(3) | AT COMPILE TIME | NO | NO | NO(3) | COMPILE TIME(5) | | const invariant (4) | NO(2) | NO | NO(3) | AT COMPILE TIME | NO | NO | NO(3) | COMPILE TIME(5) | | final | NO(2) | NO | YES | AT COMPILE TIME | NO | YES | YES | RUN TIME | | final const | NO(2) | NO | NO | AT COMPILE TIME | NO | NO | YES | RUN TIME | | final invariant | NO(2) | NO | NO | AT COMPILE TIME | NO | NO | NO | RUN TIME | | final const invariant (4) | NO(2) | NO | NO | AT COMPILE TIME | NO | NO | NO | RUN TIME | +---------------------------+-------+-------+-------+-----------------+-------+-------+-------+-----------------+ FUNCTION ARGUMENT +---------------------------+-----------------------------------------+-----------------------------------------+ | KEYWORD(S) | VALUE TYPE | REFERENCE TYPE | | +-------+------+-------+------------------+-------+------+-------+------------------+ | | CAN | CAN | CAN | INVARIANCE | CAN | CAN | CAN | INVARIANCE | | | MOD | MOD | MOD | BEGINS | MOD | MOD | MOD | BEGINS | | | DECL | DATA | DATA | | DECL | DATA | DATA | | | | REF | VIA | VIA | | REF | VIA | VIA | | | | | DECLR | OTHER | | | DECLR | OTHER | | | | | REF | REF | | | REF | REF | | +---------------------------+-------+-------+-------+-----------------+-------+-------+-------+-----------------+ | | NO(1) | YES(6)| NO | FUNC PROLOGUE | | | | | | invariant | NO(1) | NO | NO(3) | FUNC PROLOGUE | | | | | | const | NO(1) | NO | NO(3) | FUNC PROLOGUE | | | | | | const invariant (4) | NO(1) | NO | NO(3) | FUNC PROLOGUE | | | | | | final | NO(1) | NO | YES(7)| FUNC PROLOGUE | | | | | | final const | NO(1) | NO | NO | FUNC PROLOGUE | | | | | | final invariant | NO(1) | NO | NO | FUNC PROLOGUE | | | | | | final const invariant (4) | NO(1) | NO | NO | FUNC PROLOGUE | | | | | +---------------------------+-------+-------+-------+-----------------+-------+-------+-------+-----------------+ (1) - NOT VISIBLE TO PROGRAMMER; EXISTS IN SYMBOL-TABLE/STACK/LOAD-FROM-MEMORY-INSTRUCTIONS ONLY (2) - NOT VISIBLE TO PROGRAMMER; EXISTS IN SYMBOL-TABLE/LOAD-FROM-MEMORY-INSTRUCTIONS ONLY AND MAY EVEN HAVE BEEN REPLACED BY IMMEDIATE LOAD, DEPENDING ON IMPLEMENTATION AND TYPE. (3) - CREATING OTHER REFERENCES IS NOT ALLOWED (4) - SHOULD THIS BE LEGAL FOR VALUE TYPES? CERTAINLY REDUNDANT FOR THEM... (5) - IMPOSSIBLE FOR REFERENCE TYPES THAT NEED CONSTRUCTORS/DESTRUCTORS; USE "FINAL INVARIANT" INSTEAD (6) - USE OF A BY-VALUE ARGUMENT AS A LOCAL VARIABLE (ARGUABLY A "BAD THING [TM]") (7) - POSSIBLE WITHIN THE FUNCTION, BUT WHY WOULD YOU WANT TO, ITS ONLY A **COPY OF** THE ORIGINAL ARGUMENT!!