From b520abf7a277500135860740b454a91579bc6667 Mon Sep 17 00:00:00 2001 From: BLUELOVETH Date: Fri, 7 Jul 2023 18:15:58 +0800 Subject: [PATCH] fix: super class can be an expression --- src/compiler.cpp | 14 +++++++++----- tests/40_class.py | 4 ++-- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/compiler.cpp b/src/compiler.cpp index 458c44a2..aaccef68 100644 --- a/src/compiler.cpp +++ b/src/compiler.cpp @@ -830,15 +830,19 @@ __SUBSCR_END: void Compiler::compile_class(){ consume(TK("@id")); int namei = StrName(prev().str()).index; - int super_namei = -1; + Expr_ base = nullptr; if(match(TK("("))){ - if(match(TK("@id"))){ - super_namei = StrName(prev().str()).index; + if(is_expression()){ + EXPR(); + base = ctx()->s_expr.popx(); } consume(TK(")")); } - if(super_namei == -1) ctx()->emit(OP_LOAD_NONE, BC_NOARG, prev().line); - else ctx()->emit(OP_LOAD_GLOBAL, super_namei, prev().line); + if(base == nullptr){ + ctx()->emit(OP_LOAD_NONE, BC_NOARG, prev().line); + }else { + base->emit(ctx()); + } ctx()->emit(OP_BEGIN_CLASS, namei, BC_KEEPLINE); ctx()->is_compiling_class = true; compile_block_body(); diff --git a/tests/40_class.py b/tests/40_class.py index eb1b96af..80947df0 100644 --- a/tests/40_class.py +++ b/tests/40_class.py @@ -92,9 +92,9 @@ class B(A): assert B.b == 3 assert B.c == 4 -from c import void_p +import c -class A(void_p): +class A(c.void_p): pass a = A()