# HG changeset patch # User FUJIWARA Katsunori # Date 1392461546 -32400 # Node ID 0e8417131a29e203936accde7a3ecf4db27cc27e # Parent 8c210b169c694f654414a977a59cb5e4c34eb48f util: add the code path to "cachefunc()" for the function taking no arguments Before this patch, "util.cachefunc()" caches the value returned by the specified function into dictionary "cache", even if the specified function takes no arguments. In such case, "cache" has at most one entry, and distinction between entries in "cache" is meaningless. This patch adds the code path to "cachefunc()" for the function taking no arguments for efficiency: to store only one cached value, using list "cache" is a little faster than using dictionary "cache". diff -r 8c210b169c69 -r 0e8417131a29 mercurial/util.py --- a/mercurial/util.py Wed Mar 26 12:52:57 2014 -0500 +++ b/mercurial/util.py Sat Feb 15 19:52:26 2014 +0900 @@ -188,6 +188,13 @@ def cachefunc(func): '''cache the result of function calls''' # XXX doesn't handle keywords args + if func.func_code.co_argcount == 0: + cache = [] + def f(): + if len(cache) == 0: + cache.append(func()) + return cache[0] + return f cache = {} if func.func_code.co_argcount == 1: # we gain a small amount of time because