# HG changeset patch # User Paul Boddie # Date 1490029118 -3600 # Node ID bcb741e16ed8f74535cca8888dfc4d2b95354231 # Parent d4dd452dd7ce4e860ee1db6841684393cf2620fc Avoid getting the context from a target to then check it against the target. diff -r d4dd452dd7ce -r bcb741e16ed8 templates/ops.c --- a/templates/ops.c Mon Mar 20 17:24:28 2017 +0100 +++ b/templates/ops.c Mon Mar 20 17:58:38 2017 +0100 @@ -308,6 +308,11 @@ return value.value ? value : callable; } +__attr (*__get_function_unchecked(__attr target))(__attr[]) +{ + return __load_via_object(__unwrap_callable(target).value, __fn__).fn; +} + __attr (*__get_function(__ref context, __attr target))(__attr[]) { target = __unwrap_callable(target); diff -r d4dd452dd7ce -r bcb741e16ed8 templates/ops.h --- a/templates/ops.h Mon Mar 20 17:24:28 2017 +0100 +++ b/templates/ops.h Mon Mar 20 17:58:38 2017 +0100 @@ -108,6 +108,7 @@ /* Context testing for invocations. */ __attr __unwrap_callable(__attr callable); +__attr (*__get_function_unchecked(__attr target))(__attr[]); __attr (*__get_function(__ref context, __attr target))(__attr[]); __attr (*__check_and_get_function(__ref context, __attr target))(__attr[]); diff -r d4dd452dd7ce -r bcb741e16ed8 translator.py --- a/translator.py Mon Mar 20 17:24:28 2017 +0100 +++ b/translator.py Mon Mar 20 17:58:38 2017 +0100 @@ -1262,6 +1262,8 @@ if have_access_context: stages.append("__get_function(%s, %s)" % ( context_identity, target_var)) + elif context_var == target_var: + stages.append("__get_function_unchecked(%s)" % target_var) else: stages.append("__get_function(__CONTEXT_AS_VALUE(%s).value, %s)" % ( context_var, target_var))