1
0
mirror of https://github.com/myhdl/myhdl.git synced 2024-12-14 07:44:38 +08:00

Drop support for legacy Python 2.7

This commit is contained in:
Hugo 2019-03-12 17:51:12 +02:00
parent a74f26da21
commit 562aa3a409
29 changed files with 142 additions and 250 deletions

View File

@ -4,7 +4,6 @@ language: python
python: python:
- "3.7" - "3.7"
- "3.6" - "3.6"
- "2.7"
- "pypy3.5" - "pypy3.5"
install: install:

View File

@ -37,7 +37,7 @@ class DecTest(TestCase):
@instance @instance
def stimulus(): def stimulus():
if nrsamples: if nrsamples:
vals = [long(random()*(2**width)) for i in range(nrsamples)] vals = [int(random()*(2**width)) for i in range(nrsamples)]
else: else:
vals = range(2**width) vals = range(2**width)
for i in vals: for i in vals:

View File

@ -37,7 +37,7 @@ class LeadZeroDetTest(TestCase):
@instance @instance
def stimulus(): def stimulus():
if nrsamples: if nrsamples:
vals = [long(random()*(2**width)) for i in range(nrsamples)] vals = [int(random()*(2**width)) for i in range(nrsamples)]
else: else:
vals = range(2**width) vals = range(2**width)
for i in vals: for i in vals:

View File

@ -24,10 +24,10 @@ import sys
import os import os
#import shlex #import shlex
import subprocess import subprocess
from os import set_inheritable
from myhdl._intbv import intbv from myhdl._intbv import intbv
from myhdl import _simulator, CosimulationError from myhdl import _simulator, CosimulationError
from myhdl._compat import set_inheritable, string_types, to_bytes, to_str
_MAXLINE = 4096 _MAXLINE = 4096
@ -84,7 +84,7 @@ class Cosimulation(object):
env['MYHDL_TO_PIPE'] = str(msvcrt.get_osfhandle(wt)) env['MYHDL_TO_PIPE'] = str(msvcrt.get_osfhandle(wt))
env['MYHDL_FROM_PIPE'] = str(msvcrt.get_osfhandle(rf)) env['MYHDL_FROM_PIPE'] = str(msvcrt.get_osfhandle(rf))
if isinstance(exe, string_types): if isinstance(exe, str):
# exe = shlex.split(exe) # exe = shlex.split(exe)
exe = exe.split(' ') exe = exe.split(' ')
@ -99,7 +99,7 @@ class Cosimulation(object):
os.close(wt) os.close(wt)
os.close(rf) os.close(rf)
while 1: while 1:
s = to_str(os.read(rt, _MAXLINE)) s = os.read(rt, _MAXLINE).decode()
if not s: if not s:
raise CosimulationError(_error.SimulationEnd) raise CosimulationError(_error.SimulationEnd)
e = s.split() e = s.split()
@ -141,7 +141,7 @@ class Cosimulation(object):
def _get(self): def _get(self):
if not self._getMode: if not self._getMode:
return return
buf = to_str(os.read(self._rt, _MAXLINE)) buf = os.read(self._rt, _MAXLINE).decode()
if not buf: if not buf:
raise CosimulationError(_error.SimulationEnd) raise CosimulationError(_error.SimulationEnd)
e = buf.split() e = buf.split()
@ -180,7 +180,7 @@ class Cosimulation(object):
if buf[-1] == 'L': if buf[-1] == 'L':
buf = buf[:-1] # strip trailing L buf = buf[:-1] # strip trailing L
buflist.append(buf) buflist.append(buf)
os.write(self._wf, to_bytes(" ".join(buflist))) os.write(self._wf, (" ".join(buflist)).encode())
self._getMode = 1 self._getMode = 1
def _waiter(self): def _waiter(self):

View File

@ -26,7 +26,6 @@ from __future__ import absolute_import
import warnings import warnings
from copy import deepcopy from copy import deepcopy
from myhdl._compat import long
from myhdl._Signal import _Signal from myhdl._Signal import _Signal
from myhdl._Waiter import _SignalWaiter, _SignalTupleWaiter from myhdl._Waiter import _SignalWaiter, _SignalTupleWaiter
from myhdl._intbv import intbv from myhdl._intbv import intbv
@ -143,12 +142,12 @@ class ConcatSignal(_ShadowSignal):
v = a v = a
elif isinstance(a, str): elif isinstance(a, str):
w = len(a) w = len(a)
v = long(a, 2) v = int(a, 2)
else: else:
raise TypeError("ConcatSignal: inappropriate argument type: %s" raise TypeError("ConcatSignal: inappropriate argument type: %s"
% type(a)) % type(a))
nrbits += w nrbits += w
val = val << w | v & (long(1) << w) - 1 val = val << w | v & (1 << w) - 1
self._initval = val self._initval = val
ini = intbv(val)[nrbits:] ini = intbv(val)[nrbits:]
_ShadowSignal.__init__(self, ini) _ShadowSignal.__init__(self, ini)

View File

@ -31,7 +31,6 @@ from __future__ import print_function
from copy import copy, deepcopy from copy import copy, deepcopy
from myhdl._compat import integer_types, long
from myhdl import _simulator as sim from myhdl import _simulator as sim
from myhdl._simulator import _futureEvents from myhdl._simulator import _futureEvents
from myhdl._simulator import _siglist from myhdl._simulator import _siglist
@ -148,8 +147,8 @@ class _Signal(object):
self._setNextVal = self._setNextBool self._setNextVal = self._setNextBool
self._printVcd = self._printVcdBit self._printVcd = self._printVcdBit
self._nrbits = 1 self._nrbits = 1
elif isinstance(val, integer_types): elif isinstance(val, int):
self._type = integer_types self._type = (int,)
self._setNextVal = self._setNextInt self._setNextVal = self._setNextInt
elif isinstance(val, intbv): elif isinstance(val, intbv):
self._type = intbv self._type = intbv
@ -205,7 +204,7 @@ class _Signal(object):
self._val = None self._val = None
elif isinstance(val, intbv): elif isinstance(val, intbv):
self._val._val = next._val self._val._val = next._val
elif isinstance(val, (integer_types, EnumItemType)): elif isinstance(val, (int, EnumItemType)):
self._val = next self._val = next
else: else:
self._val = deepcopy(next) self._val = deepcopy(next)
@ -294,14 +293,14 @@ class _Signal(object):
def _setNextInt(self, val): def _setNextInt(self, val):
if isinstance(val, intbv): if isinstance(val, intbv):
val = val._val val = val._val
elif not isinstance(val, (integer_types, intbv)): elif not isinstance(val, (int, intbv)):
raise TypeError("Expected int or intbv, got %s" % type(val)) raise TypeError("Expected int or intbv, got %s" % type(val))
self._next = val self._next = val
def _setNextIntbv(self, val): def _setNextIntbv(self, val):
if isinstance(val, intbv): if isinstance(val, intbv):
val = val._val val = val._val
elif not isinstance(val, integer_types): elif not isinstance(val, int):
raise TypeError("Expected int or intbv, got %s" % type(val)) raise TypeError("Expected int or intbv, got %s" % type(val))
self._next._val = val self._next._val = val
self._next._handleBounds() self._next._handleBounds()
@ -494,7 +493,7 @@ class _Signal(object):
return int(self._val) return int(self._val)
def __long__(self): def __long__(self):
return long(self._val) return int(self._val)
def __float__(self): def __float__(self):
return float(self._val) return float(self._val)

View File

@ -20,9 +20,6 @@
""" module with the bin function. """ module with the bin function.
""" """
from myhdl._compat import long
def _int2bitstring(num): def _int2bitstring(num):
if num == 0: if num == 0:
return '0' return '0'
@ -46,7 +43,7 @@ def bin(num, width=0):
Optional parameter: Optional parameter:
width -- specifies the desired string (sign bit padding) width -- specifies the desired string (sign bit padding)
""" """
num = long(num) num = int(num)
s = _int2bitstring(num) s = _int2bitstring(num)
if width: if width:
pad = '0' pad = '0'

