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):
|
def p(self):
|
||||||
print(str(super())[:18])
|
print(str(super())[:18])
|
||||||
A().p()
|
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
|
# delete name
|
||||||
del Class
|
del Class
|
||||||
|
|
||||||
|
# load super method
|
||||||
|
def f(self):
|
||||||
|
super().f()
|
||||||
|
|
|
@ -7,7 +7,7 @@ arg names:
|
||||||
(N_EXC_STACK 0)
|
(N_EXC_STACK 0)
|
||||||
bc=-1 line=1
|
bc=-1 line=1
|
||||||
########
|
########
|
||||||
bc=\\d\+ line=152
|
bc=\\d\+ line=155
|
||||||
00 MAKE_FUNCTION \.\+
|
00 MAKE_FUNCTION \.\+
|
||||||
\\d\+ STORE_NAME f
|
\\d\+ STORE_NAME f
|
||||||
\\d\+ MAKE_FUNCTION \.\+
|
\\d\+ MAKE_FUNCTION \.\+
|
||||||
|
@ -25,6 +25,8 @@ arg names:
|
||||||
\\d\+ CALL_FUNCTION n=2 nkw=0
|
\\d\+ CALL_FUNCTION n=2 nkw=0
|
||||||
\\d\+ STORE_NAME Class
|
\\d\+ STORE_NAME Class
|
||||||
\\d\+ DELETE_NAME Class
|
\\d\+ DELETE_NAME Class
|
||||||
|
\\d\+ MAKE_FUNCTION \.\+
|
||||||
|
\\d\+ STORE_NAME f
|
||||||
\\d\+ LOAD_CONST_NONE
|
\\d\+ LOAD_CONST_NONE
|
||||||
\\d\+ RETURN_VALUE
|
\\d\+ RETURN_VALUE
|
||||||
File cmdline/cmd_showbc.py, code block 'f' (descriptor: \.\+, bytecode @\.\+ bytes)
|
File cmdline/cmd_showbc.py, code block 'f' (descriptor: \.\+, bytecode @\.\+ bytes)
|
||||||
|
@ -428,6 +430,23 @@ arg names:
|
||||||
10 STORE_NAME __qualname__
|
10 STORE_NAME __qualname__
|
||||||
13 LOAD_CONST_NONE
|
13 LOAD_CONST_NONE
|
||||||
14 RETURN_VALUE
|
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)
|
File cmdline/cmd_showbc.py, code block '<genexpr>' (descriptor: \.\+, bytecode @\.\+ bytes)
|
||||||
Raw bytecode (code_info_size=\\d\+, bytecode_size=\\d\+):
|
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