@@ -47,6 +47,14 @@ auto Binder::control() const -> Control* {
4747 return unit_ ? unit_->control () : nullptr ;
4848}
4949
50+ auto Binder::is_parsing_c () const {
51+ return unit_->language () == LanguageKind::kC ;
52+ }
53+
54+ auto Binder::is_parsing_cxx () const {
55+ return unit_->language () == LanguageKind::kCXX ;
56+ }
57+
5058auto Binder::reportErrors () const -> bool { return reportErrors_; }
5159
5260void Binder::setReportErrors (bool reportErrors) {
@@ -344,13 +352,15 @@ void Binder::bind(DecltypeSpecifierAST* ast) {
344352
345353void Binder::bind (EnumeratorAST* ast, const Type* type,
346354 std::optional<ConstValue> value) {
347- auto symbol = control ()->newEnumeratorSymbol (scope (), ast->identifierLoc );
348- ast->symbol = symbol;
355+ if (is_parsing_cxx ()) {
356+ auto symbol = control ()->newEnumeratorSymbol (scope (), ast->identifierLoc );
357+ ast->symbol = symbol;
349358
350- symbol->setName (ast->identifier );
351- symbol->setType (type);
352- ast->symbol ->setValue (value);
353- scope ()->addSymbol (symbol);
359+ symbol->setName (ast->identifier );
360+ symbol->setType (type);
361+ ast->symbol ->setValue (value);
362+ scope ()->addSymbol (symbol);
363+ }
354364
355365 if (auto enumSymbol = symbol_cast<EnumSymbol>(scope ()->owner ())) {
356366 auto enumeratorSymbol =
@@ -361,6 +371,10 @@ void Binder::bind(EnumeratorAST* ast, const Type* type,
361371
362372 auto parentScope = enumSymbol->enclosingScope ();
363373 parentScope->addSymbol (enumeratorSymbol);
374+
375+ if (!is_parsing_cxx ()) {
376+ ast->symbol = enumeratorSymbol;
377+ }
364378 }
365379}
366380
0 commit comments