diff options
author | davemoore@chromium.org <davemoore@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-10-25 20:56:39 +0000 |
---|---|---|
committer | davemoore@chromium.org <davemoore@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-10-25 20:56:39 +0000 |
commit | a6f6ede94ee2dc156f783a3b17623850fa17b05f (patch) | |
tree | a495b1d262dbec47557184406ad4f3f6e66e5dac /mojo | |
parent | ea62ba55036a74b7844657eb7d62ee4131f98bee (diff) | |
download | chromium_src-a6f6ede94ee2dc156f783a3b17623850fa17b05f.zip chromium_src-a6f6ede94ee2dc156f783a3b17623850fa17b05f.tar.gz chromium_src-a6f6ede94ee2dc156f783a3b17623850fa17b05f.tar.bz2 |
mojo: add support for packing handles, arrays and pointers to structs
BUG=None
TEST=included
R=darin@chromium.org
Review URL: https://codereview.chromium.org/45443002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@231112 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'mojo')
-rw-r--r-- | mojo/public/bindings/generators/mojom.py | 7 | ||||
-rw-r--r-- | mojo/public/bindings/generators/mojom_pack.py | 9 | ||||
-rw-r--r-- | mojo/public/bindings/generators/mojom_pack_tests.py | 19 |
3 files changed, 28 insertions, 7 deletions
diff --git a/mojo/public/bindings/generators/mojom.py b/mojo/public/bindings/generators/mojom.py index a1007e3..4f789b7 100644 --- a/mojo/public/bindings/generators/mojom.py +++ b/mojo/public/bindings/generators/mojom.py @@ -29,10 +29,11 @@ UINT64 = Kind('u64') FLOAT = Kind('f') DOUBLE = Kind('d') STRING = Kind('s') +HANDLE = Kind('h') # Collection of all Primitive types -PRIMITIVES = [ +PRIMITIVES = ( BOOL, INT8, INT16, @@ -45,8 +46,8 @@ PRIMITIVES = [ FLOAT, DOUBLE, STRING, - # TODO(davemoore): Add HANDLE. -] + HANDLE +) class Field(object): diff --git a/mojo/public/bindings/generators/mojom_pack.py b/mojo/public/bindings/generators/mojom_pack.py index ddcc251..8eab569 100644 --- a/mojo/public/bindings/generators/mojom_pack.py +++ b/mojo/public/bindings/generators/mojom_pack.py @@ -21,16 +21,23 @@ class PackedField(object): mojom.INT32: 4, mojom.UINT32: 4, mojom.FLOAT: 4, + mojom.HANDLE: 4, mojom.INT64: 8, mojom.UINT64: 8, mojom.DOUBLE: 8, mojom.STRING: 8 } + @classmethod + def GetSizeForKind(cls, kind): + if isinstance(kind, mojom.Array) or isinstance(kind, mojom.Struct): + return 8 + return cls.kind_to_size[kind] + def __init__(self, field, ordinal): self.field = field self.ordinal = ordinal - self.size = self.kind_to_size[field.kind] + self.size = self.GetSizeForKind(field.kind) self.offset = None self.bit = None diff --git a/mojo/public/bindings/generators/mojom_pack_tests.py b/mojo/public/bindings/generators/mojom_pack_tests.py index 460543e..6ff927d 100644 --- a/mojo/public/bindings/generators/mojom_pack_tests.py +++ b/mojo/public/bindings/generators/mojom_pack_tests.py @@ -41,7 +41,6 @@ def TestOneField(): errors += EXPECT_EQ(1, len(ps.packed_fields)) return errors - # Pass three tuples. # |kinds| is a sequence of mojom.Kinds that specify the fields that are to # be created. @@ -69,14 +68,14 @@ def TestPaddingPackedInOrder(): return TestSequence( (mojom.INT8, mojom.UINT8, mojom.INT32), (1, 2, 3), - (0, 1, 4)); + (0, 1, 4)) def TestPaddingPackedOutOfOrder(): return TestSequence( (mojom.INT8, mojom.INT32, mojom.UINT8), (1, 3, 2), - (0, 1, 4)); + (0, 1, 4)) def TestPaddingPackedOverflow(): @@ -87,6 +86,19 @@ def TestPaddingPackedOverflow(): return TestSequence(kinds, fields, offsets) +def TestAllTypes(): + struct = mojom.Struct('test') + array = mojom.Array() + return TestSequence( + (mojom.BOOL, mojom.INT8, mojom.STRING, mojom.UINT8, + mojom.INT16, mojom.DOUBLE, mojom.UINT16, + mojom.INT32, mojom.UINT32, mojom.INT64, + mojom.FLOAT, mojom.STRING, mojom.HANDLE, + mojom.UINT64, mojom.Struct('test'), mojom.Array()), + (1, 2, 4, 5, 7, 3, 6, 8, 9, 10, 11, 13, 12, 14, 15, 16, 17), + (0, 1, 2, 4, 6, 8, 16, 24, 28, 32, 40, 44, 48, 56, 64, 72, 80)) + + def TestPaddingPackedOutOfOrderByOrdinal(): errors = 0 struct = mojom.Struct('test') @@ -151,6 +163,7 @@ def Main(args): errors += RunTest(TestPaddingPackedInOrder) errors += RunTest(TestPaddingPackedOutOfOrder) errors += RunTest(TestPaddingPackedOverflow) + errors += RunTest(TestAllTypes) errors += RunTest(TestPaddingPackedOutOfOrderByOrdinal) errors += RunTest(TestBools) |