View File

@ -26,7 +26,6 @@ import inspect
import functools import functools
import myhdl import myhdl
from myhdl._compat import PY2
from myhdl import BlockError, BlockInstanceError, Cosimulation from myhdl import BlockError, BlockInstanceError, Cosimulation
from myhdl._instance import _Instantiator from myhdl._instance import _Instantiator
from myhdl._util import _flatten from myhdl._util import _flatten
@ -74,10 +73,9 @@ def _getCallInfo():
callerrec = stack[4] callerrec = stack[4]
# special case for list comprehension's extra scope in PY3 # special case for list comprehension's extra scope in PY3
if name == '<listcomp>': if name == '<listcomp>':
if not PY2: funcrec = stack[4]
funcrec = stack[4] if len(stack) > 5:
if len(stack) > 5: callerrec = stack[5]
callerrec = stack[5]
name = funcrec[3] name = funcrec[3]
frame = funcrec[0] frame = funcrec[0]

View File

@ -1,70 +0,0 @@
'''
'''
import sys
import types
PY2 = sys.version_info[0] == 2
PYPY = hasattr(sys, 'pypy_translation_info')
_identity = lambda x: x
if not PY2:
string_types = (str,)
integer_types = (int,)
long = int
class_types = (type,)
from io import StringIO
from os import set_inheritable
import builtins
def to_bytes(s):
return s.encode()
def to_str(b):
return b.decode()
else:
string_types = (str, unicode)
integer_types = (int, long)
long = long
class_types = (type, types.ClassType)
from cStringIO import StringIO
import __builtin__ as builtins
to_bytes = _identity
to_str = _identity
def set_inheritable(fd, inheritable):
# This implementation of set_inheritable is based on a code sample in
# [PEP 0446](https://www.python.org/dev/peps/pep-0446/) and on the
# CPython implementation of that proposal which can be browsed [here]
# (hg.python.org/releasing/3.4/file/8671f89107c8/Modules/posixmodule.c#l11130)
if sys.platform == "win32":
import msvcrt
# import ctypes.windll.kernel32 as kernel32
import ctypes
windll = ctypes.LibraryLoader(ctypes.WinDLL)
SetHandleInformation = windll.kernel32.SetHandleInformation
HANDLE_FLAG_INHERIT = 1
if SetHandleInformation(msvcrt.get_osfhandle(fd),
HANDLE_FLAG_INHERIT,
1 if inheritable else 0) == 0:
raise IOError("Failed on HANDLE_FLAG_INHERIT")
else:
import fcntl
fd_flags = fcntl.fcntl(fd, fcntl.F_GETFD)
if inheritable:
fd_flags &= ~fcntl.FD_CLOEXEC
else:
fd_flags |= fcntl.FD_CLOEXEC
fcntl.fcntl(fd, fcntl.F_SETFD, fd_flags)

View File

@ -24,10 +24,8 @@
""" """
from __future__ import absolute_import from __future__ import absolute_import
from myhdl._compat import integer_types
from myhdl._intbv import intbv from myhdl._intbv import intbv
from myhdl._Signal import _Signal from myhdl._Signal import _Signal
from myhdl._compat import long
def concat(base, *args): def concat(base, *args):
@ -35,7 +33,7 @@ def concat(base, *args):
if isinstance(base, intbv): if isinstance(base, intbv):
basewidth = base._nrbits basewidth = base._nrbits
val = base._val val = base._val
elif isinstance(base, integer_types): elif isinstance(base, int):
if isinstance(base, bool): if isinstance(base, bool):
basewidth = 1 basewidth = 1
else: else:
@ -49,7 +47,7 @@ def concat(base, *args):
val = base._val val = base._val
elif isinstance(base, str): elif isinstance(base, str):
basewidth = len(base) basewidth = len(base)
val = long(base, 2) val = int(base, 2)
else: else:
raise TypeError("concat: inappropriate first argument type: %s" raise TypeError("concat: inappropriate first argument type: %s"
% type(base)) % type(base))
@ -70,14 +68,14 @@ def concat(base, *args):
v = arg v = arg
elif isinstance(arg, str): elif isinstance(arg, str):
w = len(arg) w = len(arg)
v = long(arg, 2) v = int(arg, 2)
else: else:
raise TypeError("concat: inappropriate argument type: %s" raise TypeError("concat: inappropriate argument type: %s"
% type(arg)) % type(arg))
if not w: if not w:
raise TypeError("concat: arg on pos %d should have length" % (i + 1)) raise TypeError("concat: arg on pos %d should have length" % (i + 1))
width += w width += w
val = val << w | v & (long(1) << w) - 1 val = val << w | v & (1 << w) - 1
if basewidth: if basewidth:
return intbv(val, _nrbits=basewidth + width) return intbv(val, _nrbits=basewidth + width)

View File

@ -20,8 +20,6 @@
""" Module that provides the delay class.""" """ Module that provides the delay class."""
from __future__ import absolute_import from __future__ import absolute_import
from myhdl._compat import integer_types
_errmsg = "arg of delay constructor should be a natural integeer" _errmsg = "arg of delay constructor should be a natural integeer"
@ -36,6 +34,6 @@ class delay(object):
val -- a natural integer representing the desired delay val -- a natural integer representing the desired delay
""" """
if not isinstance(val, integer_types) or val < 0: if not isinstance(val, int) or val < 0:
raise TypeError(_errmsg) raise TypeError(_errmsg)
self._time = val self._time = val

View File

@ -24,7 +24,6 @@ from __future__ import absolute_import
from myhdl._bin import bin from myhdl._bin import bin
from myhdl._Signal import _Signal from myhdl._Signal import _Signal
from myhdl._compat import string_types
# from myhdl.conversion._VHDLNameValidation import _nameValid # from myhdl.conversion._VHDLNameValidation import _nameValid
@ -58,7 +57,7 @@ def enum(*names, **kwargs):
codedict = {} codedict = {}
i = 0 i = 0
for name in names: for name in names:
if not isinstance(name, string_types): if not isinstance(name, str):
raise TypeError() raise TypeError()
if name in codedict: if name in codedict:
raise ValueError("enum literals should be unique") raise ValueError("enum literals should be unique")

View File

@ -20,8 +20,8 @@
""" Module with the intbv class """ """ Module with the intbv class """
from __future__ import absolute_import, division from __future__ import absolute_import, division
import builtins
from myhdl._compat import long, integer_types, string_types, builtins
from myhdl._bin import bin from myhdl._bin import bin
@ -43,11 +43,11 @@ class intbv(object):
else: else:
# make sure there is a leading zero bit in positive numbers # make sure there is a leading zero bit in positive numbers
_nrbits = builtins.max(len(bin(max - 1)) + 1, len(bin(min))) _nrbits = builtins.max(len(bin(max - 1)) + 1, len(bin(min)))
if isinstance(val, integer_types): if isinstance(val, int):
self._val = val self._val = val
elif isinstance(val, string_types): elif isinstance(val, str):
mval = val.replace('_', '') mval = val.replace('_', '')
self._val = long(mval, 2) self._val = int(mval, 2)
_nrbits = len(mval) _nrbits = len(mval)
elif isinstance(val, intbv): elif isinstance(val, intbv):
self._val = val._val self._val = val._val
@ -138,7 +138,7 @@ class intbv(object):
if i <= j: if i <= j:
raise ValueError("intbv[i:j] requires i > j\n" raise ValueError("intbv[i:j] requires i > j\n"
" i, j == %s, %s" % (i, j)) " i, j == %s, %s" % (i, j))
res = intbv((self._val & (long(1) << i) - 1) >> j, _nrbits=i - j) res = intbv((self._val & (1 << i) - 1) >> j, _nrbits=i - j)
return res return res
else: else:
i = int(key) i = int(key)
@ -157,15 +157,15 @@ class intbv(object):
raise ValueError("intbv[i:j] = v requires j >= 0\n" raise ValueError("intbv[i:j] = v requires j >= 0\n"
" j == %s" % j) " j == %s" % j)
if i is None: # default if i is None: # default
q = self._val % (long(1) << j) q = self._val % (1 << j)
self._val = val * (long(1) << j) + q self._val = val * (1 << j) + q
self._handleBounds() self._handleBounds()
return return
i = int(i) i = int(i)
if i <= j: if i <= j:
raise ValueError("intbv[i:j] = v requires i > j\n" raise ValueError("intbv[i:j] = v requires i > j\n"
" i, j, v == %s, %s, %s" % (i, j, val)) " i, j, v == %s, %s, %s" % (i, j, val))
lim = (long(1) << (i - j)) lim = (1 << (i - j))
if val >= lim or val < -lim: if val >= lim or val < -lim:
raise ValueError("intbv[i:j] = v abs(v) too large\n" raise ValueError("intbv[i:j] = v abs(v) too large\n"
" i, j, v == %s, %s, %s" % (i, j, val)) " i, j, v == %s, %s, %s" % (i, j, val))
@ -176,9 +176,9 @@ class intbv(object):
else: else:
i = int(key) i = int(key)
if val == 1: if val == 1:
self._val |= (long(1) << i) self._val |= (1 << i)
elif val == 0: elif val == 0:
self._val &= ~(long(1) << i) self._val &= ~(1 << i)
else: else:
raise ValueError("intbv[i] = v requires v in (0, 1)\n" raise ValueError("intbv[i] = v requires v in (0, 1)\n"
" i == %s " % i) " i == %s " % i)
@ -254,9 +254,9 @@ class intbv(object):
def __lshift__(self, other): def __lshift__(self, other):
if isinstance(other, intbv): if isinstance(other, intbv):
return intbv(long(self._val) << other._val) return intbv(int(self._val) << other._val)
else: else:
return intbv(long(self._val) << other) return intbv(int(self._val) << other)
def __rlshift__(self, other): def __rlshift__(self, other):
return other << self._val return other << self._val
@ -350,7 +350,7 @@ class intbv(object):
self._val **= other._val self._val **= other._val
else: else:
self._val **= other self._val **= other
if not isinstance(self._val, integer_types): if not isinstance(self._val, int):
raise ValueError("intbv value should be integer") raise ValueError("intbv value should be integer")
self._handleBounds() self._handleBounds()
return self return self
@ -380,7 +380,7 @@ class intbv(object):
return self return self
def __ilshift__(self, other): def __ilshift__(self, other):
self._val = long(self._val) self._val = int(self._val)
if isinstance(other, intbv): if isinstance(other, intbv):
self._val <<= other._val self._val <<= other._val
else: else:
@ -407,7 +407,7 @@ class intbv(object):
def __invert__(self): def __invert__(self):
if self._nrbits and self._min >= 0: if self._nrbits and self._min >= 0:
return intbv(~self._val & (long(1) << self._nrbits) - 1) return intbv(~self._val & (1 << self._nrbits) - 1)
else: else:
return intbv(~self._val) return intbv(~self._val)
@ -415,7 +415,7 @@ class intbv(object):
return int(self._val) return int(self._val)
def __long__(self): def __long__(self):
return long(self._val) return int(self._val)
def __float__(self): def __float__(self):
return float(self._val) return float(self._val)

View File

@ -21,7 +21,6 @@
from __future__ import absolute_import from __future__ import absolute_import
from ._intbv import intbv from ._intbv import intbv
from ._compat import long
class modbv(intbv): class modbv(intbv):
@ -54,7 +53,7 @@ class modbv(intbv):
if i <= j: if i <= j:
raise ValueError("modbv[i:j] requires i > j\n" raise ValueError("modbv[i:j] requires i > j\n"
" i, j == %s, %s" % (i, j)) " i, j == %s, %s" % (i, j))
res = modbv((self._val & (long(1) << i) - 1) >> j, _nrbits=i - j) res = modbv((self._val & (1 << i) - 1) >> j, _nrbits=i - j)
return res return res
else: else:
i = int(key) i = int(key)

View File

@ -29,8 +29,7 @@ import sys
import inspect import inspect
from tokenize import generate_tokens, untokenize, INDENT from tokenize import generate_tokens, untokenize, INDENT
from io import StringIO
from myhdl._compat import integer_types, StringIO
def _printExcInfo(): def _printExcInfo():
@ -59,7 +58,7 @@ def _isTupleOfInts(obj):
if not isinstance(obj, tuple): if not isinstance(obj, tuple):
return False return False
for e in obj: for e in obj:
if not isinstance(e, integer_types): if not isinstance(e, int):
return False return False
return True return True

View File

@ -29,6 +29,7 @@ from types import FunctionType, MethodType
import sys import sys
import re import re
import ast import ast
import builtins
from itertools import chain from itertools import chain
import myhdl import myhdl
@ -48,7 +49,6 @@ from myhdl._util import _flatten
from myhdl._util import _isTupleOfInts from myhdl._util import _isTupleOfInts
from myhdl._util import _makeAST from myhdl._util import _makeAST
from myhdl._resolverefs import _AttrRefTransformer from myhdl._resolverefs import _AttrRefTransformer
from myhdl._compat import builtins, integer_types, PY2
myhdlObjects = myhdl.__dict__.values() myhdlObjects = myhdl.__dict__.values()
builtinObjects = builtins.__dict__.values() builtinObjects = builtins.__dict__.values()
@ -590,7 +590,7 @@ class _AnalyzeVisitor(ast.NodeVisitor, _ConversionMixin):
node.obj = int(0) # XXX node.obj = int(0) # XXX
elif f is bool: elif f is bool:
node.obj = bool() node.obj = bool()
elif f in _flatten(integer_types): elif f is int:
node.obj = int(-1) node.obj = int(-1)
# elif f in (posedge , negedge): # elif f in (posedge , negedge):
# # node.obj = _EdgeDetector() # # node.obj = _EdgeDetector()
@ -628,7 +628,7 @@ class _AnalyzeVisitor(ast.NodeVisitor, _ConversionMixin):
if f.__code__.co_freevars: if f.__code__.co_freevars:
for n, c in zip(f.__code__.co_freevars, f.__closure__): for n, c in zip(f.__code__.co_freevars, f.__closure__):
obj = c.cell_contents obj = c.cell_contents
if not isinstance(obj, (integer_types, _Signal)): if not isinstance(obj, (int, _Signal)):
self.raiseError(node, _error.FreeVarTypeError, n) self.raiseError(node, _error.FreeVarTypeError, n)
tree.symdict[n] = obj tree.symdict[n] = obj
v = _FirstPassVisitor(tree) v = _FirstPassVisitor(tree)
@ -671,7 +671,7 @@ class _AnalyzeVisitor(ast.NodeVisitor, _ConversionMixin):
val = arg.obj val = arg.obj
if isinstance(val, bool): if isinstance(val, bool):
val = int(val) # cast bool to int first val = int(val) # cast bool to int first
if isinstance(val, (EnumItemType, integer_types)): if isinstance(val, (EnumItemType, int)):
node.case = (node.left, val) node.case = (node.left, val)
# check whether it can be part of an edge check # check whether it can be part of an edge check
n = node.left.id n = node.left.id
@ -898,12 +898,7 @@ class _AnalyzeVisitor(ast.NodeVisitor, _ConversionMixin):
nr = 0 nr = 0
a = [] a = []
if PY2 and isinstance(node, ast.Print): for n in node.args:
node_args = node.values
else:
node_args = node.args
for n in node_args:
if isinstance(n, ast.BinOp) and isinstance(n.op, ast.Mod) and \ if isinstance(n, ast.BinOp) and isinstance(n.op, ast.Mod) and \
isinstance(n.left, ast.Str): isinstance(n.left, ast.Str):
if isinstance(n.right, ast.Tuple): if isinstance(n.right, ast.Tuple):

