ics-jku / wal

WAL enables programmable waveform analysis.
https://wal-lang.org
BSD 3-Clause "New" or "Revised" License
116 stars 18 forks source link

[wawk] using 2-digit number in sliced_symbol leads to error #1

Closed eyck closed 2 years ago

eyck commented 2 years ago

When I try to access a sliced part of a 32bit signal (e.g. inst[11:7]) I get the following error:

Traceback (most recent call last):
  File "/home/eyck/tmp/wal/.wal/bin/wawk", line 33, in <module>
    sys.exit(load_entry_point('wal-lang', 'console_scripts', 'wawk')())
  File "/home/eyck/git/wal/wawk/wawk.py", line 70, in run
    wal.eval(statement.action)
  File "/home/eyck/git/wal/wal/core.py", line 43, in eval
    return self.eval_context.eval(sexpr)
  File "/home/eyck/git/wal/wal/eval.py", line 93, in eval
    res = self.eval_dispatch(head, tail)
  File "/home/eyck/git/wal/wal/eval.py", line 44, in eval_dispatch
    return self.dispatch.get(oprtr.value, lambda a, b: NotImplementedError())(self, args)
  File "/home/eyck/git/wal/wal/implementation/core.py", line 290, in op_do
    return seval.eval_args(args)[-1]
  File "/home/eyck/git/wal/wal/eval.py", line 40, in eval_args
    return list(map(self.eval, args))
  File "/home/eyck/git/wal/wal/eval.py", line 93, in eval
    res = self.eval_dispatch(head, tail)
  File "/home/eyck/git/wal/wal/eval.py", line 44, in eval_dispatch
    return self.dispatch.get(oprtr.value, lambda a, b: NotImplementedError())(self, args)
  File "/home/eyck/git/wal/wal/implementation/core.py", line 239, in op_if
    return seval.eval(args[1])
  File "/home/eyck/git/wal/wal/eval.py", line 93, in eval
    res = self.eval_dispatch(head, tail)
  File "/home/eyck/git/wal/wal/eval.py", line 44, in eval_dispatch
    return self.dispatch.get(oprtr.value, lambda a, b: NotImplementedError())(self, args)
  File "/home/eyck/git/wal/wal/implementation/core.py", line 290, in op_do
    return seval.eval_args(args)[-1]
  File "/home/eyck/git/wal/wal/eval.py", line 40, in eval_args
    return list(map(self.eval, args))
  File "/home/eyck/git/wal/wal/eval.py", line 93, in eval
    res = self.eval_dispatch(head, tail)
  File "/home/eyck/git/wal/wal/eval.py", line 44, in eval_dispatch
    return self.dispatch.get(oprtr.value, lambda a, b: NotImplementedError())(self, args)
  File "/home/eyck/git/wal/wal/implementation/core.py", line 194, in op_set
    res = seval.eval(arg[1])
  File "/home/eyck/git/wal/wal/eval.py", line 93, in eval
    res = self.eval_dispatch(head, tail)
  File "/home/eyck/git/wal/wal/eval.py", line 44, in eval_dispatch
    return self.dispatch.get(oprtr.value, lambda a, b: NotImplementedError())(self, args)
  File "/home/eyck/git/wal/wal/implementation/core.py", line 91, in op_neq
    evaluated = seval.eval_args(args)
  File "/home/eyck/git/wal/wal/eval.py", line 40, in eval_args
    return list(map(self.eval, args))
  File "/home/eyck/git/wal/wal/eval.py", line 93, in eval
    res = self.eval_dispatch(head, tail)
  File "/home/eyck/git/wal/wal/eval.py", line 44, in eval_dispatch
    return self.dispatch.get(oprtr.value, lambda a, b: NotImplementedError())(self, args)
  File "/home/eyck/git/wal/wal/implementation/core.py", line 609, in op_slice
    return (evaluated[0] & (((1 << (upper - lower + 1)) - 1) << lower)) >> lower
ValueError: negative shift count
eyck commented 2 years ago

When shifting so that single digit can be used:

    shifted = instr/128;
    store = shifted[4:0]!=0 ;

it works

FRoith commented 2 years ago

Found the bug in the wawk parser and fixed it in #5