Commit 951baff4 authored by Robert Bradshaw's avatar Robert Bradshaw

merge

parents b5f87b17 21dbe229
......@@ -123,7 +123,7 @@ static PyObject* __Pyx_PyRun(PyObject* o, PyObject* globals, PyObject* locals) {
"code object passed to exec() may not contain free variables");
goto bad;
}
#if PY_VERSION_HEX < 0x030200A4
#if PY_VERSION_HEX < 0x030200B1
result = PyEval_EvalCode((PyCodeObject *)o, globals, locals);
#else
result = PyEval_EvalCode(o, globals, locals);
......
cimport cython
cdef class UtilityCode:
cdef public object proto
cdef public object impl
......@@ -9,14 +11,14 @@ cdef class UtilityCode:
cdef public list specialize_list
cdef public object proto_block
cpdef put_code(self, dict output)
cpdef put_code(self, output)
cdef class FunctionState:
cdef public set names_taken
cdef public object owner
cdef public object error_label
cdef public Py_ssize_t label_counter
cdef public size_t label_counter
cdef public set labels_used
cdef public object return_label
cdef public object continue_label
......@@ -30,8 +32,10 @@ cdef class FunctionState:
cdef public list temps_allocated
cdef public dict temps_free
cdef public dict temps_used_type
cdef public Py_ssize_t temp_counter
cdef public size_t temp_counter
@cython.locals(n=size_t)
cpdef new_label(self, name=*)
cpdef tuple get_loop_labels(self)
cpdef set_loop_labels(self, labels)
cpdef tuple get_all_labels(self)
......@@ -54,6 +58,9 @@ cdef class StringConst:
cdef public object escaped_value
cdef public dict py_strings
@cython.locals(intern=bint, is_str=bint, is_unicode=bint)
cpdef get_py_string_const(self, encoding, identifier=*, is_str=*)
## cdef class PyStringConst:
## cdef public object cname
## cdef public object encoding
......
......@@ -293,6 +293,8 @@ class PyObjectConst(object):
self.cname = cname
self.type = type
cython.declare(possible_unicode_identifier=object, possible_bytes_identifier=object,
nice_identifier=object, find_alphanums=object)
possible_unicode_identifier = re.compile(ur"(?![0-9])\w+$", re.U).match
possible_bytes_identifier = re.compile(r"(?![0-9])\w+$".encode('ASCII')).match
nice_identifier = re.compile(r'\A[a-zA-Z0-9_]+\Z').match
......
......@@ -104,7 +104,7 @@ cdef p_if_clause(PyrexScanner s)
cdef p_else_clause(PyrexScanner s)
cdef p_while_statement(PyrexScanner s)
cdef p_for_statement(PyrexScanner s)
cpdef p_for_bounds(PyrexScanner s, bint allow_testlist = *)
cpdef dict p_for_bounds(PyrexScanner s, bint allow_testlist = *)
cdef p_for_from_relation(PyrexScanner s)
cdef p_for_from_step(PyrexScanner s)
cdef p_target(PyrexScanner s, terminator)
......
......@@ -877,8 +877,7 @@ def p_comp_for(s, body):
pos = s.position()
s.next()
kw = p_for_bounds(s, allow_testlist=False)
kw['else_clause'] = None
kw['body'] = p_comp_iter(s, body)
kw.update(dict(else_clause = None, body = p_comp_iter(s, body)))
return Nodes.ForStatNode(pos, **kw)
def p_comp_if(s, body):
......@@ -1372,8 +1371,9 @@ def p_for_statement(s):
pos = s.position()
s.next()
kw = p_for_bounds(s, allow_testlist=True)
kw['body'] = p_suite(s)
kw['else_clause'] = p_else_clause(s)
body = p_suite(s)
else_clause = p_else_clause(s)
kw.update(dict(body = body, else_clause = else_clause))
return Nodes.ForStatNode(pos, **kw)
def p_for_bounds(s, allow_testlist=True):
......@@ -1381,7 +1381,7 @@ def p_for_bounds(s, allow_testlist=True):
if s.sy == 'in':
s.next()
iterator = p_for_iterator(s, allow_testlist)
return { 'target': target, 'iterator': iterator }
return dict( target = target, iterator = iterator )
elif not s.in_python_file:
if s.sy == 'from':
s.next()
......@@ -1408,12 +1408,13 @@ def p_for_bounds(s, allow_testlist=True):
if rel1[0] != rel2[0]:
error(rel2_pos,
"Relation directions in for-from do not match")
return {'target': target,
'bound1': bound1,
'relation1': rel1,
'relation2': rel2,
'bound2': bound2,
'step': step }
return dict(target = target,
bound1 = bound1,
relation1 = rel1,
relation2 = rel2,
bound2 = bound2,
step = step,
)
else:
s.expect('in')
return {}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment