Example #1
0
 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])
Example #2
0
 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])
Example #3
0
 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
Example #4
0
    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)
Example #5
0
    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)
Example #6
0
 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
Example #7
0
 def tokenizer(src):
     def readline():
         yield src
     gen = readline()
     return tokenize.generate_tokens(lambda: utils.iter_next(gen))
Example #8
0
 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
Example #9
0
    def tokenizer(src):
        def readline():
            yield src

        gen = readline()
        return tokenize.generate_tokens(lambda: utils.iter_next(gen))
Example #10
0
 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)