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

Unified Diff: mojo/nacl/sfi/nacl_bindings_generator/generate_nacl_bindings.py

Issue 1778753002: Implement MojoGetBufferInformation(), part 3. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 4 years, 9 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/nacl/sfi/nacl_bindings_generator/generate_nacl_bindings.py
diff --git a/mojo/nacl/sfi/nacl_bindings_generator/generate_nacl_bindings.py b/mojo/nacl/sfi/nacl_bindings_generator/generate_nacl_bindings.py
index de62359864a74c5761d5835157febec73ccaf867..00198269d88f5acaa413924bfb262db774c746b3 100755
--- a/mojo/nacl/sfi/nacl_bindings_generator/generate_nacl_bindings.py
+++ b/mojo/nacl/sfi/nacl_bindings_generator/generate_nacl_bindings.py
@@ -277,6 +277,7 @@ class PointerInOutImpl(ParamImpl):
else:
code << 'CopyOutPointer(nap, %s_value, %s_ptr);' % (name, name)
+
class ArrayImpl(ParamImpl):
def DeclareVars(self, code):
code << '%s %s;' % (self.param.param_type, self.param.name)
@@ -312,6 +313,24 @@ class ExtensibleStructInputImpl(ParamImpl):
return self.param.name
+# We can handle extensible out structs just like we handle output arrays, except
+# that the (input buffer) size is always in bytes.
+class ExtensibleStructOutputImpl(ParamImpl):
+ def DeclareVars(self, code):
+ code << '%s %s;' % (self.param.param_type, self.param.name)
+
+ def ConvertParam(self):
+ p = self.param
+ return ('ConvertArray(nap, params[%d], %s, %s, %s, &%s)' %
+ (p.uid + 1, p.size + '_value', '1', CBool(p.is_optional), p.name))
+
+ def CallParam(self):
+ return self.param.name
+
+ def IsArray(self):
+ return True
+
+
def ImplForParam(p):
if p.IsScalar():
if p.is_output:
@@ -338,6 +357,8 @@ def ImplForParam(p):
elif p.is_struct:
if p.is_input and not p.is_output and p.is_extensible:
return ExtensibleStructInputImpl(p)
+ if p.is_output and not p.is_input and p.is_extensible:
+ return ExtensibleStructOutputImpl(p)
if not p.is_input and p.is_output and not p.is_extensible:
return ScalarOutputImpl(p)
assert False, p.name

Powered by Google App Engine
This is Rietveld 408576698