Changeset 71cede0 in rtems-tools


Ignore:
Timestamp:
Nov 25, 2018, 10:56:50 PM (6 months ago)
Author:
Chris Johns <chrisj@…>
Branches:
master
Children:
af5cecf
Parents:
f632bd8
Message:

tester/gdb: mi_parser, fix on Python3 and remove globals

  • Fix mi_parser on Python3. Python3 does not support the cmp operator and rich comparision operators are required, See PEP 207.
  • Remove the global variables and make a class containing them. Update the gdb class to use the mi_parser session class. Removing the globals means the global lock in the gdb module can be removed.
Location:
tester/rt
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • tester/rt/gdb.py

    rf632bd8 r71cede0  
    5252import pygdb
    5353
    54 #
    55 # The MI parser needs a global lock. It has global objects.
    56 #
    57 mi_lock = threading.Lock()
    58 
    5954class gdb(object):
    6055    '''RTEMS Testing GDB base.'''
    6156
    6257    def __init__(self, bsp_arch, bsp, trace = False, mi_trace = False):
     58        self.session = pygdb.mi_parser.session()
    6359        self.trace = trace
    6460        self.mi_trace = mi_trace
     
    9187        self.lock.release()
    9288
    93     def _mi_lock(self):
    94         mi_lock.acquire()
    95 
    96     def _mi_unlock(self):
    97         mi_lock.release()
    98 
    9989    def _put(self, text):
    10090        if self.trace:
     
    209199        finally:
    210200            self._unlock('_open')
    211         try:
    212             self.gdb_console('gdb: %s' % (' '.join(cmds)))
    213             ec, proc = self.process.open(cmds, timeout = (timeout, self._timeout))
    214             if self.trace:
    215                 print('gdb done', ec)
    216             if ec > 0:
    217                 raise error.general('gdb exec: %s: %s' % (cmds[0], os.strerror(ec)))
    218         except:
    219             raise
     201        self.gdb_console('gdb: %s' % (' '.join(cmds)))
     202        ec, proc = self.process.open(cmds, timeout = (timeout, self._timeout))
     203        if self.trace:
     204            print('gdb done', ec)
     205        if ec > 0:
     206            raise error.general('gdb exec: %s: %s' % (cmds[0], os.strerror(ec)))
    220207        self._lock('_open')
    221208        try:
     
    249236    def gdb_parse(self, lines):
    250237        try:
    251             self._mi_lock()
    252             try:
    253                 if self.mi_trace:
    254                     print('mi-data:', lines)
    255                 rec = pygdb.mi_parser.process(lines)
    256             finally:
    257                 self._mi_unlock()
     238            if self.mi_trace:
     239                print('mi-data:', lines)
     240            rec = self.session.process(lines)
    258241            if self.mi_trace:
    259242                print('mi-rec:', rec)
     
    303286        except:
    304287            if self.trace:
    305                 print('/// console output')
     288                print('/// exception: console output')
    306289            for line in lines.splitlines():
    307290                self.output(line)
  • tester/rt/pygdb/__init__.py

    rf632bd8 r71cede0  
    1919all = ['mi_parser']
    2020from . import mi_parser
    21 scan = mi_parser.scan
    22 process = mi_parser.process
     21session = mi_parser.session
  • tester/rt/pygdb/mi_parser.py

    rf632bd8 r71cede0  
    3636from . import spark
    3737
    38 def __private():
    39         class Token:
     38def _private():
     39        class Token(object):
    4040                def __init__(self, type, value=None):
    4141                        self.type = type
    4242                        self.value = value
    43                 def __cmp__(self, o):
    44                         return cmp(self.type, o)
     43                def __lt__(self, o):
     44                        return self.type < o
     45                def __gt__(self, o):
     46                        return self.type > o
     47                def __le__(self, o):
     48                        return self.type <= o
     49                def __ge__(self, o):
     50                        return self.type >= o
     51                def __eq__(self, o):
     52                        return self.type == o
     53                def __ne__(self, o):
     54                        return self.type != o
    4555                def __repr__(self):
    4656                        return self.value or self.type
    4757
    48         class AST:
     58        class AST(object):
    4959                def __init__(self, type):
    5060                        self.type = type
     
    5262                def __getitem__(self, i):
    5363                        return self._kids[i]
     64                def __setitem__(self, i, k):
     65                        self._kids[i] = k
    5466                def __len__(self):
    5567                        return len(self._kids)
    56                 def __setslice__(self, low, high, seq):
    57                         self._kids[low:high] = seq
    58                 def __cmp__(self, o):
    59                         return cmp(self.type, o)
     68                def __lt__(self, o):
     69                        return self.type < o
     70                def __gt__(self, o):
     71                        return self.type > o
     72                def __le__(self, o):
     73                        return self.type <= o
     74                def __ge__(self, o):
     75                        return self.type >= o
     76                def __eq__(self, o):
     77                        return self.type == o
     78                def __ne__(self, o):
     79                        return self.type != o
    6080
    6181        class GdbMiScannerBase(spark.GenericScanner):
     
    301321                        #print 'default: ' + node.type
    302322
    303         class GdbDynamicObject:
     323        class GdbDynamicObject(object):
    304324                def __init__(self, dict_):
    305325                        self.graft(dict_)
     
    356376        return (GdbMiScanner(), GdbMiParser(), GdbMiInterpreter, GdbMiRecord)
    357377
    358 (__the_scanner, __the_parser, __the_interpreter, __the_output) = __private()
    359 
    360 def scan(input):
    361         return __the_scanner.tokenize(input)
    362 
    363 def parse(tokens):
    364         return __the_parser.parse(tokens)
    365 
    366 def process(input):
    367         tokens = scan(input)
    368         ast = parse(tokens)
    369         __the_interpreter(ast)
    370         return __the_output(ast.value)
    371 
     378
     379class session(object):
     380        def __init__(self):
     381                (self.the_scanner,
     382                 self.the_parser,
     383                 self.the_interpreter,
     384                 self.the_output) = _private()
     385
     386        def scan(self, input):
     387                return self.the_scanner.tokenize(input)
     388
     389        def parse(self, tokens):
     390                return self.the_parser.parse(tokens)
     391
     392        def process(self, input):
     393                tokens = self.scan(input)
     394                ast = self.parse(tokens)
     395                self.the_interpreter(ast)
     396                return self.the_output(ast.value)
     397
     398#
     399# Not updated with the session class
     400#
    372401if __name__ == '__main__':
    373402        def main():
Note: See TracChangeset for help on using the changeset viewer.