diff --git a/src/ceval.cpp b/src/ceval.cpp index 35445ce2..5810acd6 100644 --- a/src/ceval.cpp +++ b/src/ceval.cpp @@ -95,7 +95,7 @@ bool VM::py_ge(PyVar _0, PyVar _1){ #define DISPATCH() { frame->_ip++; goto __NEXT_STEP; } #define DISPATCH_JUMP(__target) { frame->_ip = __target; goto __NEXT_STEP; } -#define RETURN_OP_YIELD() { frame->_ip++; return PY_OP_YIELD; } +#define RETURN_OP_YIELD() { return PY_OP_YIELD; } PyVar VM::__run_top_frame(){ Frame* frame = &callstack.top(); diff --git a/tests/04_str.py b/tests/04_str.py index c9c78eac..79778a77 100644 --- a/tests/04_str.py +++ b/tests/04_str.py @@ -106,11 +106,6 @@ def test(*seq): return s1.join(seq) assert test("r", "u", "n", "o", "o", "b") == "r-u-n-o-o-b" -def f(): - for i in range(5): - yield str(i) -assert '|'.join(f()) == '0|1|2|3|4' - num = 6 assert str(num) == '6' diff --git a/tests/45_yield.py b/tests/45_yield.py index 201d4a60..39342b40 100644 --- a/tests/45_yield.py +++ b/tests/45_yield.py @@ -1,3 +1,11 @@ +def g(): + yield 1 + yield 2 + +a = g() +assert next(a) == 1 +assert next(a) == 2 + def f(n): for i in range(n): yield i @@ -38,6 +46,13 @@ def f(): a = [i for i in f()] assert a == [1, 2, 3] + +def f(): + for i in range(5): + yield str(i) +assert '|'.join(f()) == '0|1|2|3|4' + + def f(n): for i in range(n): yield i