Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(462)

Unified Diff: mojo/public/tools/bindings/pylib/mojom/generate/module.py

Issue 437643002: Support nullable types in mojom. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: mojo/public/tools/bindings/pylib/mojom/generate/module.py
diff --git a/mojo/public/tools/bindings/pylib/mojom/generate/module.py b/mojo/public/tools/bindings/pylib/mojom/generate/module.py
index c55b85e2e3313667dfaafb2bde993cbc12570ea2..c69a72610a39a2aa7f9d8d1959116d0542999d7a 100644
--- a/mojo/public/tools/bindings/pylib/mojom/generate/module.py
+++ b/mojo/public/tools/bindings/pylib/mojom/generate/module.py
@@ -126,6 +126,7 @@ class Array(Kind):
else:
Kind.__init__(self)
+
class FixedArray(Kind):
def __init__(self, length, kind=None):
self.kind = kind
@@ -135,6 +136,7 @@ class FixedArray(Kind):
else:
Kind.__init__(self)
+
class InterfaceRequest(Kind):
def __init__(self, kind=None):
self.kind = kind
@@ -211,6 +213,31 @@ class Enum(Kind):
self.fields = []
+def SupportsNullable(kind):
+ if isinstance(kind, (Struct, Array, FixedArray, Interface, InterfaceRequest)):
+ return True
+
+ return (kind == STRING or kind == HANDLE or kind == DCPIPE or
darin (slow to review) 2014/08/03 05:57:58 what does it mean for a handle-type to be nullable
yzshen1 2014/08/03 08:27:46 I think for a handle type, nullable means it could
+ kind == DPPIPE or kind == MSGPIPE or kind == SHAREDBUFFER)
+
+
+class Nullable(Kind):
darin (slow to review) 2014/08/03 05:57:58 I'm kind of surprised to see Nullable as a subclas
yzshen1 2014/08/03 08:27:46 I agree that it should be redesigned. The biggest
+ def __init__(self, kind=None):
+ Kind.__init__(self)
+ self.kind = None
+
+ if kind is not None:
+ self.SetKind(kind)
+ if kind.spec is not None:
+ self.spec = '?' + kind.spec
+
+ def SetKind(self, kind):
+ if not SupportsNullable(kind):
+ raise Exception(
+ 'A type (spec "%s") cannot be made nullable' % kind.spec)
+ self.kind = kind
+
+
class Module(object):
def __init__(self, name=None, namespace=None):
self.name = name

Powered by Google App Engine
This is Rietveld 408576698