def make_demand_func(query): func = N.get_query_demand_func_name(query.name) uset = N.get_query_demand_set_name(query.name) maxsize = query.demand_set_maxsize if maxsize is None: code = L.Parser.ps(''' def _FUNC(_elem): if _elem not in _U: _U.reladd(_elem) ''', subst={'_FUNC': func, '_U': uset}) elif maxsize == 1: code = L.Parser.ps(''' def _FUNC(_elem): if _elem not in _U: _U.relclear() _U.reladd(_elem) ''', subst={'_FUNC': func, '_U': uset}) elif not isinstance(maxsize, int) or maxsize <= 0: raise L.ProgramError('Invalid value for demand_set_maxsize') else: code = L.Parser.ps(''' def _FUNC(_elem): if _elem not in _U: while len(_U) >= _MAXSIZE: _stale = _U.peek() _U.relremove(_stale) _U.reladd(_elem) ''', subst={'_FUNC': func, '_U': uset, '_MAXSIZE': L.Num(maxsize)}) return code
def add_demand_function_call(self, query_sym, query_node, ann): """Return a Query node wrapped with a call to a demand function, if needed. """ # Skip if there's no demand set associated with this query. if query_sym.name not in self.queries_with_usets: return query_node # Skip if we have a nodemand annotation. if ann is not None and ann.get('nodemand', False): return query_node demand_call = L.Call(N.get_query_demand_func_name(query_sym.name), [L.tuplify(query_sym.demand_params)]) return L.FirstThen(demand_call, query_node)
def add_demand_function_call(self, query_sym, query_node, ann): """Return a Query node wrapped with a call to a demand function, if needed. """ # Skip if there's no demand set associated with this query. if query_sym.name not in self.queries_with_usets: return query_node # Skip if we have a nodemand annotation. if ann is not None and ann.get('nodemand', False): return query_node demand_call = L.Call(N.get_query_demand_func_name(query_sym.name), [L.tuplify(query_sym.demand_params)]) return L.FirstThen(demand_call, query_node)
def make_demand_func(query): func = N.get_query_demand_func_name(query.name) uset = N.get_query_demand_set_name(query.name) maxsize = query.demand_set_maxsize if maxsize is None: code = L.Parser.ps(''' def _FUNC(_elem): if _elem not in _U: _U.reladd(_elem) ''', subst={ '_FUNC': func, '_U': uset }) elif maxsize == 1: code = L.Parser.ps(''' def _FUNC(_elem): if _elem not in _U: _U.relclear() _U.reladd(_elem) ''', subst={ '_FUNC': func, '_U': uset }) elif not isinstance(maxsize, int) or maxsize <= 0: raise L.ProgramError('Invalid value for demand_set_maxsize') else: code = L.Parser.ps(''' def _FUNC(_elem): if _elem not in _U: while len(_U) >= _MAXSIZE: _stale = _U.peek() _U.relremove(_stale) _U.reladd(_elem) ''', subst={ '_FUNC': func, '_U': uset, '_MAXSIZE': L.Num(maxsize) }) return code