Skip to content

Commit 5d1bb6e

Browse files
committed
chore: Add references to the symbols introduced by simple declarations
1 parent c285a74 commit 5d1bb6e

File tree

2 files changed

+10
-3
lines changed

2 files changed

+10
-3
lines changed

src/parser/cxx/ast.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2262,6 +2262,7 @@ class InitDeclaratorAST final : public AST {
22622262
DeclaratorAST* declarator = nullptr;
22632263
RequiresClauseAST* requiresClause = nullptr;
22642264
ExpressionAST* initializer = nullptr;
2265+
Symbol* symbol = nullptr;
22652266

22662267
void accept(ASTVisitor* visitor) override { visitor->visit(this); }
22672268

src/parser/cxx/parser.cc

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@
1414
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
1515
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
1616
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17-
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18-
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19-
// SOFTWARE.
17+
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
18+
// FRnewOM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
19+
// DEALINGS IN THE SOFTWARE.
2020

2121
#include <cxx/parser.h>
2222

@@ -6726,6 +6726,7 @@ auto Parser::parse_init_declarator(InitDeclaratorAST*& yyast,
67266726
auto Parser::parse_init_declarator(InitDeclaratorAST*& yyast,
67276727
DeclaratorAST* declarator, Decl& decl)
67286728
-> bool {
6729+
Symbol* declaredSynbol = nullptr;
67296730
if (auto declId = decl.declaratorId; declId) {
67306731
auto symbolType = GetDeclaratorType{this}(declarator, decl.specs.getType());
67316732
const auto name = convertName(declId->unqualifiedId);
@@ -6735,22 +6736,26 @@ auto Parser::parse_init_declarator(InitDeclaratorAST*& yyast,
67356736
symbol->setName(name);
67366737
symbol->setType(symbolType);
67376738
std::invoke(DeclareSymbol{this, scope_}, symbol);
6739+
declaredSynbol = symbol;
67386740
} else if (getFunctionPrototype(declarator)) {
67396741
auto functionSymbol =
67406742
control_->newFunctionSymbol(scope_, decl.location());
67416743
applySpecifiers(functionSymbol, decl.specs);
67426744
functionSymbol->setName(name);
67436745
functionSymbol->setType(symbolType);
67446746
std::invoke(DeclareSymbol{this, scope_}, functionSymbol);
6747+
declaredSynbol = functionSymbol;
67456748
} else {
67466749
auto symbol = control_->newVariableSymbol(scope_, decl.location());
67476750
applySpecifiers(symbol, decl.specs);
67486751
symbol->setName(name);
67496752
symbol->setType(symbolType);
67506753
std::invoke(DeclareSymbol{this, scope_}, symbol);
6754+
declaredSynbol = symbol;
67516755
}
67526756
}
67536757
}
6758+
67546759
RequiresClauseAST* requiresClause = nullptr;
67556760
ExpressionAST* initializer = nullptr;
67566761

@@ -6765,6 +6770,7 @@ auto Parser::parse_init_declarator(InitDeclaratorAST*& yyast,
67656770
ast->declarator = declarator;
67666771
ast->requiresClause = requiresClause;
67676772
ast->initializer = initializer;
6773+
ast->symbol = declaredSynbol;
67686774

67696775
return true;
67706776
}

0 commit comments

Comments
 (0)