Adding a reference "object" and changing scope to map identifier names to references, rather than directly to data values.
Revisiting assignment logic with references now in the mix.
Assgmt now requires a reference l-value; removing assignment method in Scope, as only declaration/initialization should be done at Scope level; starting to pass references around (both mutable and immutable).
Removing obsolete assignment code.
All system functions expect dereferenced args for now; all app class method/constructor invocations will expect dereferenced args as well until "out" reserved word is supported; adding ability to call "default method" on PTField arguments when a formal parameter expects not the field itself, but the field's underlying value.
Clarifying type rules and expectations in assignment and dot access logic; making Any extend PTType rather than be considered an object or a primitive.
Fill on PTRowset does not modify arguments, so pass it dereferenced args.
If a reference is passed as the conditional expr for an Evaluate stmt, dereference it before proceeding.
References to rowsets should be dereferenced prior to interpreting row indexing expressions.
References cannot be returned, must dereference first to get underlying value.
Expecting primitives or references to primitives as lhs and rhs in equality expressions.
Centralizing logic for getting or dereferencing objects to primitives or objects; comparison expressions expect either a primitive or a reference to one for both lhs and rhs.
For statements expect numbers or references to them for control counters / expressions.
Whitespace is optional before single-line PeopleCode comments that start with REM.
Push on Array and GetRow on Rowset do not change their args, dereference them first.
.Visible and .Value on Field objects can be passed by reference, so they must themselves be references rather than raw types.
Cleaning up assignment logic, making type check exceptions and immutable reference change exceptions to be checked Java exceptions, that way corner case PeopleCode rules can be accomodated at relevant call sites.
Removing "literal" pools, which were actually being abused; now all objects are instantiated explicitly to 1) take advantage of Java's memory model rather than reinvent the wheel 2) handle the mixed passing modes in PeopleSoft, which involves passing primitives by reference or by value depending on the type of program being called.
Interpreter now dereferences arguments to add / sub operations.
Adding logic to retrieve dereferenced values where applicable.