From 8079b828132a97622d4516ded0dbcd4d992ae5f1 Mon Sep 17 00:00:00 2001 From: blueloveTH Date: Fri, 19 Jan 2024 18:09:42 +0800 Subject: [PATCH] ... --- include/pocketpy/expr.h | 5 ++--- src/compiler.cpp | 2 +- src/expr.cpp | 12 ++++-------- 3 files changed, 7 insertions(+), 12 deletions(-) diff --git a/include/pocketpy/expr.h b/include/pocketpy/expr.h index 701ce8aa..b337289c 100644 --- a/include/pocketpy/expr.h +++ b/include/pocketpy/expr.h @@ -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; diff --git a/src/compiler.cpp b/src/compiler.cpp index a72018bc..12a7ca5e 100644 --- a/src/compiler.cpp +++ b/src/compiler.cpp @@ -415,7 +415,7 @@ namespace pkpy{ void Compiler::exprAttrib() { consume(TK("@id")); ctx()->s_expr.push( - make_expr(ctx()->s_expr.popx(), prev().str()) + make_expr(ctx()->s_expr.popx(), StrName::get(prev().sv())) ); } diff --git a/src/expr.cpp b/src/expr.cpp index 0c274aec..208c78b4 100644 --- a/src/expr.cpp +++ b/src/expr.cpp @@ -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) {