Blame tests/run/cpp_call_stack_allocated.srctree
|
Packit |
562c7a |
# tag: cpp
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
PYTHON setup.py build_ext --inplace
|
|
Packit |
562c7a |
PYTHON -c "from call_stack_allocated import test; test()"
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
######## setup.py ########
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
from distutils.core import setup
|
|
Packit |
562c7a |
from Cython.Build import cythonize
|
|
Packit |
562c7a |
setup(ext_modules=cythonize('*.pyx', language='c++'))
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
######## call.cpp ########
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
class wint {
|
|
Packit |
562c7a |
public:
|
|
Packit |
562c7a |
long long val;
|
|
Packit |
562c7a |
wint() { val = 0; }
|
|
Packit |
562c7a |
wint(long long val) { this->val = val; }
|
|
Packit |
562c7a |
long long &operator()() { return this->val; }
|
|
Packit |
562c7a |
long long operator()(long long i) { return this->val + i; }
|
|
Packit |
562c7a |
long long operator()(long long i, long long j) { return this->val + i + j; }
|
|
Packit |
562c7a |
};
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
######## call.pxd ########
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
cdef extern from "call.cpp" nogil:
|
|
Packit |
562c7a |
cppclass wint:
|
|
Packit |
562c7a |
long long val
|
|
Packit |
562c7a |
wint()
|
|
Packit |
562c7a |
wint(long long val)
|
|
Packit |
562c7a |
long long& operator()()
|
|
Packit |
562c7a |
long long operator()(long long i)
|
|
Packit |
562c7a |
long long operator()(long long i, long long j)
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
######## call_stack_allocated.pyx ########
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
from call cimport wint
|
|
Packit |
562c7a |
def test():
|
|
Packit |
562c7a |
cdef wint a = wint(4)
|
|
Packit |
562c7a |
cdef long long b = 3
|
|
Packit |
562c7a |
b = a()
|
|
Packit |
562c7a |
assert b == 4
|
|
Packit |
562c7a |
b = a(1ll)
|
|
Packit |
562c7a |
assert b == 5
|
|
Packit |
562c7a |
b = a(1ll, 1ll)
|
|
Packit |
562c7a |
assert b == 6
|
|
Packit |
562c7a |
|