| Index: mojo/public/bindings/pylib/parse/mojo_translate.py
|
| diff --git a/mojo/public/bindings/pylib/parse/mojo_translate.py b/mojo/public/bindings/pylib/parse/mojo_translate.py
|
| deleted file mode 100755
|
| index 9906ede8a563ac7d7605d79f546ceac6ce037725..0000000000000000000000000000000000000000
|
| --- a/mojo/public/bindings/pylib/parse/mojo_translate.py
|
| +++ /dev/null
|
| @@ -1,145 +0,0 @@
|
| -#!/usr/bin/env python
|
| -# Copyright 2013 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.
|
| -
|
| -"""Translate parse tree to Mojom IR"""
|
| -
|
| -
|
| -import os
|
| -import sys
|
| -
|
| -
|
| -def MapTree(func, tree, name):
|
| - if not tree:
|
| - return []
|
| - return [func(subtree) for subtree in tree if subtree[0] == name]
|
| -
|
| -def MapKind(kind):
|
| - map_to_kind = { 'bool': 'b',
|
| - 'int8': 'i8',
|
| - 'int16': 'i16',
|
| - 'int32': 'i32',
|
| - 'int64': 'i64',
|
| - 'uint8': 'u8',
|
| - 'uint16': 'u16',
|
| - 'uint32': 'u32',
|
| - 'uint64': 'u64',
|
| - 'float': 'f',
|
| - 'double': 'd',
|
| - 'string': 's',
|
| - 'handle': 'h',
|
| - 'handle<data_pipe_consumer>': 'h:d:c',
|
| - 'handle<data_pipe_producer>': 'h:d:p',
|
| - 'handle<message_pipe>': 'h:m',
|
| - 'handle<shared_buffer>': 'h:s'}
|
| - if kind.endswith('[]'):
|
| - return 'a:' + MapKind(kind[0:len(kind)-2])
|
| - if kind in map_to_kind:
|
| - return map_to_kind[kind]
|
| - return 'x:' + kind
|
| -
|
| -def MapOrdinal(ordinal):
|
| - if ordinal == None:
|
| - return None
|
| - return int(ordinal[1:]) # Strip leading '@'
|
| -
|
| -def GetAttribute(attributes, name):
|
| - out = None
|
| - if attributes:
|
| - for attribute in attributes:
|
| - if attribute[0] == 'ATTRIBUTE' and attribute[1] == name:
|
| - out = attribute[2]
|
| - return out
|
| -
|
| -def MapField(tree):
|
| - return {'name': tree[2],
|
| - 'kind': MapKind(tree[1]),
|
| - 'ordinal': MapOrdinal(tree[3]),
|
| - 'default': tree[4]}
|
| -
|
| -def MapParameter(tree):
|
| - return {'name': tree[2],
|
| - 'kind': MapKind(tree[1]),
|
| - 'ordinal': MapOrdinal(tree[3])}
|
| -
|
| -def MapMethod(tree):
|
| - method = {'name': tree[1],
|
| - 'parameters': MapTree(MapParameter, tree[2], 'PARAM'),
|
| - 'ordinal': MapOrdinal(tree[3])}
|
| - if tree[4] != None:
|
| - method['response_parameters'] = MapTree(MapParameter, tree[4], 'PARAM')
|
| - return method
|
| -
|
| -def MapEnumField(tree):
|
| - return {'name': tree[1],
|
| - 'value': tree[2]}
|
| -
|
| -def MapStruct(tree):
|
| - struct = {}
|
| - struct['name'] = tree[1]
|
| - # TODO(darin): Add support for |attributes|
|
| - #struct['attributes'] = MapAttributes(tree[2])
|
| - struct['fields'] = MapTree(MapField, tree[3], 'FIELD')
|
| - struct['enums'] = MapTree(MapEnum, tree[3], 'ENUM')
|
| - return struct
|
| -
|
| -def MapInterface(tree):
|
| - interface = {}
|
| - interface['name'] = tree[1]
|
| - interface['peer'] = GetAttribute(tree[2], 'Peer')
|
| - interface['methods'] = MapTree(MapMethod, tree[3], 'METHOD')
|
| - interface['enums'] = MapTree(MapEnum, tree[3], 'ENUM')
|
| - return interface
|
| -
|
| -def MapEnum(tree):
|
| - enum = {}
|
| - enum['name'] = tree[1]
|
| - enum['fields'] = MapTree(MapEnumField, tree[2], 'ENUM_FIELD')
|
| - return enum
|
| -
|
| -def MapModule(tree, name):
|
| - mojom = {}
|
| - mojom['name'] = name
|
| - mojom['namespace'] = tree[1]
|
| - mojom['structs'] = MapTree(MapStruct, tree[2], 'STRUCT')
|
| - mojom['interfaces'] = MapTree(MapInterface, tree[2], 'INTERFACE')
|
| - mojom['enums'] = MapTree(MapEnum, tree[2], 'ENUM')
|
| - return mojom
|
| -
|
| -def MapImport(tree):
|
| - import_item = {}
|
| - import_item['filename'] = tree[1]
|
| - return import_item
|
| -
|
| -
|
| -class MojomBuilder():
|
| - def __init__(self):
|
| - self.mojom = {}
|
| -
|
| - def Build(self, tree, name):
|
| - modules = [MapModule(item, name)
|
| - for item in tree if item[0] == 'MODULE']
|
| - if len(modules) != 1:
|
| - raise Exception('A mojom file must contain exactly 1 module.')
|
| - self.mojom = modules[0]
|
| - self.mojom['imports'] = MapTree(MapImport, tree, 'IMPORT')
|
| - return self.mojom
|
| -
|
| -
|
| -def Translate(tree, name):
|
| - return MojomBuilder().Build(tree, name)
|
| -
|
| -
|
| -def Main():
|
| - if len(sys.argv) < 2:
|
| - print("usage: %s filename" % (sys.argv[0]))
|
| - sys.exit(1)
|
| - tree = eval(open(sys.argv[1]).read())
|
| - name = os.path.splitext(os.path.basename(sys.argv[1]))[0]
|
| - result = Translate(tree, name)
|
| - print(result)
|
| -
|
| -
|
| -if __name__ == '__main__':
|
| - Main()
|
|
|