Skip to content

Commit 0c32dae

Browse files
authored
Merge pull request #38 from kuldeepdhaka/uc-def-python
uc-def: Support for python2
2 parents 3ce2ceb + 568499d commit 0c32dae

File tree

1 file changed

+64
-60
lines changed

1 file changed

+64
-60
lines changed

scripts/uc-def/uc-def

Lines changed: 64 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#!/usr/bin/env python3
1+
#!/usr/bin/env python
22

33
#
44
# This file is part of unicore-mx.
@@ -46,14 +46,11 @@ def verify_access_flags(data):
4646
if i not in ('r', 'w', 'c', 's', 'h'):
4747
raise Exception("'%c' flag of flags '%s' not valid" % (i, data))
4848

49-
def next_useful_line(input_file, strip_newline=True, strip_comment=True):
50-
if not hasattr(input_file, 'line_number'):
51-
input_file.last_line_number = input_file.line_number = 1
52-
53-
while input_file.readable():
54-
input_file.last_useful_pos = input_file.tell()
55-
input_file.last_line_number = input_file.line_number
56-
inp = input_file.readline()
49+
def next_useful_line(tag, strip_newline=True, strip_comment=True):
50+
while True:
51+
tag['last_useful_pos'] = tag['input_file'].tell()
52+
tag['last_line_number'] = tag['line_number']
53+
inp = tag['input_file'].readline()
5754

5855
if not len(inp):
5956
break
@@ -62,35 +59,35 @@ def next_useful_line(input_file, strip_newline=True, strip_comment=True):
6259
inp = inp.rstrip()
6360

6461
if not len(inp):
65-
logger.debug("** SKIPPING NEWLINE at %i ***" % input_file.line_number)
66-
input_file.line_number += 1
62+
logger.debug("** SKIPPING NEWLINE at %i ***" % tag['line_number'])
63+
tag['line_number'] += 1
6764
continue
6865

6966
if strip_comment:
7067
if inp[0] == "%":
71-
input_file.line_number += 1
72-
logger.debug("** SKIPPING %i '%s' ***" % (input_file.line_number, inp))
68+
tag['line_number'] += 1
69+
logger.debug("** SKIPPING %i '%s' ***" % (tag['line_number'], inp))
7370
continue
7471

75-
logger.debug("** LINE %i '%s' ***" % (input_file.line_number, inp))
76-
input_file.line_number += 1
72+
logger.debug("** LINE %i '%s' ***" % (tag['line_number'], inp))
73+
tag['line_number'] += 1
7774
return inp
7875

7976
logger.debug("** END OF FILE ***")
8077
return ''
8178

82-
def restore_last_useful_line(input_file):
83-
input_file.line_number = input_file.last_line_number
84-
input_file.seek(input_file.last_useful_pos)
79+
def restore_last_useful_line(tag):
80+
tag['line_number'] = tag['last_line_number']
81+
tag['input_file'].seek(tag['last_useful_pos'])
8582

86-
def get_line_number(input_file):
87-
return input_file.line_number
83+
def get_line_number(tag):
84+
return tag['line_number']
8885

89-
def we_have_problem(msg, input_file):
90-
raise Exception("%s [line: %i]" % (msg, get_line_number(input_file)))
86+
def we_have_problem(msg, tag):
87+
raise Exception("%s [line: %i]" % (msg, get_line_number(tag)))
9188

9289
# this will return the last readed line. (if it could not parse it)
93-
def parse_family_member(input_file):
90+
def parse_family_member(tag):
9491
family = {
9592
'name': None,
9693
'instance': None,
@@ -99,12 +96,12 @@ def parse_family_member(input_file):
9996
}
10097

10198
while True:
102-
inp = next_useful_line(input_file)
99+
inp = next_useful_line(tag)
103100
if inp == '': break
104101

105102
if not inp[0] == ' ':
106103
# revese back and return
107-
restore_last_useful_line(input_file)
104+
restore_last_useful_line(tag)
108105
break
109106

110107
data = inp.split()
@@ -138,13 +135,13 @@ def parse_family_member(input_file):
138135
assert(family['name'] is not None)
139136
return family
140137

141-
def parse_family(input_file):
142-
inp = next_useful_line(input_file)
138+
def parse_family(tag):
139+
inp = next_useful_line(tag)
143140
if inp == '':
144141
return None
145142

146143
if not inp[0] == 'f':
147-
restore_last_useful_line(input_file)
144+
restore_last_useful_line(tag)
148145
return None
149146

150147
if not inp == "family":
@@ -158,9 +155,9 @@ def parse_family(input_file):
158155
'internal_only': False
159156
}
160157
else:
161-
return parse_family_member(input_file)
158+
return parse_family_member(tag)
162159

163-
def parse_register_member(input_file):
160+
def parse_register_member(tag):
164161
register = {
165162
'name': [],
166163
'offset': None,
@@ -173,12 +170,12 @@ def parse_register_member(input_file):
173170
}
174171

175172
while True:
176-
inp = next_useful_line(input_file)
173+
inp = next_useful_line(tag)
177174
if inp == '': break
178175

179176
if not inp[0] == ' ':
180177
# revese back and return
181-
restore_last_useful_line(input_file)
178+
restore_last_useful_line(tag)
182179
break
183180

184181
data = inp.split()
@@ -235,13 +232,13 @@ def parse_register_member(input_file):
235232

236233
return register
237234

238-
def parse_register(input_file):
239-
inp = next_useful_line(input_file)
235+
def parse_register(tag):
236+
inp = next_useful_line(tag)
240237
if inp == '':
241238
return None
242239

243240
if inp[0] is not 'r':
244-
restore_last_useful_line(input_file)
241+
restore_last_useful_line(tag)
245242
return None
246243

