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_reported:
version_resolved:
reviewer:
production:
No
env_name:
topics:
History
#1 Updated by Jaroslaw Haziak almost 9 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 almost 9 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());
}