Tasks for the week(Oct.21th-Oct.27th)
Tasks Accomplished
- I started this week by figuring out which of the
include
visitor methods was problematic. I used the strategy which I mentioned in last week’s report. After the debugging I figured out that the StaticIfDeclaration was problematic because there was an incorrect cast to the ConditionalDeclaration.
Initial snippet
Dsymbols* d = include(cast(ConditionalDeclaration)sif, sif._scope);
This is what happens here, the cast is ignored when calling include because include expects an AttribDeclaration. It then uses a visitor pattern to reach the appropriate visit override, but this results in the StaticIfDeclaration override being called instead of ConditionalDeclaration. So to effect the change the original scope (sc) was saved into saved_scope temporalily, the scope was then changed to sif._scope, which represents the scope of the sif (StaticIfDeclaration). It processes the sif_scope by treating it like a ConditionalDeclaration
stores the result in the symbols
and restores the original scope without altering any behaviour.
Refactored snippet
Scope* saved_scope = sc;
sc = sif._scope;
visit(cast(ConditionalDeclaration) sif);
Dsymbols* d = symbols;
sc = saved_scope;
- To make the unittest and CI pass successfully, I did the following things
- Updated the
cxxfrontend.cc
with a refactored free function call. - Updated
frontend.h
using this Command./build.d cxx-headers-test AUTO_UPDATE=1
- Updates
dsymbol.h
with the include signatureDsymbols *include(Dsymbol *d, Scope *sc);
- Added a Wrapper for the include method in cxxfrontend.d to reflect the update in dmd namespace block in
dsymbol.h
Merged PR = https://github.com/dlang/dmd/pull/16970
- Updated the
Summary
It was a week full of debugging and learning. Next will be, to fix the prepare, lowerNonArrayAggregate and lowerArrayAggregate methods in statementsem to pass the test suite and then move all semantics methods from dclass.d
to their appropriate modules.