tests: Add tests for calling super and loading a method directly.

This commit is contained in:
Damien George 2017-04-19 09:49:48 +10:00
parent dd11af209d
commit 30badd1ce1
5 changed files with 58 additions and 1 deletions

View File

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

View File

@ -150,3 +150,7 @@ class Class:
# delete name # delete name
del Class del Class
# load super method
def f(self):
super().f()

View File

@ -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\+):
######## ########

View File

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

View File

@ -0,0 +1,3 @@
B foo
A foo
42