// 那个, 数组下标调用. ExprASTPtr ArrayExprOperation::operator_call(ASTContext ctx, NamedExprASTPtr target, ExprListASTPtr callargslist) { llvm::IRBuilder<> builder(ctx.block); debug("array index\n"); // 获得数组地址. llvm::Value * arrayptr = target->getptr(ctx); // 获得下标. llvm::Value * index = callargslist->expression_list.begin()->get()->getval(ctx); // 调用数组下标函数. llvm::Constant * func_qb_array_at = qbc::getbuiltinprotype(ctx,"btr_qbarray_at"); llvm::Value * tmpval = builder.CreateCall(func_qb_array_at, {arrayptr, index}); ArrayExprTypeAST * realtarget =dynamic_cast<ArrayExprTypeAST*>(target->nameresolve(ctx)->type.get()); debug("realtarget is %p\n",realtarget); ExprASTPtr tmp = realtarget->elementtype->createtemp(ctx,NULL, tmpval); debug("array index, little tmp created as %p\n",tmp.get()); return tmp; exit(100); }