ast, parser: add type_pos to TypeDecl nodes (#9571)
parent
46e7e27ba3
commit
a706215e52
|
@ -29,7 +29,7 @@ pub type ScopeObject = AsmRegister | ConstField | GlobalField | Var
|
||||||
// TODO: replace Param
|
// TODO: replace Param
|
||||||
pub type Node = CallArg | ConstField | EmptyNode | EnumField | Expr | File | GlobalField |
|
pub type Node = CallArg | ConstField | EmptyNode | EnumField | Expr | File | GlobalField |
|
||||||
IfBranch | MatchBranch | NodeError | Param | ScopeObject | SelectBranch | Stmt | StructField |
|
IfBranch | MatchBranch | NodeError | Param | ScopeObject | SelectBranch | Stmt | StructField |
|
||||||
StructInitField
|
StructInitField | SumTypeVariant
|
||||||
|
|
||||||
pub struct TypeNode {
|
pub struct TypeNode {
|
||||||
pub:
|
pub:
|
||||||
|
@ -913,6 +913,7 @@ pub:
|
||||||
is_pub bool
|
is_pub bool
|
||||||
parent_type Type
|
parent_type Type
|
||||||
pos token.Position
|
pos token.Position
|
||||||
|
type_pos token.Position
|
||||||
comments []Comment
|
comments []Comment
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -940,6 +941,7 @@ pub:
|
||||||
is_pub bool
|
is_pub bool
|
||||||
typ Type
|
typ Type
|
||||||
pos token.Position
|
pos token.Position
|
||||||
|
type_pos token.Position
|
||||||
comments []Comment
|
comments []Comment
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1606,6 +1608,17 @@ pub fn (node Node) position() token.Position {
|
||||||
for sym in node.syms {
|
for sym in node.syms {
|
||||||
pos = pos.extend(sym.pos)
|
pos = pos.extend(sym.pos)
|
||||||
}
|
}
|
||||||
|
} else if node is TypeDecl {
|
||||||
|
match node {
|
||||||
|
FnTypeDecl, AliasTypeDecl {
|
||||||
|
pos = pos.extend(node.type_pos)
|
||||||
|
}
|
||||||
|
SumTypeDecl {
|
||||||
|
for variant in node.variants {
|
||||||
|
pos = pos.extend(variant.pos)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if node is AssignStmt {
|
if node is AssignStmt {
|
||||||
return pos.extend(node.right.last().position())
|
return pos.extend(node.right.last().position())
|
||||||
|
@ -1621,9 +1634,13 @@ pub fn (node Node) position() token.Position {
|
||||||
StructField {
|
StructField {
|
||||||
return node.pos.extend(node.type_pos)
|
return node.pos.extend(node.type_pos)
|
||||||
}
|
}
|
||||||
MatchBranch, SelectBranch, EnumField, ConstField, StructInitField, GlobalField, CallArg {
|
MatchBranch, SelectBranch, EnumField, ConstField, StructInitField, GlobalField, CallArg,
|
||||||
|
SumTypeVariant {
|
||||||
return node.pos
|
return node.pos
|
||||||
}
|
}
|
||||||
|
Param {
|
||||||
|
return node.pos.extend(node.type_pos)
|
||||||
|
}
|
||||||
IfBranch {
|
IfBranch {
|
||||||
return node.pos.extend(node.body_pos)
|
return node.pos.extend(node.body_pos)
|
||||||
}
|
}
|
||||||
|
@ -1643,9 +1660,6 @@ pub fn (node Node) position() token.Position {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Param {
|
|
||||||
return node.pos.extend(node.type_pos)
|
|
||||||
}
|
|
||||||
File {
|
File {
|
||||||
mut pos := token.Position{}
|
mut pos := token.Position{}
|
||||||
if node.stmts.len > 0 {
|
if node.stmts.len > 0 {
|
||||||
|
@ -1767,6 +1781,11 @@ pub fn (node Node) children() []Node {
|
||||||
children << node.params.map(Node(it))
|
children << node.params.map(Node(it))
|
||||||
children << node.stmts.map(Node(it))
|
children << node.stmts.map(Node(it))
|
||||||
}
|
}
|
||||||
|
TypeDecl {
|
||||||
|
if node is SumTypeDecl {
|
||||||
|
children << node.variants.map(Node(it))
|
||||||
|
}
|
||||||
|
}
|
||||||
else {}
|
else {}
|
||||||
}
|
}
|
||||||
} else if node is ScopeObject {
|
} else if node is ScopeObject {
|
||||||
|
|
|
@ -1304,6 +1304,7 @@ pub fn (mut f Fmt) fn_type_decl(node ast.FnTypeDecl) {
|
||||||
}
|
}
|
||||||
|
|
||||||
f.comments(node.comments, has_nl: false)
|
f.comments(node.comments, has_nl: false)
|
||||||
|
f.writeln('')
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn (mut f Fmt) sum_type_decl(node ast.SumTypeDecl) {
|
pub fn (mut f Fmt) sum_type_decl(node ast.SumTypeDecl) {
|
||||||
|
|
|
@ -3,7 +3,6 @@ type FooBar = Bar | Foo
|
||||||
pub type PublicBar = Bar | Foo | FooBar
|
pub type PublicBar = Bar | Foo | FooBar
|
||||||
|
|
||||||
type Uint = byte | u16 | u32 | u64 // This should stay on the same line
|
type Uint = byte | u16 | u32 | u64 // This should stay on the same line
|
||||||
|
|
||||||
type Float = f32 | f64
|
type Float = f32 | f64
|
||||||
|
|
||||||
// Alias type
|
// Alias type
|
||||||
|
@ -14,6 +13,7 @@ pub type Abc = f32
|
||||||
// Fn type decl
|
// Fn type decl
|
||||||
|
|
||||||
type EmptyFn = fn ()
|
type EmptyFn = fn ()
|
||||||
|
|
||||||
type OneArgFn = fn (i int)
|
type OneArgFn = fn (i int)
|
||||||
|
|
||||||
type TwoDiffArgs = fn (i int, s string) bool
|
type TwoDiffArgs = fn (i int, s string) bool
|
||||||
|
|
|
@ -510,6 +510,7 @@ fn (mut p Parser) fn_receiver(mut params []ast.Param, mut rec ReceiverParsingInf
|
||||||
is_mut: rec.is_mut
|
is_mut: rec.is_mut
|
||||||
is_auto_rec: is_auto_rec
|
is_auto_rec: is_auto_rec
|
||||||
typ: rec.typ
|
typ: rec.typ
|
||||||
|
type_pos: rec.type_pos
|
||||||
}
|
}
|
||||||
p.check(.rpar)
|
p.check(.rpar)
|
||||||
|
|
||||||
|
|
|
@ -2955,12 +2955,14 @@ fn (mut p Parser) type_decl() ast.TypeDecl {
|
||||||
// function type: `type mycallback = fn(string, int)`
|
// function type: `type mycallback = fn(string, int)`
|
||||||
fn_name := p.prepend_mod(name)
|
fn_name := p.prepend_mod(name)
|
||||||
fn_type := p.parse_fn_type(fn_name)
|
fn_type := p.parse_fn_type(fn_name)
|
||||||
|
type_pos = type_pos.extend(p.tok.position())
|
||||||
comments = p.eat_comments(same_line: true)
|
comments = p.eat_comments(same_line: true)
|
||||||
return ast.FnTypeDecl{
|
return ast.FnTypeDecl{
|
||||||
name: fn_name
|
name: fn_name
|
||||||
is_pub: is_pub
|
is_pub: is_pub
|
||||||
typ: fn_type
|
typ: fn_type
|
||||||
pos: decl_pos
|
pos: decl_pos
|
||||||
|
type_pos: type_pos
|
||||||
comments: comments
|
comments: comments
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3045,6 +3047,7 @@ fn (mut p Parser) type_decl() ast.TypeDecl {
|
||||||
name: name
|
name: name
|
||||||
is_pub: is_pub
|
is_pub: is_pub
|
||||||
parent_type: parent_type
|
parent_type: parent_type
|
||||||
|
type_pos: type_pos
|
||||||
pos: decl_pos
|
pos: decl_pos
|
||||||
comments: comments
|
comments: comments
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue