Chromium Code Reviews| Index: mojo/public/python/mojo/bindings/descriptor.py |
| diff --git a/mojo/public/python/mojo/bindings/descriptor.py b/mojo/public/python/mojo/bindings/descriptor.py |
| index cecea0ed7887fe85edb7443e10f1abc625d7ea85..b04685c226da8f3f97bab6e1e3b627101cafa932 100644 |
| --- a/mojo/public/python/mojo/bindings/descriptor.py |
| +++ b/mojo/public/python/mojo/bindings/descriptor.py |
| @@ -6,6 +6,8 @@ |
| The descriptors used to define generated elements of the mojo python bindings. |
| """ |
| +import array |
| + |
| # pylint: disable=F0401 |
| from mojo.system import Handle |
| @@ -59,11 +61,11 @@ class IntegerType(NumericType): |
| def Convert(self, value): |
| if value is None: |
| - raise ValueError('None is not an integer.') |
| + raise TypeError('None is not an integer.') |
| if not isinstance(value, (int, long)): |
| - raise ValueError('%r is not an integer type' % value) |
| + raise TypeError('%r is not an integer type' % value) |
| if value < self._min_value or value > self._max_value: |
| - raise ValueError('%r is not in the range [%d, %d]' % |
| + raise OverflowError('%r is not in the range [%d, %d]' % |
| (value, self._min_value, self._max_value)) |
|
sdefresne
2014/09/10 08:40:00
nit: indent
qsr
2014/09/10 09:23:38
Done.
|
| return value |
| @@ -77,9 +79,9 @@ class FloatType(NumericType): |
| def Convert(self, value): |
| if value is None: |
| - raise ValueError('None is not an floating point number.') |
| + raise TypeError('None is not an floating point number.') |
| if not isinstance(value, (int, long, float)): |
| - raise ValueError('%r is not a numeric type' % value) |
| + raise TypeError('%r is not a numeric type' % value) |
| return float(value) |
| @@ -100,7 +102,7 @@ class StringType(Type): |
| return value |
| if isinstance(value, str): |
| return unicode(value) |
| - raise ValueError('%r is not a string' % value) |
| + raise TypeError('%r is not a string' % value) |
| class HandleType(Type): |
| @@ -114,25 +116,47 @@ class HandleType(Type): |
| if value is None: |
| return Handle() |
| if not isinstance(value, Handle): |
| - raise ValueError('%r is not a handle' % value) |
| + raise TypeError('%r is not a handle' % value) |
| return value |
| -class ArrayType(Type): |
| - """Type object for arrays.""" |
| +class GenericArrayType(Type): |
| + """Abstract Type object for arrays.""" |
| - def __init__(self, sub_type, nullable=False, length=0): |
| + def __init__(self, nullable=False, length=0): |
| Type.__init__(self) |
| - self.sub_type = sub_type |
| self.nullable = nullable |
| self.length = length |
| + |
| +class PointerArrayType(GenericArrayType): |
| + """Type object for arrays of pointers.""" |
| + |
| + def __init__(self, sub_type, nullable=False, length=0): |
| + GenericArrayType.__init__(self, nullable, length) |
| + self.sub_type = sub_type |
| + |
| def Convert(self, value): |
| if value is None: |
| return value |
| return [self.sub_type.Convert(x) for x in value] |
| +class NativeArrayType(GenericArrayType): |
| + """Type object for arrays of native types.""" |
| + |
| + def __init__(self, typecode, nullable=False, length=0): |
| + GenericArrayType.__init__(self, nullable, length) |
| + self.typecode = typecode |
| + |
| + def Convert(self, value): |
| + if value is None: |
| + return value |
| + if isinstance(value, array.array) and value.typecode == self.typecode: |
| + return value |
| + return array.array(self.typecode, value) |
| + |
| + |
| class StructType(Type): |
| """Type object for structs.""" |
| @@ -144,7 +168,7 @@ class StructType(Type): |
| def Convert(self, value): |
| if value is None or isinstance(value, self.struct_type): |
| return value |
| - raise ValueError('%r is not an instance of %r' % (value, self.struct_type)) |
| + raise TypeError('%r is not an instance of %r' % (value, self.struct_type)) |
| def GetDefaultValue(self, value): |
| if value: |