forked from mirror/vulkan-zig
Remove workaround as it is apparently works without now
This commit is contained in:
@@ -16,21 +16,16 @@ pub const Content = union(enum) {
|
|||||||
Element: *Element
|
Element: *Element
|
||||||
};
|
};
|
||||||
|
|
||||||
// Wrapper to work around compiler crash
|
|
||||||
pub const Child = struct {
|
|
||||||
content: Content
|
|
||||||
};
|
|
||||||
|
|
||||||
pub const Element = struct {
|
pub const Element = struct {
|
||||||
tag: []const u8,
|
tag: []const u8,
|
||||||
attributes: SegmentedList(*Attribute, 0),
|
attributes: SegmentedList(*Attribute, 0),
|
||||||
children: SegmentedList(Child, 0),
|
children: SegmentedList(Content, 0),
|
||||||
|
|
||||||
fn init(tag: []const u8, alloc: *Allocator) Element {
|
fn init(tag: []const u8, alloc: *Allocator) Element {
|
||||||
return .{
|
return .{
|
||||||
.tag = tag,
|
.tag = tag,
|
||||||
.attributes = SegmentedList(*Attribute, 0).init(alloc),
|
.attributes = SegmentedList(*Attribute, 0).init(alloc),
|
||||||
.children = SegmentedList(Child, 0).init(alloc),
|
.children = SegmentedList(Content, 0).init(alloc),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -224,18 +219,7 @@ pub const ParseError = error {
|
|||||||
|
|
||||||
pub fn parse(backing_allocator: *Allocator, source: []const u8) !Document {
|
pub fn parse(backing_allocator: *Allocator, source: []const u8) !Document {
|
||||||
var ctx = ParseContext.init(source);
|
var ctx = ParseContext.init(source);
|
||||||
return parseDocument(&ctx, backing_allocator) catch |err| {
|
return try parseDocument(&ctx, backing_allocator);
|
||||||
std.debug.warn("{}\n", .{ctx.currentLine()});
|
|
||||||
|
|
||||||
var i: usize = 0;
|
|
||||||
while (i < ctx.column) : (i += 1) {
|
|
||||||
std.debug.warn(" ", .{});
|
|
||||||
}
|
|
||||||
|
|
||||||
std.debug.warn("^\n", .{});
|
|
||||||
|
|
||||||
return err;
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn parseDocument(ctx: *ParseContext, backing_allocator: *Allocator) !Document {
|
fn parseDocument(ctx: *ParseContext, backing_allocator: *Allocator) !Document {
|
||||||
@@ -370,7 +354,7 @@ fn tryParseElement(ctx: *ParseContext, alloc: *Allocator) !?*Element {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const content = try parseContent(ctx, alloc);
|
const content = try parseContent(ctx, alloc);
|
||||||
try element.children.push(.{.content = content});
|
try element.children.push(content);
|
||||||
}
|
}
|
||||||
|
|
||||||
const closing_tag = try parseNameNoDupe(ctx);
|
const closing_tag = try parseNameNoDupe(ctx);
|
||||||
@@ -408,19 +392,19 @@ test "tryParseElement" {
|
|||||||
var ctx = ParseContext.init("<python>test</python>");
|
var ctx = ParseContext.init("<python>test</python>");
|
||||||
const elem = try tryParseElement(&ctx, std.debug.global_allocator);
|
const elem = try tryParseElement(&ctx, std.debug.global_allocator);
|
||||||
testing.expectEqualSlices(u8, elem.?.tag, "python");
|
testing.expectEqualSlices(u8, elem.?.tag, "python");
|
||||||
testing.expectEqualSlices(u8, elem.?.children.at(0).content.CharData, "test");
|
testing.expectEqualSlices(u8, elem.?.children.at(0).CharData, "test");
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
var ctx = ParseContext.init("<a>b<c/>d<e/>f<!--g--></a>");
|
var ctx = ParseContext.init("<a>b<c/>d<e/>f<!--g--></a>");
|
||||||
const elem = try tryParseElement(&ctx, std.debug.global_allocator);
|
const elem = try tryParseElement(&ctx, std.debug.global_allocator);
|
||||||
testing.expectEqualSlices(u8, elem.?.tag, "a");
|
testing.expectEqualSlices(u8, elem.?.tag, "a");
|
||||||
testing.expectEqualSlices(u8, elem.?.children.at(0).content.CharData, "b");
|
testing.expectEqualSlices(u8, elem.?.children.at(0).CharData, "b");
|
||||||
testing.expectEqualSlices(u8, elem.?.children.at(1).content.Element.tag, "c");
|
testing.expectEqualSlices(u8, elem.?.children.at(1).Element.tag, "c");
|
||||||
testing.expectEqualSlices(u8, elem.?.children.at(2).content.CharData, "d");
|
testing.expectEqualSlices(u8, elem.?.children.at(2).CharData, "d");
|
||||||
testing.expectEqualSlices(u8, elem.?.children.at(3).content.Element.tag, "e");
|
testing.expectEqualSlices(u8, elem.?.children.at(3).Element.tag, "e");
|
||||||
testing.expectEqualSlices(u8, elem.?.children.at(4).content.CharData, "f");
|
testing.expectEqualSlices(u8, elem.?.children.at(4).CharData, "f");
|
||||||
testing.expectEqualSlices(u8, elem.?.children.at(5).content.Comment, "g");
|
testing.expectEqualSlices(u8, elem.?.children.at(5).Comment, "g");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user