@@ -383,9 +383,15 @@ bool Converter::ConvertVarDeclSkipInit(clang::VarDecl *decl) {
383383 return false ;
384384 }
385385 StrCat (AccessSpecifierAsString (decl->getAccess ()), keyword::kStatic );
386+ if (!qual_type.isConstQualified ()) {
387+ StrCat (keyword_mut_);
388+ }
386389 ENSURE (decl_ids_.insert (GetID (decl)).second );
387390 } else if (decl->isStaticLocal ()) {
388391 StrCat (keyword::kStatic );
392+ if (!qual_type.isConstQualified ()) {
393+ StrCat (keyword_mut_);
394+ }
389395 } else if (decl->isLocalVarDecl ()) {
390396 StrCat (keyword::kLet );
391397 }
@@ -2679,18 +2685,18 @@ std::string Converter::GetDefaultAsString(clang::QualType qual_type) {
26792685}
26802686
26812687std::string Converter::GetDefaultAsStringFallback (clang::QualType qual_type) {
2682- static llvm::DenseMap<unsigned , std::string> default_for_type = {
2683- {clang::BuiltinType::Char_U, " 0_u8" },
2684- {clang::BuiltinType::SChar, " 0_i8" },
2685- {clang::BuiltinType::UChar, " 0_u8" },
2686- };
2687-
26882688 qual_type = qual_type.getUnqualifiedType ().getCanonicalType ();
2689- if (auto builtin = qual_type->getAs <clang::BuiltinType>()) {
2690- auto it = default_for_type.find (builtin->getKind ());
2691- if (it != default_for_type.end ()) {
2692- return it->second ;
2693- }
2689+
2690+ if (qual_type->isBooleanType ()) {
2691+ return " false" ;
2692+ }
2693+
2694+ if (qual_type->isIntegerType () && !qual_type->isEnumeralType ()) {
2695+ return std::format (" 0_{}" , ToString (qual_type));
2696+ }
2697+
2698+ if (qual_type->isFloatingType ()) {
2699+ return std::format (" 0.0_{}" , ToString (qual_type));
26942700 }
26952701
26962702 return std::format (" <{}>::default()" , ToString (qual_type));
0 commit comments