View File

@ -26,7 +26,6 @@ from __future__ import absolute_import
import ast import ast
from myhdl import ConversionError from myhdl import ConversionError
from myhdl._compat import PY2
class _error(object): class _error(object):
@ -220,7 +219,4 @@ class _namesVisitor(ast.NodeVisitor):
def _get_argnames(node): def _get_argnames(node):
if PY2: return [arg.arg for arg in node.args.args]
return [arg.id for arg in node.args.args]
else:
return [arg.arg for arg in node.args.args]

View File

@ -36,6 +36,7 @@ from types import GeneratorType
import warnings import warnings
from copy import copy from copy import copy
import string import string
from io import StringIO
# import myhdl # import myhdl
import myhdl import myhdl
@ -54,7 +55,6 @@ from myhdl._concat import concat
from myhdl._delay import delay from myhdl._delay import delay
from myhdl._misc import downrange from myhdl._misc import downrange
from myhdl._util import _flatten from myhdl._util import _flatten
from myhdl._compat import integer_types, class_types, StringIO
from myhdl._ShadowSignal import _TristateSignal, _TristateDriver from myhdl._ShadowSignal import _TristateSignal, _TristateDriver
from myhdl._block import _Block from myhdl._block import _Block
from myhdl._getHierarchy import _getHierarchy from myhdl._getHierarchy import _getHierarchy
@ -1108,7 +1108,7 @@ class _ConvertVisitor(ast.NodeVisitor, _ConversionMixin):
node.args[0].s = v node.args[0].s = v
self.write(v) self.write(v)
return return
elif f in integer_types: elif f is int:
opening, closing = '', '' opening, closing = '', ''
pre, suf = self.inferCast(node.vhd, node.vhdOri) pre, suf = self.inferCast(node.vhd, node.vhdOri)
# convert number argument to integer # convert number argument to integer
@ -1138,7 +1138,7 @@ class _ConvertVisitor(ast.NodeVisitor, _ConversionMixin):
self.write(closing) self.write(closing)
self.write(suf) self.write(suf)
return return
elif (type(f) in class_types) and issubclass(f, Exception): elif (type(f) in (type,)) and issubclass(f, Exception):
self.write(f.__name__) self.write(f.__name__)
elif f in (posedge, negedge): elif f in (posedge, negedge):
opening, closing = ' ', '' opening, closing = ' ', ''
@ -1456,7 +1456,7 @@ class _ConvertVisitor(ast.NodeVisitor, _ConversionMixin):
s = "'%s'" % int(obj) s = "'%s'" % int(obj)
else: else:
s = "%s" % obj s = "%s" % obj
elif isinstance(obj, integer_types): elif isinstance(obj, int):
if isinstance(node.vhd, vhd_int): if isinstance(node.vhd, vhd_int):
s = self.IntRepr(obj) s = self.IntRepr(obj)
elif isinstance(node.vhd, vhd_boolean): elif isinstance(node.vhd, vhd_boolean):
@ -1484,7 +1484,7 @@ class _ConvertVisitor(ast.NodeVisitor, _ConversionMixin):
s = m.name s = m.name
elif isinstance(obj, EnumItemType): elif isinstance(obj, EnumItemType):
s = obj._toVHDL() s = obj._toVHDL()
elif (type(obj) in class_types) and issubclass(obj, Exception): elif (type(obj) in (type,)) and issubclass(obj, Exception):
s = n s = n
else: else:
self.raiseError(node, _error.UnsupportedType, "%s, %s" % (n, type(obj))) self.raiseError(node, _error.UnsupportedType, "%s, %s" % (n, type(obj)))
@ -2149,7 +2149,7 @@ def inferVhdlObj(obj):
else: else:
tipe = obj._type tipe = obj._type
vhd = vhd_enum(tipe) vhd = vhd_enum(tipe)
elif isinstance(obj, integer_types): elif isinstance(obj, int):
if obj >= 0: if obj >= 0:
vhd = vhd_nat() vhd = vhd_nat()
else: else:
@ -2216,7 +2216,7 @@ class _AnnotateTypesVisitor(ast.NodeVisitor, _ConversionMixin):
node.vhd = vhd_unsigned(s) node.vhd = vhd_unsigned(s)
elif f is bool: elif f is bool:
node.vhd = vhd_boolean() node.vhd = vhd_boolean()
elif f in _flatten(integer_types, ord): elif f in (int, ord):
node.vhd = vhd_int() node.vhd = vhd_int()
node.args[0].vhd = vhd_int() node.args[0].vhd = vhd_int()
elif f in (intbv, modbv): elif f in (intbv, modbv):

View File

@ -33,14 +33,13 @@ import inspect
from datetime import datetime from datetime import datetime
import ast import ast
import string import string
from io import StringIO
from types import GeneratorType from types import GeneratorType
from myhdl._compat import StringIO
import warnings import warnings
import myhdl import myhdl
from myhdl import * from myhdl import *
from myhdl._compat import integer_types, class_types, PY2
from myhdl import ToVerilogError, ToVerilogWarning from myhdl import ToVerilogError, ToVerilogWarning
from myhdl._extractHierarchy import (_HierExtr, _isMem, _getMemInfo, from myhdl._extractHierarchy import (_HierExtr, _isMem, _getMemInfo,
_UserVerilogCode, _userCodeMap) _UserVerilogCode, _userCodeMap)
@ -835,7 +834,7 @@ class _ConvertVisitor(ast.NodeVisitor, _ConversionMixin):
elif f is ord: elif f is ord:
opening, closing = '', '' opening, closing = '', ''
node.args[0].s = str(ord(node.args[0].s)) node.args[0].s = str(ord(node.args[0].s))
elif f in integer_types: elif f is int:
opening, closing = '', '' opening, closing = '', ''
# convert number argument to integer # convert number argument to integer
if isinstance(node.args[0], ast.Num): if isinstance(node.args[0], ast.Num):
@ -851,7 +850,7 @@ class _ConvertVisitor(ast.NodeVisitor, _ConversionMixin):
self.write(opening) self.write(opening)
self.visit(fn.value) self.visit(fn.value)
self.write(closing) self.write(closing)
elif (type(f) in class_types) and issubclass(f, Exception): elif (type(f) in (type,)) and issubclass(f, Exception):
self.write(f.__name__) self.write(f.__name__)
elif f in (posedge, negedge): elif f in (posedge, negedge):
opening, closing = ' ', '' opening, closing = ' ', ''
@ -1093,10 +1092,6 @@ class _ConvertVisitor(ast.NodeVisitor, _ConversionMixin):
def getName(self, node): def getName(self, node):
n = node.id n = node.id
if PY2 and n in ('True', 'False', 'None'):
self.visit_NameConstant(node)
return
addSignBit = False addSignBit = False
isMixedExpr = (not node.signed) and (self.context == _context.SIGNED) isMixedExpr = (not node.signed) and (self.context == _context.SIGNED)
if n in self.tree.vardict: if n in self.tree.vardict:
@ -1110,7 +1105,7 @@ class _ConvertVisitor(ast.NodeVisitor, _ConversionMixin):
obj = self.tree.symdict[n] obj = self.tree.symdict[n]
if isinstance(obj, bool): if isinstance(obj, bool):
s = "1'b%s" % int(obj) s = "1'b%s" % int(obj)
elif isinstance(obj, integer_types): elif isinstance(obj, int):
s = self.IntRepr(obj) s = self.IntRepr(obj)
elif isinstance(obj, _Signal): elif isinstance(obj, _Signal):
addSignBit = isMixedExpr addSignBit = isMixedExpr
@ -1121,7 +1116,7 @@ class _ConvertVisitor(ast.NodeVisitor, _ConversionMixin):
s = m.name s = m.name
elif isinstance(obj, EnumItemType): elif isinstance(obj, EnumItemType):
s = obj._toVerilog() s = obj._toVerilog()
elif (type(obj) in class_types) and issubclass(obj, Exception): elif (type(obj) in (type,)) and issubclass(obj, Exception):
s = n s = n
else: else:
self.raiseError(node, _error.UnsupportedType, "%s, %s" % (n, type(obj))) self.raiseError(node, _error.UnsupportedType, "%s, %s" % (n, type(obj)))
@ -1535,7 +1530,7 @@ class _ConvertTaskVisitor(_ConvertVisitor):
def _maybeNegative(obj): def _maybeNegative(obj):
if hasattr(obj, '_min') and (obj._min is not None) and (obj._min < 0): if hasattr(obj, '_min') and (obj._min is not None) and (obj._min < 0):
return True return True
if isinstance(obj, integer_types) and obj < 0: if isinstance(obj, int) and obj < 0:
return True return True
return False return False

