Chromium Code Reviews| Index: mojo/nacl/generator/interface_dsl.py |
| diff --git a/mojo/nacl/generator/interface_dsl.py b/mojo/nacl/generator/interface_dsl.py |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..432bb775a59eaf605ba0db1197ffb65c600f70ce |
| --- /dev/null |
| +++ b/mojo/nacl/generator/interface_dsl.py |
| @@ -0,0 +1,121 @@ |
| +# 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, return_type): |
| + f = Function(self, len(self.functions), name, return_type) |
| + 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, return_type): |
| + self.parent = parent |
| + self.uid = uid |
| + self.name = name |
| + self.returnType = return_type |
|
Mark Seaborn
2014/09/11 19:24:02
These don't follow the style guide still. "return
Nick Bray
2014/09/11 20:24:08
Done.
|
| + self.params = [] |
| + self.paramByName = {} |
|
Mark Seaborn
2014/09/11 19:24:02
"param_by_name"
Nick Bray
2014/09/11 20:24:09
Done.
|
| + self.resultParam = None |
| + |
| + def Param(self, name, param_type=None): |
| + p = Param(self, len(self.params), name, param_type) |
| + self.params.append(p) |
| + self.paramByName[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() |
|
Mark Seaborn
2014/09/11 19:24:02
This is a no-op, right?
Nick Bray
2014/09/11 20:24:09
Done.
|
| + self.resultParam = Param(self, len(self.params), 'result') |
| + self.resultParam.Out(self.returnType) |
| + |
| +class Param(object): |
| + def __init__(self, parent, uid, name, param_type=None): |
| + self.parent = parent |
| + self.uid = uid |
| + self.name = name |
| + self.baseType = param_type |
|
Mark Seaborn
2014/09/11 19:24:02
Ditto: "base_type" etc.?
Nick Bray
2014/09/11 20:24:09
Done.
|
| + self.paramType = param_type |
| + 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.paramByName[self.size] |
| + |
| + def In(self, ty): |
| + self.baseType = ty |
| + self.paramType = ty |
| + self.isInput = True |
| + return self |
| + |
| + def InArray(self, ty, size): |
| + self.baseType = ty |
| + self.paramType = 'const ' + ty + '*' |
| + self.size = size |
| + self.isInput = True |
| + self.isArray = True |
| + return self |
| + |
| + def InStruct(self, ty): |
| + self.baseType = ty |
| + self.paramType = 'const struct ' + ty + '*' |
| + self.isInput = True |
| + self.isStruct = True |
| + return self |
| + |
| + def InOut(self, ty): |
| + self.baseType = ty |
| + self.paramType = ty + '*' |
| + self.isInput = True |
| + self.isOutput = True |
| + return self |
| + |
| + def Out(self, ty): |
| + self.baseType = ty |
| + self.paramType = ty + '*' |
| + self.isOutput = True |
| + return self |
| + |
| + def OutArray(self, ty, size): |
| + self.baseType = ty |
| + self.paramType = ty + '*' |
| + 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 |