# HG changeset patch # User Paul Boddie # Date 1384628655 -3600 # Node ID 80441a32ce4110deec47d04af04581ae336a441d # Parent 05ca9a5f6cb2c335cbc9310357e6a7f9e7fdbcdf Avoid production of context and value lists where only one result is needed. diff -r 05ca9a5f6cb2 -r 80441a32ce41 micropython/data.py --- a/micropython/data.py Sat Nov 16 15:53:25 2013 +0100 +++ b/micropython/data.py Sat Nov 16 20:04:15 2013 +0100 @@ -388,6 +388,12 @@ # Program data structures. +def only(s): + if len(s) == 1: + for i in s: + return i + return None + class BaseAttr: "A basic attribute entry." @@ -418,8 +424,9 @@ "Get the context referenced by the attribute." - if self.get_assignments() == 1 and len(self.get_context_values()) == 1: - return self.get_contexts()[0] + if self.get_assignments() == 1: + context_value = only(self.get_context_values()) + return context_value and context_value[0] else: return None @@ -427,8 +434,9 @@ "Get the value referenced by the attribute." - if self.get_assignments() == 1 and len(self.get_context_values()) == 1: - return self.get_values()[0] + if self.get_assignments() == 1: + context_value = only(self.get_context_values()) + return context_value and context_value[1] else: return None