Bug 1450 - Fix C Parser Constant Expression (Number) and JCPP constant-definition (macro) detection
Summary: Fix C Parser Constant Expression (Number) and JCPP constant-definition (macro...
Status: RESOLVED FIXED
Alias: None
Product: Gluegen
Classification: JogAmp
Component: core (show other bugs)
Version: 2.5.0
Hardware: All all
: P4 normal
Assignee: Sven Gothel
URL:
Depends on:
Blocks:
 
Reported: 2023-08-09 15:23 CEST by Sven Gothel
Modified: 2023-08-14 17:01 CEST (History)
1 user (show)

See Also:
Type: DEFECT
SCM Refs:
gluegen b5ec911572aa0c07228fcb02976a8e848cc90391 gluegen f8752c59945205b717c4b21ceeb4044ae9a0e9df gluegen 5b6e6af3932ece0c656cf4438100f4e213ea91b6 gluegen c30f0db4b785f21288f9cc5f7fd65393781d93c3 gluegen a7e62d106b1ba89d0973e5ccb00982e8ae8df9e4 jogl 1442d8dc875af3e945e656509105c89e394647c3
Workaround: ---


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Sven Gothel 2023-08-09 15:23:43 CEST
Investigate and resolve remaining C parser issues.

One in discussion is a resulting negative line number having a '-' in included C header files via the '#line ..' artifact.

We will change the title of this bug report with more clarity.
Comment 1 Sven Gothel 2023-08-10 10:48:53 CEST
Following code exposed a bug within our GnuCParser.g syntax, i.e. 'Number' rule.

+++
typedef enum SomeEnum {
  ConstEnumValue00 = 16,
  ConstEnumValue01 = (1 << ConstEnumValue00) - 1,
  ConstEnumValue02 = (10-1),
  ConstEnumValue03 = (10 - 2),
  ConstEnumValue04 = ( 10 - 3 ),
  ConstEnumValue05 = 10-4,
  ConstEnumValue06 = 10 - 11,
  ConstEnumValue07 = -2,
  ConstEnumValue08 = - 2,
  ConstEnumValueXX = 0
} SomeEnum;
+++

In GlueGen commit 10032c0115f2794a254cffc2a1cd5e48ca8ff0b8 in branch JOGL_2_SANDBOX
Ken hacked in consuming a '-' prefix to have negative numbers covered by 'Number'.

This is wrong, as it breaks deduction of `additiveExpr` and 'unaryExpr' rules, 
which want to consume '-' and '+'.
The latter is used to completely resolve constant expressions 
starting from the 'constExpr' rule.

See ISO 9899:202x Programming Language - C
https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2596.pdf

This is reverted with commit f8752c59945205b717c4b21ceeb4044ae9a0e9df
+++

Note: Today we retrieve the 'define' constant expressions from JCPP.
Comment 2 Sven Gothel 2023-08-10 10:53:40 CEST
Widen ConstantDefinition.isConstantExpression() to include 'patternCPPOperand',
i.e. all supported operands used for constant-expression of define macros.

Commit 5b6e6af3932ece0c656cf4438100f4e213ea91b6
Comment 3 Sven Gothel 2023-08-10 10:55:55 CEST
Bug 1450: Be more verbose w/ JavaEmitter comment lines for enums and defines, include native expression

Commit c30f0db4b785f21288f9cc5f7fd65393781d93c3
Comment 4 Sven Gothel 2023-08-10 11:02:15 CEST
Bug 1450: Add test snippets covering the issues: test2.h for Bindingtest2, TestJCPP and new TestCParser

Commit
Comment 5 Sven Gothel 2023-08-10 11:13:58 CEST
Bug 1450: Remove nativewindow's drm-gbm GlueGen config's manual constant definitions, now properly passed from GlueGen

JOGL commit 1442d8dc875af3e945e656509105c89e394647c3
Comment 6 Sven Gothel 2023-08-10 11:24:21 CEST
Further manual validation..

I ran JOGL's make/scripts/cmpOld2New.sh
of the current master tip against build v2.5.0-rc-20230523.

No changes in regards to constant definition, hence all OK!