Skip to content

Commit 2a39574

Browse files
authored
Seal mustachio nodes (dart-lang#3433)
1 parent d5bb24b commit 2a39574

File tree

3 files changed

+51
-51
lines changed

3 files changed

+51
-51
lines changed

lib/src/mustachio/parser.dart

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -420,8 +420,7 @@ class MustachioParser {
420420
}
421421

422422
/// An interface for various types of node in a Mustache template.
423-
@sealed
424-
abstract class MustachioNode {
423+
sealed class MustachioNode {
425424
SourceSpan get span;
426425
}
427426

@@ -434,7 +433,7 @@ mixin HasMultiNamedKey {
434433

435434
/// A Text node, representing literal text.
436435
@immutable
437-
class Text implements MustachioNode {
436+
final class Text implements MustachioNode {
438437
final String content;
439438

440439
@override
@@ -448,7 +447,7 @@ class Text implements MustachioNode {
448447

449448
/// A Variable node, representing a variable to be resolved.
450449
@immutable
451-
class Variable with HasMultiNamedKey implements MustachioNode {
450+
final class Variable with HasMultiNamedKey implements MustachioNode {
452451
@override
453452
final List<String> key;
454453

@@ -470,7 +469,7 @@ class Variable with HasMultiNamedKey implements MustachioNode {
470469
/// A Section node, representing either a Conditional Section, a Repeated
471470
/// Section, or a Value Section, possibly inverted.
472471
@immutable
473-
class Section with HasMultiNamedKey implements MustachioNode {
472+
final class Section with HasMultiNamedKey implements MustachioNode {
474473
@override
475474
final List<String> key;
476475

@@ -493,7 +492,7 @@ class Section with HasMultiNamedKey implements MustachioNode {
493492

494493
/// A Partial node, representing a partial to be resolved.
495494
@immutable
496-
class Partial implements MustachioNode {
495+
final class Partial implements MustachioNode {
497496
final String key;
498497

499498
@override

lib/src/mustachio/renderer_base.dart

Lines changed: 36 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -100,30 +100,29 @@ class Template {
100100

101101
// Walk the Mustache syntax tree, looking for Partial nodes.
102102
while (nodeQueue.isNotEmpty) {
103-
var node = nodeQueue.removeFirst();
104-
if (node is Text) {
105-
// Nothing to do.
106-
} else if (node is Variable) {
107-
// Nothing to do.
108-
} else if (node is Section) {
109-
nodeQueue.addAll(node.children);
110-
} else if (node is Partial) {
111-
var key = node.key;
112-
if (!partials.containsKey(key)) {
113-
partials[key] = await partialResolver(key);
114-
}
115-
var partialFile = partials[key]!;
116-
if (!partialTemplates.containsKey(partialFile)) {
117-
try {
118-
var partialTemplate = await Template.parse(partialFile,
119-
partialResolver: partialResolver,
120-
partialTemplates: {...partialTemplates});
121-
partialTemplates[partialFile] = partialTemplate;
122-
} on FileSystemException catch (e) {
123-
throw MustachioResolutionError(node.span.message(
124-
'FileSystemException (${e.message}) when reading partial:'));
103+
switch (nodeQueue.removeFirst()) {
104+
case Text():
105+
break;
106+
case Variable():
107+
break;
108+
case Section(:var children):
109+
nodeQueue.addAll(children);
110+
case Partial(:var span, :var key):
111+
if (!partials.containsKey(key)) {
112+
partials[key] = await partialResolver(key);
113+
}
114+
var partialFile = partials[key]!;
115+
if (!partialTemplates.containsKey(partialFile)) {
116+
try {
117+
var partialTemplate = await Template.parse(partialFile,
118+
partialResolver: partialResolver,
119+
partialTemplates: {...partialTemplates});
120+
partialTemplates[partialFile] = partialTemplate;
121+
} on FileSystemException catch (e) {
122+
throw MustachioResolutionError(span.message(
123+
'FileSystemException (${e.message}) when reading partial:'));
124+
}
125125
}
126-
}
127126
}
128127
}
129128

@@ -218,19 +217,20 @@ abstract class RendererBase<T extends Object?> {
218217
/// Renders a block of Mustache template, the [ast], into [sink].
219218
void renderBlock(List<MustachioNode> ast) {
220219
for (var node in ast) {
221-
if (node is Text) {
222-
write(node.content);
223-
} else if (node is Variable) {
224-
var content = getFields(node);
225-
if (node.escape) {
226-
write(htmlEscape.convert(content));
227-
} else {
228-
write(content);
229-
}
230-
} else if (node is Section) {
231-
section(node);
232-
} else if (node is Partial) {
233-
partial(node);
220+
switch (node) {
221+
case Text():
222+
write(node.content);
223+
case Variable():
224+
var content = getFields(node);
225+
if (node.escape) {
226+
write(htmlEscape.convert(content));
227+
} else {
228+
write(content);
229+
}
230+
case Section():
231+
section(node);
232+
case Partial():
233+
partial(node);
234234
}
235235
}
236236
}

tool/mustachio/codegen_aot_compiler.dart

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -442,15 +442,16 @@ class _BlockCompiler {
442442

443443
Future<void> _compile(List<MustachioNode> syntaxTree) async {
444444
for (var node in syntaxTree) {
445-
if (node is Text) {
446-
_writeText(node.content);
447-
} else if (node is Variable) {
448-
var variableLookup = _lookUpGetter(node);
449-
_writeGetter(variableLookup, escape: node.escape);
450-
} else if (node is Section) {
451-
await _compileSection(node);
452-
} else if (node is Partial) {
453-
await _compilePartial(node);
445+
switch (node) {
446+
case Text():
447+
_writeText(node.content);
448+
case Variable():
449+
var variableLookup = _lookUpGetter(node);
450+
_writeGetter(variableLookup, escape: node.escape);
451+
case Section():
452+
await _compileSection(node);
453+
case Partial():
454+
await _compilePartial(node);
454455
}
455456
}
456457
}

0 commit comments

Comments
 (0)