Skip to content
Snippets Groups Projects
Commit 3e85d7d3 authored by Andreas Klöckner's avatar Andreas Klöckner
Browse files

Check that contexts match in wrapper

parent 93bb6a15
No related branches found
No related tags found
No related merge requests found
...@@ -1088,6 +1088,15 @@ def write_method_wrapper(gen, cls_name, meth): ...@@ -1088,6 +1088,15 @@ def write_method_wrapper(gen, cls_name, meth):
ret_vals = [] ret_vals = []
ret_descrs = [] ret_descrs = []
def emit_context_check(arg_idx, arg_name):
if arg_idx == 0:
pre_call("_ctx_data = {arg_name}._ctx_data".format(arg_name=arg_name))
else:
pre_call("""
if _ctx_data != {arg_name}._ctx_data:
raise Error("mismatched context in {arg_name}")
""".format(arg_name=arg_name))
arg_idx = 0 arg_idx = 0
while arg_idx < len(meth.args): while arg_idx < len(meth.args):
arg = meth.args[arg_idx] arg = meth.args[arg_idx]
...@@ -1178,11 +1187,18 @@ def write_method_wrapper(gen, cls_name, meth): ...@@ -1178,11 +1187,18 @@ def write_method_wrapper(gen, cls_name, meth):
# {{{ val input argument # {{{ val input argument
val_name = "_val_" + arg.name val_name = "_val_" + arg.name
fmt_args = dict(
arg0_name=meth.args[0].name,
name=arg.name,
val_name=val_name)
pre_call(""" pre_call("if isinstance({name}, Val):".format(**fmt_args))
if isinstance({name}, Val):
{val_name} = {name}._copy()
with Indentation(pre_call):
emit_context_check(arg_idx, arg.name)
pre_call("{val_name} = {name}._copy()".format(**fmt_args))
pre_call("""
elif isinstance({name}, six.integer_types): elif isinstance({name}, six.integer_types):
_cdata_{name} = lib.isl_val_int_from_si( _cdata_{name} = lib.isl_val_int_from_si(
{arg0_name}._get_ctx_data(), {name}) {arg0_name}._get_ctx_data(), {name})
...@@ -1196,10 +1212,7 @@ def write_method_wrapper(gen, cls_name, meth): ...@@ -1196,10 +1212,7 @@ def write_method_wrapper(gen, cls_name, meth):
raise IslTypeError("{name} is a %s and cannot " raise IslTypeError("{name} is a %s and cannot "
"be cast to a Val" % type({name})) "be cast to a Val" % type({name}))
""" """
.format( .format(**fmt_args))
arg0_name=meth.args[0].name,
name=arg.name,
val_name=val_name))
if arg.semantics is SEM_TAKE: if arg.semantics is SEM_TAKE:
passed_args.append(val_name + "._release()") passed_args.append(val_name + "._release()")
...@@ -1223,6 +1236,8 @@ def write_method_wrapper(gen, cls_name, meth): ...@@ -1223,6 +1236,8 @@ def write_method_wrapper(gen, cls_name, meth):
""" """
.format(name=arg.name, py_cls=arg_py_cls)) .format(name=arg.name, py_cls=arg_py_cls))
emit_context_check(arg_idx, arg.name)
arg_cls = arg.base_type[4:] arg_cls = arg.base_type[4:]
arg_descr = ":param %s: :class:`%s`" % ( arg_descr = ":param %s: :class:`%s`" % (
arg.name, isl_class_to_py_class(arg_cls)) arg.name, isl_class_to_py_class(arg_cls))
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment