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

Unified Diff: mojo/monacl/gen/interface_dsl.py

Issue 385983008: Mojo + NaCl prototype. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Better diff 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/monacl/gen/interface_dsl.py
diff --git a/mojo/monacl/gen/interface_dsl.py b/mojo/monacl/gen/interface_dsl.py
new file mode 100644
index 0000000000000000000000000000000000000000..ae19def48d56c71256d110c9985e8c86fecbe6f0
--- /dev/null
+++ b/mojo/monacl/gen/interface_dsl.py
@@ -0,0 +1,119 @@
+# Copyright 2014 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+class Interface(object):
+ def __init__(self):
+ self.functions = []
+
+ def func(self, name, returnType):
+ f = Function(self, len(self.functions), name, returnType)
+ self.functions.append(f)
+ return f
+
+ def finalize(self):
+ for f in self.functions:
+ f.finalize()
+
+class Function(object):
+ def __init__(self, parent, uid, name, returnType):
+ self.parent = parent
+ self.uid = uid
+ self.name = name
+ self.returnType = returnType
+ self.params = []
+ self.paramLUT = {}
+
+ def param(self, name, paramType=None):
+ p = Param(self, len(self.params), name, paramType)
+ self.params.append(p)
+ self.paramLUT[name] = p
+ return p
+
+ def paramList(self):
+ return [param.paramType + " "+ param.name for param in self.params]
+
+ def paramDecl(self):
+ if self.params:
+ return ", ".join(self.paramList())
+ else:
+ return "void"
+
+ def finalize(self):
+ for p in self.params:
+ p.finalize()
+ self.resultParam = Param(self, len(self.params), "result").out(self.returnType)
+
+class Param(object):
+ def __init__(self, parent, uid, name, paramType=None):
+ self.parent = parent
+ self.uid = uid
+ self.name = name
+ self.baseType = paramType
+ self.paramType = paramType
+ self.size = None
+ self.isInput = False
+ self.isOutput = False
+ self.isArray = False
+ self.isStruct = False
+ self.isOptional = False
+
+ def getSizeParam(self):
+ assert self.size
+ return self.parent.paramLUT[self.size]
+
+ def inp(self, t):
+ self.baseType = t
+ self.paramType = t
+ self.isInput = True
+ return self
+
+ def inArray(self, t, size):
+ self.baseType = t
+ self.paramType = "const " + t + "*"
+ self.size = size
+ self.isInput = True
+ self.isArray = True
+ return self
+
+ def inStruct(self, t):
+ self.baseType = t
+ self.paramType = "const struct " + t + "*"
+ self.isInput = True
+ self.isStruct = True
+ return self
+
+ def inOut(self, t):
+ self.baseType = t
+ self.paramType = t + "*"
+ self.isInput = True
+ self.isOutput = True
+ return self
+
+ def out(self, t):
+ self.baseType = t
+ self.paramType = t + "*"
+ self.isOutput = True
+ return self
+
+ def outArray(self, t, size):
+ self.baseType = t
+ self.paramType = t + "*"
+ self.size = size
+ self.isArray = True
+ self.isOutput = True
+ return self
+
+ def optional(self):
+ assert not self.isPassedByValue()
+ self.isOptional = True
+ return self
+
+ def isScalar(self):
+ return not self.isArray and not self.isStruct
+
+ def isPassedByValue(self):
+ return not self.isOutput and self.isScalar()
+
+ def finalize(self):
+ pass

Powered by Google App Engine
This is Rietveld 408576698