blueloveTH 2 ani în urmă
părinte
comite
8079b82813
3 a modificat fișierele cu 7 adăugiri și 12 ștergeri
  1. 2 3
      include/pocketpy/expr.h
  2. 1 1
      src/compiler.cpp
  3. 4 8
      src/expr.cpp

+ 2 - 3
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;

+ 1 - 1
src/compiler.cpp

@@ -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()))
         );
     }
     

+ 4 - 8
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) {