@@ -400,12 +400,22 @@ TranslationRule::ExprRule *search(const clang::Expr *expr) {
400400 return rule;
401401}
402402
403- TranslationRule::TypeRule *search (clang::QualType qual_type) {
403+ std::pair<TranslationRule::TypeRule *, std::vector<std::optional<std::string>>>
404+ search (clang::QualType qual_type) {
405+ if (auto name = GetNameOfScalarTypedef (qual_type); !name.empty ()) {
406+ auto res = search (types_, name, GetTypeMapKey (name));
407+ if (res.first ) {
408+ log () << " search type " << name
409+ << " , result: " << res.first ->type_info .type << ' \n ' ;
410+ return res;
411+ }
412+ }
404413 auto type = ToString (qual_type);
405- auto [rule, subs] = search (types_, type, GetTypeMapKey (type));
414+ auto res = search (types_, type, GetTypeMapKey (type));
406415 log () << " search type " << type
407- << " , result: " << (rule ? rule->type_info .type : " None" ) << ' \n ' ;
408- return rule;
416+ << " , result: " << (res.first ? res.first ->type_info .type : " None" )
417+ << ' \n ' ;
418+ return res;
409419}
410420
411421void addRulesFromDirectory (const std::filesystem::path &dir, Model model) {
@@ -579,7 +589,7 @@ PushASTContext::PushASTContext(clang::ASTContext &ctx) : prev_(ctx_) {
579589PushASTContext::~PushASTContext () { ctx_ = prev_; }
580590
581591bool Contains (clang::QualType qual_type) {
582- return search (qual_type) != nullptr ;
592+ return search (qual_type). first != nullptr ;
583593}
584594
585595bool Contains (const clang::Expr *expr) { return search (expr) != nullptr ; }
@@ -614,8 +624,7 @@ std::string InstantiateTemplate(const clang::Expr *expr, unsigned n) {
614624}
615625
616626std::string Map (clang::QualType qual_type) {
617- auto type_str = ToString (qual_type);
618- auto [rule, subs] = search (types_, type_str, GetTypeMapKey (type_str));
627+ auto [rule, subs] = search (qual_type);
619628 if (rule) {
620629 for (auto &ty : subs) {
621630 if (ty) {
@@ -628,8 +637,7 @@ std::string Map(clang::QualType qual_type) {
628637}
629638
630639std::string MapInitializer (clang::QualType qual_type) {
631- auto type_str = ToString (qual_type);
632- auto [rule, subs] = search (types_, type_str, GetTypeMapKey (type_str));
640+ auto [rule, subs] = search (qual_type);
633641 if (rule && !rule->initializer .empty ()) {
634642 for (auto &ty : subs) {
635643 if (ty) {
@@ -642,12 +650,12 @@ std::string MapInitializer(clang::QualType qual_type) {
642650}
643651
644652bool MapsToPointer (clang::QualType qual_type) {
645- auto rule = search (qual_type);
653+ auto rule = search (qual_type). first ;
646654 return rule && rule->type_info .is_pointer ();
647655}
648656
649657bool MapsToRefcountPointer (clang::QualType qual_type) {
650- auto rule = search (qual_type);
658+ auto rule = search (qual_type). first ;
651659 return rule && rule->type_info .is_refcount_pointer ;
652660}
653661
0 commit comments