View File

@ -1,5 +1,3 @@
import sys
import py import py
import pytest import pytest
@ -10,8 +8,7 @@ xfail = pytest.mark.xfail
all_sims = list(_simulators) all_sims = list(_simulators)
if sys.version_info[0] > 2: collect_ignore = ['conversion/toVerilog/test_not_supported_py2.py']
collect_ignore = ['conversion/toVerilog/test_not_supported_py2.py']
def pytest_addoption(parser): def pytest_addoption(parser):
parser.addoption("--sim", action="store", choices=all_sims, parser.addoption("--sim", action="store", choices=all_sims,

View File

@ -29,7 +29,6 @@ if sys.platform == "win32":
import msvcrt import msvcrt
from myhdl import Signal from myhdl import Signal
from myhdl._compat import to_bytes
from myhdl._Cosimulation import Cosimulation, CosimulationError, _error from myhdl._Cosimulation import Cosimulation, CosimulationError, _error
if __name__ != '__main__': if __name__ != '__main__':
@ -90,7 +89,7 @@ class TestCosimulation:
buf = "FROM 00 " buf = "FROM 00 "
for s, w in zip(fromSignames, fromSizes): for s, w in zip(fromSignames, fromSizes):
buf += "%s %s " % (s, w) buf += "%s %s " % (s, w)
os.write(wt, to_bytes(buf)) os.write(wt, buf.encode())
os.read(rf, MAXLINE) os.read(rf, MAXLINE)
os.write(wt, b"TO 0000 a 1") os.write(wt, b"TO 0000 a 1")
os.read(rf, MAXLINE) os.read(rf, MAXLINE)
@ -110,7 +109,7 @@ class TestCosimulation:
buf = "TO 00 " buf = "TO 00 "
for s, w in zip(toSignames, toSizes): for s, w in zip(toSignames, toSizes):
buf += "%s %s " % (s, w) buf += "%s %s " % (s, w)
os.write(wt, to_bytes(buf)) os.write(wt, buf.encode())
os.read(rf, MAXLINE) os.read(rf, MAXLINE)
os.write(wt, b"FROM 0000") os.write(wt, b"FROM 0000")
os.read(rf, MAXLINE) os.read(rf, MAXLINE)
@ -130,12 +129,12 @@ class TestCosimulation:
buf = "FROM 00 " buf = "FROM 00 "
for s, w in zip(fromSignames, fromSizes): for s, w in zip(fromSignames, fromSizes):
buf += "%s %s " % (s, w) buf += "%s %s " % (s, w)
os.write(wt, to_bytes(buf)) os.write(wt, buf.encode())
os.read(rf, MAXLINE) os.read(rf, MAXLINE)
buf = "TO 00 " buf = "TO 00 "
for s, w in zip(toSignames, toSizes): for s, w in zip(toSignames, toSizes):
buf += "%s %s " % (s, w) buf += "%s %s " % (s, w)
os.write(wt, to_bytes(buf)) os.write(wt, buf.encode())
os.read(rf, MAXLINE) os.read(rf, MAXLINE)
os.write(wt, b"START") os.write(wt, b"START")
os.read(rf, MAXLINE) os.read(rf, MAXLINE)
@ -150,7 +149,7 @@ class TestCosimulation:
buf = "TO 01 " buf = "TO 01 "
for s, w in zip(fromSignames, fromSizes): for s, w in zip(fromSignames, fromSizes):
buf += "%s %s " % (s, w) buf += "%s %s " % (s, w)
os.write(wt, to_bytes(buf)) os.write(wt, buf.encode())
def testNoComm(self): def testNoComm(self):
with raises_kind(CosimulationError, _error.NoCommunication): with raises_kind(CosimulationError, _error.NoCommunication):
@ -177,7 +176,7 @@ class TestCosimulation:
for s, w in zip(fromSignames, fromSizes): for s, w in zip(fromSignames, fromSizes):
buf += "%s %s " % (s, w) buf += "%s %s " % (s, w)
buf += "bb 5" buf += "bb 5"
os.write(wt, to_bytes(buf)) os.write(wt, buf.encode())
def testToSignalsDupl(self): def testToSignalsDupl(self):
with raises_kind(CosimulationError, _error.DuplicateSigNames): with raises_kind(CosimulationError, _error.DuplicateSigNames):
@ -190,7 +189,7 @@ class TestCosimulation:
for s, w in zip(toSignames, toSizes): for s, w in zip(toSignames, toSizes):
buf += "%s %s " % (s, w) buf += "%s %s " % (s, w)
buf += "fff 6" buf += "fff 6"
os.write(wt, to_bytes(buf)) os.write(wt, buf.encode())
def testFromSignalVals(self): def testFromSignalVals(self):
cosim = Cosimulation(exe + "cosimFromSignalVals", **allSigs) cosim = Cosimulation(exe + "cosimFromSignalVals", **allSigs)
@ -204,7 +203,7 @@ class TestCosimulation:
buf = "FROM 00 " buf = "FROM 00 "
for s, w in zip(fromSignames, fromSizes): for s, w in zip(fromSignames, fromSizes):
buf += "%s %s " % (s, w) buf += "%s %s " % (s, w)
os.write(wt, to_bytes(buf)) os.write(wt, buf.encode())
os.read(rf, MAXLINE) os.read(rf, MAXLINE)
os.write(wt, b"TO 0000 a 1") os.write(wt, b"TO 0000 a 1")
os.read(rf, MAXLINE) os.read(rf, MAXLINE)
@ -234,12 +233,12 @@ class TestCosimulation:
buf = "FROM 00 " buf = "FROM 00 "
for s, w in zip(fromSignames, fromSizes): for s, w in zip(fromSignames, fromSizes):
buf += "%s %s " % (s, w) buf += "%s %s " % (s, w)
os.write(wt, to_bytes(buf)) os.write(wt, buf.encode())
os.read(rf, MAXLINE) os.read(rf, MAXLINE)
buf = "TO 00 " buf = "TO 00 "
for s, w in zip(toSignames, toSizes): for s, w in zip(toSignames, toSizes):
buf += "%s %s " % (s, w) buf += "%s %s " % (s, w)
os.write(wt, to_bytes(buf)) os.write(wt, buf.encode())
os.read(rf, MAXLINE) os.read(rf, MAXLINE)
os.write(wt, b"START") os.write(wt, b"START")
os.read(rf, MAXLINE) os.read(rf, MAXLINE)
@ -249,7 +248,7 @@ class TestCosimulation:
buf += " " buf += " "
buf += hex(v)[2:] buf += hex(v)[2:]
buf += " " buf += " "
os.write(wt, to_bytes(buf)) os.write(wt, buf.encode())
os.read(rf, MAXLINE) os.read(rf, MAXLINE)
buf = "0 " buf = "0 "
for s, v in zip(toSignames, toXVals): for s, v in zip(toSignames, toXVals):
@ -257,7 +256,7 @@ class TestCosimulation:
buf += " " buf += " "
buf += v buf += v
buf += " " buf += " "
os.write(wt, to_bytes(buf)) os.write(wt, buf.encode())
if __name__ == "__main__": if __name__ == "__main__":
getattr(TestCosimulation, sys.argv[1])() getattr(TestCosimulation, sys.argv[1])()

View File

@ -2,7 +2,6 @@ from __future__ import absolute_import
import myhdl import myhdl
from myhdl import * from myhdl import *
from myhdl._compat import long
def bench_SliceSignal(): def bench_SliceSignal():
@ -114,9 +113,9 @@ def bench_ConcatSignalWithConsts():
d.next = m d.next = m
e.next = n e.next = n
yield delay(10) yield delay(10)
assert s[29:27] == long(c1, 2) assert s[29:27] == int(c1, 2)
assert s[27:22] == a assert s[27:22] == a
assert s[21] == long(c2, 2) assert s[21] == int(c2, 2)
assert s[20] == b assert s[20] == b
assert s[20:17] == c3 assert s[20:17] == c3
assert s[17:14] == c assert s[17:14] == c

View File

@ -29,7 +29,6 @@ from random import randrange
import pytest import pytest
from myhdl import Signal, intbv from myhdl import Signal, intbv
from myhdl._compat import long
from myhdl._simulator import _siglist from myhdl._simulator import _siglist
random.seed(1) # random, but deterministic random.seed(1) # random, but deterministic
@ -107,8 +106,8 @@ class TestSig:
for s in (self.sigs + self.incompatibleSigs): for s in (self.sigs + self.incompatibleSigs):
for n in (self.vals + self.incompatibleVals): for n in (self.vals + self.incompatibleVals):
assert isinstance(s.val, s._type) assert isinstance(s.val, s._type)
if isinstance(s.val, (int, long, intbv)): if isinstance(s.val, (int, intbv)):
t = (int, long, intbv) t = (int, intbv)
else: else:
t = s._type t = s._type
if not isinstance(n, t): if not isinstance(n, t):
@ -261,11 +260,11 @@ class TestSignalAsNum:
def binaryCheck(self, op, imin=0, imax=None, jmin=0, jmax=None): def binaryCheck(self, op, imin=0, imax=None, jmin=0, jmax=None):
self.seqSetup(imin=imin, imax=imax, jmin=jmin, jmax=jmax) self.seqSetup(imin=imin, imax=imax, jmin=jmin, jmax=jmax)
for i, j in zip(self.seqi, self.seqj): for i, j in zip(self.seqi, self.seqj):
bi = Signal(long(i)) bi = Signal(int(i))
bj = Signal(long(j)) bj = Signal(int(j))
ref = op(long(i), j) ref = op(int(i), j)
r1 = op(bi, j) r1 = op(bi, j)
r2 = op(long(i), bj) r2 = op(int(i), bj)
r3 = op(bi, bj) r3 = op(bi, bj)
assert type(r1) == type(ref) assert type(r1) == type(ref)
assert type(r2) == type(ref) assert type(r2) == type(ref)
@ -278,13 +277,13 @@ class TestSignalAsNum:
self.seqSetup(imin=imin, imax=imax, jmin=jmin, jmax=jmax) self.seqSetup(imin=imin, imax=imax, jmin=jmin, jmax=jmax)
for i, j in zip(self.seqi, self.seqj): for i, j in zip(self.seqi, self.seqj):
bj = Signal(j) bj = Signal(j)
ref = long(i) ref = int(i)
ref = op(ref, j) ref = op(ref, j)
r1 = bi1 = Signal(i) r1 = bi1 = Signal(i)
with pytest.raises(TypeError): with pytest.raises(TypeError):
r1 = op(r1, j) r1 = op(r1, j)
r2 = long(i) r2 = int(i)
r2 = op(r2, bj) r2 = op(r2, bj)
r3 = bi3 = Signal(i) r3 = bi3 = Signal(i)
with pytest.raises(TypeError): with pytest.raises(TypeError):
@ -405,7 +404,7 @@ class TestSignalAsNum:
self.conversionCheck(int, imax=maxint) self.conversionCheck(int, imax=maxint)
def testLong(self): def testLong(self):
self.conversionCheck(long) self.conversionCheck(int)
def testFloat(self): def testFloat(self):
self.conversionCheck(float) self.conversionCheck(float)
@ -469,11 +468,11 @@ class TestSignalIntBvIndexing:
def testGetItem(self): def testGetItem(self):
self.seqsSetup() self.seqsSetup()
for s in self.seqs: for s in self.seqs:
n = long(s, 2) n = int(s, 2)
sbv = Signal(intbv(n)) sbv = Signal(intbv(n))
sbvi = Signal(intbv(~n)) sbvi = Signal(intbv(~n))
for i in range(len(s)+20): for i in range(len(s)+20):
ref = long(getItem(s, i), 2) ref = int(getItem(s, i), 2)
res = sbv[i] res = sbv[i]
resi = sbvi[i] resi = sbvi[i]
assert res == ref assert res == ref
@ -484,7 +483,7 @@ class TestSignalIntBvIndexing:
def testGetSlice(self): def testGetSlice(self):
self.seqsSetup() self.seqsSetup()
for s in self.seqs: for s in self.seqs:
n = long(s, 2) n = int(s, 2)
sbv = Signal(intbv(n)) sbv = Signal(intbv(n))
sbvi = Signal(intbv(~n)) sbvi = Signal(intbv(~n))
for i in range(1, len(s)+20): for i in range(1, len(s)+20):
@ -495,7 +494,7 @@ class TestSignalIntBvIndexing:
except ValueError: except ValueError:
assert i<=j assert i<=j
continue continue
ref = long(getSlice(s, i, j), 2) ref = int(getSlice(s, i, j), 2)
assert res == ref assert res == ref
assert type(res) == intbv assert type(res) == intbv
mask = (2**(i-j))-1 mask = (2**(i-j))-1

View File

@ -25,7 +25,6 @@ import sys
from random import randrange from random import randrange
from myhdl import bin from myhdl import bin
from myhdl._compat import long
random.seed(1) # random, but deterministic random.seed(1) # random, but deterministic
@ -48,7 +47,7 @@ def binref(num, width=0):
Optional parameter: Optional parameter:
width -- specifies the desired string (sign bit padding) width -- specifies the desired string (sign bit padding)
""" """
num = long(num) num = int(num)
s = _int2bitstring(num) s = _int2bitstring(num)
if width: if width:
pad = '0' pad = '0'

View File

@ -26,7 +26,6 @@ from functools import reduce
import pytest import pytest
from myhdl._compat import long
from myhdl._concat import concat from myhdl._concat import concat
from myhdl._intbv import intbv from myhdl._intbv import intbv
from myhdl._Signal import Signal from myhdl._Signal import Signal
@ -49,7 +48,7 @@ class TestConcat:
bv = concat(base, *exts) bv = concat(base, *exts)
refstr = basestr + reduce(operator.add, extstr) refstr = basestr + reduce(operator.add, extstr)
reflen = len(refstr) reflen = len(refstr)
ref = long(refstr, 2) ref = int(refstr, 2)
assert bv == ref assert bv == ref
assert len(bv) == reflen assert len(bv) == reflen
@ -58,7 +57,7 @@ class TestConcat:
for exts, extstr in zip(extslist, self.extslist): for exts, extstr in zip(extslist, self.extslist):
bv = concat(base, *exts) bv = concat(base, *exts)
refstr = basestr + reduce(operator.add, extstr) refstr = basestr + reduce(operator.add, extstr)
ref = long(refstr, 2) ref = int(refstr, 2)
assert bv == ref assert bv == ref
assert len(bv) == 0 assert len(bv) == 0
@ -68,12 +67,12 @@ class TestConcat:
self.ConcatToSizedBase(bases, extslist) self.ConcatToSizedBase(bases, extslist)
def testConcatStringsToInt(self): def testConcatStringsToInt(self):
bases = [long(base, 2) for base in self.bases] bases = [int(base, 2) for base in self.bases]
extslist = self.extslist extslist = self.extslist
self.ConcatToUnsizedBase(bases, extslist) self.ConcatToUnsizedBase(bases, extslist)
def testConcatStringsToSignalInt(self): def testConcatStringsToSignalInt(self):
bases = [Signal(long(base, 2)) for base in self.bases] bases = [Signal(int(base, 2)) for base in self.bases]
extslist = self.extslist extslist = self.extslist
self.ConcatToUnsizedBase(bases, extslist) self.ConcatToUnsizedBase(bases, extslist)
@ -140,28 +139,28 @@ class TestConcat:
self.ConcatToSizedBase(bases, extslist) self.ConcatToSizedBase(bases, extslist)
def testConcatIntbvsToInt(self): def testConcatIntbvsToInt(self):
bases = [long(base, 2) for base in self.bases] bases = [int(base, 2) for base in self.bases]
extslist = [] extslist = []
for exts in self.extslist: for exts in self.extslist:
extslist.append([intbv(ext) for ext in exts]) extslist.append([intbv(ext) for ext in exts])
self.ConcatToUnsizedBase(bases, extslist) self.ConcatToUnsizedBase(bases, extslist)
def testConcatSignalIntbvsToInt(self): def testConcatSignalIntbvsToInt(self):
bases = [long(base, 2) for base in self.bases] bases = [int(base, 2) for base in self.bases]
extslist = [] extslist = []
for exts in self.extslist: for exts in self.extslist:
extslist.append([Signal(intbv(ext)) for ext in exts]) extslist.append([Signal(intbv(ext)) for ext in exts])
self.ConcatToUnsizedBase(bases, extslist) self.ConcatToUnsizedBase(bases, extslist)
def testConcatIntbvsToSignalInt(self): def testConcatIntbvsToSignalInt(self):
bases = [Signal(long(base, 2)) for base in self.bases] bases = [Signal(int(base, 2)) for base in self.bases]
extslist = [] extslist = []
for exts in self.extslist: for exts in self.extslist:
extslist.append([intbv(ext) for ext in exts]) extslist.append([intbv(ext) for ext in exts])
self.ConcatToUnsizedBase(bases, extslist) self.ConcatToUnsizedBase(bases, extslist)
def testConcatSignalIntbvsToSignalInt(self): def testConcatSignalIntbvsToSignalInt(self):
bases = [Signal(long(base, 2)) for base in self.bases] bases = [Signal(int(base, 2)) for base in self.bases]
extslist = [] extslist = []
for exts in self.extslist: for exts in self.extslist:
extslist.append([Signal(intbv(ext)) for ext in exts]) extslist.append([Signal(intbv(ext)) for ext in exts])
@ -199,7 +198,7 @@ class TestConcat:
def testConcatMixToUnsizedBase(self): def testConcatMixToUnsizedBase(self):
bases = [] bases = []
for base in self.bases: for base in self.bases:
seq = (long(base, 2), Signal(long(base, 2))) seq = (int(base, 2), Signal(int(base, 2)))
bases.append(random.choice(seq)) bases.append(random.choice(seq))
extslist = [] extslist = []
for exts in self.extslist: for exts in self.extslist:

View File

@ -28,7 +28,6 @@ from random import randrange
import pytest import pytest
from myhdl._compat import integer_types, long
from myhdl._intbv import intbv from myhdl._intbv import intbv
random.seed(2) # random, but deterministic random.seed(2) # random, but deterministic
@ -105,11 +104,11 @@ class TestIntBvIndexing:
def testGetItem(self): def testGetItem(self):
self.seqsSetup() self.seqsSetup()
for s in self.seqs: for s in self.seqs:
n = long(s, 2) n = int(s, 2)
bv = intbv(n) bv = intbv(n)
bvi = intbv(~n) bvi = intbv(~n)
for i in range(len(s)+20): for i in range(len(s)+20):
ref = long(getItem(s, i), 2) ref = int(getItem(s, i), 2)
res = bv[i] res = bv[i]
resi = bvi[i] resi = bvi[i]
assert res == ref assert res == ref
@ -120,7 +119,7 @@ class TestIntBvIndexing:
def testGetSlice(self): def testGetSlice(self):
self.seqsSetup() self.seqsSetup()
for s in self.seqs: for s in self.seqs:
n = long(s, 2) n = int(s, 2)
bv = intbv(n) bv = intbv(n)
bvi = intbv(~n) bvi = intbv(~n)
for i in range(1, len(s)+20): for i in range(1, len(s)+20):
@ -131,7 +130,7 @@ class TestIntBvIndexing:
except ValueError: except ValueError:
assert i<=j assert i<=j
continue continue
ref = long(getSlice(s, i, j), 2) ref = int(getSlice(s, i, j), 2)
assert res == ref assert res == ref
assert type(res) == intbv assert type(res) == intbv
mask = (2**(i-j))-1 mask = (2**(i-j))-1
@ -141,13 +140,13 @@ class TestIntBvIndexing:
def testGetSliceLeftOpen(self): def testGetSliceLeftOpen(self):
self.seqsSetup() self.seqsSetup()
for s in self.seqs: for s in self.seqs:
n = long(s, 2) n = int(s, 2)
bv = intbv(n) bv = intbv(n)
bvi = intbv(~n) bvi = intbv(~n)
for j in range(0,len(s)+20): for j in range(0,len(s)+20):
res = bv[:j] res = bv[:j]
resi = bvi[:j] resi = bvi[:j]
ref = long(getSliceLeftOpen(s, j), 2) ref = int(getSliceLeftOpen(s, j), 2)
assert res == ref assert res == ref
assert type(res) == intbv assert type(res) == intbv
assert resi+ref == -1 assert resi+ref == -1
@ -156,7 +155,7 @@ class TestIntBvIndexing:
def testSetItem(self): def testSetItem(self):
self.seqsSetup() self.seqsSetup()
for s in self.seqs: for s in self.seqs:
n = long(s, 2) n = int(s, 2)
for it in (int, intbv): for it in (int, intbv):
for i in range(len(s)+20): for i in range(len(s)+20):
# print i # print i
@ -168,10 +167,10 @@ class TestIntBvIndexing:
bv1[i] = it(1) bv1[i] = it(1)
bv0i[i] = it(0) bv0i[i] = it(0)
bv1i[i] = it(1) bv1i[i] = it(1)
ref0 = long(setItem(s, i, '0'), 2) ref0 = int(setItem(s, i, '0'), 2)
ref1 = long(setItem(s, i, '1'), 2) ref1 = int(setItem(s, i, '1'), 2)
ref0i = ~long(setItem(s, i, '1'), 2) ref0i = ~int(setItem(s, i, '1'), 2)
ref1i = ~long(setItem(s, i, '0'), 2) ref1i = ~int(setItem(s, i, '0'), 2)
assert bv0 == ref0 assert bv0 == ref0
assert bv1 == ref1 assert bv1 == ref1
assert bv0i == ref0i assert bv0i == ref0i
@ -181,7 +180,7 @@ class TestIntBvIndexing:
self.seqsSetup() self.seqsSetup()
toggle = 0 toggle = 0
for s in self.seqs: for s in self.seqs:
n = long(s, 2) n = int(s, 2)
for i in range(1, len(s)+5): for i in range(1, len(s)+5):
for j in range(0, len(s)+5): for j in range(0, len(s)+5):
for v in self.seqv: for v in self.seqv:
@ -189,7 +188,7 @@ class TestIntBvIndexing:
extv = ext + v extv = ext + v
bv = intbv(n) bv = intbv(n)
bvi = intbv(~n) bvi = intbv(~n)
val = long(v, 2) val = int(v, 2)
toggle ^= 1 toggle ^= 1
if toggle: if toggle:
val = intbv(val) val = intbv(val)
@ -199,7 +198,7 @@ class TestIntBvIndexing:
assert i<=j or val >= 2**(i-j) assert i<=j or val >= 2**(i-j)
continue continue
else: else:
ref = long(setSlice(s, i, j, extv), 2) ref = int(setSlice(s, i, j, extv), 2)
assert bv == ref assert bv == ref
mask = (2**(i-j))-1 mask = (2**(i-j))-1
vali = val ^ mask vali = val ^ mask
@ -209,27 +208,27 @@ class TestIntBvIndexing:
assert vali >= 2**(i-j) assert vali >= 2**(i-j)
continue continue
else: else:
refi = ~long(setSlice(s, i, j, extv), 2) refi = ~int(setSlice(s, i, j, extv), 2)
assert bvi == refi assert bvi == refi
def testSetSliceLeftOpen(self): def testSetSliceLeftOpen(self):
self.seqsSetup() self.seqsSetup()
toggle = 0 toggle = 0
for s in self.seqs: for s in self.seqs:
n = long(s, 2) n = int(s, 2)
for j in range(0, len(s)+5): for j in range(0, len(s)+5):
for v in self.seqv: for v in self.seqv:
bv = intbv(n) bv = intbv(n)
bvi = intbv(~n) bvi = intbv(~n)
val = long(v, 2) val = int(v, 2)
toggle ^= 1 toggle ^= 1
if toggle: if toggle:
val = intbv(val) val = intbv(val)
bv[:j] = val bv[:j] = val
bvi[:j] = -1-val bvi[:j] = -1-val
ref = long(setSliceLeftOpen(s, j, v), 2) ref = int(setSliceLeftOpen(s, j, v), 2)
assert bv == ref assert bv == ref
refi = ~long(setSliceLeftOpen(s, j, v), 2) refi = ~int(setSliceLeftOpen(s, j, v), 2)
assert bvi == refi assert bvi == refi
@ -253,7 +252,7 @@ class TestIntBvAsInt:
j = randrange(jmin, jfirstmax) j = randrange(jmin, jfirstmax)
seqi.append(i) seqi.append(i)
seqj.append(j) seqj.append(j)
# then some potentially longs # then some potentially ints
for n in range(100): for n in range(100):
if not imax: if not imax:
i = randrange(maxint) + randrange(maxint) i = randrange(maxint) + randrange(maxint)
@ -271,11 +270,11 @@ class TestIntBvAsInt:
def binaryCheck(self, op, imin=0, imax=None, jmin=0, jmax=None): def binaryCheck(self, op, imin=0, imax=None, jmin=0, jmax=None):
self.seqSetup(imin=imin, imax=imax, jmin=jmin, jmax=jmax) self.seqSetup(imin=imin, imax=imax, jmin=jmin, jmax=jmax)
for i, j in zip(self.seqi, self.seqj): for i, j in zip(self.seqi, self.seqj):
bi = intbv(long(i)) bi = intbv(int(i))
bj = intbv(j) bj = intbv(j)
ref = op(long(i), j) ref = op(int(i), j)
r1 = op(bi, j) r1 = op(bi, j)
r2 = op(long(i), bj) r2 = op(int(i), bj)
r3 = op(bi, bj) r3 = op(bi, bj)
#self.assertEqual(type(r1), intbv) #self.assertEqual(type(r1), intbv)
#self.assertEqual(type(r2), intbv) #self.assertEqual(type(r2), intbv)
@ -288,13 +287,13 @@ class TestIntBvAsInt:
self.seqSetup(imin=imin, imax=imax, jmin=jmin, jmax=jmax) self.seqSetup(imin=imin, imax=imax, jmin=jmin, jmax=jmax)
for i, j in zip(self.seqi, self.seqj): for i, j in zip(self.seqi, self.seqj):
bj = intbv(j) bj = intbv(j)
ref = long(i) ref = int(i)
ref = op(ref, j) ref = op(ref, j)
r1 = bi1 = intbv(long(i)) r1 = bi1 = intbv(int(i))
r1 = op(r1, j) r1 = op(r1, j)
r2 = long(i) r2 = int(i)
r2 = op(r2, bj) r2 = op(r2, bj)
r3 = bi3 = intbv(long(i)) r3 = bi3 = intbv(int(i))
r3 = op(r3, bj) r3 = op(r3, bj)
assert type(r1) == intbv assert type(r1) == intbv
assert type(r3) == intbv assert type(r3) == intbv
@ -420,7 +419,7 @@ class TestIntBvAsInt:
self.conversionCheck(int, imax=maxint) self.conversionCheck(int, imax=maxint)
def testLong(self): def testLong(self):
self.conversionCheck(long) self.conversionCheck(int)
def testFloat(self): def testFloat(self):
self.conversionCheck(float) self.conversionCheck(float)
@ -486,10 +485,10 @@ class TestIntbvBounds:
a = intbv(i) a = intbv(i)
assert a == i # just to be sure assert a == i # just to be sure
try: try:
exec("a %s long(j)" % op) exec("a %s int(j)" % op)
except (ZeroDivisionError, ValueError): except (ZeroDivisionError, ValueError):
return # prune return # prune
if not isinstance(a._val, integer_types): if not isinstance(a._val, int):
return # prune return # prune
if abs(a) > maxint * maxint: if abs(a) > maxint * maxint:
return # keep it reasonable return # keep it reasonable
@ -498,17 +497,17 @@ class TestIntbvBounds:
for m in (i+1, a): for m in (i+1, a):
b = intbv(i, min=i, max=m) b = intbv(i, min=i, max=m)
with pytest.raises(ValueError): with pytest.raises(ValueError):
exec("b %s long(j)" % op) exec("b %s int(j)" % op)
elif a < i : elif a < i :
b = intbv(i, min=a, max=i+1) b = intbv(i, min=a, max=i+1)
exec("b %s long(j)" % op) # should be ok exec("b %s int(j)" % op) # should be ok
for m in (a+1, i): for m in (a+1, i):
b = intbv(i, min=m, max=i+1) b = intbv(i, min=m, max=i+1)
with pytest.raises(ValueError): with pytest.raises(ValueError):
exec("b %s long(j)" % op) exec("b %s int(j)" % op)
else: # a == i else: # a == i
b = intbv(i, min=i, max=i+1) b = intbv(i, min=i, max=i+1)
exec("b %s long(j)" % op) # should be ok exec("b %s int(j)" % op) # should be ok
def checkOp(self, op): def checkOp(self, op):
for i in (0, 1, -1, 2, -2, 16, -24, 129, -234, 1025, -15660): for i in (0, 1, -1, 2, -2, 16, -24, 129, -234, 1025, -15660):

View File

@ -29,7 +29,6 @@ from random import randrange
from myhdl._intbv import intbv from myhdl._intbv import intbv
from myhdl._modbv import modbv from myhdl._modbv import modbv
from myhdl._compat import integer_types, long
random.seed(3) random.seed(3)
maxint=sys.maxsize maxint=sys.maxsize

View File

@ -8,8 +8,8 @@ import sys
from collections import defaultdict from collections import defaultdict
if sys.version_info < (2, 6) or (3, 0) <= sys.version_info < (3, 4): if sys.version_info < (3, 4):
raise RuntimeError("Python version 2.6, 2.7 or >= 3.4 required.") raise RuntimeError("Python version 3.4+ required.")
# Prefer setuptools over distutils # Prefer setuptools over distutils
@ -53,10 +53,11 @@ setup(
'License :: OSI Approved :: GNU Lesser General Public License v2 (LGPLv2)', 'License :: OSI Approved :: GNU Lesser General Public License v2 (LGPLv2)',
'Operating System :: OS Independent', 'Operating System :: OS Independent',
'Programming Language :: Python', 'Programming Language :: Python',
'Programming Language :: Python :: 2',
'Programming Language :: Python :: 2.6',
'Programming Language :: Python :: 2.7',
'Programming Language :: Python :: 3', 'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3.4', 'Programming Language :: Python :: 3.4',
'Programming Language :: Python :: 3.5',
'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.7',
'Programming Language :: Python :: 3 :: Only',
] ]
) )

View File

@ -1,5 +1,5 @@
[tox] [tox]
envlist = py27,py34 envlist = py34
[testenv] [testenv]
deps = pytest-xdist deps = pytest-xdist