@@ -2154,7 +2154,7 @@ bool ConverterRefCount::ConvertCXXOperatorCallExpr(
21542154 pending_deref_.set (std::format (" ({} as {}).offset({})" ,
21552155 ConvertObject (expr->getArg (0 )),
21562156 ConvertPtrType (expr->getArg (0 )->getType ()),
2157- ConvertRValue (expr->getArg (1 ))),
2157+ ConvertSubscriptIndex (expr->getArg (1 ))),
21582158 expr);
21592159 break ;
21602160 }
@@ -2174,7 +2174,7 @@ bool ConverterRefCount::ConvertCXXOperatorCallExpr(
21742174 StrCat (std::format (" ({} as {}).offset({})" ,
21752175 ConvertObject (expr->getArg (0 )),
21762176 ConvertPtrType (expr->getArg (0 )->getType ()),
2177- ConvertRValue (expr->getArg (1 ))));
2177+ ConvertSubscriptIndex (expr->getArg (1 ))));
21782178
21792179 if (is_inner_boxed) {
21802180 StrCat (GetPointerDerefSuffix (expr->getType ()), " .as_pointer()" );
@@ -2209,6 +2209,14 @@ void ConverterRefCount::ConvertFunctionParameters(clang::FunctionDecl *decl) {
22092209 }
22102210}
22112211
2212+ std::string ConverterRefCount::ConvertSubscriptIndex (clang::Expr *idx) {
2213+ auto str = ConvertRValue (idx);
2214+ if (idx->getType ()->isEnumeralType ()) {
2215+ return std::format (" ({}) as isize" , str);
2216+ }
2217+ return str;
2218+ }
2219+
22122220void ConverterRefCount::ConvertArraySubscript (clang::Expr *base,
22132221 clang::Expr *idx,
22142222 clang::QualType type) {
@@ -2225,7 +2233,7 @@ void ConverterRefCount::ConvertArraySubscript(clang::Expr *base,
22252233 StrCat (std::format (" ({} as {}).offset({})" ,
22262234 ToString (base->IgnoreImplicit ()),
22272235 ConvertPtrType (base->IgnoreImplicit ()->getType ()),
2228- ConvertRValue (idx)));
2236+ ConvertSubscriptIndex (idx)));
22292237
22302238 if (is_inner_boxed) {
22312239 StrCat (GetPointerDerefSuffix (type), " .as_pointer()" );
0 commit comments