This commit is contained in:
blueloveTH 2024-01-19 18:09:42 +08:00
parent 47a22c495f
commit 8079b82813
3 changed files with 7 additions and 12 deletions

View File

@ -276,9 +276,8 @@ struct SubscrExpr: Expr{
struct AttribExpr: Expr{
Expr_ a;
Str b;
AttribExpr(Expr_ a, const Str& b): a(std::move(a)), b(b) {}
AttribExpr(Expr_ a, Str&& b): a(std::move(a)), b(std::move(b)) {}
StrName b;
AttribExpr(Expr_ a, StrName b): a(std::move(a)), b(b) {}
void emit_(CodeEmitContext* ctx) override;
bool emit_del(CodeEmitContext* ctx) override;

View File

@ -415,7 +415,7 @@ namespace pkpy{
void Compiler::exprAttrib() {
consume(TK("@id"));
ctx()->s_expr.push(
make_expr<AttribExpr>(ctx()->s_expr.popx(), prev().str())
make_expr<AttribExpr>(ctx()->s_expr.popx(), StrName::get(prev().sv()))
);
}

View File

@ -533,28 +533,24 @@ namespace pkpy{
void AttribExpr::emit_(CodeEmitContext* ctx){
a->emit_(ctx);
int index = StrName(b).index;
ctx->emit_(OP_LOAD_ATTR, index, line);
ctx->emit_(OP_LOAD_ATTR, b.index, line);
}
bool AttribExpr::emit_del(CodeEmitContext* ctx) {
a->emit_(ctx);
int index = StrName(b).index;
ctx->emit_(OP_DELETE_ATTR, index, line);
ctx->emit_(OP_DELETE_ATTR, b.index, line);
return true;
}
bool AttribExpr::emit_store(CodeEmitContext* ctx){
a->emit_(ctx);
int index = StrName(b).index;
ctx->emit_(OP_STORE_ATTR, index, line);
ctx->emit_(OP_STORE_ATTR, b.index, line);
return true;
}
void AttribExpr::emit_method(CodeEmitContext* ctx) {
a->emit_(ctx);
int index = StrName(b).index;
ctx->emit_(OP_LOAD_METHOD, index, line);
ctx->emit_(OP_LOAD_METHOD, b.index, line);
}
void CallExpr::emit_(CodeEmitContext* ctx) {