247244
if inp[3] == ' ':
@@ -262,9 +259,9 @@ def parse_register(input_file):
262259
}
263260
else:
264261
assert(inp == "register")
265-
return parse_register_member(input_file)
262+
return parse_register_member(tag)
266263

267-
def parse_bit_member(input_file):
264+
def parse_bit_member(tag):
268265
bit = {
269266
'name': [],
270267
'offset': None,
@@ -273,12 +270,12 @@ def parse_bit_member(input_file):
273270
}
274271

275272
while True:
276-
inp = next_useful_line(input_file)
273+
inp = next_useful_line(tag)
277274
if inp == '': break
278275

279276
if not inp[0] == ' ':
280277
# revese back and return
281-
restore_last_useful_line(input_file)
278+
restore_last_useful_line(tag)
282279
break
283280

284281
data = inp.split()
@@ -299,7 +296,7 @@ def parse_bit_member(input_file):
299296
assert(type(bit['offset']) == list)
300297
bit['offset'].append({'id': data[1], 'offset': data[2]})
301298
else:
302-
we_have_problem("unknown design of offset", input_file)
299+
we_have_problem("unknown design of offset", tag)
303300
elif data[0] == "access":
304301
# access <access>
305302
verify_access_flags(data[1])
@@ -314,14 +311,14 @@ def parse_bit_member(input_file):
314311
assert(len(bit['name']))
315312
return bit
316313

317-
def parse_bit(input_file):
318-
inp = next_useful_line(input_file)
314+
def parse_bit(tag):
315+
inp = next_useful_line(tag)
319316
if inp == '':
320317
return None
321318

322319
data = inp.split()
323320
if data[0] != "bit":
324-
restore_last_useful_line(input_file)
321+
restore_last_useful_line(tag)
325322
return None
326323

327324
if len(data) > 1:
@@ -333,9 +330,9 @@ def parse_bit(input_file):
333330
'variable': []
334331
}
335332
else:
336-
return parse_bit_member(input_file)
333+
return parse_bit_member(tag)
337334

338-
def parse_bits_member(input_file):
335+
def parse_bits_member(tag):
339336
bits = {
340337
'name': [],
341338
'offset': None,
@@ -346,12 +343,12 @@ def parse_bits_member(input_file):
346343
}
347344

348345
while True:
349-
inp = next_useful_line(input_file)
346+
inp = next_useful_line(tag)
350347
if inp == '': break
351348

352349
if not inp[0] == ' ':
353350
# revese back and return
354-
restore_last_useful_line(input_file)
351+
restore_last_useful_line(tag)
355352
break
356353

357354
data = inp.split()
@@ -372,7 +369,7 @@ def parse_bits_member(input_file):
372369
assert(type(bits['offset']) == list)
373370
bits['offset'].append({'id': data[1], 'offset': data[2]})
374371
else:
375-
we_have_problem("unknown design of offset", input_file)
372+
we_have_problem("unknown design of offset", tag)
376373
elif data[0] == "size":
377374
# size <size>
378375
bits['size'] = data[1]
@@ -398,14 +395,14 @@ def parse_bits_member(input_file):
398395
assert(bits['size'] is not None)
399396
return bits
400397

401-
def parse_bits(input_file):
402-
inp = next_useful_line(input_file)
398+
def parse_bits(tag):
399+
inp = next_useful_line(tag)
403400
if inp == '':
404401
return None
405402

406403
data = inp.split()
407404
if data[0] != "bits":
408-
restore_last_useful_line(input_file)
405+
restore_last_useful_line(tag)
409406
return None
410407

411408
if len(data) > 1:
@@ -420,14 +417,21 @@ def parse_bits(input_file):
420417
'variable': []
421418
}
422419
else:
423-
return parse_bits_member(input_file)
420+
return parse_bits_member(tag)
424421

425422
def parse_input(input_file):
426423
data = []
427424
inside_block = False
428425

429-
while input_file.readable():
430-
inp = next_useful_line(input_file, strip_newline=inside_block, \
426+
tag = {
427+
'input_file': input_file,
428+
'last_line_number': 1,
429+
'line_number': 1,
430+
'last_useful_pos': 0
431+
}
432+
433+
while True:
434+
inp = next_useful_line(tag, strip_newline=inside_block, \
431435
strip_comment=False)
432436
if not len(inp):
433437
break
@@ -450,28 +454,28 @@ def parse_input(input_file):
450454
data.append({'type': 'extra', 'payload': res + "\n\n"})
451455
continue
452456

453-
restore_last_useful_line(input_file)
457+
restore_last_useful_line(tag)
454458
if inp[0] == "f":
455-
family = parse_family(input_file)
459+
family = parse_family(tag)
456460
if family is None:
457461
break
458462
data.append({'type': 'family', 'payload': family})
459463
elif inp[0] == "r":
460-
register = parse_register(input_file)
464+
register = parse_register(tag)
461465
if register is None:
462466
break
463467
data.append({'type': 'register', 'payload': register})
464468
elif inp[0] == "b":
465-
bit = parse_bit(input_file)
469+
bit = parse_bit(tag)
466470
if bit is not None:
467471
data.append({'type': 'bit', 'payload': bit})
468472
else:
469-
bits = parse_bits(input_file)
473+
bits = parse_bits(tag)
470474
if bits is None:
471475
break
472476
data.append({'type': 'bits', 'payload': bits})
473477
else:
474-
we_have_problem("unknown input: \"%s\"" % inp, input_file)
478+
we_have_problem("unknown input: \"%s\"" % inp, tag)
475479
break
476480
return data
477481

0 commit comments

Comments
 (0)