vfmt: fix mod.Type; run vfmt on ast.v
parent
f3c917e0aa
commit
f508955b64
136
vlib/v/ast/ast.v
136
vlib/v/ast/ast.v
|
@ -10,16 +10,9 @@ import (
|
||||||
|
|
||||||
pub type TypeDecl = AliasTypeDecl | SumTypeDecl | FnTypeDecl
|
pub type TypeDecl = AliasTypeDecl | SumTypeDecl | FnTypeDecl
|
||||||
|
|
||||||
pub type Expr = InfixExpr | IfExpr | StringLiteral | IntegerLiteral | CharLiteral |
|
pub type Expr = InfixExpr | IfExpr | StringLiteral | IntegerLiteral | CharLiteral | FloatLiteral | Ident | CallExpr | BoolLiteral | StructInit | ArrayInit | SelectorExpr | PostfixExpr | AssignExpr | PrefixExpr | IndexExpr | RangeExpr | MatchExpr | CastExpr | EnumVal | Assoc | SizeOf | None | MapInit | IfGuardExpr | ParExpr | OrExpr | ConcatExpr | Type | AsCast | TypeOf | StringInterLiteral
|
||||||
FloatLiteral | Ident | CallExpr | BoolLiteral | StructInit | ArrayInit | SelectorExpr |
|
|
||||||
PostfixExpr | AssignExpr | PrefixExpr | IndexExpr | RangeExpr | MatchExpr | CastExpr |
|
|
||||||
EnumVal | Assoc | SizeOf | None | MapInit | IfGuardExpr | ParExpr | OrExpr | ConcatExpr |
|
|
||||||
Type | AsCast | TypeOf | StringInterLiteral
|
|
||||||
|
|
||||||
pub type Stmt = GlobalDecl | FnDecl | Return | Module | Import | ExprStmt |
|
pub type Stmt = GlobalDecl | FnDecl | Return | Module | Import | ExprStmt | ForStmt | StructDecl | ForCStmt | ForInStmt | CompIf | ConstDecl | Attr | BranchStmt | HashStmt | AssignStmt | EnumDecl | TypeDecl | DeferStmt | GotoLabel | GotoStmt | Comment | AssertStmt | UnsafeStmt | GoStmt | Block | InterfaceDecl
|
||||||
ForStmt | StructDecl | ForCStmt | ForInStmt | CompIf | ConstDecl | Attr | BranchStmt |
|
|
||||||
HashStmt | AssignStmt | EnumDecl | TypeDecl | DeferStmt | GotoLabel | GotoStmt |
|
|
||||||
Comment | AssertStmt | UnsafeStmt | GoStmt | Block | InterfaceDecl
|
|
||||||
|
|
||||||
pub type ScopeObject = ConstField | GlobalDecl | Var
|
pub type ScopeObject = ConstField | GlobalDecl | Var
|
||||||
|
|
||||||
|
@ -54,7 +47,6 @@ pub:
|
||||||
|
|
||||||
pub struct FloatLiteral {
|
pub struct FloatLiteral {
|
||||||
pub:
|
pub:
|
||||||
// val f64
|
|
||||||
val string
|
val string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -105,22 +97,20 @@ pub:
|
||||||
|
|
||||||
pub struct StructField {
|
pub struct StructField {
|
||||||
pub:
|
pub:
|
||||||
name string
|
name string
|
||||||
pos token.Position
|
pos token.Position
|
||||||
comment Comment
|
comment Comment
|
||||||
default_expr string // token literal //Expr
|
default_expr string // token literal //Expr
|
||||||
mut:
|
mut:
|
||||||
typ table.Type
|
typ table.Type
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct Field {
|
pub struct Field {
|
||||||
pub:
|
pub:
|
||||||
name string
|
name string
|
||||||
// type_idx int
|
pos token.Position
|
||||||
pos token.Position
|
|
||||||
mut:
|
mut:
|
||||||
typ table.Type
|
typ table.Type
|
||||||
// typ2 Type
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct ConstField {
|
pub struct ConstField {
|
||||||
|
@ -142,15 +132,15 @@ pub:
|
||||||
|
|
||||||
pub struct StructDecl {
|
pub struct StructDecl {
|
||||||
pub:
|
pub:
|
||||||
pos token.Position
|
pos token.Position
|
||||||
name string
|
name string
|
||||||
fields []StructField
|
fields []StructField
|
||||||
is_pub bool
|
is_pub bool
|
||||||
mut_pos int // mut:
|
mut_pos int // mut:
|
||||||
pub_pos int // pub:
|
pub_pos int // pub:
|
||||||
pub_mut_pos int // pub mut:
|
pub_mut_pos int // pub mut:
|
||||||
is_c bool
|
is_c bool
|
||||||
is_union bool
|
is_union bool
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct InterfaceDecl {
|
pub struct InterfaceDecl {
|
||||||
|
@ -176,7 +166,6 @@ pub:
|
||||||
pos token.Position
|
pos token.Position
|
||||||
mod string
|
mod string
|
||||||
alias string
|
alias string
|
||||||
// expr Expr
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct FnDecl {
|
pub struct FnDecl {
|
||||||
|
@ -203,21 +192,19 @@ pub:
|
||||||
|
|
||||||
pub struct CallExpr {
|
pub struct CallExpr {
|
||||||
pub:
|
pub:
|
||||||
// tok token.Token
|
pos token.Position
|
||||||
pos token.Position
|
left Expr // `user` in `user.register()`
|
||||||
left Expr // `user` in `user.register()`
|
is_method bool
|
||||||
is_method bool
|
mod string
|
||||||
mod string
|
|
||||||
mut:
|
mut:
|
||||||
name string
|
name string
|
||||||
args []CallArg
|
args []CallArg
|
||||||
expected_arg_types []table.Type
|
expected_arg_types []table.Type
|
||||||
is_c bool
|
is_c bool
|
||||||
or_block OrExpr
|
or_block OrExpr
|
||||||
// has_or_block bool
|
left_type table.Type // type of `user`
|
||||||
left_type table.Type // type of `user`
|
receiver_type table.Type // User
|
||||||
receiver_type table.Type // User
|
return_type table.Type
|
||||||
return_type table.Type
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct CallArg {
|
pub struct CallArg {
|
||||||
|
@ -243,15 +230,12 @@ pub enum Expr {
|
||||||
Integer(IntegerExpr)
|
Integer(IntegerExpr)
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
pub struct Stmt {
|
pub struct Stmt {
|
||||||
pos int
|
pos int
|
||||||
//end int
|
//end int
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
pub struct Var {
|
pub struct Var {
|
||||||
pub:
|
pub:
|
||||||
name string
|
name string
|
||||||
|
@ -264,23 +248,21 @@ mut:
|
||||||
|
|
||||||
pub struct GlobalDecl {
|
pub struct GlobalDecl {
|
||||||
pub:
|
pub:
|
||||||
name string
|
name string
|
||||||
expr Expr
|
expr Expr
|
||||||
has_expr bool
|
has_expr bool
|
||||||
mut:
|
mut:
|
||||||
typ table.Type
|
typ table.Type
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct File {
|
pub struct File {
|
||||||
pub:
|
pub:
|
||||||
path string
|
path string
|
||||||
mod Module
|
mod Module
|
||||||
imports []Import
|
imports []Import
|
||||||
stmts []Stmt
|
stmts []Stmt
|
||||||
scope &Scope
|
scope &Scope
|
||||||
// TODO: consider parent instead of field
|
|
||||||
global_scope &Scope
|
global_scope &Scope
|
||||||
//comments []Comment
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct IdentFn {
|
pub struct IdentFn {
|
||||||
|
@ -335,7 +317,6 @@ pub fn (i &Ident) var_info() IdentVar {
|
||||||
|
|
||||||
pub struct InfixExpr {
|
pub struct InfixExpr {
|
||||||
pub:
|
pub:
|
||||||
// op BinaryOp
|
|
||||||
op token.Kind
|
op token.Kind
|
||||||
pos token.Position
|
pos token.Position
|
||||||
left Expr
|
left Expr
|
||||||
|
@ -361,13 +342,12 @@ pub:
|
||||||
|
|
||||||
pub struct IndexExpr {
|
pub struct IndexExpr {
|
||||||
pub:
|
pub:
|
||||||
// op token.Kind
|
pos token.Position
|
||||||
pos token.Position
|
left Expr
|
||||||
left Expr
|
index Expr // [0], [start..end] etc
|
||||||
index Expr // [0], [start..end] etc
|
|
||||||
mut:
|
mut:
|
||||||
left_type table.Type // array, map, fixed array
|
left_type table.Type // array, map, fixed array
|
||||||
is_setter bool
|
is_setter bool
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct IfExpr {
|
pub struct IfExpr {
|
||||||
|
@ -384,9 +364,9 @@ mut:
|
||||||
|
|
||||||
pub struct IfBranch {
|
pub struct IfBranch {
|
||||||
pub:
|
pub:
|
||||||
cond Expr
|
cond Expr
|
||||||
stmts []Stmt
|
stmts []Stmt
|
||||||
pos token.Position
|
pos token.Position
|
||||||
comment Comment
|
comment Comment
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -396,7 +376,7 @@ pub:
|
||||||
cond Expr
|
cond Expr
|
||||||
branches []MatchBranch
|
branches []MatchBranch
|
||||||
pos token.Position
|
pos token.Position
|
||||||
is_mut bool // `match mut ast_node {`
|
is_mut bool // `match mut ast_node {`
|
||||||
mut:
|
mut:
|
||||||
is_expr bool // returns a value
|
is_expr bool // returns a value
|
||||||
return_type table.Type
|
return_type table.Type
|
||||||
|
@ -407,15 +387,14 @@ mut:
|
||||||
|
|
||||||
pub struct MatchBranch {
|
pub struct MatchBranch {
|
||||||
pub:
|
pub:
|
||||||
exprs []Expr
|
exprs []Expr
|
||||||
stmts []Stmt
|
stmts []Stmt
|
||||||
pos token.Position
|
pos token.Position
|
||||||
comment Comment // comment above `xxx {`
|
comment Comment // comment above `xxx {`
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct CompIf {
|
pub struct CompIf {
|
||||||
pub:
|
pub:
|
||||||
// cond Expr
|
|
||||||
val string
|
val string
|
||||||
stmts []Stmt
|
stmts []Stmt
|
||||||
is_not bool
|
is_not bool
|
||||||
|
@ -454,7 +433,6 @@ pub:
|
||||||
init Stmt // i := 0;
|
init Stmt // i := 0;
|
||||||
has_init bool
|
has_init bool
|
||||||
cond Expr // i < 10;
|
cond Expr // i < 10;
|
||||||
// inc Stmt // i++;
|
|
||||||
inc Expr // i++;
|
inc Expr // i++;
|
||||||
stmts []Stmt
|
stmts []Stmt
|
||||||
pos token.Position
|
pos token.Position
|
||||||
|
@ -545,13 +523,13 @@ pub:
|
||||||
typ table.Type
|
typ table.Type
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: handle this differently
|
||||||
|
// v1 excludes non current os ifdefs so
|
||||||
|
// the defer's never get added in the first place
|
||||||
pub struct DeferStmt {
|
pub struct DeferStmt {
|
||||||
pub:
|
pub:
|
||||||
stmts []Stmt
|
stmts []Stmt
|
||||||
mut:
|
mut:
|
||||||
// TODO: handle this differently
|
|
||||||
// v1 excludes non current os ifdefs so
|
|
||||||
// the defer's never get added in the first place
|
|
||||||
ifdef string
|
ifdef string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -650,10 +628,8 @@ mut:
|
||||||
// `or { ... }`
|
// `or { ... }`
|
||||||
pub struct OrExpr {
|
pub struct OrExpr {
|
||||||
pub:
|
pub:
|
||||||
stmts []Stmt
|
stmts []Stmt
|
||||||
is_used bool // if the or{} block is written down or left out
|
is_used bool // if the or{} block is written down or left out
|
||||||
// var_name string
|
|
||||||
// expr Expr
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct Assoc {
|
pub struct Assoc {
|
||||||
|
@ -681,11 +657,10 @@ mut:
|
||||||
|
|
||||||
pub struct Comment {
|
pub struct Comment {
|
||||||
pub:
|
pub:
|
||||||
text string
|
text string
|
||||||
is_multi bool
|
is_multi bool
|
||||||
line_nr int
|
line_nr int
|
||||||
pos token.Position
|
pos token.Position
|
||||||
//same_line bool
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct ConcatExpr {
|
pub struct ConcatExpr {
|
||||||
|
@ -713,10 +688,11 @@ pub fn expr_is_blank_ident(expr Expr) bool {
|
||||||
[inline]
|
[inline]
|
||||||
pub fn expr_is_call(expr Expr) bool {
|
pub fn expr_is_call(expr Expr) bool {
|
||||||
return match expr {
|
return match expr {
|
||||||
CallExpr{
|
CallExpr {
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
false}
|
false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,7 +35,7 @@ mut:
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn new_checker(table &table.Table, pref &pref.Preferences) Checker {
|
pub fn new_checker(table &table.Table, pref &pref.Preferences) Checker {
|
||||||
return checker.Checker{
|
return Checker{
|
||||||
table: table
|
table: table
|
||||||
pref: pref
|
pref: pref
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,7 +10,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
tabs = ['', '\t', '\t\t', '\t\t\t', '\t\t\t\t', '\t\t\t\t\t', '\t\t\t\t\t\t', '\t\t\t\t\t\t\t']
|
tabs = ['', '\t', '\t\t', '\t\t\t', '\t\t\t\t', '\t\t\t\t\t', '\t\t\t\t\t\t', '\t\t\t\t\t\t\t']
|
||||||
max_len = 90
|
max_len = 90
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -29,7 +29,7 @@ mut:
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn fmt(file ast.File, table &table.Table) string {
|
pub fn fmt(file ast.File, table &table.Table) string {
|
||||||
mut f := fmt.Fmt{
|
mut f := Fmt{
|
||||||
out: strings.new_builder(1000)
|
out: strings.new_builder(1000)
|
||||||
table: table
|
table: table
|
||||||
indent: 0
|
indent: 0
|
||||||
|
@ -206,7 +206,8 @@ fn (f mut Fmt) stmt(node ast.Stmt) {
|
||||||
if it.is_pub {
|
if it.is_pub {
|
||||||
f.write('pub ')
|
f.write('pub ')
|
||||||
}
|
}
|
||||||
f.writeln('enum $it.name {')
|
name := it.name.after('.')
|
||||||
|
f.writeln('enum $name {')
|
||||||
for val in it.vals {
|
for val in it.vals {
|
||||||
f.writeln('\t' + val)
|
f.writeln('\t' + val)
|
||||||
}
|
}
|
||||||
|
@ -277,7 +278,7 @@ fn (f mut Fmt) stmt(node ast.Stmt) {
|
||||||
}
|
}
|
||||||
ast.GlobalDecl {
|
ast.GlobalDecl {
|
||||||
f.write('__global $it.name ')
|
f.write('__global $it.name ')
|
||||||
f.write(f.table.type_to_str(it.typ))
|
f.write(f.type_to_str(it.typ))
|
||||||
if it.has_expr {
|
if it.has_expr {
|
||||||
f.write(' = ')
|
f.write(' = ')
|
||||||
f.expr(it.expr)
|
f.expr(it.expr)
|
||||||
|
@ -343,7 +344,7 @@ fn (f mut Fmt) type_decl(node ast.TypeDecl) {
|
||||||
if it.is_pub {
|
if it.is_pub {
|
||||||
f.write('pub ')
|
f.write('pub ')
|
||||||
}
|
}
|
||||||
ptype := f.table.type_to_str(it.parent_type)
|
ptype := f.type_to_str(it.parent_type)
|
||||||
f.write('type $it.name $ptype')
|
f.write('type $it.name $ptype')
|
||||||
}
|
}
|
||||||
ast.SumTypeDecl {
|
ast.SumTypeDecl {
|
||||||
|
@ -353,7 +354,7 @@ fn (f mut Fmt) type_decl(node ast.TypeDecl) {
|
||||||
f.write('type $it.name = ')
|
f.write('type $it.name = ')
|
||||||
mut sum_type_names := []string
|
mut sum_type_names := []string
|
||||||
for t in it.sub_types {
|
for t in it.sub_types {
|
||||||
sum_type_names << f.table.type_to_str(t)
|
sum_type_names << f.type_to_str(t)
|
||||||
}
|
}
|
||||||
f.write(sum_type_names.join(' | '))
|
f.write(sum_type_names.join(' | '))
|
||||||
}
|
}
|
||||||
|
@ -407,7 +408,7 @@ fn (f mut Fmt) struct_decl(node ast.StructDecl) {
|
||||||
f.writeln('}\n')
|
f.writeln('}\n')
|
||||||
}
|
}
|
||||||
|
|
||||||
fn (f Fmt) type_to_str(t table.Type) string {
|
fn (f &Fmt) type_to_str(t table.Type) string {
|
||||||
res := f.table.type_to_str(t)
|
res := f.table.type_to_str(t)
|
||||||
return res.replace(f.cur_mod + '.', '')
|
return res.replace(f.cur_mod + '.', '')
|
||||||
}
|
}
|
||||||
|
@ -417,7 +418,7 @@ fn (f mut Fmt) expr(node ast.Expr) {
|
||||||
ast.ArrayInit {
|
ast.ArrayInit {
|
||||||
if it.exprs.len == 0 && it.typ != 0 && it.typ != table.void_type {
|
if it.exprs.len == 0 && it.typ != 0 && it.typ != table.void_type {
|
||||||
// `x := []string`
|
// `x := []string`
|
||||||
f.write(f.table.type_to_str(it.typ))
|
f.write(f.type_to_str(it.typ))
|
||||||
} else {
|
} else {
|
||||||
// `[1,2,3]`
|
// `[1,2,3]`
|
||||||
// type_sym := f.table.get_type_symbol(it.typ)
|
// type_sym := f.table.get_type_symbol(it.typ)
|
||||||
|
@ -435,7 +436,7 @@ fn (f mut Fmt) expr(node ast.Expr) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ast.AsCast {
|
ast.AsCast {
|
||||||
type_str := f.table.type_to_str(it.typ)
|
type_str := f.type_to_str(it.typ)
|
||||||
f.expr(it.expr)
|
f.expr(it.expr)
|
||||||
f.write(' as $type_str')
|
f.write(' as $type_str')
|
||||||
}
|
}
|
||||||
|
@ -461,7 +462,7 @@ fn (f mut Fmt) expr(node ast.Expr) {
|
||||||
f.write(it.val.str())
|
f.write(it.val.str())
|
||||||
}
|
}
|
||||||
ast.CastExpr {
|
ast.CastExpr {
|
||||||
f.write(f.table.type_to_str(it.typ) + '(')
|
f.write(f.type_to_str(it.typ) + '(')
|
||||||
f.expr(it.expr)
|
f.expr(it.expr)
|
||||||
f.write(')')
|
f.write(')')
|
||||||
}
|
}
|
||||||
|
@ -599,7 +600,7 @@ fn (f mut Fmt) expr(node ast.Expr) {
|
||||||
if it.type_name != '' {
|
if it.type_name != '' {
|
||||||
f.writeln(it.type_name)
|
f.writeln(it.type_name)
|
||||||
} else {
|
} else {
|
||||||
f.writeln(f.table.type_to_str(it.typ))
|
f.writeln(f.type_to_str(it.typ))
|
||||||
}
|
}
|
||||||
f.writeln(')')
|
f.writeln(')')
|
||||||
}
|
}
|
||||||
|
@ -631,7 +632,7 @@ fn (f mut Fmt) expr(node ast.Expr) {
|
||||||
}
|
}
|
||||||
ast.StructInit {
|
ast.StructInit {
|
||||||
type_sym := f.table.get_type_symbol(it.typ)
|
type_sym := f.table.get_type_symbol(it.typ)
|
||||||
name := short_module(type_sym.name)
|
name := short_module(type_sym.name).replace(f.cur_mod + '.', '') // TODO f.type_to_str?
|
||||||
// `Foo{}` on one line if there are no fields
|
// `Foo{}` on one line if there are no fields
|
||||||
if it.fields.len == 0 {
|
if it.fields.len == 0 {
|
||||||
f.write('$name{}')
|
f.write('$name{}')
|
||||||
|
|
|
@ -71,7 +71,7 @@ pub fn cgen(files []ast.File, table &table.Table, pref &pref.Preferences) string
|
||||||
} else {
|
} else {
|
||||||
}
|
}
|
||||||
// println('start cgen2')
|
// println('start cgen2')
|
||||||
mut g := gen.Gen{
|
mut g := Gen{
|
||||||
out: strings.new_builder(1000)
|
out: strings.new_builder(1000)
|
||||||
typedefs: strings.new_builder(100)
|
typedefs: strings.new_builder(100)
|
||||||
typedefs2: strings.new_builder(100)
|
typedefs2: strings.new_builder(100)
|
||||||
|
|
|
@ -42,7 +42,7 @@ mut:
|
||||||
// for tests
|
// for tests
|
||||||
pub fn parse_stmt(text string, table &table.Table, scope &ast.Scope) ast.Stmt {
|
pub fn parse_stmt(text string, table &table.Table, scope &ast.Scope) ast.Stmt {
|
||||||
s := scanner.new_scanner(text, .skip_comments)
|
s := scanner.new_scanner(text, .skip_comments)
|
||||||
mut p := parser.Parser{
|
mut p := Parser{
|
||||||
scanner: s
|
scanner: s
|
||||||
table: table
|
table: table
|
||||||
pref: &pref.Preferences{}
|
pref: &pref.Preferences{}
|
||||||
|
@ -63,7 +63,7 @@ pub fn parse_file(path string, table &table.Table, comments_mode scanner.Comment
|
||||||
// panic(err)
|
// panic(err)
|
||||||
// }
|
// }
|
||||||
mut stmts := []ast.Stmt
|
mut stmts := []ast.Stmt
|
||||||
mut p := parser.Parser{
|
mut p := Parser{
|
||||||
scanner: scanner.new_scanner_file(path, comments_mode)
|
scanner: scanner.new_scanner_file(path, comments_mode)
|
||||||
table: table
|
table: table
|
||||||
file_name: path
|
file_name: path
|
||||||
|
|
Loading…
Reference in New Issue