- edited description
Faulty code generation with --concurrent option
Issue #298
resolved
JastAdd 2.3.2
When an NTA is abstractly declared on an abstract class, it causes incorrect code to be generated for the abstract class.
For example:
Test.ast: abstract A ::= /d:D/; B: A; C: A; D; Test.jrag: // .options: concurrent // .result: COMPILE_PASS aspect Test { syn lazy D A.getd(); eq B.getd() = new D(); eq C.getd() = new D(); }
The above JastAdd code leads to the following incorrect code generated in A.java
:
public ASTNode getChildNoTransform(int i) { Object _value = AttributeValue.NONE; switch (i) { case 0: _value = getd_value.get(); break; } if (_value != AttributeValue.NONE) { return (ASTNode) _value; } return super.getChildNoTransformBase(i); }
The getd_value
field is not part of class A
because the NTA is only an abstract attribute in A
.
The following compilation error results from the above code:
[junit] Compilation failed when expected to pass: [junit] tmp/nta/concurrent_01p/A.java:102: error: cannot find symbol [junit] _value = getd_value.get(); [junit] ^
Comments (3)
-
reporter -
reporter - changed status to resolved
Fix problem in concurrent code gen with NTAs
Avoid generating a child access for NTAs which don't have an equation on the current class.
fixes
#298(bitbucket)→ <<cset a52e949b1d0b>>
-
reporter - changed component to concurrent
- Log in to comment