Uniface 9.5.01: Possible compiler incompatibility issues

Symptoms:

When compiling Proc with Uniface 9.5 that has been migrated from an earlier version you may notice one of the following syntax errors:

 1.       When string or assignment includes parenthesis; for example: 

a.  putmess "FLD1=%%$number(FLD1.ENT1) (%%FLD2.ENT1-%%FLD3.ENT1)"
>> error: 1000 – Syntax error (Parentheses unbalanced or not allowed)

b.  FLD3.ENT1=FLD1.ENT1+(FLD2.ENT/100)
>> error: 1000 – Syntax error (Statement not valid)

FLD1.ENT1=(FLD2.ENT/100)
 >> error: 1000 – Syntax error (Operand not valid as destination)

 2.       When string includes left curly bracket; for example:

  • $2="%%$2{."
    >> error: 1000 – Syntax error (Numeric not valid)

 3.       When string includes an arrow operator; for example:

  • putmess "%%$nValue$->’%%$sText$’"
    >> error: 1000 – Syntax error (Struct member name missing)

 

Technical explanation:

Uniface 9.5.01 introduces a flexible new struct data type that holds complex data that is typically represented as a tree-like structure. With the introduction of the data type several changes had to be made to the Uniface Proc compiler and the above described incompatibility issues are a result of these changes.

 

Workaround:

To work around the syntax errors in a string always mark the end of a substitution with %%%. For example:

1.a. putmess "FLD1=%%$number(FLD1.ENT1)%%% (%%FLD2.ENT1%%%-%%FLD3.ENT1%%%)"

 

Solution:

The patch E101 (scheduled for December 2, 2011) will fix the above described compiler incompatibility issues.

Leave a Reply