tests: Add tests for calling super and loading a method directly.
This commit is contained in:
parent
dd11af209d
commit
30badd1ce1
|
@ -20,3 +20,17 @@ class A:
|
|||
def p(self):
|
||||
print(str(super())[:18])
|
||||
A().p()
|
||||
|
||||
|
||||
# test compiler's handling of long expressions with super
|
||||
class A:
|
||||
bar = 123
|
||||
def foo(self):
|
||||
print('A foo')
|
||||
return [1, 2, 3]
|
||||
class B(A):
|
||||
def foo(self):
|
||||
print('B foo')
|
||||
print(super().bar) # accessing attribute after super()
|
||||
return super().foo().count(2) # calling a subsequent method
|
||||
print(B().foo())
|
||||
|
|
|
@ -150,3 +150,7 @@ class Class:
|
|||
|
||||
# delete name
|
||||
del Class
|
||||
|
||||
# load super method
|
||||
def f(self):
|
||||
super().f()
|
||||
|
|
|
@ -7,7 +7,7 @@ arg names:
|
|||
(N_EXC_STACK 0)
|
||||
bc=-1 line=1
|
||||
########
|
||||
bc=\\d\+ line=152
|
||||
bc=\\d\+ line=155
|
||||
00 MAKE_FUNCTION \.\+
|
||||
\\d\+ STORE_NAME f
|
||||
\\d\+ MAKE_FUNCTION \.\+
|
||||
|
@ -25,6 +25,8 @@ arg names:
|
|||
\\d\+ CALL_FUNCTION n=2 nkw=0
|
||||
\\d\+ STORE_NAME Class
|
||||
\\d\+ DELETE_NAME Class
|
||||
\\d\+ MAKE_FUNCTION \.\+
|
||||
\\d\+ STORE_NAME f
|
||||
\\d\+ LOAD_CONST_NONE
|
||||
\\d\+ RETURN_VALUE
|
||||
File cmdline/cmd_showbc.py, code block 'f' (descriptor: \.\+, bytecode @\.\+ bytes)
|
||||
|
@ -428,6 +430,23 @@ arg names:
|
|||
10 STORE_NAME __qualname__
|
||||
13 LOAD_CONST_NONE
|
||||
14 RETURN_VALUE
|
||||
File cmdline/cmd_showbc.py, code block 'f' (descriptor: \.\+, bytecode @\.\+ bytes)
|
||||
Raw bytecode (code_info_size=\\d\+, bytecode_size=\\d\+):
|
||||
########
|
||||
\.\+5b
|
||||
arg names: self
|
||||
(N_STATE 4)
|
||||
(N_EXC_STACK 0)
|
||||
bc=-1 line=1
|
||||
bc=0 line=156
|
||||
00 LOAD_GLOBAL super (cache=0)
|
||||
\\d\+ LOAD_GLOBAL __class__ (cache=0)
|
||||
\\d\+ LOAD_FAST 0
|
||||
\\d\+ LOAD_SUPER_METHOD f
|
||||
\\d\+ CALL_METHOD n=0 nkw=0
|
||||
\\d\+ POP_TOP
|
||||
\\d\+ LOAD_CONST_NONE
|
||||
\\d\+ RETURN_VALUE
|
||||
File cmdline/cmd_showbc.py, code block '<genexpr>' (descriptor: \.\+, bytecode @\.\+ bytes)
|
||||
Raw bytecode (code_info_size=\\d\+, bytecode_size=\\d\+):
|
||||
########
|
||||
|
|
|
@ -0,0 +1,17 @@
|
|||
# test super() operations which don't require allocation
|
||||
import micropython
|
||||
|
||||
class A:
|
||||
def foo(self):
|
||||
print('A foo')
|
||||
return 42
|
||||
class B(A):
|
||||
def foo(self):
|
||||
print('B foo')
|
||||
print(super().foo())
|
||||
|
||||
b = B()
|
||||
|
||||
micropython.heap_lock()
|
||||
b.foo()
|
||||
micropython.heap_unlock()
|
|
@ -0,0 +1,3 @@
|
|||
B foo
|
||||
A foo
|
||||
42
|
Loading…
Reference in New Issue