Token -> ControlToken
This commit is contained in:
parent
1340862c28
commit
802e6402bf
1 changed files with 15 additions and 15 deletions
|
@ -15,7 +15,7 @@ pub fn main() !void {
|
|||
|
||||
pub fn execute(writer: anytype, comptime template: []const u8, args: anytype) !void {
|
||||
@setEvalBranchQuota(@intCast(u32, template.len * 8));
|
||||
const tmpl = comptime parseTemplate(TokenIter{ .text = template }, .root);
|
||||
const tmpl = comptime parseTemplate(ControlTokenIter{ .text = template }, .root);
|
||||
try executeTemplate(writer, tmpl.item, args, .{});
|
||||
}
|
||||
|
||||
|
@ -123,7 +123,7 @@ const TemplateType = enum {
|
|||
if_block,
|
||||
};
|
||||
|
||||
fn parseTemplate(comptime tokens: TokenIter, comptime template_type: TemplateType) ParseResult(TokenIter, []const TemplateItem) {
|
||||
fn parseTemplate(comptime tokens: ControlTokenIter, comptime template_type: TemplateType) ParseResult(ControlTokenIter, []const TemplateItem) {
|
||||
comptime {
|
||||
var iter = tokens;
|
||||
var items: []const TemplateItem = &.{};
|
||||
|
@ -177,7 +177,7 @@ fn parseTemplate(comptime tokens: TokenIter, comptime template_type: TemplateTyp
|
|||
}
|
||||
}
|
||||
|
||||
fn parseExpression(comptime tokens: TokenIter) ParseResult(TokenIter, Expression) {
|
||||
fn parseExpression(comptime tokens: ControlTokenIter) ParseResult(ControlTokenIter, Expression) {
|
||||
comptime {
|
||||
var iter = tokens;
|
||||
|
||||
|
@ -203,7 +203,7 @@ fn parseExpression(comptime tokens: TokenIter) ParseResult(TokenIter, Expression
|
|||
}
|
||||
}
|
||||
|
||||
fn parseControlBlock(comptime tokens: TokenIter) ParseResult(TokenIter, ControlBlock) {
|
||||
fn parseControlBlock(comptime tokens: ControlTokenIter) ParseResult(ControlTokenIter, ControlBlock) {
|
||||
comptime {
|
||||
var iter = tokens;
|
||||
var first_token: bool = true;
|
||||
|
@ -303,7 +303,7 @@ fn parseControlBlock(comptime tokens: TokenIter) ParseResult(TokenIter, ControlB
|
|||
}
|
||||
}
|
||||
|
||||
fn skipWhitespace(comptime tokens: TokenIter) TokenIter {
|
||||
fn skipWhitespace(comptime tokens: ControlTokenIter) ControlTokenIter {
|
||||
comptime {
|
||||
var iter = tokens;
|
||||
while (iter.peek()) |token| switch (token) {
|
||||
|
@ -315,7 +315,7 @@ fn skipWhitespace(comptime tokens: TokenIter) TokenIter {
|
|||
}
|
||||
}
|
||||
|
||||
fn endControlBlock(comptime tokens: TokenIter) TokenIter {
|
||||
fn endControlBlock(comptime tokens: ControlTokenIter) ControlTokenIter {
|
||||
comptime {
|
||||
var iter = skipWhitespace(tokens);
|
||||
|
||||
|
@ -325,7 +325,7 @@ fn endControlBlock(comptime tokens: TokenIter) TokenIter {
|
|||
}
|
||||
}
|
||||
|
||||
fn parseForLoop(comptime tokens: TokenIter) ParseResult(TokenIter, ForLoop) {
|
||||
fn parseForLoop(comptime tokens: ControlTokenIter) ParseResult(ControlTokenIter, ForLoop) {
|
||||
comptime {
|
||||
const iterable = parseExpression(tokens);
|
||||
var iter = iterable.new_iter;
|
||||
|
@ -360,7 +360,7 @@ fn parseForLoop(comptime tokens: TokenIter) ParseResult(TokenIter, ForLoop) {
|
|||
}
|
||||
}
|
||||
|
||||
fn parseIfStatement(comptime tokens: TokenIter) ParseResult(TokenIter, IfStatement) {
|
||||
fn parseIfStatement(comptime tokens: ControlTokenIter) ParseResult(ControlTokenIter, IfStatement) {
|
||||
comptime {
|
||||
const condition = parseExpression(tokens);
|
||||
var iter = endControlBlock(condition.new_iter);
|
||||
|
@ -371,7 +371,7 @@ fn parseIfStatement(comptime tokens: TokenIter) ParseResult(TokenIter, IfStateme
|
|||
}
|
||||
}
|
||||
|
||||
fn parseDeref(comptime tokens: TokenIter) ParseResult(TokenIter, []const []const u8) {
|
||||
fn parseDeref(comptime tokens: ControlTokenIter) ParseResult(ControlTokenIter, []const []const u8) {
|
||||
comptime {
|
||||
var iter = tokens;
|
||||
var fields: []const []const u8 = &.{};
|
||||
|
@ -450,7 +450,7 @@ const EndKeyword = enum {
|
|||
@"if",
|
||||
};
|
||||
|
||||
const Token = union(enum) {
|
||||
const ControlToken = union(enum) {
|
||||
text: []const u8,
|
||||
open_bracket: void,
|
||||
close_bracket: void,
|
||||
|
@ -463,14 +463,14 @@ const Token = union(enum) {
|
|||
equals: void,
|
||||
};
|
||||
|
||||
const TokenIter = struct {
|
||||
const ControlTokenIter = struct {
|
||||
start: usize = 0,
|
||||
text: []const u8,
|
||||
peeked_token: ?Token = null,
|
||||
peeked_token: ?ControlToken = null,
|
||||
|
||||
row: usize = 0,
|
||||
|
||||
fn next(self: *TokenIter) ?Token {
|
||||
fn next(self: *ControlTokenIter) ?ControlToken {
|
||||
if (self.peeked_token) |token| {
|
||||
self.peeked_token = null;
|
||||
return token;
|
||||
|
@ -509,13 +509,13 @@ const TokenIter = struct {
|
|||
}
|
||||
}
|
||||
|
||||
fn peek(self: *TokenIter) ?Token {
|
||||
fn peek(self: *ControlTokenIter) ?ControlToken {
|
||||
const token = self.next();
|
||||
self.peeked_token = token;
|
||||
return token;
|
||||
}
|
||||
|
||||
fn putBack(self: *TokenIter, token: Token) void {
|
||||
fn putBack(self: *ControlTokenIter, token: ControlToken) void {
|
||||
std.debug.assert(self.peeked_token == null);
|
||||
self.peeked_token = token;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue