def parse(src): tokgen = tokenizer(src) while True: tok = utils.iter_next(tokgen) if tok[1] == '(': symbols = [] while True: tok = utils.iter_next(tokgen) if tok[1] == ')': break elif tok[0] == tokenize.NAME: symbols.append(tok[1]) elif tok[1] == ',': continue else: raise ValueError('bad token in signature "%s"' % tok[1]) yield tuple(symbols) tok = utils.iter_next(tokgen) if tok[1] == ',': continue elif tokenize.ISEOF(tok[0]): break elif tokenize.ISEOF(tok[0]): break else: raise ValueError('bad token in signature "%s"' % tok[1])
def service(self): """ Request for the service task. Servicing is disabled if it is disabled thourght the "enabled" attribute. When the task is executing, the service is disabled to avoid recursion. """ if self.enabled: enable = self.enabled try: # Prevent recursion self.enabled = False iter_next(self._task) finally: self.enabled = enable
def _insert_phi(self): if self.dfainfo.incomings: assert len(self.dfainfo.incomings) == 1 incomings = self.cfa.blocks[self.current_block_offset].incoming phivar = self.dfainfo.incomings[0] if len(incomings) == 1: ib = utils.iter_next(iter(incomings)) lingering = self.dfa.infos[ib].stack assert len(lingering) == 1 iv = lingering[0] self.store(self.get(iv), phivar) else: # Invert the PHI node for ib in incomings: lingering = self.dfa.infos[ib].stack assert len(lingering) == 1 iv = lingering[0] # Add assignment in incoming block to forward the value target = self.current_scope.get_or_define('$phi' + phivar, loc=self.loc) stmt = ir.Assign(value=self.get(iv), target=target, loc=self.loc) self.blocks[ib].insert_before_terminator(stmt) self.store(target, phivar)
def read_arg(self, size): buf = 0 for i in range(size): _offset, byte = utils.iter_next(self.iter) buf |= byte << (8 * i) return buf
def tokenizer(src): def readline(): yield src gen = readline() return tokenize.generate_tokens(lambda: utils.iter_next(gen))
def __init__(self, name="unnamed", arg=None): self.name = name self.enabled = True self.arg = arg self._task = self.process(self.arg) iter_next(self._task)