Commit 2e607ccb authored by Yuki Shiino's avatar Yuki Shiino Committed by Commit Bot

bind-gen: Remove |renderer| argument in CodeNode.__init__

The |renderer| argument was introduced in the very early design,
but it turned out that it's not often used (except for testing).
This patch removes the argument and simplifies CodeNode and its
subclasses.

Bug: 839389
Change-Id: I434a13f5c4fd6bdc9cdf93ae50ec734f60359d06
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1906611
Commit-Queue: Hitoshi Yoshida <peria@chromium.org>
Reviewed-by: default avatarHitoshi Yoshida <peria@chromium.org>
Cr-Commit-Position: refs/heads/master@{#714134}
parent b07e1bbf
...@@ -130,26 +130,22 @@ class CodeNode(object): ...@@ -130,26 +130,22 @@ class CodeNode(object):
cls._gensym_seq_id += 1 cls._gensym_seq_id += 1
return "gensym{}".format(cls._gensym_seq_id) return "gensym{}".format(cls._gensym_seq_id)
def __init__(self, def __init__(self, template_text=None, template_vars=None):
template_text=None,
template_vars=None,
renderer=None):
assert template_text is None or isinstance(template_text, str) assert template_text is None or isinstance(template_text, str)
assert template_vars is None or isinstance(template_vars, dict) assert template_vars is None or isinstance(template_vars, dict)
assert renderer is None or isinstance(renderer, MakoRenderer)
# The outer CodeNode or None iff this is a top-level node # The outer CodeNode or None iff this is a top-level node
self._outer = None self._outer = None
# The previous CodeNode if this is a Sequence or None # The previous CodeNode if this is a Sequence or None
self._prev = None self._prev = None
# Mako's template text, bindings dict, and the renderer object # Mako's template text, bindings dict
self._template_text = template_text self._template_text = template_text
self._template_vars = {} self._template_vars = {}
self._accumulator = None self._accumulator = None # CodeGenAccumulator
self._renderer = renderer self._renderer = None # MakoRenderer
self._render_state = CodeNode._RenderState() self._render_state = CodeNode._RenderState()
self._is_rendering = False self._is_rendering = False
...@@ -357,17 +353,14 @@ class LiteralNode(CodeNode): ...@@ -357,17 +353,14 @@ class LiteralNode(CodeNode):
magic applied. magic applied.
""" """
def __init__(self, literal_text, renderer=None): def __init__(self, literal_text):
literal_text_gensym = CodeNode.gensym() literal_text_gensym = CodeNode.gensym()
template_text = CodeNode.format_template( template_text = CodeNode.format_template(
"${{{literal_text}}}", literal_text=literal_text_gensym) "${{{literal_text}}}", literal_text=literal_text_gensym)
template_vars = {literal_text_gensym: literal_text} template_vars = {literal_text_gensym: literal_text}
CodeNode.__init__( CodeNode.__init__(
self, self, template_text=template_text, template_vars=template_vars)
template_text=template_text,
template_vars=template_vars,
renderer=renderer)
class TextNode(CodeNode): class TextNode(CodeNode):
...@@ -379,8 +372,8 @@ class TextNode(CodeNode): ...@@ -379,8 +372,8 @@ class TextNode(CodeNode):
All template magics will be applied to |template_text|. All template magics will be applied to |template_text|.
""" """
def __init__(self, template_text, renderer=None): def __init__(self, template_text):
CodeNode.__init__(self, template_text=template_text, renderer=renderer) CodeNode.__init__(self, template_text=template_text)
class SequenceNode(CodeNode): class SequenceNode(CodeNode):
...@@ -388,11 +381,7 @@ class SequenceNode(CodeNode): ...@@ -388,11 +381,7 @@ class SequenceNode(CodeNode):
Represents a sequence of nodes. Represents a sequence of nodes.
""" """
def __init__(self, def __init__(self, code_nodes=None, separator=" ", separator_last=""):
code_nodes=None,
separator=" ",
separator_last="",
renderer=None):
assert isinstance(separator, str) assert isinstance(separator, str)
assert isinstance(separator_last, str) assert isinstance(separator_last, str)
...@@ -414,10 +403,7 @@ ${node}\\ ...@@ -414,10 +403,7 @@ ${node}\\
template_vars = {element_nodes_gensym: element_nodes} template_vars = {element_nodes_gensym: element_nodes}
CodeNode.__init__( CodeNode.__init__(
self, self, template_text=template_text, template_vars=template_vars)
template_text=template_text,
template_vars=template_vars,
renderer=renderer)
self._element_nodes = element_nodes self._element_nodes = element_nodes
...@@ -489,17 +475,12 @@ class SymbolScopeNode(SequenceNode): ...@@ -489,17 +475,12 @@ class SymbolScopeNode(SequenceNode):
insert corresponding SymbolDefinitionNodes appropriately. insert corresponding SymbolDefinitionNodes appropriately.
""" """
def __init__(self, def __init__(self, code_nodes=None, separator="\n", separator_last=""):
code_nodes=None,
separator="\n",
separator_last="",
renderer=None):
SequenceNode.__init__( SequenceNode.__init__(
self, self,
code_nodes=code_nodes, code_nodes=code_nodes,
separator=separator, separator=separator,
separator_last=separator_last, separator_last=separator_last)
renderer=renderer)
self._registered_code_symbols = set() self._registered_code_symbols = set()
...@@ -730,7 +711,7 @@ class ConditionalExitNode(ConditionalNode): ...@@ -730,7 +711,7 @@ class ConditionalExitNode(ConditionalNode):
where BODY ends with a return statement. where BODY ends with a return statement.
""" """
def __init__(self, cond, body, body_likeliness, renderer=None): def __init__(self, cond, body, body_likeliness):
assert isinstance(cond, CodeNode) assert isinstance(cond, CodeNode)
assert isinstance(body, SymbolScopeNode) assert isinstance(body, SymbolScopeNode)
assert isinstance(body_likeliness, Likeliness.Level) assert isinstance(body_likeliness, Likeliness.Level)
...@@ -751,10 +732,7 @@ if (${{{conditional}}}) {{ ...@@ -751,10 +732,7 @@ if (${{{conditional}}}) {{
} }
ConditionalNode.__init__( ConditionalNode.__init__(
self, self, template_text=template_text, template_vars=template_vars)
template_text=template_text,
template_vars=template_vars,
renderer=renderer)
self._cond_node = cond self._cond_node = cond
self._body_node = body self._body_node = body
...@@ -803,8 +781,7 @@ class FunctionDefinitionNode(CodeNode): ...@@ -803,8 +781,7 @@ class FunctionDefinitionNode(CodeNode):
return_type, return_type,
local_vars=None, local_vars=None,
body=None, body=None,
comment=None, comment=None):
renderer=None):
""" """
Args: Args:
name: Function name node, which may include nested-name-specifier name: Function name node, which may include nested-name-specifier
...@@ -856,10 +833,7 @@ ${{{return_type}}} ${{{name}}}(${{{arg_decls}}}) {{ ...@@ -856,10 +833,7 @@ ${{{return_type}}} ${{{name}}}(${{{arg_decls}}}) {{
} }
CodeNode.__init__( CodeNode.__init__(
self, self, template_text=template_text, template_vars=template_vars)
template_text=template_text,
template_vars=template_vars,
renderer=renderer)
self._body_node = body self._body_node = body
......
...@@ -18,6 +18,9 @@ from .mako_renderer import MakoRenderer ...@@ -18,6 +18,9 @@ from .mako_renderer import MakoRenderer
class CodeNodeTest(unittest.TestCase): class CodeNodeTest(unittest.TestCase):
def assertRenderResult(self, node, expected): def assertRenderResult(self, node, expected):
if node.renderer is None:
node.set_renderer(MakoRenderer())
def simplify(text): def simplify(text):
return "\n".join( return "\n".join(
[" ".join(line.split()) for line in text.split("\n")]) [" ".join(line.split()) for line in text.split("\n")])
...@@ -32,24 +35,20 @@ class CodeNodeTest(unittest.TestCase): ...@@ -32,24 +35,20 @@ class CodeNodeTest(unittest.TestCase):
Tests that, in LiteralNode, the special characters of template (%, ${}, Tests that, in LiteralNode, the special characters of template (%, ${},
etc) are not processed. etc) are not processed.
""" """
renderer = MakoRenderer() root = LiteralNode("<% x = 42 %>${x}")
root = LiteralNode("<% x = 42 %>${x}", renderer=renderer)
self.assertRenderResult(root, "<% x = 42 %>${x}") self.assertRenderResult(root, "<% x = 42 %>${x}")
def test_empty_literal_node(self): def test_empty_literal_node(self):
renderer = MakoRenderer() root = LiteralNode("")
root = LiteralNode("", renderer=renderer)
self.assertRenderResult(root, "") self.assertRenderResult(root, "")
def test_text_node(self): def test_text_node(self):
"""Tests that the template language works in TextNode.""" """Tests that the template language works in TextNode."""
renderer = MakoRenderer() root = TextNode("<% x = 42 %>${x}")
root = TextNode("<% x = 42 %>${x}", renderer=renderer)
self.assertRenderResult(root, "42") self.assertRenderResult(root, "42")
def test_empty_text_node(self): def test_empty_text_node(self):
renderer = MakoRenderer() root = TextNode("")
root = TextNode("", renderer=renderer)
self.assertRenderResult(root, "") self.assertRenderResult(root, "")
def test_list_operations_of_sequence_node(self): def test_list_operations_of_sequence_node(self):
...@@ -57,8 +56,7 @@ class CodeNodeTest(unittest.TestCase): ...@@ -57,8 +56,7 @@ class CodeNodeTest(unittest.TestCase):
Tests that list operations (insert, append, and extend) of SequenceNode Tests that list operations (insert, append, and extend) of SequenceNode
work just same as Python built-in list. work just same as Python built-in list.
""" """
renderer = MakoRenderer() root = SequenceNode(separator=",")
root = SequenceNode(separator=",", renderer=renderer)
root.extend([ root.extend([
LiteralNode("2"), LiteralNode("2"),
LiteralNode("4"), LiteralNode("4"),
...@@ -75,8 +73,7 @@ class CodeNodeTest(unittest.TestCase): ...@@ -75,8 +73,7 @@ class CodeNodeTest(unittest.TestCase):
def test_nested_sequence(self): def test_nested_sequence(self):
"""Tests nested SequenceNodes.""" """Tests nested SequenceNodes."""
renderer = MakoRenderer() root = SequenceNode(separator=",")
root = SequenceNode(separator=",", renderer=renderer)
nested = SequenceNode(separator=",") nested = SequenceNode(separator=",")
nested.extend([ nested.extend([
LiteralNode("2"), LiteralNode("2"),
...@@ -95,8 +92,7 @@ class CodeNodeTest(unittest.TestCase): ...@@ -95,8 +92,7 @@ class CodeNodeTest(unittest.TestCase):
Tests that use of SymbolNode inserts necessary SymbolDefinitionNode Tests that use of SymbolNode inserts necessary SymbolDefinitionNode
appropriately. appropriately.
""" """
renderer = MakoRenderer() root = SymbolScopeNode(separator_last="\n")
root = SymbolScopeNode(separator_last="\n", renderer=renderer)
root.register_code_symbols([ root.register_code_symbols([
SymbolNode("var1", "int ${var1} = ${var2} + ${var3};"), SymbolNode("var1", "int ${var1} = ${var2} + ${var3};"),
...@@ -119,8 +115,7 @@ int var1 = var2 + var3; ...@@ -119,8 +115,7 @@ int var1 = var2 + var3;
""") """)
def test_symbol_definition_with_exit_branches(self): def test_symbol_definition_with_exit_branches(self):
renderer = MakoRenderer() root = SymbolScopeNode(separator_last="\n")
root = SymbolScopeNode(separator_last="\n", renderer=renderer)
root.register_code_symbols([ root.register_code_symbols([
SymbolNode("var1", "int ${var1} = 1;"), SymbolNode("var1", "int ${var1} = 1;"),
...@@ -167,8 +162,7 @@ var3; ...@@ -167,8 +162,7 @@ var3;
""") """)
def test_symbol_definition_with_nested_exit_branches(self): def test_symbol_definition_with_nested_exit_branches(self):
renderer = MakoRenderer() root = SymbolScopeNode(separator_last="\n")
root = SymbolScopeNode(separator_last="\n", renderer=renderer)
root.register_code_symbols([ root.register_code_symbols([
SymbolNode("var1", "int ${var1} = 1;"), SymbolNode("var1", "int ${var1} = 1;"),
...@@ -221,8 +215,7 @@ if (true) { ...@@ -221,8 +215,7 @@ if (true) {
""") """)
def test_function_definition_minimum(self): def test_function_definition_minimum(self):
renderer = MakoRenderer() root = SymbolScopeNode(separator_last="\n")
root = SymbolScopeNode(separator_last="\n", renderer=renderer)
root.append( root.append(
FunctionDefinitionNode( FunctionDefinitionNode(
name=LiteralNode("blink::bindings::func"), name=LiteralNode("blink::bindings::func"),
...@@ -237,8 +230,7 @@ void blink::bindings::func() { ...@@ -237,8 +230,7 @@ void blink::bindings::func() {
""") """)
def test_function_definition_full(self): def test_function_definition_full(self):
renderer = MakoRenderer() root = SymbolScopeNode(separator_last="\n")
root = SymbolScopeNode(separator_last="\n", renderer=renderer)
local_vars = [ local_vars = [
SymbolNode("var1", "int ${var1} = 1;"), SymbolNode("var1", "int ${var1} = 1;"),
...@@ -278,7 +270,8 @@ void blink::bindings::func(int arg1, int arg2) { ...@@ -278,7 +270,8 @@ void blink::bindings::func(int arg1, int arg2) {
def test_template_error_handling(self): def test_template_error_handling(self):
renderer = MakoRenderer() renderer = MakoRenderer()
root = SymbolScopeNode(renderer=renderer) root = SymbolScopeNode()
root.set_renderer(renderer)
root.append( root.append(
SymbolScopeNode([ SymbolScopeNode([
......
...@@ -409,8 +409,6 @@ def make_install_interface_template_def(cg_context): ...@@ -409,8 +409,6 @@ def make_install_interface_template_def(cg_context):
def run_example(web_idl_database, output_dirs): def run_example(web_idl_database, output_dirs):
renderer = MakoRenderer()
filename = 'v8_example.cc' filename = 'v8_example.cc'
filepath = os.path.join(output_dirs['core'], filename) filepath = os.path.join(output_dirs['core'], filename)
...@@ -418,7 +416,8 @@ def run_example(web_idl_database, output_dirs): ...@@ -418,7 +416,8 @@ def run_example(web_idl_database, output_dirs):
cg_context = CodeGenContext(namespace=namespace) cg_context = CodeGenContext(namespace=namespace)
root_node = SymbolScopeNode(separator_last="\n", renderer=renderer) root_node = SymbolScopeNode(separator_last="\n")
root_node.set_renderer(MakoRenderer())
for attribute in namespace.attributes: for attribute in namespace.attributes:
root_node.append( root_node.append(
......
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