Commit 1a064aad authored by Yuki Shiino's avatar Yuki Shiino Committed by Commit Bot

bind-gen: Simplify SymbolNode's constructor

Makes SymbolNode's constructor easy to call.  It turned out that
most callers will pass simple template text.

Bug: 839389
Change-Id: Id27031efbbb5b216866c38a62fb805349652b380
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1862596
Commit-Queue: Yuki Shiino <yukishiino@chromium.org>
Reviewed-by: default avatarHitoshi Yoshida <peria@chromium.org>
Cr-Commit-Position: refs/heads/master@{#706527}
parent c06321cb
......@@ -386,20 +386,42 @@ class SymbolNode(CodeNode):
will be automatically inserted iff this symbol is referenced.
"""
def __init__(self, name, definition_node_constructor):
def __init__(self,
name,
template_text=None,
definition_node_constructor=None):
"""
Args:
name: The name of this code symbol.
template_text: Template text to be used to define the code symbol.
definition_node_constructor: A callable that creates and returns a
new definition node. This node will be passed as the argument.
new definition node. This SymbolNode will be passed as the
argument.
Either of |template_text| or |definition_node_constructor| must
be given.
"""
assert isinstance(name, str) and name
assert callable(definition_node_constructor)
assert (template_text is not None
or definition_node_constructor is not None)
assert template_text is None or definition_node_constructor is None
if template_text is not None:
assert isinstance(template_text, str)
if definition_node_constructor is not None:
assert callable(definition_node_constructor)
CodeNode.__init__(self)
self._name = name
self._definition_node_constructor = definition_node_constructor
if template_text is not None:
def constructor(symbol_node):
return SymbolDefinitionNode(
symbol_node, template_text=template_text)
self._definition_node_constructor = constructor
else:
self._definition_node_constructor = definition_node_constructor
def _render(self, renderer, last_render_state):
if not renderer.last_caller.is_code_symbol_defined(self):
......@@ -460,7 +482,7 @@ class SymbolScopeNode(SequenceNode):
"""
def _render(self, renderer, last_render_state):
# Sort nodes in order to generate reproducible code.
# Sort nodes in order to render reproducible results.
symbol_nodes = sorted(
last_render_state.code_symbols_used.itervalues(),
key=lambda symbol_node: symbol_node.name)
......
......@@ -7,7 +7,6 @@ import unittest
from .code_node import LiteralNode
from .code_node import SequenceNode
from .code_node import SimpleNode
from .code_node import SymbolDefinitionNode
from .code_node import SymbolNode
from .code_node import SymbolScopeNode
from .mako_renderer import MakoRenderer
......@@ -83,20 +82,12 @@ class CodeNodeTest(unittest.TestCase):
renderer = MakoRenderer()
root = SymbolScopeNode(renderer=renderer)
def make_symbol(name, template_text):
def constructor(symbol_node):
return SymbolDefinitionNode(
symbol_node, template_text=template_text)
return SymbolNode(
name=name, definition_node_constructor=constructor)
root.register_code_symbols([
make_symbol("var1", "int var1 = ${var2} + ${var3};"),
make_symbol("var2", "int var2 = ${var5};"),
make_symbol("var3", "int var3 = ${var4};"),
make_symbol("var4", "int var4 = 1;"),
make_symbol("var5", "int var5 = 2;"),
SymbolNode("var1", "int var1 = ${var2} + ${var3};"),
SymbolNode("var2", "int var2 = ${var5};"),
SymbolNode("var3", "int var3 = ${var4};"),
SymbolNode("var4", "int var4 = 1;"),
SymbolNode("var5", "int var5 = 2;"),
])
root.append(SimpleNode(template_text="(void)${var1};"))
......
......@@ -21,19 +21,11 @@ def run_example(web_idl_database, output_dirs):
code_node.SimpleNode(template_text="print ${z};"),
])
def make_symbol(name, template_text):
def constructor(symbol_node):
return code_node.SymbolDefinitionNode(
symbol_node, template_text=template_text)
return code_node.SymbolNode(
name=name, definition_node_constructor=constructor)
root_node.add_template_vars({
'x': make_symbol('x', "int ${x} = 1;"),
'y': make_symbol('y', "int ${y} = 2;"),
'z': make_symbol('z', "int ${z};"),
})
root_node.register_code_symbols([
code_node.SymbolNode('x', "int ${x} = 1;"),
code_node.SymbolNode('y', "int ${y} = 2;"),
code_node.SymbolNode('z', "int ${z};"),
])
prev = ''
current = str(root_node)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment