std: add helper functions to std.zig.Ast for extracting data out of nodes
This commit is contained in:
@@ -1243,7 +1243,7 @@ pub fn globalVarDecl(tree: Ast, node: Node.Index) full.VarDecl {
|
||||
assert(tree.nodes.items(.tag)[node] == .global_var_decl);
|
||||
const data = tree.nodes.items(.data)[node];
|
||||
const extra = tree.extraData(data.lhs, Node.GlobalVarDecl);
|
||||
return tree.fullVarDecl(.{
|
||||
return tree.fullVarDeclComponents(.{
|
||||
.type_node = extra.type_node,
|
||||
.align_node = extra.align_node,
|
||||
.addrspace_node = extra.addrspace_node,
|
||||
@@ -1257,7 +1257,7 @@ pub fn localVarDecl(tree: Ast, node: Node.Index) full.VarDecl {
|
||||
assert(tree.nodes.items(.tag)[node] == .local_var_decl);
|
||||
const data = tree.nodes.items(.data)[node];
|
||||
const extra = tree.extraData(data.lhs, Node.LocalVarDecl);
|
||||
return tree.fullVarDecl(.{
|
||||
return tree.fullVarDeclComponents(.{
|
||||
.type_node = extra.type_node,
|
||||
.align_node = extra.align_node,
|
||||
.addrspace_node = 0,
|
||||
@@ -1270,7 +1270,7 @@ pub fn localVarDecl(tree: Ast, node: Node.Index) full.VarDecl {
|
||||
pub fn simpleVarDecl(tree: Ast, node: Node.Index) full.VarDecl {
|
||||
assert(tree.nodes.items(.tag)[node] == .simple_var_decl);
|
||||
const data = tree.nodes.items(.data)[node];
|
||||
return tree.fullVarDecl(.{
|
||||
return tree.fullVarDeclComponents(.{
|
||||
.type_node = data.lhs,
|
||||
.align_node = 0,
|
||||
.addrspace_node = 0,
|
||||
@@ -1283,7 +1283,7 @@ pub fn simpleVarDecl(tree: Ast, node: Node.Index) full.VarDecl {
|
||||
pub fn alignedVarDecl(tree: Ast, node: Node.Index) full.VarDecl {
|
||||
assert(tree.nodes.items(.tag)[node] == .aligned_var_decl);
|
||||
const data = tree.nodes.items(.data)[node];
|
||||
return tree.fullVarDecl(.{
|
||||
return tree.fullVarDeclComponents(.{
|
||||
.type_node = 0,
|
||||
.align_node = data.lhs,
|
||||
.addrspace_node = 0,
|
||||
@@ -1296,7 +1296,7 @@ pub fn alignedVarDecl(tree: Ast, node: Node.Index) full.VarDecl {
|
||||
pub fn ifSimple(tree: Ast, node: Node.Index) full.If {
|
||||
assert(tree.nodes.items(.tag)[node] == .if_simple);
|
||||
const data = tree.nodes.items(.data)[node];
|
||||
return tree.fullIf(.{
|
||||
return tree.fullIfComponents(.{
|
||||
.cond_expr = data.lhs,
|
||||
.then_expr = data.rhs,
|
||||
.else_expr = 0,
|
||||
@@ -1308,7 +1308,7 @@ pub fn ifFull(tree: Ast, node: Node.Index) full.If {
|
||||
assert(tree.nodes.items(.tag)[node] == .@"if");
|
||||
const data = tree.nodes.items(.data)[node];
|
||||
const extra = tree.extraData(data.rhs, Node.If);
|
||||
return tree.fullIf(.{
|
||||
return tree.fullIfComponents(.{
|
||||
.cond_expr = data.lhs,
|
||||
.then_expr = extra.then_expr,
|
||||
.else_expr = extra.else_expr,
|
||||
@@ -1321,7 +1321,7 @@ pub fn containerField(tree: Ast, node: Node.Index) full.ContainerField {
|
||||
const data = tree.nodes.items(.data)[node];
|
||||
const extra = tree.extraData(data.rhs, Node.ContainerField);
|
||||
const main_token = tree.nodes.items(.main_token)[node];
|
||||
return tree.fullContainerField(.{
|
||||
return tree.fullContainerFieldComponents(.{
|
||||
.main_token = main_token,
|
||||
.type_expr = data.lhs,
|
||||
.value_expr = extra.value_expr,
|
||||
@@ -1334,7 +1334,7 @@ pub fn containerFieldInit(tree: Ast, node: Node.Index) full.ContainerField {
|
||||
assert(tree.nodes.items(.tag)[node] == .container_field_init);
|
||||
const data = tree.nodes.items(.data)[node];
|
||||
const main_token = tree.nodes.items(.main_token)[node];
|
||||
return tree.fullContainerField(.{
|
||||
return tree.fullContainerFieldComponents(.{
|
||||
.main_token = main_token,
|
||||
.type_expr = data.lhs,
|
||||
.value_expr = data.rhs,
|
||||
@@ -1347,7 +1347,7 @@ pub fn containerFieldAlign(tree: Ast, node: Node.Index) full.ContainerField {
|
||||
assert(tree.nodes.items(.tag)[node] == .container_field_align);
|
||||
const data = tree.nodes.items(.data)[node];
|
||||
const main_token = tree.nodes.items(.main_token)[node];
|
||||
return tree.fullContainerField(.{
|
||||
return tree.fullContainerFieldComponents(.{
|
||||
.main_token = main_token,
|
||||
.type_expr = data.lhs,
|
||||
.value_expr = 0,
|
||||
@@ -1361,7 +1361,7 @@ pub fn fnProtoSimple(tree: Ast, buffer: *[1]Node.Index, node: Node.Index) full.F
|
||||
const data = tree.nodes.items(.data)[node];
|
||||
buffer[0] = data.lhs;
|
||||
const params = if (data.lhs == 0) buffer[0..0] else buffer[0..1];
|
||||
return tree.fullFnProto(.{
|
||||
return tree.fullFnProtoComponents(.{
|
||||
.proto_node = node,
|
||||
.fn_token = tree.nodes.items(.main_token)[node],
|
||||
.return_type = data.rhs,
|
||||
@@ -1378,7 +1378,7 @@ pub fn fnProtoMulti(tree: Ast, node: Node.Index) full.FnProto {
|
||||
const data = tree.nodes.items(.data)[node];
|
||||
const params_range = tree.extraData(data.lhs, Node.SubRange);
|
||||
const params = tree.extra_data[params_range.start..params_range.end];
|
||||
return tree.fullFnProto(.{
|
||||
return tree.fullFnProtoComponents(.{
|
||||
.proto_node = node,
|
||||
.fn_token = tree.nodes.items(.main_token)[node],
|
||||
.return_type = data.rhs,
|
||||
@@ -1396,7 +1396,7 @@ pub fn fnProtoOne(tree: Ast, buffer: *[1]Node.Index, node: Node.Index) full.FnPr
|
||||
const extra = tree.extraData(data.lhs, Node.FnProtoOne);
|
||||
buffer[0] = extra.param;
|
||||
const params = if (extra.param == 0) buffer[0..0] else buffer[0..1];
|
||||
return tree.fullFnProto(.{
|
||||
return tree.fullFnProtoComponents(.{
|
||||
.proto_node = node,
|
||||
.fn_token = tree.nodes.items(.main_token)[node],
|
||||
.return_type = data.rhs,
|
||||
@@ -1413,7 +1413,7 @@ pub fn fnProto(tree: Ast, node: Node.Index) full.FnProto {
|
||||
const data = tree.nodes.items(.data)[node];
|
||||
const extra = tree.extraData(data.lhs, Node.FnProto);
|
||||
const params = tree.extra_data[extra.params_start..extra.params_end];
|
||||
return tree.fullFnProto(.{
|
||||
return tree.fullFnProtoComponents(.{
|
||||
.proto_node = node,
|
||||
.fn_token = tree.nodes.items(.main_token)[node],
|
||||
.return_type = data.rhs,
|
||||
@@ -1431,11 +1431,13 @@ pub fn structInitOne(tree: Ast, buffer: *[1]Node.Index, node: Node.Index) full.S
|
||||
const data = tree.nodes.items(.data)[node];
|
||||
buffer[0] = data.rhs;
|
||||
const fields = if (data.rhs == 0) buffer[0..0] else buffer[0..1];
|
||||
return tree.fullStructInit(.{
|
||||
.lbrace = tree.nodes.items(.main_token)[node],
|
||||
.fields = fields,
|
||||
.type_expr = data.lhs,
|
||||
});
|
||||
return .{
|
||||
.ast = .{
|
||||
.lbrace = tree.nodes.items(.main_token)[node],
|
||||
.fields = fields,
|
||||
.type_expr = data.lhs,
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
pub fn structInitDotTwo(tree: Ast, buffer: *[2]Node.Index, node: Node.Index) full.StructInit {
|
||||
@@ -1449,22 +1451,26 @@ pub fn structInitDotTwo(tree: Ast, buffer: *[2]Node.Index, node: Node.Index) ful
|
||||
buffer[0..1]
|
||||
else
|
||||
buffer[0..0];
|
||||
return tree.fullStructInit(.{
|
||||
.lbrace = tree.nodes.items(.main_token)[node],
|
||||
.fields = fields,
|
||||
.type_expr = 0,
|
||||
});
|
||||
return .{
|
||||
.ast = .{
|
||||
.lbrace = tree.nodes.items(.main_token)[node],
|
||||
.fields = fields,
|
||||
.type_expr = 0,
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
pub fn structInitDot(tree: Ast, node: Node.Index) full.StructInit {
|
||||
assert(tree.nodes.items(.tag)[node] == .struct_init_dot or
|
||||
tree.nodes.items(.tag)[node] == .struct_init_dot_comma);
|
||||
const data = tree.nodes.items(.data)[node];
|
||||
return tree.fullStructInit(.{
|
||||
.lbrace = tree.nodes.items(.main_token)[node],
|
||||
.fields = tree.extra_data[data.lhs..data.rhs],
|
||||
.type_expr = 0,
|
||||
});
|
||||
return .{
|
||||
.ast = .{
|
||||
.lbrace = tree.nodes.items(.main_token)[node],
|
||||
.fields = tree.extra_data[data.lhs..data.rhs],
|
||||
.type_expr = 0,
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
pub fn structInit(tree: Ast, node: Node.Index) full.StructInit {
|
||||
@@ -1472,11 +1478,13 @@ pub fn structInit(tree: Ast, node: Node.Index) full.StructInit {
|
||||
tree.nodes.items(.tag)[node] == .struct_init_comma);
|
||||
const data = tree.nodes.items(.data)[node];
|
||||
const fields_range = tree.extraData(data.rhs, Node.SubRange);
|
||||
return tree.fullStructInit(.{
|
||||
.lbrace = tree.nodes.items(.main_token)[node],
|
||||
.fields = tree.extra_data[fields_range.start..fields_range.end],
|
||||
.type_expr = data.lhs,
|
||||
});
|
||||
return .{
|
||||
.ast = .{
|
||||
.lbrace = tree.nodes.items(.main_token)[node],
|
||||
.fields = tree.extra_data[fields_range.start..fields_range.end],
|
||||
.type_expr = data.lhs,
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
pub fn arrayInitOne(tree: Ast, buffer: *[1]Node.Index, node: Node.Index) full.ArrayInit {
|
||||
@@ -1572,7 +1580,7 @@ pub fn arrayTypeSentinel(tree: Ast, node: Node.Index) full.ArrayType {
|
||||
pub fn ptrTypeAligned(tree: Ast, node: Node.Index) full.PtrType {
|
||||
assert(tree.nodes.items(.tag)[node] == .ptr_type_aligned);
|
||||
const data = tree.nodes.items(.data)[node];
|
||||
return tree.fullPtrType(.{
|
||||
return tree.fullPtrTypeComponents(.{
|
||||
.main_token = tree.nodes.items(.main_token)[node],
|
||||
.align_node = data.lhs,
|
||||
.addrspace_node = 0,
|
||||
@@ -1586,7 +1594,7 @@ pub fn ptrTypeAligned(tree: Ast, node: Node.Index) full.PtrType {
|
||||
pub fn ptrTypeSentinel(tree: Ast, node: Node.Index) full.PtrType {
|
||||
assert(tree.nodes.items(.tag)[node] == .ptr_type_sentinel);
|
||||
const data = tree.nodes.items(.data)[node];
|
||||
return tree.fullPtrType(.{
|
||||
return tree.fullPtrTypeComponents(.{
|
||||
.main_token = tree.nodes.items(.main_token)[node],
|
||||
.align_node = 0,
|
||||
.addrspace_node = 0,
|
||||
@@ -1601,7 +1609,7 @@ pub fn ptrType(tree: Ast, node: Node.Index) full.PtrType {
|
||||
assert(tree.nodes.items(.tag)[node] == .ptr_type);
|
||||
const data = tree.nodes.items(.data)[node];
|
||||
const extra = tree.extraData(data.lhs, Node.PtrType);
|
||||
return tree.fullPtrType(.{
|
||||
return tree.fullPtrTypeComponents(.{
|
||||
.main_token = tree.nodes.items(.main_token)[node],
|
||||
.align_node = extra.align_node,
|
||||
.addrspace_node = extra.addrspace_node,
|
||||
@@ -1616,7 +1624,7 @@ pub fn ptrTypeBitRange(tree: Ast, node: Node.Index) full.PtrType {
|
||||
assert(tree.nodes.items(.tag)[node] == .ptr_type_bit_range);
|
||||
const data = tree.nodes.items(.data)[node];
|
||||
const extra = tree.extraData(data.lhs, Node.PtrTypeBitRange);
|
||||
return tree.fullPtrType(.{
|
||||
return tree.fullPtrTypeComponents(.{
|
||||
.main_token = tree.nodes.items(.main_token)[node],
|
||||
.align_node = extra.align_node,
|
||||
.addrspace_node = extra.addrspace_node,
|
||||
@@ -1682,7 +1690,7 @@ pub fn containerDeclTwo(tree: Ast, buffer: *[2]Node.Index, node: Node.Index) ful
|
||||
buffer[0..1]
|
||||
else
|
||||
buffer[0..0];
|
||||
return tree.fullContainerDecl(.{
|
||||
return tree.fullContainerDeclComponents(.{
|
||||
.main_token = tree.nodes.items(.main_token)[node],
|
||||
.enum_token = null,
|
||||
.members = members,
|
||||
@@ -1694,7 +1702,7 @@ pub fn containerDecl(tree: Ast, node: Node.Index) full.ContainerDecl {
|
||||
assert(tree.nodes.items(.tag)[node] == .container_decl or
|
||||
tree.nodes.items(.tag)[node] == .container_decl_trailing);
|
||||
const data = tree.nodes.items(.data)[node];
|
||||
return tree.fullContainerDecl(.{
|
||||
return tree.fullContainerDeclComponents(.{
|
||||
.main_token = tree.nodes.items(.main_token)[node],
|
||||
.enum_token = null,
|
||||
.members = tree.extra_data[data.lhs..data.rhs],
|
||||
@@ -1707,7 +1715,7 @@ pub fn containerDeclArg(tree: Ast, node: Node.Index) full.ContainerDecl {
|
||||
tree.nodes.items(.tag)[node] == .container_decl_arg_trailing);
|
||||
const data = tree.nodes.items(.data)[node];
|
||||
const members_range = tree.extraData(data.rhs, Node.SubRange);
|
||||
return tree.fullContainerDecl(.{
|
||||
return tree.fullContainerDeclComponents(.{
|
||||
.main_token = tree.nodes.items(.main_token)[node],
|
||||
.enum_token = null,
|
||||
.members = tree.extra_data[members_range.start..members_range.end],
|
||||
@@ -1739,7 +1747,7 @@ pub fn taggedUnionTwo(tree: Ast, buffer: *[2]Node.Index, node: Node.Index) full.
|
||||
else
|
||||
buffer[0..0];
|
||||
const main_token = tree.nodes.items(.main_token)[node];
|
||||
return tree.fullContainerDecl(.{
|
||||
return tree.fullContainerDeclComponents(.{
|
||||
.main_token = main_token,
|
||||
.enum_token = main_token + 2, // union lparen enum
|
||||
.members = members,
|
||||
@@ -1752,7 +1760,7 @@ pub fn taggedUnion(tree: Ast, node: Node.Index) full.ContainerDecl {
|
||||
tree.nodes.items(.tag)[node] == .tagged_union_trailing);
|
||||
const data = tree.nodes.items(.data)[node];
|
||||
const main_token = tree.nodes.items(.main_token)[node];
|
||||
return tree.fullContainerDecl(.{
|
||||
return tree.fullContainerDeclComponents(.{
|
||||
.main_token = main_token,
|
||||
.enum_token = main_token + 2, // union lparen enum
|
||||
.members = tree.extra_data[data.lhs..data.rhs],
|
||||
@@ -1766,7 +1774,7 @@ pub fn taggedUnionEnumTag(tree: Ast, node: Node.Index) full.ContainerDecl {
|
||||
const data = tree.nodes.items(.data)[node];
|
||||
const members_range = tree.extraData(data.rhs, Node.SubRange);
|
||||
const main_token = tree.nodes.items(.main_token)[node];
|
||||
return tree.fullContainerDecl(.{
|
||||
return tree.fullContainerDeclComponents(.{
|
||||
.main_token = main_token,
|
||||
.enum_token = main_token + 2, // union lparen enum
|
||||
.members = tree.extra_data[members_range.start..members_range.end],
|
||||
@@ -1777,7 +1785,7 @@ pub fn taggedUnionEnumTag(tree: Ast, node: Node.Index) full.ContainerDecl {
|
||||
pub fn switchCaseOne(tree: Ast, node: Node.Index) full.SwitchCase {
|
||||
const data = &tree.nodes.items(.data)[node];
|
||||
const values: *[1]Node.Index = &data.lhs;
|
||||
return tree.fullSwitchCase(.{
|
||||
return tree.fullSwitchCaseComponents(.{
|
||||
.values = if (data.lhs == 0) values[0..0] else values[0..1],
|
||||
.arrow_token = tree.nodes.items(.main_token)[node],
|
||||
.target_expr = data.rhs,
|
||||
@@ -1787,7 +1795,7 @@ pub fn switchCaseOne(tree: Ast, node: Node.Index) full.SwitchCase {
|
||||
pub fn switchCase(tree: Ast, node: Node.Index) full.SwitchCase {
|
||||
const data = tree.nodes.items(.data)[node];
|
||||
const extra = tree.extraData(data.lhs, Node.SubRange);
|
||||
return tree.fullSwitchCase(.{
|
||||
return tree.fullSwitchCaseComponents(.{
|
||||
.values = tree.extra_data[extra.start..extra.end],
|
||||
.arrow_token = tree.nodes.items(.main_token)[node],
|
||||
.target_expr = data.rhs,
|
||||
@@ -1796,7 +1804,7 @@ pub fn switchCase(tree: Ast, node: Node.Index) full.SwitchCase {
|
||||
|
||||
pub fn asmSimple(tree: Ast, node: Node.Index) full.Asm {
|
||||
const data = tree.nodes.items(.data)[node];
|
||||
return tree.fullAsm(.{
|
||||
return tree.fullAsmComponents(.{
|
||||
.asm_token = tree.nodes.items(.main_token)[node],
|
||||
.template = data.lhs,
|
||||
.items = &.{},
|
||||
@@ -1807,7 +1815,7 @@ pub fn asmSimple(tree: Ast, node: Node.Index) full.Asm {
|
||||
pub fn asmFull(tree: Ast, node: Node.Index) full.Asm {
|
||||
const data = tree.nodes.items(.data)[node];
|
||||
const extra = tree.extraData(data.rhs, Node.Asm);
|
||||
return tree.fullAsm(.{
|
||||
return tree.fullAsmComponents(.{
|
||||
.asm_token = tree.nodes.items(.main_token)[node],
|
||||
.template = data.lhs,
|
||||
.items = tree.extra_data[extra.items_start..extra.items_end],
|
||||
@@ -1817,7 +1825,7 @@ pub fn asmFull(tree: Ast, node: Node.Index) full.Asm {
|
||||
|
||||
pub fn whileSimple(tree: Ast, node: Node.Index) full.While {
|
||||
const data = tree.nodes.items(.data)[node];
|
||||
return tree.fullWhile(.{
|
||||
return tree.fullWhileComponents(.{
|
||||
.while_token = tree.nodes.items(.main_token)[node],
|
||||
.cond_expr = data.lhs,
|
||||
.cont_expr = 0,
|
||||
@@ -1829,7 +1837,7 @@ pub fn whileSimple(tree: Ast, node: Node.Index) full.While {
|
||||
pub fn whileCont(tree: Ast, node: Node.Index) full.While {
|
||||
const data = tree.nodes.items(.data)[node];
|
||||
const extra = tree.extraData(data.rhs, Node.WhileCont);
|
||||
return tree.fullWhile(.{
|
||||
return tree.fullWhileComponents(.{
|
||||
.while_token = tree.nodes.items(.main_token)[node],
|
||||
.cond_expr = data.lhs,
|
||||
.cont_expr = extra.cont_expr,
|
||||
@@ -1841,7 +1849,7 @@ pub fn whileCont(tree: Ast, node: Node.Index) full.While {
|
||||
pub fn whileFull(tree: Ast, node: Node.Index) full.While {
|
||||
const data = tree.nodes.items(.data)[node];
|
||||
const extra = tree.extraData(data.rhs, Node.While);
|
||||
return tree.fullWhile(.{
|
||||
return tree.fullWhileComponents(.{
|
||||
.while_token = tree.nodes.items(.main_token)[node],
|
||||
.cond_expr = data.lhs,
|
||||
.cont_expr = extra.cont_expr,
|
||||
@@ -1852,7 +1860,7 @@ pub fn whileFull(tree: Ast, node: Node.Index) full.While {
|
||||
|
||||
pub fn forSimple(tree: Ast, node: Node.Index) full.While {
|
||||
const data = tree.nodes.items(.data)[node];
|
||||
return tree.fullWhile(.{
|
||||
return tree.fullWhileComponents(.{
|
||||
.while_token = tree.nodes.items(.main_token)[node],
|
||||
.cond_expr = data.lhs,
|
||||
.cont_expr = 0,
|
||||
@@ -1864,7 +1872,7 @@ pub fn forSimple(tree: Ast, node: Node.Index) full.While {
|
||||
pub fn forFull(tree: Ast, node: Node.Index) full.While {
|
||||
const data = tree.nodes.items(.data)[node];
|
||||
const extra = tree.extraData(data.rhs, Node.If);
|
||||
return tree.fullWhile(.{
|
||||
return tree.fullWhileComponents(.{
|
||||
.while_token = tree.nodes.items(.main_token)[node],
|
||||
.cond_expr = data.lhs,
|
||||
.cont_expr = 0,
|
||||
@@ -1877,7 +1885,7 @@ pub fn callOne(tree: Ast, buffer: *[1]Node.Index, node: Node.Index) full.Call {
|
||||
const data = tree.nodes.items(.data)[node];
|
||||
buffer.* = .{data.rhs};
|
||||
const params = if (data.rhs != 0) buffer[0..1] else buffer[0..0];
|
||||
return tree.fullCall(.{
|
||||
return tree.fullCallComponents(.{
|
||||
.lparen = tree.nodes.items(.main_token)[node],
|
||||
.fn_expr = data.lhs,
|
||||
.params = params,
|
||||
@@ -1887,14 +1895,14 @@ pub fn callOne(tree: Ast, buffer: *[1]Node.Index, node: Node.Index) full.Call {
|
||||
pub fn callFull(tree: Ast, node: Node.Index) full.Call {
|
||||
const data = tree.nodes.items(.data)[node];
|
||||
const extra = tree.extraData(data.rhs, Node.SubRange);
|
||||
return tree.fullCall(.{
|
||||
return tree.fullCallComponents(.{
|
||||
.lparen = tree.nodes.items(.main_token)[node],
|
||||
.fn_expr = data.lhs,
|
||||
.params = tree.extra_data[extra.start..extra.end],
|
||||
});
|
||||
}
|
||||
|
||||
fn fullVarDecl(tree: Ast, info: full.VarDecl.Components) full.VarDecl {
|
||||
fn fullVarDeclComponents(tree: Ast, info: full.VarDecl.Components) full.VarDecl {
|
||||
const token_tags = tree.tokens.items(.tag);
|
||||
var result: full.VarDecl = .{
|
||||
.ast = info,
|
||||
@@ -1919,7 +1927,7 @@ fn fullVarDecl(tree: Ast, info: full.VarDecl.Components) full.VarDecl {
|
||||
return result;
|
||||
}
|
||||
|
||||
fn fullIf(tree: Ast, info: full.If.Components) full.If {
|
||||
fn fullIfComponents(tree: Ast, info: full.If.Components) full.If {
|
||||
const token_tags = tree.tokens.items(.tag);
|
||||
var result: full.If = .{
|
||||
.ast = info,
|
||||
@@ -1944,7 +1952,7 @@ fn fullIf(tree: Ast, info: full.If.Components) full.If {
|
||||
return result;
|
||||
}
|
||||
|
||||
fn fullContainerField(tree: Ast, info: full.ContainerField.Components) full.ContainerField {
|
||||
fn fullContainerFieldComponents(tree: Ast, info: full.ContainerField.Components) full.ContainerField {
|
||||
const token_tags = tree.tokens.items(.tag);
|
||||
var result: full.ContainerField = .{
|
||||
.ast = info,
|
||||
@@ -1962,7 +1970,7 @@ fn fullContainerField(tree: Ast, info: full.ContainerField.Components) full.Cont
|
||||
return result;
|
||||
}
|
||||
|
||||
fn fullFnProto(tree: Ast, info: full.FnProto.Components) full.FnProto {
|
||||
fn fullFnProtoComponents(tree: Ast, info: full.FnProto.Components) full.FnProto {
|
||||
const token_tags = tree.tokens.items(.tag);
|
||||
var result: full.FnProto = .{
|
||||
.ast = info,
|
||||
@@ -1998,15 +2006,7 @@ fn fullFnProto(tree: Ast, info: full.FnProto.Components) full.FnProto {
|
||||
return result;
|
||||
}
|
||||
|
||||
fn fullStructInit(tree: Ast, info: full.StructInit.Components) full.StructInit {
|
||||
_ = tree;
|
||||
var result: full.StructInit = .{
|
||||
.ast = info,
|
||||
};
|
||||
return result;
|
||||
}
|
||||
|
||||
fn fullPtrType(tree: Ast, info: full.PtrType.Components) full.PtrType {
|
||||
fn fullPtrTypeComponents(tree: Ast, info: full.PtrType.Components) full.PtrType {
|
||||
const token_tags = tree.tokens.items(.tag);
|
||||
const Size = std.builtin.Type.Pointer.Size;
|
||||
const size: Size = switch (token_tags[info.main_token]) {
|
||||
@@ -2053,7 +2053,7 @@ fn fullPtrType(tree: Ast, info: full.PtrType.Components) full.PtrType {
|
||||
return result;
|
||||
}
|
||||
|
||||
fn fullContainerDecl(tree: Ast, info: full.ContainerDecl.Components) full.ContainerDecl {
|
||||
fn fullContainerDeclComponents(tree: Ast, info: full.ContainerDecl.Components) full.ContainerDecl {
|
||||
const token_tags = tree.tokens.items(.tag);
|
||||
var result: full.ContainerDecl = .{
|
||||
.ast = info,
|
||||
@@ -2069,7 +2069,7 @@ fn fullContainerDecl(tree: Ast, info: full.ContainerDecl.Components) full.Contai
|
||||
return result;
|
||||
}
|
||||
|
||||
fn fullSwitchCase(tree: Ast, info: full.SwitchCase.Components, node: Node.Index) full.SwitchCase {
|
||||
fn fullSwitchCaseComponents(tree: Ast, info: full.SwitchCase.Components, node: Node.Index) full.SwitchCase {
|
||||
const token_tags = tree.tokens.items(.tag);
|
||||
const node_tags = tree.nodes.items(.tag);
|
||||
var result: full.SwitchCase = .{
|
||||
@@ -2087,7 +2087,7 @@ fn fullSwitchCase(tree: Ast, info: full.SwitchCase.Components, node: Node.Index)
|
||||
return result;
|
||||
}
|
||||
|
||||
fn fullAsm(tree: Ast, info: full.Asm.Components) full.Asm {
|
||||
fn fullAsmComponents(tree: Ast, info: full.Asm.Components) full.Asm {
|
||||
const token_tags = tree.tokens.items(.tag);
|
||||
const node_tags = tree.nodes.items(.tag);
|
||||
var result: full.Asm = .{
|
||||
@@ -2150,7 +2150,7 @@ fn fullAsm(tree: Ast, info: full.Asm.Components) full.Asm {
|
||||
return result;
|
||||
}
|
||||
|
||||
fn fullWhile(tree: Ast, info: full.While.Components) full.While {
|
||||
fn fullWhileComponents(tree: Ast, info: full.While.Components) full.While {
|
||||
const token_tags = tree.tokens.items(.tag);
|
||||
var result: full.While = .{
|
||||
.ast = info,
|
||||
@@ -2185,7 +2185,7 @@ fn fullWhile(tree: Ast, info: full.While.Components) full.While {
|
||||
return result;
|
||||
}
|
||||
|
||||
fn fullCall(tree: Ast, info: full.Call.Components) full.Call {
|
||||
fn fullCallComponents(tree: Ast, info: full.Call.Components) full.Call {
|
||||
const token_tags = tree.tokens.items(.tag);
|
||||
var result: full.Call = .{
|
||||
.ast = info,
|
||||
@@ -2198,6 +2198,139 @@ fn fullCall(tree: Ast, info: full.Call.Components) full.Call {
|
||||
return result;
|
||||
}
|
||||
|
||||
pub fn fullVarDecl(tree: Ast, node: Node.Index) ?full.VarDecl {
|
||||
return switch (tree.nodes.items(.tag)[node]) {
|
||||
.global_var_decl => tree.globalVarDecl(node),
|
||||
.local_var_decl => tree.localVarDecl(node),
|
||||
.aligned_var_decl => tree.alignedVarDecl(node),
|
||||
.simple_var_decl => tree.simpleVarDecl(node),
|
||||
else => null,
|
||||
};
|
||||
}
|
||||
|
||||
pub fn fullIf(tree: Ast, node: Node.Index) ?full.If {
|
||||
return switch (tree.nodes.items(.tag)[node]) {
|
||||
.if_simple => tree.ifSimple(node),
|
||||
.@"if" => tree.ifFull(node),
|
||||
else => null,
|
||||
};
|
||||
}
|
||||
|
||||
pub fn fullWhile(tree: Ast, node: Node.Index) ?full.While {
|
||||
return switch (tree.nodes.items(.tag)[node]) {
|
||||
.while_simple => tree.whileSimple(node),
|
||||
.while_cont => tree.whileCont(node),
|
||||
.@"while" => tree.whileFull(node),
|
||||
.for_simple => tree.forSimple(node),
|
||||
.@"for" => tree.forFull(node),
|
||||
else => null,
|
||||
};
|
||||
}
|
||||
|
||||
pub fn fullContainerField(tree: Ast, node: Node.Index) ?full.ContainerField {
|
||||
return switch (tree.nodes.items(.tag)[node]) {
|
||||
.container_field_init => tree.containerFieldInit(node),
|
||||
.container_field_align => tree.containerFieldAlign(node),
|
||||
.container_field => tree.containerField(node),
|
||||
else => null,
|
||||
};
|
||||
}
|
||||
|
||||
pub fn fullFnProto(tree: Ast, buffer: *[1]Ast.Node.Index, node: Node.Index) ?full.FnProto {
|
||||
return switch (tree.nodes.items(.tag)[node]) {
|
||||
.fn_proto => tree.fnProto(node),
|
||||
.fn_proto_multi => tree.fnProtoMulti(node),
|
||||
.fn_proto_one => tree.fnProtoOne(buffer, node),
|
||||
.fn_proto_simple => tree.fnProtoSimple(buffer, node),
|
||||
.fn_decl => tree.fullFnProto(buffer, tree.nodes.items(.data)[node].lhs),
|
||||
else => null,
|
||||
};
|
||||
}
|
||||
|
||||
pub fn fullStructInit(tree: Ast, buffer: *[2]Ast.Node.Index, node: Node.Index) ?full.StructInit {
|
||||
return switch (tree.nodes.items(.tag)[node]) {
|
||||
.struct_init_one, .struct_init_one_comma => tree.structInitOne(buffer[0..1], node),
|
||||
.struct_init_dot_two, .struct_init_dot_two_comma => tree.structInitDotTwo(buffer, node),
|
||||
.struct_init_dot, .struct_init_dot_comma => tree.structInitDot(node),
|
||||
.struct_init, .struct_init_comma => tree.structInit(node),
|
||||
else => null,
|
||||
};
|
||||
}
|
||||
|
||||
pub fn fullArrayInit(tree: Ast, buffer: *[2]Node.Index, node: Node.Index) ?full.ArrayInit {
|
||||
return switch (tree.nodes.items(.tag)[node]) {
|
||||
.array_init_one, .array_init_one_comma => tree.arrayInitOne(buffer[0..1], node),
|
||||
.array_init_dot_two, .array_init_dot_two_comma => tree.arrayInitDotTwo(buffer, node),
|
||||
.array_init_dot, .array_init_dot_comma => tree.arrayInitDot(node),
|
||||
.array_init, .array_init_comma => tree.arrayInit(node),
|
||||
else => null,
|
||||
};
|
||||
}
|
||||
|
||||
pub fn fullArrayType(tree: Ast, node: Node.Index) ?full.ArrayType {
|
||||
return switch (tree.nodes.items(.tag)[node]) {
|
||||
.array_type => tree.arrayType(node),
|
||||
.array_type_sentinel => tree.arrayTypeSentinel(node),
|
||||
else => null,
|
||||
};
|
||||
}
|
||||
|
||||
pub fn fullPtrType(tree: Ast, node: Node.Index) ?full.PtrType {
|
||||
return switch (tree.nodes.items(.tag)[node]) {
|
||||
.ptr_type_aligned => tree.ptrTypeAligned(node),
|
||||
.ptr_type_sentinel => tree.ptrTypeSentinel(node),
|
||||
.ptr_type => tree.ptrType(node),
|
||||
.ptr_type_bit_range => tree.ptrTypeBitRange(node),
|
||||
else => null,
|
||||
};
|
||||
}
|
||||
|
||||
pub fn fullSlice(tree: Ast, node: Node.Index) ?full.Slice {
|
||||
return switch (tree.nodes.items(.tag)[node]) {
|
||||
.slice_open => tree.sliceOpen(node),
|
||||
.slice => tree.slice(node),
|
||||
.slice_sentinel => tree.sliceSentinel(node),
|
||||
else => null,
|
||||
};
|
||||
}
|
||||
|
||||
pub fn fullContainerDecl(tree: Ast, buffer: *[2]Ast.Node.Index, node: Node.Index) ?full.ContainerDecl {
|
||||
return switch (tree.nodes.items(.tag)[node]) {
|
||||
.root => tree.containerDeclRoot(),
|
||||
.container_decl, .container_decl_trailing => tree.containerDecl(node),
|
||||
.container_decl_arg, .container_decl_arg_trailing => tree.containerDeclArg(node),
|
||||
.container_decl_two, .container_decl_two_trailing => tree.containerDeclTwo(buffer, node),
|
||||
.tagged_union, .tagged_union_trailing => tree.taggedUnion(node),
|
||||
.tagged_union_enum_tag, .tagged_union_enum_tag_trailing => tree.taggedUnionEnumTag(node),
|
||||
.tagged_union_two, .tagged_union_two_trailing => tree.taggedUnionTwo(buffer, node),
|
||||
else => null,
|
||||
};
|
||||
}
|
||||
|
||||
pub fn fullSwitchCase(tree: Ast, node: Node.Index) ?full.SwitchCase {
|
||||
return switch (tree.nodes.items(.tag)[node]) {
|
||||
.switch_case_one, .switch_case_inline_one => tree.switchCaseOne(node),
|
||||
.switch_case, .switch_case_inline => tree.switchCase(node),
|
||||
else => null,
|
||||
};
|
||||
}
|
||||
|
||||
pub fn fullAsm(tree: Ast, node: Node.Index) ?full.Asm {
|
||||
return switch (tree.nodes.items(.tag)[node]) {
|
||||
.asm_simple => tree.asmSimple(node),
|
||||
.@"asm" => tree.asmFull(node),
|
||||
else => null,
|
||||
};
|
||||
}
|
||||
|
||||
pub fn fullCall(tree: Ast, buffer: *[1]Ast.Node.Index, node: Node.Index) ?full.Call {
|
||||
return switch (tree.nodes.items(.tag)[node]) {
|
||||
.call, .call_comma, .async_call, .async_call_comma => tree.callFull(node),
|
||||
.call_one, .call_one_comma, .async_call_one, .async_call_one_comma => tree.callOne(buffer, node),
|
||||
else => null,
|
||||
};
|
||||
}
|
||||
|
||||
/// Fully assembled AST node information.
|
||||
pub const full = struct {
|
||||
pub const VarDecl = struct {
|
||||
|
||||
@@ -42,13 +42,8 @@ fn renderMembers(gpa: Allocator, ais: *Ais, tree: Ast, members: []const Ast.Node
|
||||
if (members.len == 0) return;
|
||||
var is_tuple = true;
|
||||
for (members) |member| {
|
||||
const tuple_like = switch (tree.nodes.items(.tag)[member]) {
|
||||
.container_field_init => tree.containerFieldInit(member).ast.tuple_like,
|
||||
.container_field_align => tree.containerFieldAlign(member).ast.tuple_like,
|
||||
.container_field => tree.containerField(member).ast.tuple_like,
|
||||
else => continue,
|
||||
};
|
||||
if (!tuple_like) {
|
||||
const container_field = tree.fullContainerField(member) orelse continue;
|
||||
if (!container_field.ast.tuple_like) {
|
||||
is_tuple = false;
|
||||
break;
|
||||
}
|
||||
@@ -164,10 +159,11 @@ fn renderMember(
|
||||
return renderToken(ais, tree, tree.lastToken(expr) + 1, space); // ;
|
||||
},
|
||||
|
||||
.global_var_decl => return renderVarDecl(gpa, ais, tree, tree.globalVarDecl(decl)),
|
||||
.local_var_decl => return renderVarDecl(gpa, ais, tree, tree.localVarDecl(decl)),
|
||||
.simple_var_decl => return renderVarDecl(gpa, ais, tree, tree.simpleVarDecl(decl)),
|
||||
.aligned_var_decl => return renderVarDecl(gpa, ais, tree, tree.alignedVarDecl(decl)),
|
||||
.global_var_decl,
|
||||
.local_var_decl,
|
||||
.simple_var_decl,
|
||||
.aligned_var_decl,
|
||||
=> return renderVarDecl(gpa, ais, tree, tree.fullVarDecl(decl).?),
|
||||
|
||||
.test_decl => {
|
||||
const test_token = main_tokens[decl];
|
||||
@@ -181,9 +177,11 @@ fn renderMember(
|
||||
try renderExpression(gpa, ais, tree, datas[decl].rhs, space);
|
||||
},
|
||||
|
||||
.container_field_init => return renderContainerField(gpa, ais, tree, tree.containerFieldInit(decl), is_tuple, space),
|
||||
.container_field_align => return renderContainerField(gpa, ais, tree, tree.containerFieldAlign(decl), is_tuple, space),
|
||||
.container_field => return renderContainerField(gpa, ais, tree, tree.containerField(decl), is_tuple, space),
|
||||
.container_field_init,
|
||||
.container_field_align,
|
||||
.container_field,
|
||||
=> return renderContainerField(gpa, ais, tree, tree.fullContainerField(decl).?, is_tuple, space),
|
||||
|
||||
.@"comptime" => return renderExpression(gpa, ais, tree, decl, space),
|
||||
|
||||
.root => unreachable,
|
||||
@@ -437,54 +435,54 @@ fn renderExpression(gpa: Allocator, ais: *Ais, tree: Ast, node: Ast.Node.Index,
|
||||
return renderExpression(gpa, ais, tree, datas[node].lhs, space);
|
||||
},
|
||||
|
||||
.array_type => return renderArrayType(gpa, ais, tree, tree.arrayType(node), space),
|
||||
.array_type_sentinel => return renderArrayType(gpa, ais, tree, tree.arrayTypeSentinel(node), space),
|
||||
.array_type,
|
||||
.array_type_sentinel,
|
||||
=> return renderArrayType(gpa, ais, tree, tree.fullArrayType(node).?, space),
|
||||
|
||||
.ptr_type_aligned => return renderPtrType(gpa, ais, tree, tree.ptrTypeAligned(node), space),
|
||||
.ptr_type_sentinel => return renderPtrType(gpa, ais, tree, tree.ptrTypeSentinel(node), space),
|
||||
.ptr_type => return renderPtrType(gpa, ais, tree, tree.ptrType(node), space),
|
||||
.ptr_type_bit_range => return renderPtrType(gpa, ais, tree, tree.ptrTypeBitRange(node), space),
|
||||
.ptr_type_aligned,
|
||||
.ptr_type_sentinel,
|
||||
.ptr_type,
|
||||
.ptr_type_bit_range,
|
||||
=> return renderPtrType(gpa, ais, tree, tree.fullPtrType(node).?, space),
|
||||
|
||||
.array_init_one, .array_init_one_comma => {
|
||||
var elements: [1]Ast.Node.Index = undefined;
|
||||
return renderArrayInit(gpa, ais, tree, tree.arrayInitOne(&elements, node), space);
|
||||
},
|
||||
.array_init_dot_two, .array_init_dot_two_comma => {
|
||||
var elements: [2]Ast.Node.Index = undefined;
|
||||
return renderArrayInit(gpa, ais, tree, tree.arrayInitDotTwo(&elements, node), space);
|
||||
},
|
||||
.array_init_one,
|
||||
.array_init_one_comma,
|
||||
.array_init_dot_two,
|
||||
.array_init_dot_two_comma,
|
||||
.array_init_dot,
|
||||
.array_init_dot_comma,
|
||||
=> return renderArrayInit(gpa, ais, tree, tree.arrayInitDot(node), space),
|
||||
.array_init,
|
||||
.array_init_comma,
|
||||
=> return renderArrayInit(gpa, ais, tree, tree.arrayInit(node), space),
|
||||
=> {
|
||||
var elements: [2]Ast.Node.Index = undefined;
|
||||
return renderArrayInit(gpa, ais, tree, tree.fullArrayInit(&elements, node).?, space);
|
||||
},
|
||||
|
||||
.struct_init_one, .struct_init_one_comma => {
|
||||
var fields: [1]Ast.Node.Index = undefined;
|
||||
return renderStructInit(gpa, ais, tree, node, tree.structInitOne(&fields, node), space);
|
||||
},
|
||||
.struct_init_dot_two, .struct_init_dot_two_comma => {
|
||||
var fields: [2]Ast.Node.Index = undefined;
|
||||
return renderStructInit(gpa, ais, tree, node, tree.structInitDotTwo(&fields, node), space);
|
||||
},
|
||||
.struct_init_one,
|
||||
.struct_init_one_comma,
|
||||
.struct_init_dot_two,
|
||||
.struct_init_dot_two_comma,
|
||||
.struct_init_dot,
|
||||
.struct_init_dot_comma,
|
||||
=> return renderStructInit(gpa, ais, tree, node, tree.structInitDot(node), space),
|
||||
.struct_init,
|
||||
.struct_init_comma,
|
||||
=> return renderStructInit(gpa, ais, tree, node, tree.structInit(node), space),
|
||||
|
||||
.call_one, .call_one_comma, .async_call_one, .async_call_one_comma => {
|
||||
var params: [1]Ast.Node.Index = undefined;
|
||||
return renderCall(gpa, ais, tree, tree.callOne(¶ms, node), space);
|
||||
=> {
|
||||
var buf: [2]Ast.Node.Index = undefined;
|
||||
return renderStructInit(gpa, ais, tree, node, tree.fullStructInit(&buf, node).?, space);
|
||||
},
|
||||
|
||||
.call_one,
|
||||
.call_one_comma,
|
||||
.async_call_one,
|
||||
.async_call_one_comma,
|
||||
.call,
|
||||
.call_comma,
|
||||
.async_call,
|
||||
.async_call_comma,
|
||||
=> return renderCall(gpa, ais, tree, tree.callFull(node), space),
|
||||
=> {
|
||||
var buf: [1]Ast.Node.Index = undefined;
|
||||
return renderCall(gpa, ais, tree, tree.fullCall(&buf, node).?, space);
|
||||
},
|
||||
|
||||
.array_access => {
|
||||
const suffix = datas[node];
|
||||
@@ -500,9 +498,7 @@ fn renderExpression(gpa: Allocator, ais: *Ais, tree: Ast, node: Ast.Node.Index,
|
||||
return renderToken(ais, tree, rbracket, space); // ]
|
||||
},
|
||||
|
||||
.slice_open => return renderSlice(gpa, ais, tree, node, tree.sliceOpen(node), space),
|
||||
.slice => return renderSlice(gpa, ais, tree, node, tree.slice(node), space),
|
||||
.slice_sentinel => return renderSlice(gpa, ais, tree, node, tree.sliceSentinel(node), space),
|
||||
.slice_open, .slice, .slice_sentinel => return renderSlice(gpa, ais, tree, node, tree.fullSlice(node).?, space),
|
||||
|
||||
.deref => {
|
||||
try renderExpression(gpa, ais, tree, datas[node].lhs, .none);
|
||||
@@ -566,27 +562,20 @@ fn renderExpression(gpa: Allocator, ais: *Ais, tree: Ast, node: Ast.Node.Index,
|
||||
|
||||
.container_decl,
|
||||
.container_decl_trailing,
|
||||
=> return renderContainerDecl(gpa, ais, tree, node, tree.containerDecl(node), space),
|
||||
|
||||
.container_decl_two, .container_decl_two_trailing => {
|
||||
var buffer: [2]Ast.Node.Index = undefined;
|
||||
return renderContainerDecl(gpa, ais, tree, node, tree.containerDeclTwo(&buffer, node), space);
|
||||
},
|
||||
.container_decl_arg,
|
||||
.container_decl_arg_trailing,
|
||||
=> return renderContainerDecl(gpa, ais, tree, node, tree.containerDeclArg(node), space),
|
||||
|
||||
.container_decl_two,
|
||||
.container_decl_two_trailing,
|
||||
.tagged_union,
|
||||
.tagged_union_trailing,
|
||||
=> return renderContainerDecl(gpa, ais, tree, node, tree.taggedUnion(node), space),
|
||||
|
||||
.tagged_union_two, .tagged_union_two_trailing => {
|
||||
var buffer: [2]Ast.Node.Index = undefined;
|
||||
return renderContainerDecl(gpa, ais, tree, node, tree.taggedUnionTwo(&buffer, node), space);
|
||||
},
|
||||
.tagged_union_enum_tag,
|
||||
.tagged_union_enum_tag_trailing,
|
||||
=> return renderContainerDecl(gpa, ais, tree, node, tree.taggedUnionEnumTag(node), space),
|
||||
.tagged_union_two,
|
||||
.tagged_union_two_trailing,
|
||||
=> {
|
||||
var buf: [2]Ast.Node.Index = undefined;
|
||||
return renderContainerDecl(gpa, ais, tree, node, tree.fullContainerDecl(&buf, node).?, space);
|
||||
},
|
||||
|
||||
.error_set_decl => {
|
||||
const error_token = main_tokens[node];
|
||||
@@ -651,16 +640,14 @@ fn renderExpression(gpa: Allocator, ais: *Ais, tree: Ast, node: Ast.Node.Index,
|
||||
return renderBuiltinCall(gpa, ais, tree, main_tokens[node], params, space);
|
||||
},
|
||||
|
||||
.fn_proto_simple => {
|
||||
var params: [1]Ast.Node.Index = undefined;
|
||||
return renderFnProto(gpa, ais, tree, tree.fnProtoSimple(¶ms, node), space);
|
||||
.fn_proto_simple,
|
||||
.fn_proto_multi,
|
||||
.fn_proto_one,
|
||||
.fn_proto,
|
||||
=> {
|
||||
var buf: [1]Ast.Node.Index = undefined;
|
||||
return renderFnProto(gpa, ais, tree, tree.fullFnProto(&buf, node).?, space);
|
||||
},
|
||||
.fn_proto_multi => return renderFnProto(gpa, ais, tree, tree.fnProtoMulti(node), space),
|
||||
.fn_proto_one => {
|
||||
var params: [1]Ast.Node.Index = undefined;
|
||||
return renderFnProto(gpa, ais, tree, tree.fnProtoOne(¶ms, node), space);
|
||||
},
|
||||
.fn_proto => return renderFnProto(gpa, ais, tree, tree.fnProto(node), space),
|
||||
|
||||
.anyframe_type => {
|
||||
const main_token = main_tokens[node];
|
||||
@@ -698,20 +685,26 @@ fn renderExpression(gpa: Allocator, ais: *Ais, tree: Ast, node: Ast.Node.Index,
|
||||
return renderToken(ais, tree, tree.lastToken(node), space); // rbrace
|
||||
},
|
||||
|
||||
.switch_case_one, .switch_case_inline_one => return renderSwitchCase(gpa, ais, tree, tree.switchCaseOne(node), space),
|
||||
.switch_case, .switch_case_inline => return renderSwitchCase(gpa, ais, tree, tree.switchCase(node), space),
|
||||
.switch_case_one,
|
||||
.switch_case_inline_one,
|
||||
.switch_case,
|
||||
.switch_case_inline,
|
||||
=> return renderSwitchCase(gpa, ais, tree, tree.fullSwitchCase(node).?, space),
|
||||
|
||||
.while_simple => return renderWhile(gpa, ais, tree, tree.whileSimple(node), space),
|
||||
.while_cont => return renderWhile(gpa, ais, tree, tree.whileCont(node), space),
|
||||
.@"while" => return renderWhile(gpa, ais, tree, tree.whileFull(node), space),
|
||||
.for_simple => return renderWhile(gpa, ais, tree, tree.forSimple(node), space),
|
||||
.@"for" => return renderWhile(gpa, ais, tree, tree.forFull(node), space),
|
||||
.while_simple,
|
||||
.while_cont,
|
||||
.@"while",
|
||||
.for_simple,
|
||||
.@"for",
|
||||
=> return renderWhile(gpa, ais, tree, tree.fullWhile(node).?, space),
|
||||
|
||||
.if_simple => return renderIf(gpa, ais, tree, tree.ifSimple(node), space),
|
||||
.@"if" => return renderIf(gpa, ais, tree, tree.ifFull(node), space),
|
||||
.if_simple,
|
||||
.@"if",
|
||||
=> return renderIf(gpa, ais, tree, tree.fullIf(node).?, space),
|
||||
|
||||
.asm_simple => return renderAsm(gpa, ais, tree, tree.asmSimple(node), space),
|
||||
.@"asm" => return renderAsm(gpa, ais, tree, tree.asmFull(node), space),
|
||||
.asm_simple,
|
||||
.@"asm",
|
||||
=> return renderAsm(gpa, ais, tree, tree.fullAsm(node).?, space),
|
||||
|
||||
.enum_literal => {
|
||||
try renderToken(ais, tree, main_tokens[node] - 1, .none); // .
|
||||
@@ -1632,10 +1625,11 @@ fn renderBlock(
|
||||
for (statements) |stmt, i| {
|
||||
if (i != 0) try renderExtraNewline(ais, tree, stmt);
|
||||
switch (node_tags[stmt]) {
|
||||
.global_var_decl => try renderVarDecl(gpa, ais, tree, tree.globalVarDecl(stmt)),
|
||||
.local_var_decl => try renderVarDecl(gpa, ais, tree, tree.localVarDecl(stmt)),
|
||||
.simple_var_decl => try renderVarDecl(gpa, ais, tree, tree.simpleVarDecl(stmt)),
|
||||
.aligned_var_decl => try renderVarDecl(gpa, ais, tree, tree.alignedVarDecl(stmt)),
|
||||
.global_var_decl,
|
||||
.local_var_decl,
|
||||
.simple_var_decl,
|
||||
.aligned_var_decl,
|
||||
=> try renderVarDecl(gpa, ais, tree, tree.fullVarDecl(stmt).?),
|
||||
else => try renderExpression(gpa, ais, tree, stmt, .semicolon),
|
||||
}
|
||||
}
|
||||
@@ -1938,7 +1932,6 @@ fn renderContainerDecl(
|
||||
space: Space,
|
||||
) Error!void {
|
||||
const token_tags = tree.tokens.items(.tag);
|
||||
const node_tags = tree.nodes.items(.tag);
|
||||
|
||||
if (container_decl.layout_token) |layout_token| {
|
||||
try renderToken(ais, tree, layout_token, .space);
|
||||
@@ -1946,13 +1939,8 @@ fn renderContainerDecl(
|
||||
|
||||
var is_tuple = token_tags[container_decl.ast.main_token] == .keyword_struct;
|
||||
if (is_tuple) for (container_decl.ast.members) |member| {
|
||||
const tuple_like = switch (tree.nodes.items(.tag)[member]) {
|
||||
.container_field_init => tree.containerFieldInit(member).ast.tuple_like,
|
||||
.container_field_align => tree.containerFieldAlign(member).ast.tuple_like,
|
||||
.container_field => tree.containerField(member).ast.tuple_like,
|
||||
else => continue,
|
||||
};
|
||||
if (!tuple_like) {
|
||||
const container_field = tree.fullContainerField(member) orelse continue;
|
||||
if (!container_field.ast.tuple_like) {
|
||||
is_tuple = false;
|
||||
break;
|
||||
}
|
||||
@@ -2018,7 +2006,7 @@ fn renderContainerDecl(
|
||||
|
||||
// 4. The container has non-field members.
|
||||
for (container_decl.ast.members) |member| {
|
||||
if (!node_tags[member].isContainerField()) break :one_line;
|
||||
if (tree.fullContainerField(member) == null) break :one_line;
|
||||
}
|
||||
|
||||
// Print all the declarations on the same line.
|
||||
|
||||
Reference in New Issue
Block a user