Project

General

Profile

Bug #3323

Incorrect handling of variables with similar names in some cases

Added by Jaroslaw Haziak over 6 years ago. Updated over 6 years ago.

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());
   }

Also available in: Atom PDF