summaryrefslogtreecommitdiffstats
path: root/mojo
diff options
context:
space:
mode:
authordavemoore@chromium.org <davemoore@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-10-25 20:56:39 +0000
committerdavemoore@chromium.org <davemoore@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-10-25 20:56:39 +0000
commita6f6ede94ee2dc156f783a3b17623850fa17b05f (patch)
treea495b1d262dbec47557184406ad4f3f6e66e5dac /mojo
parentea62ba55036a74b7844657eb7d62ee4131f98bee (diff)
downloadchromium_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.py7
-rw-r--r--mojo/public/bindings/generators/mojom_pack.py9
-rw-r--r--mojo/public/bindings/generators/mojom_pack_tests.py19
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)