Bug #3323
Incorrect handling of variables with similar names in some cases
Status:
New
Priority:
Normal
Assignee:
-
Target version:
-
Start date:
08/12/2017
Due date:
% Done:
0%
billable:
No
vendor_id:
GCD
case_num:
version:
History
#1 Updated by Jaroslaw Haziak over 6 years ago
Example:
DEF INPUT PARAM inParam AS CHAR NO-UNDO. DEF OUTPUT PARAM ouResult AS CHAR NO-UNDO. DEF VAR i AS INT NO-UNDO. PROCEDURE test: END. DEF VAR i_ AS INT NO-UNDO. ouResult = inParam + STRING(i) + STRING(i_).
This code is translated to non-compilable Java code because of duplication of variable names ('i'):
public void execute(final character _inParam, final character ouResult) { character inParam = TypeFactory.initInput(_inParam); integer i = TypeFactory.integer(); integer i = TypeFactory.integer(); externalProcedure(TestProc3.this, new Block((Init) () -> { TypeFactory.initOutput(ouResult); }, (Body) () -> { ouResult.assign(concat(inParam, valueOf(i), valueOf(i))); })); } public void test() { internalProcedure(new Block()); }
#2 Updated by Jaroslaw Haziak over 6 years ago
But when we move declaration of variable 'i_' before the definition of internal procedure 'test' then the translated Java code is OK:
public void execute(final character _inParam, final character ouResult) { character inParam = TypeFactory.initInput(_inParam); integer i = TypeFactory.integer(); integer i_2 = TypeFactory.integer(); externalProcedure(TestProc3.this, new Block((Init) () -> { TypeFactory.initOutput(ouResult); }, (Body) () -> { ouResult.assign(concat(inParam, valueOf(i), valueOf(i_2))); })); } public void test() { internalProcedure(new Block()); }