From 291a1ffd8dfcc221a6430b5b2f8907cd85111111 Mon Sep 17 00:00:00 2001 From: yuyi Date: Wed, 26 Jan 2022 18:36:28 +0800 Subject: [PATCH] token: rename Position to Pos, rename position() to pos() (#13279) --- cmd/tools/vast/vast.v | 246 ++++++------- cmd/tools/vvet/vvet.v | 4 +- vlib/toml/ast/types.v | 20 +- vlib/toml/checker/checker.v | 6 +- vlib/toml/decoder/decoder.v | 2 +- vlib/toml/parser/parser.v | 20 +- vlib/toml/token/{position.v => pos.v} | 2 +- vlib/toml/token/token.v | 4 +- vlib/v/ast/ast.v | 312 ++++++++-------- vlib/v/ast/attr.v | 2 +- vlib/v/ast/table.v | 8 +- vlib/v/ast/walker/walker_test.v | 2 +- vlib/v/builder/builder.v | 2 +- vlib/v/checker/assign.v | 30 +- vlib/v/checker/check_types.v | 28 +- vlib/v/checker/checker.v | 92 ++--- vlib/v/checker/comptime.v | 6 +- vlib/v/checker/containers.v | 20 +- vlib/v/checker/fn.v | 46 +-- vlib/v/checker/for.v | 18 +- vlib/v/checker/if.v | 8 +- vlib/v/checker/interface.v | 2 +- vlib/v/checker/match.v | 14 +- vlib/v/checker/orm.v | 2 +- vlib/v/checker/return.v | 10 +- vlib/v/checker/struct.v | 8 +- vlib/v/doc/comment.v | 2 +- vlib/v/doc/doc.v | 2 +- vlib/v/doc/utils.v | 2 +- vlib/v/errors/errors.v | 6 +- vlib/v/fmt/fmt.v | 18 +- vlib/v/fmt/struct.v | 2 +- vlib/v/fmt/tests/inline_sum_type_keep.vv | 2 +- .../match_with_commented_branches_keep.vv | 4 +- vlib/v/gen/c/assign.v | 4 +- vlib/v/gen/c/cgen.v | 20 +- vlib/v/gen/js/js.v | 2 +- vlib/v/gen/native/amd64.v | 2 +- vlib/v/gen/native/gen.v | 4 +- vlib/v/parser/assign.v | 4 +- vlib/v/parser/comptime.v | 40 +-- vlib/v/parser/containers.v | 28 +- vlib/v/parser/expr.v | 88 ++--- vlib/v/parser/fn.v | 118 +++--- vlib/v/parser/for.v | 10 +- vlib/v/parser/if_match.v | 68 ++-- vlib/v/parser/lock.v | 14 +- vlib/v/parser/module.v | 2 +- vlib/v/parser/parse_type.v | 32 +- vlib/v/parser/parser.v | 336 +++++++++--------- vlib/v/parser/sql.v | 32 +- vlib/v/parser/struct.v | 58 +-- ...sum_type_return_type_too_many_variants.out | 20 +- ..._sum_type_return_type_too_many_variants.vv | 4 +- vlib/v/parser/tmpl.v | 6 +- vlib/v/scanner/scanner.v | 14 +- vlib/v/tests/struct_embed_test.v | 22 +- vlib/v/token/{position.v => pos.v} | 20 +- vlib/v/transformer/transformer.v | 4 +- vlib/v/util/errors.v | 4 +- vlib/v/vet/vet.v | 12 +- 61 files changed, 958 insertions(+), 962 deletions(-) rename vlib/toml/token/{position.v => pos.v} (95%) rename vlib/v/token/{position.v => pos.v} (71%) diff --git a/cmd/tools/vast/vast.v b/cmd/tools/vast/vast.v index 484dc8c37..123032217 100644 --- a/cmd/tools/vast/vast.v +++ b/cmd/tools/vast/vast.v @@ -294,8 +294,8 @@ fn (t Tree) mod(node ast.Module) &Node { obj.add_terse('name', t.string_node(node.name)) obj.add('short_name', t.string_node(node.short_name)) obj.add_terse('attrs', t.array_node_attr(node.attrs)) - obj.add('pos', t.position(node.pos)) - obj.add('name_pos', t.position(node.name_pos)) + obj.add('pos', t.pos(node.pos)) + obj.add('name_pos', t.pos(node.name_pos)) obj.add_terse('is_skipped', t.bool_node(node.is_skipped)) return obj } @@ -327,7 +327,7 @@ fn (t Tree) scope_struct_field(node ast.ScopeStructField) &Node { obj.add_terse('name', t.string_node(node.name)) obj.add_terse('typ', t.type_node(node.typ)) obj.add_terse('orig_type', t.type_node(node.orig_type)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) obj.add_terse('smartcasts', t.array_node_type(node.smartcasts)) return obj } @@ -365,7 +365,7 @@ fn (t Tree) errors(errors []errors.Error) &Node { obj := new_object() obj.add_terse('message', t.string_node(e.message)) obj.add_terse('file_path', t.string_node(e.file_path)) - obj.add('pos', t.position(e.pos)) + obj.add('pos', t.pos(e.pos)) obj.add_terse('backtrace', t.string_node(e.backtrace)) obj.add_terse('reporter', t.enum_node(e.reporter)) errs.add_item(obj) @@ -379,7 +379,7 @@ fn (t Tree) warnings(warnings []errors.Warning) &Node { mut obj := new_object() obj.add('message', t.string_node(w.message)) obj.add('file_path', t.string_node(w.file_path)) - obj.add('pos', t.position(w.pos)) + obj.add('pos', t.pos(w.pos)) obj.add('reporter', t.enum_node(w.reporter)) warns.add_item(obj) } @@ -392,7 +392,7 @@ fn (t Tree) notices(notices []errors.Notice) &Node { mut obj := new_object() obj.add('message', t.string_node(n.message)) obj.add('file_path', t.string_node(n.file_path)) - obj.add('pos', t.position(n.pos)) + obj.add('pos', t.pos(n.pos)) obj.add('reporter', t.enum_node(n.reporter)) notice_array.add_item(obj) } @@ -449,21 +449,21 @@ fn (t Tree) import_module(node ast.Import) &Node { obj.add_terse('syms', t.array_node_import_symbol(node.syms)) obj.add('comments', t.array_node_comment(node.comments)) obj.add('next_comments', t.array_node_comment(node.next_comments)) - obj.add('pos', t.position(node.pos)) - obj.add('mod_pos', t.position(node.mod_pos)) - obj.add('alias_pos', t.position(node.alias_pos)) - obj.add('syms_pos', t.position(node.syms_pos)) + obj.add('pos', t.pos(node.pos)) + obj.add('mod_pos', t.pos(node.mod_pos)) + obj.add('alias_pos', t.pos(node.alias_pos)) + obj.add('syms_pos', t.pos(node.syms_pos)) return obj } fn (t Tree) import_symbol(node ast.ImportSymbol) &Node { mut obj := new_object() obj.add_terse('name', t.string_node(node.name)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) return obj } -fn (t Tree) position(p token.Position) &Node { +fn (t Tree) pos(p token.Pos) &Node { mut obj := new_object() obj.add('line_nr', t.number_node(p.line_nr)) obj.add('last_line', t.number_node(p.last_line)) @@ -478,7 +478,7 @@ fn (t Tree) comment(node ast.Comment) &Node { obj.add('text', t.string_node(node.text)) obj.add('is_multi', t.bool_node(node.is_multi)) obj.add('is_inline', t.bool_node(node.is_inline)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) return obj } @@ -490,7 +490,7 @@ fn (t Tree) const_decl(node ast.ConstDecl) &Node { obj.add_terse('fields', t.array_node_const_field(node.fields)) obj.add_terse('attrs', t.array_node_attr(node.attrs)) obj.add('end_comments', t.array_node_comment(node.end_comments)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) return obj } @@ -505,7 +505,7 @@ fn (t Tree) const_field(node ast.ConstField) &Node { obj.add_terse('typ', t.type_node(node.typ)) obj.add('comments', t.array_node_comment(node.comments)) obj.add('comptime_expr_value', t.comptime_expr_value(node.comptime_expr_value)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) return obj } @@ -542,9 +542,9 @@ fn (t Tree) fn_decl(node ast.FnDecl) &Node { obj.add('is_keep_alive', t.bool_node(node.is_keep_alive)) obj.add_terse('is_unsafe', t.bool_node(node.is_unsafe)) obj.add_terse('receiver', t.struct_field(node.receiver)) - obj.add('receiver_pos', t.position(node.receiver_pos)) + obj.add('receiver_pos', t.pos(node.receiver_pos)) obj.add_terse('is_method', t.bool_node(node.is_method)) - obj.add('method_type_pos', t.position(node.method_type_pos)) + obj.add('method_type_pos', t.pos(node.method_type_pos)) obj.add('method_idx', t.number_node(node.method_idx)) obj.add_terse('rec_mut', t.bool_node(node.rec_mut)) obj.add('rec_share', t.enum_node(node.rec_share)) @@ -554,9 +554,9 @@ fn (t Tree) fn_decl(node ast.FnDecl) &Node { obj.add('is_builtin', t.bool_node(node.is_builtin)) obj.add('is_direct_arr', t.bool_node(node.is_direct_arr)) obj.add('ctdefine_idx', t.number_node(node.ctdefine_idx)) - obj.add('pos', t.position(node.pos)) - obj.add('body_pos', t.position(node.body_pos)) - obj.add('return_type_pos', t.position(node.return_type_pos)) + obj.add('pos', t.pos(node.pos)) + obj.add('body_pos', t.pos(node.body_pos)) + obj.add('return_type_pos', t.pos(node.return_type_pos)) obj.add('file', t.string_node(node.file)) obj.add('has_return', t.bool_node(node.has_return)) obj.add('should_be_skipped', t.bool_node(node.should_be_skipped)) @@ -598,7 +598,7 @@ fn (t Tree) struct_decl(node ast.StructDecl) &Node { obj.add('module_pos', t.number_node(node.module_pos)) obj.add_terse('language', t.enum_node(node.language)) obj.add_terse('is_union', t.bool_node(node.is_union)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) obj.add_terse('fields', t.array_node_struct_field(node.fields)) obj.add_terse('generic_types', t.array_node_type(node.generic_types)) obj.add_terse('attrs', t.array_node_attr(node.attrs)) @@ -612,7 +612,7 @@ fn (t Tree) struct_field(node ast.StructField) &Node { obj.add_terse('ast_type', t.string_node('StructField')) obj.add_terse('name', t.string_node(node.name)) obj.add_terse('typ', t.type_node(node.typ)) - obj.add('type_pos', t.position(node.type_pos)) + obj.add('type_pos', t.pos(node.type_pos)) obj.add_terse('has_default_expr', t.bool_node(node.has_default_expr)) obj.add_terse('default_expr_typ', t.type_node(node.default_expr_typ)) obj.add_terse('default_expr', t.expr(node.default_expr)) @@ -622,14 +622,14 @@ fn (t Tree) struct_field(node ast.StructField) &Node { obj.add_terse('is_volatile', t.bool_node(node.is_volatile)) obj.add_terse('attrs', t.array_node_attr(node.attrs)) obj.add('comments', t.array_node_comment(node.comments)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) return obj } fn (t Tree) embed(node ast.Embed) &Node { mut obj := new_object() obj.add_terse('typ', t.type_node(node.typ)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) obj.add('comments', t.array_node_comment(node.comments)) return obj } @@ -641,7 +641,7 @@ fn (t Tree) enum_decl(node ast.EnumDecl) &Node { obj.add_terse('is_pub', t.bool_node(node.is_pub)) obj.add_terse('is_flag', t.bool_node(node.is_flag)) obj.add_terse('is_multi_allowed', t.bool_node(node.is_multi_allowed)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) obj.add_terse('fields', t.array_node_enum_field(node.fields)) obj.add('comments', t.array_node_comment(node.comments)) obj.add_terse('attrs', t.array_node_attr(node.attrs)) @@ -654,7 +654,7 @@ fn (t Tree) enum_field(node ast.EnumField) &Node { obj.add_terse('name', t.string_node(node.name)) obj.add_terse('has_expr', t.bool_node(node.has_expr)) obj.add_terse('expr', t.expr(node.expr)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) obj.add('comments', t.array_node_comment(node.comments)) obj.add('next_comments', t.array_node_comment(node.next_comments)) return obj @@ -671,9 +671,9 @@ fn (t Tree) interface_decl(node ast.InterfaceDecl) &Node { obj.add_terse('methods', t.array_node_fn_decl(node.methods)) obj.add_terse('fields', t.array_node_struct_field(node.fields)) obj.add('pre_comments', t.array_node_comment(node.pre_comments)) - obj.add('name_pos', t.position(node.name_pos)) + obj.add('name_pos', t.pos(node.name_pos)) obj.add_terse('language', t.enum_node(node.language)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) obj.add('are_ifaces_expanded', t.bool_node(node.are_ifaces_expanded)) obj.add_terse('ifaces', t.array_node_interface_embedding(node.ifaces)) obj.add_terse('attrs', t.array_node_attr(node.attrs)) @@ -685,7 +685,7 @@ fn (t Tree) interface_embedding(node ast.InterfaceEmbedding) &Node { obj.add_terse('ast_type', t.string_node('InterfaceEmbedding')) obj.add_terse('name', t.string_node(node.name)) obj.add_terse('typ', t.type_node(node.typ)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) obj.add('comments', t.array_node_comment(node.comments)) return obj } @@ -714,7 +714,7 @@ fn (t Tree) hash_stmt(node ast.HashStmt) &Node { obj.add_terse('msg', t.string_node(node.msg)) obj.add_terse('ct_conds', t.array_node_expr(node.ct_conds)) obj.add_terse('source_file', t.string_node(node.source_file)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) return obj } @@ -724,8 +724,8 @@ fn (t Tree) comptime_for(node ast.ComptimeFor) &Node { obj.add_terse('val_var', t.string_node(node.val_var)) obj.add_terse('typ', t.type_node(node.typ)) obj.add_terse('kind', t.enum_node(node.kind)) - obj.add('pos', t.position(node.pos)) - obj.add('typ_pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) + obj.add('typ_pos', t.pos(node.pos)) obj.add_terse('stmts', t.array_node_stmt(node.stmts)) return obj } @@ -734,7 +734,7 @@ fn (t Tree) global_decl(node ast.GlobalDecl) &Node { mut obj := new_object() obj.add_terse('ast_type', t.string_node('GlobalDecl')) obj.add_terse('mod', t.string_node(node.mod)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) obj.add_terse('is_block', t.bool_node(node.is_block)) obj.add_terse('fields', t.array_node_global_field(node.fields)) obj.add('end_comments', t.array_node_comment(node.end_comments)) @@ -751,8 +751,8 @@ fn (t Tree) global_field(node ast.GlobalField) &Node { obj.add_terse('has_expr', t.bool_node(node.has_expr)) obj.add_terse('is_markused', t.bool_node(node.is_markused)) obj.add('comments', t.array_node_comment(node.comments)) - obj.add('pos', t.position(node.pos)) - obj.add('typ_pos', t.position(node.typ_pos)) + obj.add('pos', t.pos(node.pos)) + obj.add('typ_pos', t.pos(node.typ_pos)) return obj } @@ -763,7 +763,7 @@ fn (t Tree) defer_stmt(node ast.DeferStmt) &Node { obj.add_terse('defer_vars', t.array_node_ident(node.defer_vars)) obj.add_terse('ifdef', t.string_node(node.ifdef)) obj.add('idx_in_fn', t.number_node(node.idx_in_fn)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) return obj } @@ -782,7 +782,7 @@ fn (t Tree) alias_type_decl(node ast.AliasTypeDecl) &Node { obj.add_terse('is_pub', t.bool_node(node.is_pub)) obj.add_terse('parent_type', t.type_node(node.parent_type)) obj.add('comments', t.array_node_comment(node.comments)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) return obj } @@ -791,7 +791,7 @@ fn (t Tree) sum_type_decl(node ast.SumTypeDecl) &Node { obj.add_terse('ast_type', t.string_node('SumTypeDecl')) obj.add_terse('name', t.string_node(node.name)) obj.add_terse('is_pub', t.bool_node(node.is_pub)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) obj.add_terse('typ', t.type_node(node.typ)) obj.add_terse('generic_types', t.array_node_type(node.generic_types)) obj.add('comments', t.array_node_comment(node.comments)) @@ -805,7 +805,7 @@ fn (t Tree) fn_type_decl(node ast.FnTypeDecl) &Node { obj.add_terse('name', t.string_node(node.name)) obj.add_terse('is_pub', t.bool_node(node.is_pub)) obj.add_terse('typ', t.type_node(node.typ)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) obj.add('comments', t.array_node_comment(node.comments)) return obj } @@ -823,7 +823,7 @@ fn (t Tree) goto_label(node ast.GotoLabel) &Node { mut obj := new_object() obj.add_terse('ast_type', t.string_node('GotoLabel')) obj.add_terse('name', t.string_node(node.name)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) return obj } @@ -831,7 +831,7 @@ fn (t Tree) goto_stmt(node ast.GotoStmt) &Node { mut obj := new_object() obj.add_terse('ast_type', t.string_node('GotoStmt')) obj.add_terse('name', t.string_node(node.name)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) return obj } @@ -847,7 +847,7 @@ fn (t Tree) assign_stmt(node ast.AssignStmt) &Node { obj.add_terse('is_volatile', t.bool_node(node.is_volatile)) obj.add_terse('is_simple', t.bool_node(node.is_simple)) obj.add_terse('has_cross_var', t.bool_node(node.has_cross_var)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) obj.add('comments', t.array_node_comment(node.comments)) obj.add('end_comments', t.array_node_comment(node.end_comments)) return obj @@ -872,7 +872,7 @@ fn (t Tree) var(node ast.Var) &Node { obj.add('is_auto_heap', t.bool_node(node.is_auto_heap)) obj.add('is_stack_obj', t.bool_node(node.is_stack_obj)) obj.add_terse('share', t.enum_node(node.share)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) obj.add_terse('smartcasts', t.array_node_type(node.smartcasts)) return obj } @@ -882,7 +882,7 @@ fn (t Tree) return_(node ast.Return) &Node { obj.add_terse('ast_type', t.string_node('Return')) obj.add_terse('exprs', t.array_node_expr(node.exprs)) obj.add_terse('types', t.array_node_type(node.types)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) return obj } @@ -897,7 +897,7 @@ fn (t Tree) for_c_stmt(node ast.ForCStmt) &Node { obj.add_terse('inc', t.stmt(node.inc)) obj.add_terse('is_multi', t.bool_node(node.is_multi)) obj.add_terse('label', t.string_node(node.label)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) obj.add('scope', t.number_node(int(node.scope))) obj.add_terse('stmts', t.array_node_stmt(node.stmts)) return obj @@ -909,7 +909,7 @@ fn (t Tree) for_stmt(node ast.ForStmt) &Node { obj.add_terse('cond', t.expr(node.cond)) obj.add_terse('is_inf', t.bool_node(node.is_inf)) obj.add_terse('label', t.string_node(node.label)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) obj.add('scope', t.number_node(int(node.scope))) obj.add_terse('stmts', t.array_node_stmt(node.stmts)) return obj @@ -929,7 +929,7 @@ fn (t Tree) for_in_stmt(node ast.ForInStmt) &Node { obj.add_terse('kind', t.enum_node(node.kind)) obj.add_terse('val_is_mut', t.bool_node(node.val_is_mut)) obj.add_terse('label', t.string_node(node.label)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) obj.add('scope', t.number_node(int(node.scope))) obj.add_terse('stmts', t.array_node_stmt(node.stmts)) return obj @@ -940,7 +940,7 @@ fn (t Tree) branch_stmt(node ast.BranchStmt) &Node { obj.add_terse('ast_type', t.string_node('BranchStmt')) obj.add_terse('kind', t.token_node(node.kind)) obj.add_terse('label', t.string_node(node.label)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) return obj } @@ -949,7 +949,7 @@ fn (t Tree) assert_stmt(node ast.AssertStmt) &Node { obj.add_terse('ast_type', t.string_node('AssertStmt')) obj.add_terse('expr', t.expr(node.expr)) obj.add_terse('is_used', t.bool_node(node.is_used)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) return obj } @@ -958,7 +958,7 @@ fn (t Tree) block(node ast.Block) &Node { obj.add_terse('ast_type', t.string_node('Block')) obj.add_terse('stmts', t.array_node_stmt(node.stmts)) obj.add_terse('is_unsafe', t.bool_node(node.is_unsafe)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) return obj } @@ -973,12 +973,12 @@ fn (t Tree) comptime_call(node ast.ComptimeCall) &Node { obj.add_terse('has_parens', t.bool_node(node.has_parens)) obj.add_terse('is_embed', t.bool_node(node.is_embed)) obj.add_terse('embed_file', t.embed_file(node.embed_file)) - obj.add('method_pos', t.position(node.method_pos)) + obj.add('method_pos', t.pos(node.method_pos)) obj.add_terse('left_type', t.type_node(node.left_type)) obj.add_terse('result_type', t.type_node(node.result_type)) obj.add('scope', t.scope(node.scope)) obj.add_terse('env_value', t.string_node(node.env_value)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) obj.add_terse('args', t.array_node_call_arg(node.args)) return obj } @@ -991,7 +991,7 @@ fn (t Tree) comptime_selector(node ast.ComptimeSelector) &Node { obj.add_terse('field_expr', t.expr(node.field_expr)) obj.add_terse('left_type', t.type_node(node.left_type)) obj.add_terse('typ', t.type_node(node.typ)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) return obj } @@ -1001,7 +1001,7 @@ fn (t Tree) expr_stmt(node ast.ExprStmt) &Node { obj.add_terse('typ', t.type_node(node.typ)) obj.add_terse('is_expr', t.bool_node(node.is_expr)) obj.add_terse('expr', t.expr(node.expr)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) obj.add('comments', t.array_node_comment(node.comments)) return obj } @@ -1167,7 +1167,7 @@ fn (t Tree) integer_literal(node ast.IntegerLiteral) &Node { mut obj := new_object() obj.add_terse('ast_type', t.string_node('IntegerLiteral')) obj.add_terse('val', t.string_node(node.val)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) return obj } @@ -1175,7 +1175,7 @@ fn (t Tree) float_literal(node ast.FloatLiteral) &Node { mut obj := new_object() obj.add_terse('ast_type', t.string_node('FloatLiteral')) obj.add_terse('val', t.string_node(node.val)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) return obj } @@ -1185,7 +1185,7 @@ fn (t Tree) string_literal(node ast.StringLiteral) &Node { obj.add_terse('val', t.string_node(node.val)) obj.add_terse('is_raw', t.bool_node(node.is_raw)) obj.add_terse('language', t.enum_node(node.language)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) return obj } @@ -1193,7 +1193,7 @@ fn (t Tree) char_literal(node ast.CharLiteral) &Node { mut obj := new_object() obj.add_terse('ast_type', t.string_node('CharLiteral')) obj.add_terse('val', t.string_node(node.val)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) return obj } @@ -1201,7 +1201,7 @@ fn (t Tree) bool_literal(node ast.BoolLiteral) &Node { mut obj := new_object() obj.add_terse('ast_type', t.string_node('BoolLiteral')) obj.add_terse('val', t.bool_node(node.val)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) return obj } @@ -1218,7 +1218,7 @@ fn (t Tree) string_inter_literal(node ast.StringInterLiteral) &Node { obj.add_terse('fmt_poss', t.array_node_position(node.fmt_poss)) obj.add_terse('fmts', t.array_node_byte(node.fmts)) obj.add_terse('need_fmts', t.array_node_bool(node.need_fmts)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) return obj } @@ -1229,7 +1229,7 @@ fn (t Tree) enum_val(node ast.EnumVal) &Node { obj.add_terse('mod', t.string_node(node.mod)) obj.add_terse('val', t.string_node(node.val)) obj.add_terse('typ', t.type_node(node.typ)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) return obj } @@ -1240,7 +1240,7 @@ fn (t Tree) assoc(node ast.Assoc) &Node { obj.add_terse('fields', t.array_node_string(node.fields)) obj.add_terse('exprs', t.array_node_expr(node.exprs)) obj.add_terse('typ', t.type_node(node.typ)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) obj.add('scope', t.number_node(int(node.scope))) return obj } @@ -1249,7 +1249,7 @@ fn (t Tree) at_expr(node ast.AtExpr) &Node { mut obj := new_object() obj.add_terse('ast_type', t.string_node('AtExpr')) obj.add_terse('name', t.string_node(node.name)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) obj.add_terse('kind', t.enum_node(node.kind)) obj.add_terse('val', t.string_node(node.val)) return obj @@ -1265,7 +1265,7 @@ fn (t Tree) cast_expr(node ast.CastExpr) &Node { obj.add_terse('arg', t.expr(node.arg)) obj.add_terse('expr_type', t.type_node(node.expr_type)) obj.add_terse('expr', t.expr(node.expr)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) return obj } @@ -1275,7 +1275,7 @@ fn (t Tree) as_cast(node ast.AsCast) &Node { obj.add_terse('expr', t.expr(node.expr)) obj.add_terse('typ', t.type_node(node.typ)) obj.add_terse('expr_type', t.type_node(node.expr_type)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) return obj } @@ -1283,7 +1283,7 @@ fn (t Tree) type_expr(node ast.TypeNode) &Node { mut obj := new_object() obj.add_terse('ast_type', t.string_node('TypeNode')) obj.add_terse('typ', t.type_node(node.typ)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) return obj } @@ -1293,7 +1293,7 @@ fn (t Tree) size_of(node ast.SizeOf) &Node { obj.add_terse('is_type', t.bool_node(node.is_type)) obj.add_terse('typ', t.type_node(node.typ)) obj.add_terse('expr', t.expr(node.expr)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) return obj } @@ -1303,7 +1303,7 @@ fn (t Tree) is_ref_type(node ast.IsRefType) &Node { obj.add_terse('is_type', t.bool_node(node.is_type)) obj.add_terse('typ', t.type_node(node.typ)) obj.add_terse('expr', t.expr(node.expr)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) return obj } @@ -1315,7 +1315,7 @@ fn (t Tree) prefix_expr(node ast.PrefixExpr) &Node { obj.add_terse('right_type', t.type_node(node.right_type)) obj.add_terse('or_block', t.or_expr(node.or_block)) obj.add_terse('is_option', t.bool_node(node.is_option)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) return obj } @@ -1334,7 +1334,7 @@ fn (t Tree) infix_expr(node ast.InfixExpr) &Node { obj.add_terse('ct_left_value', t.comptime_expr_value(node.ct_left_value)) obj.add_terse('ct_right_value_evaled', t.bool_node(node.ct_right_value_evaled)) obj.add_terse('ct_right_value', t.comptime_expr_value(node.ct_right_value)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) return obj } @@ -1347,7 +1347,7 @@ fn (t Tree) index_expr(node ast.IndexExpr) &Node { obj.add_terse('is_setter', t.bool_node(node.is_setter)) obj.add_terse('is_direct', t.bool_node(node.is_direct)) obj.add_terse('or_expr', t.or_expr(node.or_expr)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) return obj } @@ -1357,7 +1357,7 @@ fn (t Tree) postfix_expr(node ast.PostfixExpr) &Node { obj.add_terse('op', t.token_node(node.op)) obj.add_terse('expr', t.expr(node.expr)) obj.add('auto_locked', t.string_node(node.auto_locked)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) return obj } @@ -1372,7 +1372,7 @@ fn (t Tree) selector_expr(node ast.SelectorExpr) &Node { obj.add_terse('gkind_field', t.enum_node(node.gkind_field)) obj.add_terse('from_embed_types', t.array_node_type(node.from_embed_types)) obj.add_terse('next_token', t.token_node(node.next_token)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) obj.add('scope', t.number_node(int(node.scope))) return obj } @@ -1384,7 +1384,7 @@ fn (t Tree) range_expr(node ast.RangeExpr) &Node { obj.add_terse('high', t.expr(node.high)) obj.add_terse('has_high', t.bool_node(node.has_high)) obj.add_terse('has_low', t.bool_node(node.has_low)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) return obj } @@ -1398,7 +1398,7 @@ fn (t Tree) if_expr(node ast.IfExpr) &Node { obj.add_terse('typ', t.type_node(node.typ)) obj.add_terse('has_else', t.bool_node(node.has_else)) obj.add_terse('is_expr', t.bool_node(node.is_expr)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) obj.add('post_comments', t.array_node_comment(node.post_comments)) return obj } @@ -1407,8 +1407,8 @@ fn (t Tree) if_branch(node ast.IfBranch) &Node { mut obj := new_object() obj.add_terse('ast_type', t.string_node('IfBranch')) obj.add_terse('cond', t.expr(node.cond)) - obj.add('pos', t.position(node.pos)) - obj.add('body_pos', t.position(node.body_pos)) + obj.add('pos', t.pos(node.pos)) + obj.add('body_pos', t.pos(node.body_pos)) obj.add_terse('pkg_exist', t.bool_node(node.pkg_exist)) obj.add_terse('stmts', t.array_node_stmt(node.stmts)) obj.add('scope', t.number_node(int(node.scope))) @@ -1427,8 +1427,8 @@ fn (t Tree) ident(node ast.Ident) &Node { obj.add_terse('tok_kind', t.token_node(node.tok_kind)) obj.add_terse('kind', t.enum_node(node.kind)) obj.add_terse('info', t.ident_info(node.info)) - obj.add('pos', t.position(node.pos)) - obj.add('mut_pos', t.position(node.mut_pos)) + obj.add('pos', t.pos(node.pos)) + obj.add('mut_pos', t.pos(node.mut_pos)) obj.add('obj', t.scope_object(node.obj)) obj.add('scope', t.number_node(int(node.scope))) return obj @@ -1481,11 +1481,11 @@ fn (t Tree) call_expr(node ast.CallExpr) &Node { obj.add_terse('expected_arg_types', t.array_node_type(node.expected_arg_types)) obj.add_terse('concrete_types', t.array_node_type(node.concrete_types)) obj.add_terse('or_block', t.or_expr(node.or_block)) - obj.add('concrete_list_pos', t.position(node.concrete_list_pos)) + obj.add('concrete_list_pos', t.pos(node.concrete_list_pos)) obj.add_terse('from_embed_types', t.array_node_type(node.from_embed_types)) obj.add('comments', t.array_node_comment(node.comments)) - obj.add('pos', t.position(node.pos)) - obj.add('name_pos', t.position(node.name_pos)) + obj.add('pos', t.pos(node.pos)) + obj.add('name_pos', t.pos(node.name_pos)) return obj } @@ -1497,7 +1497,7 @@ fn (t Tree) call_arg(node ast.CallArg) &Node { obj.add_terse('share', t.enum_node(node.share)) obj.add_terse('expr', t.expr(node.expr)) obj.add('is_tmp_autofree', t.bool_node(node.is_tmp_autofree)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) obj.add('comments', t.array_node_comment(node.comments)) return obj } @@ -1507,7 +1507,7 @@ fn (t Tree) or_expr(node ast.OrExpr) &Node { obj.add_terse('ast_type', t.string_node('OrExpr')) obj.add_terse('stmts', t.array_node_stmt(node.stmts)) obj.add_terse('kind', t.enum_node(node.kind)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) return obj } @@ -1520,8 +1520,8 @@ fn (t Tree) struct_init(node ast.StructInit) &Node { obj.add_terse('has_update_expr', t.bool_node(node.has_update_expr)) obj.add_terse('update_expr', t.expr(node.update_expr)) obj.add_terse('update_expr_type', t.type_node(node.update_expr_type)) - obj.add('pos', t.position(node.pos)) - obj.add('name_pos', t.position(node.name_pos)) + obj.add('pos', t.pos(node.pos)) + obj.add('name_pos', t.pos(node.name_pos)) obj.add('update_expr_comments', t.array_node_comment(node.update_expr_comments)) obj.add_terse('fields', t.array_node_struct_init_field(node.fields)) obj.add_terse('embeds', t.array_node_struct_init_embed(node.embeds)) @@ -1539,8 +1539,8 @@ fn (t Tree) struct_init_field(node ast.StructInitField) &Node { obj.add_terse('parent_type', t.type_node(node.parent_type)) obj.add('comments', t.array_node_comment(node.comments)) obj.add('next_comments', t.array_node_comment(node.next_comments)) - obj.add('pos', t.position(node.pos)) - obj.add('name_pos', t.position(node.name_pos)) + obj.add('pos', t.pos(node.pos)) + obj.add('name_pos', t.pos(node.name_pos)) return obj } @@ -1553,7 +1553,7 @@ fn (t Tree) struct_init_embed(node ast.StructInitEmbed) &Node { obj.add_terse('expected_type', t.type_node(node.expected_type)) obj.add('comments', t.array_node_comment(node.comments)) obj.add('next_comments', t.array_node_comment(node.next_comments)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) return obj } @@ -1565,7 +1565,7 @@ fn (t Tree) array_init(node ast.ArrayInit) &Node { obj.add_terse('exprs', t.array_node_expr(node.exprs)) obj.add('ecmnts', t.two_dimension_comment(node.ecmnts)) obj.add('pre_cmnts', t.array_node_comment(node.pre_cmnts)) - obj.add('elem_type_pos', t.position(node.elem_type_pos)) + obj.add('elem_type_pos', t.pos(node.elem_type_pos)) obj.add_terse('is_fixed', t.bool_node(node.is_fixed)) obj.add_terse('has_val', t.bool_node(node.has_val)) obj.add_terse('mod', t.string_node(node.mod)) @@ -1577,7 +1577,7 @@ fn (t Tree) array_init(node ast.ArrayInit) &Node { obj.add_terse('has_default', t.bool_node(node.has_default)) obj.add_terse('has_it', t.bool_node(node.has_it)) obj.add_terse('expr_types', t.array_node_type(node.expr_types)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) return obj } @@ -1591,14 +1591,14 @@ fn (t Tree) map_init(node ast.MapInit) &Node { obj.add_terse('vals', t.array_node_expr(node.vals)) obj.add('comments', t.two_dimension_comment(node.comments)) obj.add('pre_cmnts', t.array_node_comment(node.pre_cmnts)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) return obj } fn (t Tree) none_expr(node ast.None) &Node { mut obj := new_object() obj.add_terse('ast_type', t.string_node('None')) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) return obj } @@ -1606,7 +1606,7 @@ fn (t Tree) par_expr(node ast.ParExpr) &Node { mut obj := new_object() obj.add_terse('ast_type', t.string_node('ParExpr')) obj.add_terse('expr', t.expr(node.expr)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) return obj } @@ -1624,7 +1624,7 @@ fn (t Tree) if_guard_var(node ast.IfGuardVar) &Node { obj.add_terse('ast_type', t.string_node('IfGuardVar')) obj.add_terse('name', t.string_node(node.name)) obj.add_terse('is_mut', t.bool_node(node.is_mut)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) return obj } @@ -1638,7 +1638,7 @@ fn (t Tree) match_expr(node ast.MatchExpr) &Node { obj.add_terse('expected_type', t.type_node(node.expected_type)) obj.add_terse('is_sum_type', t.bool_node(node.is_sum_type)) obj.add_terse('is_expr', t.bool_node(node.is_expr)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) obj.add_terse('branches', t.array_node_match_branch(node.branches)) obj.add('comments', t.array_node_comment(node.comments)) return obj @@ -1650,9 +1650,9 @@ fn (t Tree) match_branch(node ast.MatchBranch) &Node { obj.add('ecmnts', t.two_dimension_comment(node.ecmnts)) obj.add_terse('stmts', t.array_node_stmt(node.stmts)) obj.add_terse('is_else', t.bool_node(node.is_else)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) obj.add_terse('post_comments', t.array_node_comment(node.post_comments)) - obj.add('branch_pos', t.position(node.branch_pos)) + obj.add('branch_pos', t.pos(node.branch_pos)) obj.add_terse('exprs', t.array_node_expr(node.exprs)) obj.add('scope', t.number_node(int(node.scope))) return obj @@ -1663,7 +1663,7 @@ fn (t Tree) concat_expr(node ast.ConcatExpr) &Node { obj.add_terse('ast_type', t.string_node('ConcatExpr')) obj.add_terse('vals', t.array_node_expr(node.vals)) obj.add_terse('return_type', t.type_node(node.return_type)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) return obj } @@ -1672,7 +1672,7 @@ fn (t Tree) type_of(node ast.TypeOf) &Node { obj.add_terse('ast_type', t.string_node('TypeOf')) obj.add_terse('expr', t.expr(node.expr)) obj.add_terse('expr_type', t.type_node(node.expr_type)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) return obj } @@ -1681,7 +1681,7 @@ fn (t Tree) likely(node ast.Likely) &Node { obj.add_terse('ast_type', t.string_node('Likely')) obj.add_terse('expr', t.expr(node.expr)) obj.add_terse('is_likely', t.bool_node(node.is_likely)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) return obj } @@ -1698,7 +1698,7 @@ fn (t Tree) sql_expr(node ast.SqlExpr) &Node { obj.add_terse('order_expr', t.expr(node.order_expr)) obj.add_terse('has_desc', t.bool_node(node.has_desc)) obj.add_terse('is_array', t.bool_node(node.is_array)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) obj.add_terse('has_limit', t.bool_node(node.has_limit)) obj.add_terse('limit_expr', t.expr(node.limit_expr)) obj.add_terse('has_offset', t.bool_node(node.has_offset)) @@ -1716,7 +1716,7 @@ fn (t Tree) sql_stmt(node ast.SqlStmt) &Node { mut obj := new_object() obj.add_terse('ast_type', t.string_node('SqlStmt')) obj.add_terse('db_expr', t.expr(node.db_expr)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) obj.add_terse('lines', t.array_node_sql_stmt_line(node.lines)) return obj } @@ -1731,7 +1731,7 @@ fn (t Tree) sql_stmt_line(node ast.SqlStmtLine) &Node { obj.add_terse('fields', t.array_node_struct_field(node.fields)) obj.add_terse('updated_columns', t.array_node_string(node.updated_columns)) obj.add_terse('update_exprs', t.array_node_expr(node.update_exprs)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) sub_struct_map := new_object() for key, val in node.sub_structs { @@ -1746,7 +1746,7 @@ fn (t Tree) lock_expr(expr ast.LockExpr) &Node { obj.add_terse('ast_type', t.string_node('LockExpr')) obj.add_terse('is_expr', t.bool_node(expr.is_expr)) obj.add_terse('typ', t.type_node(expr.typ)) - obj.add('pos', t.position(expr.pos)) + obj.add('pos', t.pos(expr.pos)) obj.add_terse('stmts', t.array_node_stmt(expr.stmts)) obj.add_terse('lockeds', t.array_node_expr(expr.lockeds)) obj.add_terse('r_lock', t.array_node_bool(expr.is_rlock)) @@ -1757,7 +1757,7 @@ fn (t Tree) unsafe_expr(expr ast.UnsafeExpr) &Node { mut obj := new_object() obj.add_terse('ast_type', t.string_node('UnsafeExpr')) obj.add_terse('expr', t.expr(expr.expr)) - obj.add('pos', t.position(expr.pos)) + obj.add('pos', t.pos(expr.pos)) return obj } @@ -1768,7 +1768,7 @@ fn (t Tree) chan_init(expr ast.ChanInit) &Node { obj.add_terse('cap_expr', t.expr(expr.cap_expr)) obj.add_terse('typ', t.type_node(expr.typ)) obj.add_terse('elem_type', t.type_node(expr.elem_type)) - obj.add('pos', t.position(expr.pos)) + obj.add('pos', t.pos(expr.pos)) return obj } @@ -1779,7 +1779,7 @@ fn (t Tree) select_expr(expr ast.SelectExpr) &Node { obj.add_terse('is_expr', t.bool_node(expr.is_expr)) obj.add_terse('has_exception', t.bool_node(expr.has_exception)) obj.add_terse('expected_type', t.type_node(expr.expected_type)) - obj.add('pos', t.position(expr.pos)) + obj.add('pos', t.pos(expr.pos)) return obj } @@ -1788,7 +1788,7 @@ fn (t Tree) select_branch(expr ast.SelectBranch) &Node { obj.add_terse('ast_type', t.string_node('SelectBranch')) obj.add_terse('stmt', t.stmt(expr.stmt)) obj.add_terse('stmts', t.array_node_stmt(expr.stmts)) - obj.add('pos', t.position(expr.pos)) + obj.add('pos', t.pos(expr.pos)) obj.add('comment', t.comment(expr.comment)) obj.add_terse('is_else', t.bool_node(expr.is_else)) obj.add_terse('is_timeout', t.bool_node(expr.is_timeout)) @@ -1802,7 +1802,7 @@ fn (t Tree) array_decompose(expr ast.ArrayDecompose) &Node { obj.add_terse('expr', t.expr(expr.expr)) obj.add_terse('expr_type', t.type_node(expr.expr_type)) obj.add_terse('arg_type', t.type_node(expr.arg_type)) - obj.add('pos', t.position(expr.pos)) + obj.add('pos', t.pos(expr.pos)) return obj } @@ -1811,7 +1811,7 @@ fn (t Tree) go_expr(expr ast.GoExpr) &Node { obj.add_terse('ast_type', t.string_node('GoExpr')) obj.add_terse('call_expr', t.call_expr(expr.call_expr)) obj.add_terse('is_expr', t.bool_node(expr.is_expr)) - obj.add('pos', t.position(expr.pos)) + obj.add('pos', t.pos(expr.pos)) return obj } @@ -1820,7 +1820,7 @@ fn (t Tree) offset_of(expr ast.OffsetOf) &Node { obj.add_terse('ast_type', t.string_node('OffsetOf')) obj.add_terse('struct_type', t.type_node(expr.struct_type)) obj.add_terse('field', t.string_node('field')) - obj.add('pos', t.position(expr.pos)) + obj.add('pos', t.pos(expr.pos)) return obj } @@ -1829,7 +1829,7 @@ fn (t Tree) dump_expr(expr ast.DumpExpr) &Node { obj.add_terse('ast_type', t.string_node('DumpExpr')) obj.add_terse('expr', t.expr(expr.expr)) obj.add_terse('expr_type', t.type_node(expr.expr_type)) - obj.add('pos', t.position(expr.pos)) + obj.add('pos', t.pos(expr.pos)) return obj } @@ -1837,7 +1837,7 @@ fn (t Tree) node_error(expr ast.NodeError) &Node { mut obj := new_object() obj.add_terse('ast_type', t.string_node('NodeError')) obj.add_terse('idx', t.number_node(expr.idx)) - obj.add('pos', t.position(expr.pos)) + obj.add('pos', t.pos(expr.pos)) return obj } @@ -1851,7 +1851,7 @@ fn (t Tree) empty_expr(expr ast.EmptyExpr) &Node { fn (t Tree) empty_stmt(node ast.EmptyStmt) &Node { mut obj := new_object() obj.add_terse('ast_type', t.string_node('EmptyStmt')) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) return obj } @@ -1864,7 +1864,7 @@ fn (t Tree) asm_stmt(node ast.AsmStmt) &Node { obj.add_terse('is_goto', t.bool_node(node.is_goto)) obj.add('scope', t.scope(node.scope)) // obj.add('scope', t.number_node(int(node.scope))) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) obj.add_terse('clobbered', t.array_node_asm_clobbered(node.clobbered)) obj.add_terse('templates', t.array_node_asm_template(node.templates)) obj.add_terse('output', t.array_node_asm_io(node.output)) @@ -1891,7 +1891,7 @@ fn (t Tree) asm_template(node ast.AsmTemplate) &Node { obj.add_terse('is_directive', t.bool_node(node.is_directive)) obj.add_terse('args', t.array_node_asm_arg(node.args)) obj.add('comments', t.array_node_comment(node.comments)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) return obj } @@ -1904,7 +1904,7 @@ fn (t Tree) asm_addressing(node ast.AsmAddressing) &Node { obj.add_terse('displacement', t.asm_arg(node.displacement)) obj.add_terse('base', t.asm_arg(node.base)) obj.add_terse('index', t.asm_arg(node.index)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) return obj } @@ -1944,7 +1944,7 @@ fn (t Tree) asm_alias(node ast.AsmAlias) &Node { mut obj := new_object() obj.add_terse('ast_type', t.string_node('AsmAlias')) obj.add_terse('name', t.string_node(node.name)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) return obj } @@ -1952,7 +1952,7 @@ fn (t Tree) asm_disp(node ast.AsmDisp) &Node { mut obj := new_object() obj.add_terse('ast_type', t.string_node('AsmDisp')) obj.add_terse('val', t.string_node(node.val)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) return obj } @@ -1972,7 +1972,7 @@ fn (t Tree) asm_io(node ast.AsmIO) &Node { obj.add_terse('expr', t.expr(node.expr)) obj.add_terse('typ', t.type_node(node.typ)) obj.add('comments', t.array_node_comment(node.comments)) - obj.add('pos', t.position(node.pos)) + obj.add('pos', t.pos(node.pos)) return obj } @@ -2032,10 +2032,10 @@ fn (t Tree) array_node_string(nodes []string) &Node { return arr } -fn (t Tree) array_node_position(nodes []token.Position) &Node { +fn (t Tree) array_node_position(nodes []token.Pos) &Node { mut arr := new_array() for node in nodes { - arr.add_item(t.position(node)) + arr.add_item(t.pos(node)) } return arr } diff --git a/cmd/tools/vvet/vvet.v b/cmd/tools/vvet/vvet.v index 9a136ec97..d109b1c61 100644 --- a/cmd/tools/vvet/vvet.v +++ b/cmd/tools/vvet/vvet.v @@ -222,7 +222,7 @@ fn (vt &Vet) e2string(err vet.Error) string { } fn (mut vt Vet) error(msg string, line int, fix vet.FixKind) { - pos := token.Position{ + pos := token.Pos{ line_nr: line + 1 } vt.errors << vet.Error{ @@ -236,7 +236,7 @@ fn (mut vt Vet) error(msg string, line int, fix vet.FixKind) { } fn (mut vt Vet) warn(msg string, line int, fix vet.FixKind) { - pos := token.Position{ + pos := token.Pos{ line_nr: line + 1 } mut w := vet.Error{ diff --git a/vlib/toml/ast/types.v b/vlib/toml/ast/types.v index fd7ee5e0f..b3dd55358 100644 --- a/vlib/toml/ast/types.v +++ b/vlib/toml/ast/types.v @@ -70,7 +70,7 @@ pub fn (dtt DateTimeType) str() string { pub struct Comment { pub: text string - pos token.Position + pos token.Pos } // str returns the `string` representation of the `Comment` type. @@ -86,7 +86,7 @@ pub fn (c Comment) str() string { pub struct Null { pub: text string - pos token.Position + pos token.Pos } // str returns the `string` representation of the `Null` type @@ -100,7 +100,7 @@ pub struct Quoted { pub mut: text string pub: - pos token.Position + pos token.Pos is_multiline bool quote byte } @@ -122,7 +122,7 @@ pub fn (q Quoted) str() string { pub struct Bare { pub: text string - pos token.Position + pos token.Pos } // str returns the `string` representation of the `Bare` type. @@ -140,7 +140,7 @@ pub fn (b Bare) str() string { pub struct Bool { pub: text string - pos token.Position + pos token.Pos } // str returns the `string` representation of the `Bool` type. @@ -157,7 +157,7 @@ pub fn (b Bool) str() string { // Number can be integers, floats, infinite, NaN - they can have exponents (`5e2`) and be sign prefixed (`+2`). pub struct Number { pub: - pos token.Position + pos token.Pos pub mut: text string } @@ -197,7 +197,7 @@ pub fn (n Number) f64() f64 { pub struct Date { pub: text string - pos token.Position + pos token.Pos } // str returns the `string` representation of the `Date` type. @@ -215,7 +215,7 @@ pub struct Time { pub: text string offset int - pos token.Position + pos token.Pos } // str returns the `string` representation of the `Time` type. @@ -234,7 +234,7 @@ pub struct DateTime { pub mut: text string pub: - pos token.Position + pos token.Pos date Date time Time } @@ -253,7 +253,7 @@ pub fn (dt DateTime) str() string { // EOF is the data representation of the end of the TOML document. pub struct EOF { pub: - pos token.Position + pos token.Pos } // str returns the `string` representation of the `EOF` type. diff --git a/vlib/toml/checker/checker.v b/vlib/toml/checker/checker.v index 3d6c77427..630e462b5 100644 --- a/vlib/toml/checker/checker.v +++ b/vlib/toml/checker/checker.v @@ -53,7 +53,7 @@ fn (c Checker) visit(value &ast.Value) ? { } // excerpt returns a string of the token's surroundings -fn (c Checker) excerpt(tp token.Position) string { +fn (c Checker) excerpt(tp token.Pos) string { return c.scanner.excerpt(tp.pos, 10) } @@ -301,7 +301,7 @@ fn (c Checker) check_date_time(dt ast.DateTime) ? { // Re-use date and time validation code for detailed testing of each part c.check_date(ast.Date{ text: split[0] - pos: token.Position{ + pos: token.Pos{ len: split[0].len line_nr: dt.pos.line_nr pos: dt.pos.pos @@ -310,7 +310,7 @@ fn (c Checker) check_date_time(dt ast.DateTime) ? { }) ? c.check_time(ast.Time{ text: split[1] - pos: token.Position{ + pos: token.Pos{ len: split[1].len line_nr: dt.pos.line_nr pos: dt.pos.pos + split[0].len diff --git a/vlib/toml/decoder/decoder.v b/vlib/toml/decoder/decoder.v index ede7920e5..cfe19e33b 100644 --- a/vlib/toml/decoder/decoder.v +++ b/vlib/toml/decoder/decoder.v @@ -43,7 +43,7 @@ fn (d Decoder) modify(mut value ast.Value) ? { } // excerpt returns a string of the token's surroundings -fn (d Decoder) excerpt(tp token.Position) string { +fn (d Decoder) excerpt(tp token.Pos) string { return d.scanner.excerpt(tp.pos, 10) } diff --git a/vlib/toml/parser/parser.v b/vlib/toml/parser/parser.v index a1d09f5c2..ccfabab2f 100644 --- a/vlib/toml/parser/parser.v +++ b/vlib/toml/parser/parser.v @@ -1160,7 +1160,7 @@ pub fn (mut p Parser) comment() ast.Comment { util.printdbg(@MOD + '.' + @STRUCT + '.' + @FN, 'parsed hash comment "#$p.tok.lit"') return ast.Comment{ text: p.tok.lit - pos: p.tok.position() + pos: p.tok.pos() } } @@ -1173,7 +1173,7 @@ pub fn (mut p Parser) key() ?ast.Key { if p.tok.kind == .number { if p.peek_tok.kind == .minus { mut lits := p.tok.lit - pos := p.tok.position() + pos := p.tok.pos() for p.peek_tok.kind != .assign && p.peek_tok.kind != .period && p.peek_tok.kind != .rsbr { p.next() ? if p.tok.kind !in parser.space_formatting { @@ -1337,7 +1337,7 @@ pub fn (mut p Parser) number_or_date() ?ast.Value { // bare parse and returns an `ast.Bare` type. pub fn (mut p Parser) bare() ?ast.Bare { mut lits := p.tok.lit - pos := p.tok.position() + pos := p.tok.pos() for p.peek_tok.kind != .assign && p.peek_tok.kind != .period && p.peek_tok.kind != .rsbr && p.peek_tok.kind !in parser.space_formatting { p.next() ? @@ -1373,7 +1373,7 @@ pub fn (mut p Parser) quoted() ast.Quoted { } return ast.Quoted{ text: lit - pos: p.tok.position() + pos: p.tok.pos() quote: quote is_multiline: is_multiline } @@ -1387,7 +1387,7 @@ pub fn (mut p Parser) boolean() ?ast.Bool { } return ast.Bool{ text: p.tok.lit - pos: p.tok.position() + pos: p.tok.pos() } } @@ -1395,7 +1395,7 @@ pub fn (mut p Parser) boolean() ?ast.Bool { pub fn (mut p Parser) number() ast.Number { return ast.Number{ text: p.tok.lit - pos: p.tok.position() + pos: p.tok.pos() } } @@ -1404,7 +1404,7 @@ pub fn (mut p Parser) number() ast.Number { pub fn (mut p Parser) date_time() ?ast.DateTimeType { // Date and/or Time mut lit := '' - pos := p.tok.position() + pos := p.tok.pos() mut date := ast.Date{} mut time := ast.Time{} @@ -1447,7 +1447,7 @@ pub fn (mut p Parser) date_time() ?ast.DateTimeType { pub fn (mut p Parser) date() ?ast.Date { // Date mut lit := p.tok.lit - pos := p.tok.position() + pos := p.tok.pos() p.check(.number) ? lit += p.tok.lit @@ -1470,7 +1470,7 @@ pub fn (mut p Parser) date() ?ast.Date { pub fn (mut p Parser) time() ?ast.Time { // Time mut lit := p.tok.lit - pos := p.tok.position() + pos := p.tok.pos() if p.is_at(.bare) && (lit.starts_with('T') || lit.starts_with('t')) { if p.tok.lit.starts_with('T') { @@ -1530,6 +1530,6 @@ pub fn (mut p Parser) time() ?ast.Time { // eof returns an `ast.EOF` type. pub fn (mut p Parser) eof() ast.EOF { return ast.EOF{ - pos: p.tok.position() + pos: p.tok.pos() } } diff --git a/vlib/toml/token/position.v b/vlib/toml/token/pos.v similarity index 95% rename from vlib/toml/token/position.v rename to vlib/toml/token/pos.v index 478dfee02..78ac6cdc2 100644 --- a/vlib/toml/token/position.v +++ b/vlib/toml/token/pos.v @@ -4,7 +4,7 @@ module token // Position represents a position in a TOML document. -pub struct Position { +pub struct Pos { pub: len int // length of the literal in the source line_nr int // the line number in the source where the token occured diff --git a/vlib/toml/token/token.v b/vlib/toml/token/token.v index 6438f0c98..506d277f6 100644 --- a/vlib/toml/token/token.v +++ b/vlib/toml/token/token.v @@ -42,8 +42,8 @@ pub enum Kind { } [inline] -pub fn (tok &Token) position() Position { - return Position{ +pub fn (tok &Token) pos() Pos { + return Pos{ len: tok.len line_nr: tok.line_nr - 1 pos: tok.pos diff --git a/vlib/v/ast/ast.v b/vlib/v/ast/ast.v index 742826e4b..b169da1cf 100644 --- a/vlib/v/ast/ast.v +++ b/vlib/v/ast/ast.v @@ -111,7 +111,7 @@ pub type Node = CallArg pub struct TypeNode { pub: typ Type - pos token.Position + pos token.Pos } pub struct EmptyExpr { @@ -124,7 +124,7 @@ pub fn empty_expr() Expr { pub struct EmptyStmt { pub: - pos token.Position + pos token.Pos } pub fn empty_stmt() Stmt { @@ -144,14 +144,14 @@ pub struct Block { pub: stmts []Stmt is_unsafe bool - pos token.Position + pos token.Pos } // | IncDecStmt k // Stand-alone expression in a statement list. pub struct ExprStmt { pub: - pos token.Position + pos token.Pos comments []Comment pub mut: expr Expr @@ -162,13 +162,13 @@ pub mut: pub struct IntegerLiteral { pub: val string - pos token.Position + pos token.Pos } pub struct FloatLiteral { pub: val string - pos token.Position + pos token.Pos } pub struct StringLiteral { @@ -176,7 +176,7 @@ pub: val string is_raw bool language Language - pos token.Position + pos token.Pos } // 'name: $name' @@ -188,8 +188,8 @@ pub: precisions []int pluss []bool fills []bool - fmt_poss []token.Position - pos token.Position + fmt_poss []token.Pos + pos token.Pos pub mut: expr_types []Type fmts []byte @@ -199,13 +199,13 @@ pub mut: pub struct CharLiteral { pub: val string - pos token.Position + pos token.Pos } pub struct BoolLiteral { pub: val bool - pos token.Position + pos token.Pos } pub enum GenericKindField { @@ -217,10 +217,10 @@ pub enum GenericKindField { // `foo.bar` pub struct SelectorExpr { pub: - pos token.Position + pos token.Pos field_name string is_mut bool // is used for the case `if mut ident.selector is MyType {`, it indicates if the root ident is mutable - mut_pos token.Position + mut_pos token.Pos next_token token.Kind pub mut: expr Expr // expr.field_name @@ -251,15 +251,15 @@ pub: name string // encoding.base64 short_name string // base64 attrs []Attr - pos token.Position - name_pos token.Position // `name` in import name - is_skipped bool // module main can be skipped in single file programs + pos token.Pos + name_pos token.Pos // `name` in import name + is_skipped bool // module main can be skipped in single file programs } pub struct StructField { pub: - pos token.Position - type_pos token.Position + pos token.Pos + type_pos token.Pos comments []Comment has_default_expr bool attrs []Attr @@ -290,7 +290,7 @@ pub: name string is_pub bool is_markused bool // an explict `[markused]` tag; the const will NOT be removed by `-skip-unused`, no matter what - pos token.Position + pos token.Pos pub mut: expr Expr // the value expr of field; everything after `=` typ Type // the type of the const field, it can be any type in V @@ -304,7 +304,7 @@ pub mut: pub struct ConstDecl { pub: is_pub bool - pos token.Position + pos token.Pos attrs []Attr // tags like `[markused]`, valid for all the consts in the list pub mut: fields []ConstField // all the const fields in the `const (...)` block @@ -314,7 +314,7 @@ pub mut: pub struct StructDecl { pub: - pos token.Position + pos token.Pos name string generic_types []Type is_pub bool @@ -336,7 +336,7 @@ pub mut: pub struct Embed { pub: typ Type - pos token.Position + pos token.Pos comments []Comment } @@ -344,7 +344,7 @@ pub struct InterfaceEmbedding { pub: name string typ Type - pos token.Position + pos token.Pos comments []Comment } @@ -352,12 +352,12 @@ pub struct InterfaceDecl { pub: name string typ Type - name_pos token.Position + name_pos token.Pos language Language field_names []string is_pub bool mut_pos int // mut: - pos token.Position + pos token.Pos pre_comments []Comment generic_types []Type attrs []Attr @@ -371,8 +371,8 @@ pub mut: pub struct StructInitField { pub: - pos token.Position - name_pos token.Position + pos token.Pos + name_pos token.Pos comments []Comment next_comments []Comment pub mut: @@ -385,7 +385,7 @@ pub mut: pub struct StructInitEmbed { pub: - pos token.Position + pos token.Pos comments []Comment next_comments []Comment pub mut: @@ -397,8 +397,8 @@ pub mut: pub struct StructInit { pub: - pos token.Position - name_pos token.Position + pos token.Pos + name_pos token.Pos is_short bool pub mut: unresolved bool @@ -418,10 +418,10 @@ pub struct Import { pub: mod string // the module name of the import alias string // the `x` in `import xxx as x` - pos token.Position - mod_pos token.Position - alias_pos token.Position - syms_pos token.Position + pos token.Pos + mod_pos token.Pos + alias_pos token.Pos + syms_pos token.Pos pub mut: syms []ImportSymbol // the list of symbols in `import {symbol1, symbol2}` comments []Comment @@ -431,7 +431,7 @@ pub mut: // import symbol,for import {symbol} syntax pub struct ImportSymbol { pub: - pos token.Position + pos token.Pos name string } @@ -453,27 +453,27 @@ pub: is_pub bool is_variadic bool is_anon bool - is_noreturn bool // true, when [noreturn] is used on a fn - is_manualfree bool // true, when [manualfree] is used on a fn - is_main bool // true for `fn main()` - is_test bool // true for `fn test_abcde` - is_conditional bool // true for `[if abc] fn abc(){}` - is_exported bool // true for `[export: 'exact_C_name']` - is_keep_alive bool // passed memory must not be freed (by GC) before function returns - is_unsafe bool // true, when [unsafe] is used on a fn - is_markused bool // true, when an explict `[markused]` tag was put on a fn; `-skip-unused` will not remove that fn - receiver StructField // TODO this is not a struct field - receiver_pos token.Position // `(u User)` in `fn (u User) name()` position + is_noreturn bool // true, when [noreturn] is used on a fn + is_manualfree bool // true, when [manualfree] is used on a fn + is_main bool // true for `fn main()` + is_test bool // true for `fn test_abcde` + is_conditional bool // true for `[if abc] fn abc(){}` + is_exported bool // true for `[export: 'exact_C_name']` + is_keep_alive bool // passed memory must not be freed (by GC) before function returns + is_unsafe bool // true, when [unsafe] is used on a fn + is_markused bool // true, when an explict `[markused]` tag was put on a fn; `-skip-unused` will not remove that fn + receiver StructField // TODO this is not a struct field + receiver_pos token.Pos // `(u User)` in `fn (u User) name()` position is_method bool - method_type_pos token.Position // `User` in ` fn (u User)` position + method_type_pos token.Pos // `User` in ` fn (u User)` position method_idx int rec_mut bool // is receiver mutable rec_share ShareType - language Language // V, C, JS - file_mode Language // whether *the file*, where a function was a '.c.v', '.js.v' etc. - no_body bool // just a definition `fn C.malloc()` - is_builtin bool // this function is defined in builtin/strconv - body_pos token.Position // function bodys position + language Language // V, C, JS + file_mode Language // whether *the file*, where a function was a '.c.v', '.js.v' etc. + no_body bool // just a definition `fn C.malloc()` + is_builtin bool // this function is defined in builtin/strconv + body_pos token.Pos // function bodys position file string generic_names []string is_direct_arr bool // direct array access @@ -484,9 +484,9 @@ pub mut: stmts []Stmt defer_stmts []DeferStmt return_type Type - return_type_pos token.Position // `string` in `fn (u User) name() string` position + return_type_pos token.Pos // `string` in `fn (u User) name() string` position has_return bool - should_be_skipped bool // true, when -skip-unused could not find any usages of that function, starting from main + other known used functions + should_be_skipped bool // true, when -skip-unused could not find any usages of that function, starting from main + other known used functions ninstances int // 0 for generic functions with no concrete instances has_await bool // 'true' if this function uses JS.await // @@ -496,7 +496,7 @@ pub mut: source_file &File = 0 scope &Scope label_names []string - pos token.Position // function declaration position + pos token.Pos // function declaration position } // break, continue @@ -504,14 +504,14 @@ pub struct BranchStmt { pub: kind token.Kind label string - pos token.Position + pos token.Pos } // function or method call expr pub struct CallExpr { pub: - pos token.Position - name_pos token.Position + pos token.Pos + name_pos token.Pos mod string pub mut: name string // left.name() @@ -530,7 +530,7 @@ pub mut: return_type Type should_be_skipped bool // true for calls to `[if someflag?]` functions, when there is no `-d someflag` concrete_types []Type // concrete types, e.g. - concrete_list_pos token.Position + concrete_list_pos token.Pos free_receiver bool // true if the receiver expression needs to be freed scope &Scope from_embed_types []Type // holds the type of the embed that the method is called from @@ -553,14 +553,14 @@ pub mut: expr Expr typ Type is_tmp_autofree bool // this tells cgen that a tmp variable has to be used for the arg expression in order to free it after the call - pos token.Position + pos token.Pos // tmp_name string // for autofree } // function return statement pub struct Return { pub: - pos token.Position + pos token.Pos comments []Comment pub mut: exprs []Expr @@ -598,7 +598,7 @@ pub mut: // 10 <- original type (orig_type) // [11, 12, 13] <- cast order (smartcasts) // 12 <- the current casted type (typ) - pos token.Position + pos token.Pos is_used bool // whether the local variable was used in other expressions is_changed bool // to detect mutable vars that are never changed // @@ -615,7 +615,7 @@ pub struct ScopeStructField { pub: struct_type Type // type of struct name string - pos token.Position + pos token.Pos typ Type smartcasts []Type // nested sum types require nested smart casting, for that a list of types is needed orig_type Type // original sumtype type; 0 if it's not a sumtype @@ -629,8 +629,8 @@ pub struct GlobalField { pub: name string has_expr bool - pos token.Position - typ_pos token.Position + pos token.Pos + typ_pos token.Pos is_markused bool // an explict `[markused]` tag; the global will NOT be removed by `-skip-unused` pub mut: expr Expr @@ -641,7 +641,7 @@ pub mut: pub struct GlobalDecl { pub: mod string - pos token.Position + pos token.Pos is_block bool // __global() block attrs []Attr // tags like `[markused]`, valid for all the globals in the list pub mut: @@ -740,8 +740,8 @@ pub struct Ident { pub: language Language tok_kind token.Kind - pos token.Position - mut_pos token.Position + pos token.Pos + mut_pos token.Pos comptime bool pub mut: scope &Scope @@ -770,7 +770,7 @@ pub fn (i &Ident) var_info() IdentVar { pub struct InfixExpr { pub: op token.Kind - pos token.Position + pos token.Pos is_stmt bool pub mut: left Expr @@ -790,7 +790,7 @@ pub mut: pub struct PostfixExpr { pub: op token.Kind - pos token.Position + pos token.Pos pub mut: expr Expr auto_locked string @@ -800,7 +800,7 @@ pub mut: pub struct PrefixExpr { pub: op token.Kind - pos token.Position + pos token.Pos pub mut: right_type Type right Expr @@ -810,7 +810,7 @@ pub mut: pub struct IndexExpr { pub: - pos token.Position + pos token.Pos pub mut: index Expr // [0], RangeExpr [start..end] or map[key] or_expr OrExpr @@ -829,7 +829,7 @@ pub struct IfExpr { pub: is_comptime bool tok_kind token.Kind - pos token.Position + pos token.Pos post_comments []Comment pub mut: left Expr // `a` in `a := if ...` @@ -842,8 +842,8 @@ pub mut: pub struct IfBranch { pub: - pos token.Position - body_pos token.Position + pos token.Pos + body_pos token.Pos comments []Comment pub mut: cond Expr @@ -854,7 +854,7 @@ pub mut: pub struct UnsafeExpr { pub: - pos token.Position + pos token.Pos pub mut: expr Expr } @@ -862,7 +862,7 @@ pub mut: pub struct LockExpr { pub: is_rlock []bool - pos token.Position + pos token.Pos pub mut: stmts []Stmt lockeds []Expr // `x`, `y.z` in `lock x, y.z {` @@ -875,7 +875,7 @@ pub mut: pub struct MatchExpr { pub: tok_kind token.Kind - pos token.Position + pos token.Pos comments []Comment // comments before the first branch pub mut: cond Expr @@ -890,10 +890,10 @@ pub mut: pub struct MatchBranch { pub: ecmnts [][]Comment // inline comments for each left side expr - pos token.Position + pos token.Pos is_else bool - post_comments []Comment // comments below ´... }´ - branch_pos token.Position // for checker errors about invalid branches + post_comments []Comment // comments below ´... }´ + branch_pos token.Pos // for checker errors about invalid branches pub mut: stmts []Stmt // right side exprs []Expr // left side @@ -903,7 +903,7 @@ pub mut: pub struct SelectExpr { pub: branches []SelectBranch - pos token.Position + pos token.Pos has_exception bool pub mut: is_expr bool // returns a value @@ -912,7 +912,7 @@ pub mut: pub struct SelectBranch { pub: - pos token.Position + pos token.Pos comment Comment // comment above `select {` is_else bool is_timeout bool @@ -933,8 +933,8 @@ pub: val_var string stmts []Stmt kind ComptimeForKind - pos token.Position - typ_pos token.Position + pos token.Pos + typ_pos token.Pos pub mut: // expr Expr typ Type @@ -943,7 +943,7 @@ pub mut: pub struct ForStmt { pub: is_inf bool // `for {}` - pos token.Position + pos token.Pos pub mut: cond Expr stmts []Stmt @@ -959,7 +959,7 @@ pub: is_range bool high Expr // `10` in `for i in 0..10 {` stmts []Stmt - pos token.Position + pos token.Pos val_is_mut bool // `for mut val in vals {` means that modifying `val` will modify the array // and the array cannot be indexed inside the loop pub mut: @@ -978,7 +978,7 @@ pub: has_cond bool has_inc bool is_multi bool // for a,b := 0,1; a < 10; a,b = a+b, a {...} - pos token.Position + pos token.Pos pub mut: init Stmt // i := 0; cond Expr // i < 10; @@ -992,7 +992,7 @@ pub mut: pub struct HashStmt { pub: mod string - pos token.Position + pos token.Pos source_file string pub mut: val string // example: 'include # please install openssl // comment' @@ -1014,7 +1014,7 @@ pub: pub struct AssignStmt { pub: op token.Kind // include: =,:=,+=,-=,*=,/= and so on; for a list of all the assign operators, see vlib/token/token.v - pos token.Position + pos token.Pos comments []Comment end_comments []Comment pub mut: @@ -1032,7 +1032,7 @@ pub mut: pub struct AsCast { pub: typ Type // to type - pos token.Position + pos token.Pos pub mut: expr Expr // from expr: `expr` in `expr as Ident` expr_type Type // from type @@ -1044,7 +1044,7 @@ pub: enum_name string val string mod string // for full path `mod_Enum_val` - pos token.Position + pos token.Pos pub mut: typ Type } @@ -1053,7 +1053,7 @@ pub mut: pub struct EnumField { pub: name string - pos token.Position + pos token.Pos comments []Comment // comment after Enumfield in the same line next_comments []Comment // comments between current EnumField and next EnumField has_expr bool // true, when .expr has a value @@ -1071,7 +1071,7 @@ pub: comments []Comment // comments before the first EnumField fields []EnumField // all the enum fields attrs []Attr // attributes of enum declaration - pos token.Position + pos token.Pos } pub struct AliasTypeDecl { @@ -1079,8 +1079,8 @@ pub: name string is_pub bool parent_type Type - pos token.Position - type_pos token.Position + pos token.Pos + type_pos token.Pos comments []Comment } @@ -1089,7 +1089,7 @@ pub struct SumTypeDecl { pub: name string is_pub bool - pos token.Position + pos token.Pos comments []Comment typ Type generic_types []Type @@ -1103,8 +1103,8 @@ pub: name string is_pub bool typ Type - pos token.Position - type_pos token.Position + pos token.Pos + type_pos token.Pos comments []Comment } @@ -1114,7 +1114,7 @@ pub: pub struct DeferStmt { pub: stmts []Stmt - pos token.Position + pos token.Pos pub mut: defer_vars []Ident ifdef string @@ -1124,14 +1124,14 @@ pub mut: // `(3+4)` pub struct ParExpr { pub: - pos token.Position + pos token.Pos pub mut: expr Expr } pub struct GoExpr { pub: - pos token.Position + pos token.Pos pub mut: call_expr CallExpr is_expr bool @@ -1140,20 +1140,20 @@ pub mut: pub struct GotoLabel { pub: name string - pos token.Position + pos token.Pos } pub struct GotoStmt { pub: name string - pos token.Position + pos token.Pos } pub struct ArrayInit { pub: - pos token.Position // `[]` in []Type{} position - elem_type_pos token.Position // `Type` in []Type{} position - ecmnts [][]Comment // optional iembed comments after each expr + pos token.Pos // `[]` in []Type{} position + elem_type_pos token.Pos // `Type` in []Type{} position + ecmnts [][]Comment // optional iembed comments after each expr pre_cmnts []Comment is_fixed bool has_val bool // fixed size literal `[expr, expr]!` @@ -1175,7 +1175,7 @@ pub mut: pub struct ArrayDecompose { pub: - pos token.Position + pos token.Pos pub mut: expr Expr expr_type Type @@ -1184,7 +1184,7 @@ pub mut: pub struct ChanInit { pub: - pos token.Position + pos token.Pos has_cap bool pub mut: cap_expr Expr @@ -1194,7 +1194,7 @@ pub mut: pub struct MapInit { pub: - pos token.Position + pos token.Pos comments [][]Comment // comments after key-value pairs pre_cmnts []Comment // comments before the first key-value pair pub mut: @@ -1210,7 +1210,7 @@ pub struct RangeExpr { pub: has_high bool has_low bool - pos token.Position + pos token.Pos is_gated bool // #[] gated array pub mut: low Expr @@ -1225,7 +1225,7 @@ pub mut: typname string // `&Type` in `&Type(buf)` expr_type Type // `byteptr`, the type of the `buf` expression has_arg bool // true for `string(buf, n)`, false for `&Type(buf)` - pos token.Position + pos token.Pos } pub struct AsmStmt { @@ -1235,7 +1235,7 @@ pub: is_volatile bool is_goto bool clobbered []AsmClobbered - pos token.Position + pos token.Pos pub mut: templates []AsmTemplate scope &Scope @@ -1252,7 +1252,7 @@ pub mut: is_directive bool // .globl assembly_function args []AsmArg comments []Comment - pos token.Position + pos token.Pos } // [eax+5] | j | displacement literal (e.g. 123 in [rax + 123] ) | eax | true | `a` | 0.594 | 123 | label_name @@ -1276,12 +1276,12 @@ pub mut: pub struct AsmDisp { pub: val string - pos token.Position + pos token.Pos } pub struct AsmAlias { pub: - pos token.Position + pos token.Pos pub mut: name string // a } @@ -1290,7 +1290,7 @@ pub struct AsmAddressing { pub: scale int = -1 // 1, 2, 4, or 8 literal mode AddressingMode - pos token.Position + pos token.Pos pub mut: segment string // fs: displacement AsmArg // 8, 16 or 32 bit literal value @@ -1324,7 +1324,7 @@ pub: expr Expr // (a) comments []Comment // // this is a comment typ Type - pos token.Position + pos token.Pos } pub const ( @@ -1411,7 +1411,7 @@ pub const ( pub struct AssertStmt { pub: - pos token.Position + pos token.Pos pub mut: expr Expr is_used bool // asserts are used in _test.v files, as well as in non -prod builds of all files @@ -1421,7 +1421,7 @@ pub struct IfGuardVar { pub mut: name string is_mut bool - pos token.Position + pos token.Pos } // `if x := opt() {` @@ -1444,7 +1444,7 @@ pub struct OrExpr { pub: stmts []Stmt kind OrKind - pos token.Position + pos token.Pos } /* @@ -1454,7 +1454,7 @@ pub: call_expr CallExpr stmts []Stmt // inside `or { }` kind OrKind - pos token.Position + pos token.Pos } */ @@ -1463,7 +1463,7 @@ pub struct Assoc { pub: var_name string fields []string - pos token.Position + pos token.Pos pub mut: exprs []Expr typ Type @@ -1473,7 +1473,7 @@ pub mut: pub struct SizeOf { pub: is_type bool - pos token.Position + pos token.Pos pub mut: expr Expr // checker uses this to set typ typ Type @@ -1482,7 +1482,7 @@ pub mut: pub struct IsRefType { pub: is_type bool - pos token.Position + pos token.Pos pub mut: expr Expr // checker uses this to set typ typ Type @@ -1492,12 +1492,12 @@ pub struct OffsetOf { pub: struct_type Type field string - pos token.Position + pos token.Pos } pub struct Likely { pub: - pos token.Position + pos token.Pos is_likely bool // false for _unlikely_ pub mut: expr Expr @@ -1505,7 +1505,7 @@ pub mut: pub struct TypeOf { pub: - pos token.Position + pos token.Pos pub mut: expr Expr expr_type Type @@ -1513,7 +1513,7 @@ pub mut: pub struct DumpExpr { pub: - pos token.Position + pos token.Pos pub mut: expr Expr expr_type Type @@ -1525,13 +1525,13 @@ pub: text string is_multi bool // true only for /* comment */, that use many lines is_inline bool // true for all /* comment */ comments - pos token.Position + pos token.Pos } pub struct ConcatExpr { pub: vals []Expr - pos token.Position + pos token.Pos pub mut: return_type Type } @@ -1540,7 +1540,7 @@ pub mut: pub struct AtExpr { pub: name string - pos token.Position + pos token.Pos kind token.AtKind pub mut: val string @@ -1549,7 +1549,7 @@ pub mut: pub struct ComptimeSelector { pub: has_parens bool // if $() is used, for vfmt - pos token.Position + pos token.Pos pub mut: left Expr left_type Type @@ -1559,10 +1559,10 @@ pub mut: pub struct ComptimeCall { pub: - pos token.Position + pos token.Pos has_parens bool // if $() is used, for vfmt method_name string - method_pos token.Position + method_pos token.Pos scope &Scope left Expr args_var string @@ -1573,7 +1573,7 @@ pub: is_embed bool // is_env bool - env_pos token.Position + env_pos token.Pos // is_pkgconfig bool pub mut: @@ -1586,7 +1586,7 @@ pub mut: pub struct None { pub: - pos token.Position + pos token.Pos } pub enum SqlStmtKind { @@ -1599,7 +1599,7 @@ pub enum SqlStmtKind { pub struct SqlStmt { pub: - pos token.Position + pos token.Pos db_expr Expr // `db` in `sql db {` pub mut: lines []SqlStmtLine @@ -1608,7 +1608,7 @@ pub mut: pub struct SqlStmtLine { pub: kind SqlStmtKind - pos token.Position + pos token.Pos where_expr Expr update_exprs []Expr // for `update` pub mut: @@ -1629,7 +1629,7 @@ pub: has_offset bool has_desc bool is_array bool - pos token.Position + pos token.Pos pub mut: db_expr Expr // `db` in `sql db {` where_expr Expr @@ -1644,7 +1644,7 @@ pub mut: pub struct NodeError { pub: idx int // index for referencing the related File error - pos token.Position + pos token.Pos } [inline] @@ -1655,7 +1655,7 @@ pub fn (expr Expr) is_blank_ident() bool { } } -pub fn (expr Expr) position() token.Position { +pub fn (expr Expr) pos() token.Pos { // all uncommented have to be implemented // NB: please do not print here. the language server will hang // as it uses STDIO primarly to communicate ~Ned @@ -1664,8 +1664,8 @@ pub fn (expr Expr) position() token.Position { return expr.decl.pos } CTempVar, EmptyExpr { - // println('compiler bug, unhandled EmptyExpr position()') - return token.Position{} + // println('compiler bug, unhandled EmptyExpr pos()') + return token.Pos{} } NodeError, ArrayDecompose, ArrayInit, AsCast, Assoc, AtExpr, BoolLiteral, CallExpr, CastExpr, ChanInit, CharLiteral, ConcatExpr, Comment, ComptimeCall, ComptimeSelector, @@ -1682,12 +1682,12 @@ pub fn (expr Expr) position() token.Position { return expr.pos } IfGuardExpr { - return expr.expr.position() + return expr.expr.pos() } InfixExpr { - left_pos := expr.left.position() - right_pos := expr.right.position() - return token.Position{ + left_pos := expr.left.pos() + right_pos := expr.right.pos() + return token.Pos{ line_nr: expr.pos.line_nr pos: left_pos.pos len: right_pos.pos - left_pos.pos + right_pos.len @@ -1793,13 +1793,13 @@ pub mut: orig Expr // the original expression, which produced the C temp variable; used by x.str() } -pub fn (node Node) position() token.Position { +pub fn (node Node) pos() token.Pos { match node { NodeError { - return token.Position{} + return token.Pos{} } EmptyNode { - return token.Position{} + return token.Pos{} } Stmt { mut pos := node.pos @@ -1820,15 +1820,15 @@ pub fn (node Node) position() token.Position { } } if node is AssignStmt { - return pos.extend(node.right.last().position()) + return pos.extend(node.right.last().pos()) } if node is AssertStmt { - return pos.extend(node.expr.position()) + return pos.extend(node.expr.pos()) } return pos } Expr { - return node.position() + return node.pos() } StructField { return node.pos.extend(node.type_pos) @@ -1848,7 +1848,7 @@ pub fn (node Node) position() token.Position { return node.pos } AsmRegister { - return token.Position{ + return token.Pos{ len: -1 line_nr: -1 pos: -1 @@ -1859,7 +1859,7 @@ pub fn (node Node) position() token.Position { } } File { - mut pos := token.Position{} + mut pos := token.Pos{} if node.stmts.len > 0 { first_pos := node.stmts.first().pos last_pos := node.stmts.last().pos diff --git a/vlib/v/ast/attr.v b/vlib/v/ast/attr.v index ce284ae96..deb16663f 100644 --- a/vlib/v/ast/attr.v +++ b/vlib/v/ast/attr.v @@ -22,7 +22,7 @@ pub: kind AttrKind ct_expr Expr // .kind == comptime_define, for [if !name] ct_opt bool // true for [if user_defined_name?] - pos token.Position + pos token.Pos pub mut: ct_evaled bool // whether ct_skip has been evaluated already ct_skip bool // is the comptime expr *false*, filled by checker diff --git a/vlib/v/ast/table.v b/vlib/v/ast/table.v index 77d68be55..39736310f 100644 --- a/vlib/v/ast/table.v +++ b/vlib/v/ast/table.v @@ -95,8 +95,8 @@ pub: mod string file string file_mode Language - pos token.Position - return_type_pos token.Position + pos token.Pos + return_type_pos token.Pos pub mut: return_type Type receiver_type Type // != 0, when .is_method == true @@ -119,11 +119,11 @@ fn (f &Fn) method_equals(o &Fn) bool { pub struct Param { pub: - pos token.Position + pos token.Pos name string is_mut bool is_auto_rec bool - type_pos token.Position + type_pos token.Pos is_hidden bool // interface first arg pub mut: typ Type diff --git a/vlib/v/ast/walker/walker_test.v b/vlib/v/ast/walker/walker_test.v index ace681a3a..cd261fab3 100644 --- a/vlib/v/ast/walker/walker_test.v +++ b/vlib/v/ast/walker/walker_test.v @@ -16,7 +16,7 @@ mut: } fn (mut n NodeByOffset) visit(node &ast.Node) ? { - node_pos := node.position() + node_pos := node.pos() if n.pos >= node_pos.pos && n.pos <= node_pos.pos + node_pos.len && node !is ast.File { n.node = node return error('') diff --git a/vlib/v/builder/builder.v b/vlib/v/builder/builder.v index 1c8de9a0b..00f660498 100644 --- a/vlib/v/builder/builder.v +++ b/vlib/v/builder/builder.v @@ -577,7 +577,7 @@ struct FunctionRedefinition { f ast.FnDecl } -pub fn (b &Builder) error_with_pos(s string, fpath string, pos token.Position) errors.Error { +pub fn (b &Builder) error_with_pos(s string, fpath string, pos token.Pos) errors.Error { if !b.pref.check_only { ferror := util.formatted_error('builder error:', s, fpath, pos) eprintln(ferror) diff --git a/vlib/v/checker/assign.v b/vlib/v/checker/assign.v index 06eb8287b..545972e59 100644 --- a/vlib/v/checker/assign.v +++ b/vlib/v/checker/assign.v @@ -28,7 +28,7 @@ pub fn (mut c Checker) assign_stmt(mut node ast.AssignStmt) { if right_type_sym.kind == .multi_return { if node.right.len > 1 { c.error('cannot use multi-value $right_type_sym.name in single-value context', - right.position()) + right.pos()) } node.right_types = right_type_sym.mr_info().types right_len = node.right_types.len @@ -99,7 +99,7 @@ pub fn (mut c Checker) assign_stmt(mut node ast.AssignStmt) { } else { if node.right[i] is ast.StructInit { c.warn('assigning a struct literal to a map is deprecated - use `map{}` instead', - node.right[i].position()) + node.right[i].pos()) node.right[i] = ast.MapInit{} } } @@ -315,7 +315,7 @@ pub fn (mut c Checker) assign_stmt(mut node ast.AssignStmt) { } } if is_decl { - c.error('non-name `$left` on left side of `:=`', left.position()) + c.error('non-name `$left` on left side of `:=`', left.pos()) } } } @@ -357,7 +357,7 @@ pub fn (mut c Checker) assign_stmt(mut node ast.AssignStmt) { || !right_type.is_ptr()) && !left.is_blank_ident() && right.is_lvalue() { // Do not allow `a = b` c.error('cannot copy map: call `move` or `clone` method (or use a reference)', - right.position()) + right.pos()) } left_is_ptr := left_type.is_ptr() || left_sym.is_pointer() if left_is_ptr && !left.is_auto_deref_var() { @@ -368,7 +368,7 @@ pub fn (mut c Checker) assign_stmt(mut node ast.AssignStmt) { right_is_ptr := right_type.is_ptr() || right_sym.is_pointer() if !right_is_ptr && node.op == .assign && right_type_unwrapped.is_number() { c.error('cannot assign to `$left`: ' + - c.expected_msg(right_type_unwrapped, left_type_unwrapped), right.position()) + c.expected_msg(right_type_unwrapped, left_type_unwrapped), right.pos()) } if (right is ast.StructInit || !right_is_ptr) && !(right_sym.is_number() || left_type.has_flag(.shared_f)) { @@ -388,41 +388,41 @@ pub fn (mut c Checker) assign_stmt(mut node ast.AssignStmt) { if left_type == ast.string_type { if node.op != .plus_assign { c.error('operator `$node.op` not defined on left operand type `$left_sym.name`', - left.position()) + left.pos()) } if right_type != ast.string_type { c.error('invalid right operand: $left_sym.name $node.op $right_sym.name', - right.position()) + right.pos()) } } else if !left_sym.is_number() && left_sym.kind !in [.byteptr, .charptr, .struct_, .alias] { c.error('operator `$node.op` not defined on left operand type `$left_sym.name`', - left.position()) + left.pos()) } else if !right_sym.is_number() && left_sym.kind !in [.byteptr, .charptr, .struct_, .alias] { c.error('invalid right operand: $left_sym.name $node.op $right_sym.name', - right.position()) + right.pos()) } } .mult_assign, .div_assign { if !left_sym.is_number() && !c.table.final_sym(left_type_unwrapped).is_int() && left_sym.kind !in [.struct_, .alias] { c.error('operator $node.op.str() not defined on left operand type `$left_sym.name`', - left.position()) + left.pos()) } else if !right_sym.is_number() && !c.table.final_sym(left_type_unwrapped).is_int() && left_sym.kind !in [.struct_, .alias] { c.error('operator $node.op.str() not defined on right operand type `$right_sym.name`', - right.position()) + right.pos()) } } .and_assign, .or_assign, .xor_assign, .mod_assign, .left_shift_assign, .right_shift_assign { if !left_sym.is_int() && !c.table.final_sym(left_type_unwrapped).is_int() { c.error('operator $node.op.str() not defined on left operand type `$left_sym.name`', - left.position()) + left.pos()) } else if !right_sym.is_int() && !c.table.final_sym(right_type_unwrapped).is_int() { c.error('operator $node.op.str() not defined on right operand type `$right_sym.name`', - right.position()) + right.pos()) } } .unsigned_right_shift_assign { @@ -532,12 +532,12 @@ pub fn (mut c Checker) assign_stmt(mut node ast.AssignStmt) { node.pos) } } else { - c.error('cannot assign to `$left`: $err.msg', right.position()) + c.error('cannot assign to `$left`: $err.msg', right.pos()) } } } if left_sym.kind == .interface_ { - if c.type_implements(right_type, left_type, right.position()) { + if c.type_implements(right_type, left_type, right.pos()) { if !right_type.is_ptr() && !right_type.is_pointer() && right_sym.kind != .interface_ && !c.inside_unsafe { c.mark_as_referenced(mut &node.right[i], true) diff --git a/vlib/v/checker/check_types.v b/vlib/v/checker/check_types.v index a5b979b13..a7778687b 100644 --- a/vlib/v/checker/check_types.v +++ b/vlib/v/checker/check_types.v @@ -296,14 +296,14 @@ fn (mut c Checker) check_shift(mut node ast.InfixExpr, left_type ast.Type, right // allow `bool << 2` in translated C code return ast.int_type } - c.error('invalid operation: shift on type `$left_sym.name`', node.left.position()) + c.error('invalid operation: shift on type `$left_sym.name`', node.left.pos()) return ast.void_type } if !right_type.is_int() && !c.pref.translated { left_sym := c.table.sym(left_type) right_sym := c.table.sym(right_type) c.error('cannot shift non-integer type `$right_sym.name` into type `$left_sym.name`', - node.right.position()) + node.right.pos()) return ast.void_type } // At this point, it is guaranteed that we have a `number1 << number2`, or `number1 >> number2`, or `number1 >>> number2`: @@ -346,13 +346,13 @@ fn (mut c Checker) check_shift(mut node ast.InfixExpr, left_type ast.Type, right if node.op == .left_shift && left_type_final.is_signed() && !(c.inside_unsafe && c.is_generated) { c.note('shifting a value from a signed type `$left_sym_final.name` can change the sign', - node.left.position()) + node.left.pos()) } if node.ct_right_value_evaled { if node.ct_right_value !is ast.EmptyExpr { ival := node.ct_right_value.i64() or { -999 } if ival < 0 { - c.error('invalid negative shift count', node.right.position()) + c.error('invalid negative shift count', node.right.pos()) return left_type } moffset := match left_type_final { @@ -371,13 +371,13 @@ fn (mut c Checker) check_shift(mut node ast.InfixExpr, left_type ast.Type, right } if ival > moffset && !c.pref.translated { c.error('shift count for type `$left_sym_final.name` too large (maximum: $moffset bits)', - node.right.position()) + node.right.pos()) return left_type } if node.ct_left_value_evaled { if lval := node.ct_left_value.i64() { if lval < 0 { - c.error('invalid bitshift of a negative number', node.left.position()) + c.error('invalid bitshift of a negative number', node.left.pos()) return left_type } } @@ -527,7 +527,7 @@ pub fn (mut c Checker) get_default_fmt(ftyp ast.Type, typ ast.Type) byte { } pub fn (mut c Checker) fail_if_unreadable(expr ast.Expr, typ ast.Type, what string) { - mut pos := token.Position{} + mut pos := token.Pos{} match expr { ast.Ident { if typ.has_flag(.shared_f) { @@ -554,11 +554,11 @@ pub fn (mut c Checker) fail_if_unreadable(expr ast.Expr, typ ast.Type, what stri } } ast.IndexExpr { - pos = expr.left.position().extend(expr.pos) + pos = expr.left.pos().extend(expr.pos) c.fail_if_unreadable(expr.left, expr.left_type, what) } else { - pos = expr.position() + pos = expr.pos() } } if typ.has_flag(.shared_f) { @@ -573,10 +573,10 @@ pub fn (mut c Checker) string_inter_lit(mut node ast.StringInterLiteral) ast.Typ for i, expr in node.exprs { ftyp := c.expr(expr) if ftyp == ast.void_type { - c.error('expression does not return a value', expr.position()) + c.error('expression does not return a value', expr.pos()) } else if ftyp == ast.char_type && ftyp.nr_muls() == 0 { c.error('expression returning type `char` cannot be used in string interpolation directly, print its address or cast it to an integer instead', - expr.position()) + expr.pos()) } c.fail_if_unreadable(expr, ftyp, 'interpolation object') node.expr_types << ftyp @@ -621,7 +621,7 @@ pub fn (mut c Checker) string_inter_lit(mut node ast.StringInterLiteral) ast.Typ // check recursive str if c.table.cur_fn.is_method && c.table.cur_fn.name == 'str' && c.table.cur_fn.receiver.name == expr.str() { - c.error('cannot call `str()` method recursively', expr.position()) + c.error('cannot call `str()` method recursively', expr.pos()) } } c.inside_println_arg = inside_println_arg_save @@ -637,7 +637,7 @@ pub fn (mut c Checker) string_lit(mut node ast.StringLiteral) ast.Type { for idx < node.val.len { match node.val[idx] { `\\` { - mut start_pos := token.Position{ + mut start_pos := token.Pos{ ...node.pos col: node.pos.col + 1 + idx } @@ -650,7 +650,7 @@ pub fn (mut c Checker) string_lit(mut node ast.StringLiteral) ast.Type { mut hex_char_count := 0 for ch.is_hex_digit() { hex_char_count++ - end_pos := token.Position{ + end_pos := token.Pos{ ...start_pos len: idx + 1 - start_idx } diff --git a/vlib/v/checker/checker.v b/vlib/v/checker/checker.v index 38b229e21..af2c4d759 100644 --- a/vlib/v/checker/checker.v +++ b/vlib/v/checker/checker.v @@ -336,7 +336,7 @@ pub fn (mut c Checker) check_files(ast_files []&ast.File) { c.add_error_detail('The name of a test function in V, should start with `test_`.') c.add_error_detail('The test function should take 0 parameters, and no return type. Example:') c.add_error_detail('fn test_xyz(){ assert 2 + 2 == 4 }') - c.error('a _test.v file should have *at least* one `test_` function', token.Position{}) + c.error('a _test.v file should have *at least* one `test_` function', token.Pos{}) } } // Make sure fn main is defined in non lib builds @@ -354,9 +354,9 @@ pub fn (mut c Checker) check_files(ast_files []&ast.File) { } if !has_main_mod_file { c.error('project must include a `main` module or be a shared library (compile with `v -shared`)', - token.Position{}) + token.Pos{}) } else if !has_main_fn { - c.error('function `main` must be declared in the main module', token.Position{}) + c.error('function `main` must be declared in the main module', token.Pos{}) } } @@ -388,7 +388,7 @@ fn (mut c Checker) file_has_main_fn(file &ast.File) bool { return has_main_fn } -fn (mut c Checker) check_valid_snake_case(name string, identifier string, pos token.Position) { +fn (mut c Checker) check_valid_snake_case(name string, identifier string, pos token.Pos) { if !c.pref.is_vweb && !c.pref.translated && name.len > 0 && (name[0] == `_` || name.contains('._')) { c.error('$identifier `$name` cannot start with `_`', pos) @@ -404,7 +404,7 @@ fn stripped_name(name string) string { return name[(idx + 1)..] } -fn (mut c Checker) check_valid_pascal_case(name string, identifier string, pos token.Position) { +fn (mut c Checker) check_valid_pascal_case(name string, identifier string, pos token.Pos) { sname := stripped_name(name) if sname.len > 0 && !sname[0].is_capital() && !c.pref.translated { c.error('$identifier `$name` must begin with capital letter', pos) @@ -557,8 +557,8 @@ pub fn (mut c Checker) infix_expr(mut node ast.InfixExpr) ast.Type { right_final := c.table.final_sym(right_type) mut left_sym := c.table.sym(left_type) left_final := c.table.final_sym(left_type) - left_pos := node.left.position() - right_pos := node.right.position() + left_pos := node.left.pos() + right_pos := node.right.pos() left_right_pos := left_pos.extend(right_pos) if left_type.is_any_kind_of_pointer() && node.op in [.plus, .minus, .mul, .div, .mod, .xor, .amp, .pipe] { @@ -897,7 +897,7 @@ pub fn (mut c Checker) infix_expr(mut node ast.InfixExpr) ast.Type { ast.none_type_idx } else { - c.error('invalid type `$right_expr`', right_expr.position()) + c.error('invalid type `$right_expr`', right_expr.pos()) ast.Type(0) } } @@ -905,7 +905,7 @@ pub fn (mut c Checker) infix_expr(mut node ast.InfixExpr) ast.Type { typ_sym := c.table.sym(typ) op := node.op.str() if typ_sym.kind == .placeholder { - c.error('$op: type `$typ_sym.name` does not exist', right_expr.position()) + c.error('$op: type `$typ_sym.name` does not exist', right_expr.pos()) } if left_sym.kind !in [.interface_, .sum_type] { c.error('`$op` can only be used with interfaces and sum types', node.pos) @@ -941,10 +941,10 @@ pub fn (mut c Checker) infix_expr(mut node ast.InfixExpr) ast.Type { .and, .logical_or { if !c.pref.translated { if node.left_type != ast.bool_type_idx { - c.error('left operand for `$node.op` is not a boolean', node.left.position()) + c.error('left operand for `$node.op` is not a boolean', node.left.pos()) } if node.right_type != ast.bool_type_idx { - c.error('right operand for `$node.op` is not a boolean', node.right.position()) + c.error('right operand for `$node.op` is not a boolean', node.right.pos()) } } if mut node.left is ast.InfixExpr { @@ -1019,9 +1019,9 @@ pub fn (mut c Checker) infix_expr(mut node ast.InfixExpr) ast.Type { // returns name and position of variable that needs write lock // also sets `is_changed` to true (TODO update the name to reflect this?) -fn (mut c Checker) fail_if_immutable(expr ast.Expr) (string, token.Position) { +fn (mut c Checker) fail_if_immutable(expr ast.Expr) (string, token.Pos) { mut to_lock := '' // name of variable that needs lock - mut pos := token.Position{} // and its position + mut pos := token.Pos{} // and its position mut explicit_lock_needed := false match mut expr { ast.CastExpr { @@ -1078,7 +1078,7 @@ fn (mut c Checker) fail_if_immutable(expr ast.Expr) (string, token.Position) { } if elem_type.has_flag(.shared_f) { c.error('you have to create a handle and `lock` it to modify `shared` $kind element', - expr.left.position().extend(expr.pos)) + expr.left.pos().extend(expr.pos)) } to_lock, pos = c.fail_if_immutable(expr.left) } @@ -1205,7 +1205,7 @@ fn (mut c Checker) fail_if_immutable(expr ast.Expr) (string, token.Position) { } else { if !expr.is_lit() { - c.error('unexpected expression `$expr.type_name()`', expr.position()) + c.error('unexpected expression `$expr.type_name()`', expr.pos()) return '', pos } } @@ -1218,7 +1218,7 @@ fn (mut c Checker) fail_if_immutable(expr ast.Expr) (string, token.Position) { return to_lock, pos } -fn (mut c Checker) type_implements(typ ast.Type, interface_type ast.Type, pos token.Position) bool { +fn (mut c Checker) type_implements(typ ast.Type, interface_type ast.Type, pos token.Pos) bool { if typ == interface_type { return true } @@ -1441,7 +1441,7 @@ pub fn (mut c Checker) check_or_expr(node ast.OrExpr, ret_type ast.Type, expr_re type_name := c.table.type_to_str(last_stmt.typ) expr_return_type_name := c.table.type_to_str(expr_return_type) c.error('the default expression type in the `or` block should be `$expr_return_type_name`, instead you gave a value of type `$type_name`', - last_stmt.expr.position()) + last_stmt.expr.pos()) } else {} } @@ -1632,7 +1632,7 @@ pub fn (mut c Checker) const_decl(mut node ast.ConstDecl) { for field in node.fields { // TODO Check const name once the syntax is decided if field.name in c.const_names { - name_pos := token.Position{ + name_pos := token.Pos{ ...field.pos len: util.no_cur_mod(field.name, c.mod).len } @@ -1703,7 +1703,7 @@ pub fn (mut c Checker) enum_decl(mut node ast.EnumDecl) { continue } } - mut pos := field.expr.position() + mut pos := field.expr.pos() if pos.pos == 0 { pos = field.pos } @@ -1727,7 +1727,7 @@ pub fn (mut c Checker) enum_decl(mut node ast.EnumDecl) { } [inline] -fn (mut c Checker) check_loop_label(label string, pos token.Position) { +fn (mut c Checker) check_loop_label(label string, pos token.Pos) { if label.len == 0 { // ignore return @@ -1970,13 +1970,13 @@ fn (mut c Checker) go_expr(mut node ast.GoExpr) ast.Type { for arg in node.call_expr.args { if arg.is_mut && !arg.typ.is_ptr() { c.error('function in `go` statement cannot contain mutable non-reference arguments', - arg.expr.position()) + arg.expr.pos()) } } if node.call_expr.is_method && node.call_expr.receiver_type.is_ptr() && !node.call_expr.left_type.is_ptr() { c.error('method in `go` statement cannot have non-reference mutable receiver', - node.call_expr.left.position()) + node.call_expr.left.pos()) } if c.pref.backend.is_js() { @@ -2256,7 +2256,7 @@ fn (mut c Checker) stmts(stmts []ast.Stmt) { // `x := if cond { stmt1 stmt2 ExprStmt } else { stmt2 stmt3 ExprStmt }`, // `x := match expr { Type1 { stmt1 stmt2 ExprStmt } else { stmt2 stmt3 ExprStmt }`. fn (mut c Checker) stmts_ending_with_expression(stmts []ast.Stmt) { - mut unreachable := token.Position{ + mut unreachable := token.Pos{ line_nr: -1 } c.expected_type = ast.void_type @@ -2270,7 +2270,7 @@ fn (mut c Checker) stmts_ending_with_expression(stmts []ast.Stmt) { } c.stmt(stmt) if stmt is ast.GotoLabel { - unreachable = token.Position{ + unreachable = token.Pos{ line_nr: -1 } c.scope_returns = false @@ -2308,13 +2308,13 @@ pub fn (mut c Checker) expr(node ast.Expr) ast.Type { // c.expr_level set to 150 so that stack overflow does not occur on windows if c.expr_level > 150 { - c.error('checker: too many expr levels: $c.expr_level ', node.position()) + c.error('checker: too many expr levels: $c.expr_level ', node.pos()) return ast.void_type } match mut node { ast.NodeError {} ast.EmptyExpr { - c.error('checker.expr(): unhandled EmptyExpr', token.Position{}) + c.error('checker.expr(): unhandled EmptyExpr', token.Pos{}) } ast.CTempVar { return node.typ @@ -2326,7 +2326,7 @@ pub fn (mut c Checker) expr(node ast.Expr) ast.Type { typ := c.expr(node.expr) type_sym := c.table.sym(typ) if type_sym.kind != .array { - c.error('decomposition can only be used on arrays', node.expr.position()) + c.error('decomposition can only be used on arrays', node.expr.pos()) return ast.void_type } array_info := type_sym.info as ast.Array @@ -2414,10 +2414,10 @@ pub fn (mut c Checker) expr(node ast.Expr) ast.Type { expr_sym := c.table.sym(expr_type) if expr_type != ast.string_type { c.error('expected `string` instead of `$expr_sym.name` (e.g. `field.name`)', - node.field_expr.position()) + node.field_expr.pos()) } if mut node.field_expr is ast.SelectorExpr { - left_pos := node.field_expr.expr.position() + left_pos := node.field_expr.expr.pos() if c.comptime_fields_type.len == 0 { c.error('compile time field access can only be used when iterating over `T.fields`', left_pos) @@ -2428,7 +2428,7 @@ pub fn (mut c Checker) expr(node ast.Expr) ast.Type { } c.error('unknown `\$for` variable `$expr_name`', left_pos) } else { - c.error('expected selector expression e.g. `$(field.name)`', node.field_expr.position()) + c.error('expected selector expression e.g. `$(field.name)`', node.field_expr.pos()) } return ast.void_type } @@ -2438,7 +2438,7 @@ pub fn (mut c Checker) expr(node ast.Expr) ast.Type { ast.DumpExpr { node.expr_type = c.expr(node.expr) if node.expr_type.idx() == ast.void_type_idx { - c.error('dump expression can not be void', node.expr.position()) + c.error('dump expression can not be void', node.expr.pos()) return ast.void_type } tsym := c.table.sym(node.expr_type) @@ -2487,7 +2487,7 @@ pub fn (mut c Checker) expr(node ast.Expr) ast.Type { else {} } if no_opt { - c.error('expression should return an option', node.expr.position()) + c.error('expression should return an option', node.expr.pos()) } } return ast.bool_type @@ -2650,7 +2650,7 @@ pub fn (mut c Checker) cast_expr(mut node ast.CastExpr) ast.Type { node.pos) } if from_type == ast.void_type { - c.error('expression does not return a value so it cannot be cast', node.expr.position()) + c.error('expression does not return a value so it cannot be cast', node.expr.pos()) } if to_sym.kind == .sum_type { if from_type in [ast.int_literal_type, ast.float_literal_type] { @@ -3212,10 +3212,10 @@ pub fn (mut c Checker) select_expr(mut node ast.SelectExpr) ast.Type { if branch.stmt.expr.left !is ast.Ident && branch.stmt.expr.left !is ast.SelectorExpr && branch.stmt.expr.left !is ast.IndexExpr { - c.error('channel in `select` key must be predefined', branch.stmt.expr.left.position()) + c.error('channel in `select` key must be predefined', branch.stmt.expr.left.pos()) } } else { - c.error('invalid expression for `select` key', branch.stmt.expr.position()) + c.error('invalid expression for `select` key', branch.stmt.expr.pos()) } } } @@ -3225,7 +3225,7 @@ pub fn (mut c Checker) select_expr(mut node ast.SelectExpr) ast.Type { ast.PrefixExpr { if expr.right !is ast.Ident && expr.right !is ast.SelectorExpr && expr.right !is ast.IndexExpr { - c.error('channel in `select` key must be predefined', expr.right.position()) + c.error('channel in `select` key must be predefined', expr.right.pos()) } if expr.or_block.kind != .absent { err_prefix := if expr.or_block.kind == .block { @@ -3237,7 +3237,7 @@ pub fn (mut c Checker) select_expr(mut node ast.SelectExpr) ast.Type { } } else { - c.error('`<-` receive expression expected', branch.stmt.right[0].position()) + c.error('`<-` receive expression expected', branch.stmt.right[0].pos()) } } } @@ -3262,12 +3262,12 @@ pub fn (mut c Checker) lock_expr(mut node ast.LockExpr) ast.Type { if !e_typ.has_flag(.shared_f) { obj_type := if node.lockeds[i] is ast.Ident { 'variable' } else { 'struct element' } c.error('`$id_name` must be declared as `shared` $obj_type to be locked', - node.lockeds[i].position()) + node.lockeds[i].pos()) } if id_name in c.locked_names { - c.error('`$id_name` is already locked', node.lockeds[i].position()) + c.error('`$id_name` is already locked', node.lockeds[i].pos()) } else if id_name in c.rlocked_names { - c.error('`$id_name` is already read-locked', node.lockeds[i].position()) + c.error('`$id_name` is already read-locked', node.lockeds[i].pos()) } if node.is_rlock[i] { c.rlocked_names << id_name @@ -3534,7 +3534,7 @@ pub fn (mut c Checker) prefix_expr(mut node ast.PrefixExpr) ast.Type { return right_type } -fn (mut c Checker) check_index(typ_sym &ast.TypeSymbol, index ast.Expr, index_type ast.Type, pos token.Position, range_index bool, is_gated bool) { +fn (mut c Checker) check_index(typ_sym &ast.TypeSymbol, index ast.Expr, index_type ast.Type, pos token.Pos, range_index bool, is_gated bool) { index_type_sym := c.table.sym(index_type) // println('index expr left=$typ_sym.name $node.pos.line_nr') // if typ_sym.kind == .array && (!(ast.type_idx(index_type) in ast.number_type_idxs) && @@ -3797,12 +3797,12 @@ pub fn (mut c Checker) add_error_detail(s string) { c.error_details << s } -pub fn (mut c Checker) warn(s string, pos token.Position) { +pub fn (mut c Checker) warn(s string, pos token.Pos) { allow_warnings := !(c.pref.is_prod || c.pref.warns_are_errors) // allow warnings only in dev builds c.warn_or_error(s, pos, allow_warnings) } -pub fn (mut c Checker) error(message string, pos token.Position) { +pub fn (mut c Checker) error(message string, pos token.Pos) { $if checker_exit_on_first_error ? { eprintln('\n\n>> checker error: $message, pos: $pos') print_backtrace() @@ -3848,7 +3848,7 @@ fn (c &Checker) check_struct_signature(from ast.Struct, to ast.Struct) bool { return true } -pub fn (mut c Checker) note(message string, pos token.Position) { +pub fn (mut c Checker) note(message string, pos token.Pos) { if c.pref.message_limit >= 0 && c.nr_notices >= c.pref.message_limit { c.should_abort = true return @@ -3873,7 +3873,7 @@ pub fn (mut c Checker) note(message string, pos token.Position) { c.nr_notices++ } -fn (mut c Checker) warn_or_error(message string, pos token.Position, warn bool) { +fn (mut c Checker) warn_or_error(message string, pos token.Pos, warn bool) { // add backtrace to issue struct, how? // if c.pref.is_verbose { // print_backtrace() @@ -3950,7 +3950,7 @@ fn (mut c Checker) trace(fbase string, message string) { } } -fn (mut c Checker) ensure_type_exists(typ ast.Type, pos token.Position) ? { +fn (mut c Checker) ensure_type_exists(typ ast.Type, pos token.Pos) ? { if typ == 0 { c.error('unknown type', pos) return diff --git a/vlib/v/checker/comptime.v b/vlib/v/checker/comptime.v index 6f07bb144..72ffd0448 100644 --- a/vlib/v/checker/comptime.v +++ b/vlib/v/checker/comptime.v @@ -414,7 +414,7 @@ fn (mut c Checker) evaluate_once_comptime_if_attribute(mut node ast.Attr) bool { // comptime_if_branch checks the condition of a compile-time `if` branch. It returns `true` // if that branch's contents should be skipped (targets a different os for example) -fn (mut c Checker) comptime_if_branch(cond ast.Expr, pos token.Position) bool { +fn (mut c Checker) comptime_if_branch(cond ast.Expr, pos token.Pos) bool { // TODO: better error messages here match cond { ast.BoolLiteral { @@ -456,7 +456,7 @@ fn (mut c Checker) comptime_if_branch(cond ast.Expr, pos token.Position) bool { sym := c.table.sym(cond.right.typ) if sym.kind != .interface_ { c.expr(cond.left) - // c.error('`$sym.name` is not an interface', cond.right.position()) + // c.error('`$sym.name` is not an interface', cond.right.pos()) } return false } else if cond.left in [ast.SelectorExpr, ast.TypeNode] { @@ -465,7 +465,7 @@ fn (mut c Checker) comptime_if_branch(cond ast.Expr, pos token.Position) bool { return false } else { c.error('invalid `\$if` condition: expected a type or a selector expression or an interface check', - cond.left.position()) + cond.left.pos()) } } .eq, .ne { diff --git a/vlib/v/checker/containers.v b/vlib/v/checker/containers.v index 0946fdf82..39fbb188e 100644 --- a/vlib/v/checker/containers.v +++ b/vlib/v/checker/containers.v @@ -22,7 +22,7 @@ pub fn (mut c Checker) array_init(mut node ast.ArrayInit) ast.Type { default_typ := c.check_expr_opt_call(default_expr, c.expr(default_expr)) node.default_type = default_typ c.check_expected(default_typ, node.elem_type) or { - c.error(err.msg, default_expr.position()) + c.error(err.msg, default_expr.pos()) } } if node.has_len { @@ -30,7 +30,7 @@ pub fn (mut c Checker) array_init(mut node ast.ArrayInit) ast.Type { elem_type_sym := c.table.sym(node.elem_type) if elem_type_sym.kind == .interface_ { c.error('cannot instantiate an array of interfaces without also giving a default `init:` value', - node.len_expr.position()) + node.len_expr.pos()) } } c.ensure_sumtype_array_has_default_value(node) @@ -87,7 +87,7 @@ pub fn (mut c Checker) array_init(mut node ast.ArrayInit) ast.Type { for i, mut expr in node.exprs { typ := c.check_expr_opt_call(expr, c.expr(expr)) if typ == ast.void_type { - c.error('invalid void array element type', expr.position()) + c.error('invalid void array element type', expr.pos()) } node.expr_types << typ // The first element's type @@ -95,7 +95,7 @@ pub fn (mut c Checker) array_init(mut node ast.ArrayInit) ast.Type { if i == 0 { elem_type = expected_value_type c.expected_type = elem_type - c.type_implements(typ, elem_type, expr.position()) + c.type_implements(typ, elem_type, expr.pos()) } if !typ.is_ptr() && !typ.is_pointer() && !c.inside_unsafe { typ_sym := c.table.sym(typ) @@ -117,7 +117,7 @@ pub fn (mut c Checker) array_init(mut node ast.ArrayInit) ast.Type { } if expr !is ast.TypeNode { c.check_expected(typ, elem_type) or { - c.error('invalid array element: $err.msg', expr.position()) + c.error('invalid array element: $err.msg', expr.pos()) } } } @@ -163,12 +163,12 @@ pub fn (mut c Checker) array_init(mut node ast.ArrayInit) ast.Type { } } else { - c.error('fixed array size cannot use non-constant value', init_expr.position()) + c.error('fixed array size cannot use non-constant value', init_expr.pos()) } } if fixed_size <= 0 { c.error('fixed size cannot be zero or negative (fixed_size: $fixed_size)', - init_expr.position()) + init_expr.pos()) } idx := c.table.find_or_register_array_fixed(node.elem_type, int(fixed_size), init_expr) if node.elem_type.has_flag(.generic) { @@ -183,7 +183,7 @@ pub fn (mut c Checker) array_init(mut node ast.ArrayInit) ast.Type { return node.typ } -fn (mut c Checker) check_array_init_para_type(para string, expr ast.Expr, pos token.Position) { +fn (mut c Checker) check_array_init_para_type(para string, expr ast.Expr, pos token.Pos) { sym := c.table.sym(c.expr(expr)) if sym.kind !in [.int, .int_literal] { c.error('array $para needs to be an int', pos) @@ -261,13 +261,13 @@ pub fn (mut c Checker) map_init(mut node ast.MapInit) ast.Type { if !c.check_types(key_type, key0_type) || (i == 0 && key_type.is_number() && key0_type.is_number() && key0_type != ast.mktyp(key_type)) { msg := c.expected_msg(key_type, key0_type) - c.error('invalid map key: $msg', key.position()) + c.error('invalid map key: $msg', key.pos()) same_key_type = false } if !c.check_types(val_type, val0_type) || (i == 0 && val_type.is_number() && val0_type.is_number() && val0_type != ast.mktyp(val_type)) { msg := c.expected_msg(val_type, val0_type) - c.error('invalid map value: $msg', val.position()) + c.error('invalid map value: $msg', val.pos()) } } if same_key_type { diff --git a/vlib/v/checker/fn.v b/vlib/v/checker/fn.v index b024a9716..2be413032 100644 --- a/vlib/v/checker/fn.v +++ b/vlib/v/checker/fn.v @@ -355,15 +355,15 @@ pub fn (mut c Checker) call_expr(mut node ast.CallExpr) ast.Type { if !arg.is_mut { tok := call_arg.share.str() c.error('`$node.name` parameter `$arg.name` is not `$tok`, `$tok` is not needed`', - call_arg.expr.position()) + call_arg.expr.pos()) } else if arg.typ.share() != call_arg.share { - c.error('wrong shared type', call_arg.expr.position()) + c.error('wrong shared type', call_arg.expr.pos()) } } else { if arg.is_mut && (!call_arg.is_mut || arg.typ.share() != call_arg.share) { tok := call_arg.share.str() c.error('`$node.name` parameter `$arg.name` is `$tok`, you need to provide `$tok` e.g. `$tok arg${i+1}`', - call_arg.expr.position()) + call_arg.expr.pos()) } } } @@ -787,15 +787,15 @@ pub fn (mut c Checker) fn_call(mut node ast.CallExpr, mut continue_check &bool) if call_arg.is_mut { to_lock, pos := c.fail_if_immutable(call_arg.expr) if !call_arg.expr.is_lvalue() { - c.error('cannot pass expression as `mut`', call_arg.expr.position()) + c.error('cannot pass expression as `mut`', call_arg.expr.pos()) } if !param.is_mut { tok := call_arg.share.str() c.error('`$node.name` parameter `$param.name` is not `$tok`, `$tok` is not needed`', - call_arg.expr.position()) + call_arg.expr.pos()) } else { if param.typ.share() != call_arg.share { - c.error('wrong shared type', call_arg.expr.position()) + c.error('wrong shared type', call_arg.expr.pos()) } if to_lock != '' && !param.typ.has_flag(.shared_f) { c.error('$to_lock is `shared` and must be `lock`ed to be passed as `mut`', @@ -806,7 +806,7 @@ pub fn (mut c Checker) fn_call(mut node ast.CallExpr, mut continue_check &bool) if param.is_mut { tok := call_arg.share.str() c.error('`$node.name` parameter `$param.name` is `$tok`, you need to provide `$tok` e.g. `$tok arg${ - i + 1}`', call_arg.expr.position()) + i + 1}`', call_arg.expr.pos()) } else { c.fail_if_unreadable(call_arg.expr, typ, 'argument') } @@ -828,11 +828,11 @@ pub fn (mut c Checker) fn_call(mut node ast.CallExpr, mut continue_check &bool) && (param.typ == ast.voidptr_type || final_param_sym.idx == ast.voidptr_type_idx) && !call_arg.typ.is_any_kind_of_pointer() && func.language == .v && !call_arg.expr.is_lvalue() && func.name != 'json.encode' && !c.pref.translated { - c.error('expression cannot be passed as `voidptr`', call_arg.expr.position()) + c.error('expression cannot be passed as `voidptr`', call_arg.expr.pos()) } // Handle expected interface if final_param_sym.kind == .interface_ { - if c.type_implements(typ, final_param_typ, call_arg.expr.position()) { + if c.type_implements(typ, final_param_typ, call_arg.expr.pos()) { if !typ.is_ptr() && !typ.is_pointer() && !c.inside_unsafe && typ_sym.kind != .interface_ { c.mark_as_referenced(mut &call_arg.expr, true) @@ -922,7 +922,7 @@ pub fn (mut c Checker) fn_call(mut node ast.CallExpr, mut continue_check &bool) utyp := c.unwrap_generic(typ) unwrap_sym := c.table.sym(unwrap_typ) if unwrap_sym.kind == .interface_ { - if c.type_implements(utyp, unwrap_typ, call_arg.expr.position()) { + if c.type_implements(utyp, unwrap_typ, call_arg.expr.pos()) { if !utyp.is_ptr() && !utyp.is_pointer() && !c.inside_unsafe && c.table.sym(utyp).kind != .interface_ { c.mark_as_referenced(mut &call_arg.expr, true) @@ -1005,7 +1005,7 @@ pub fn (mut c Checker) method_call(mut node ast.CallExpr) ast.Type { 'unknown method or field: `${left_sym.name}.$method_name`' } if left_type.has_flag(.optional) { - c.error('optional type cannot be called directly', node.left.position()) + c.error('optional type cannot be called directly', node.left.pos()) return ast.void_type } if left_sym.kind in [.sum_type, .interface_] { @@ -1019,7 +1019,7 @@ pub fn (mut c Checker) method_call(mut node ast.CallExpr) ast.Type { if left_type == ast.void_type { // No need to print this error, since this means that the variable is unknown, // and there already was an error before. - // c.error('`void` type has no methods', node.left.position()) + // c.error('`void` type has no methods', node.left.pos()) return ast.void_type } mut concrete_types := []ast.Type{} @@ -1057,7 +1057,7 @@ pub fn (mut c Checker) method_call(mut node ast.CallExpr) ast.Type { arg_type := c.expr(node.args[0].expr) if arg_type !in [ast.int_type, ast.int_literal_type] { c.error('the first argument of `array.insert()` should be integer', - node.args[0].expr.position()) + node.args[0].expr.pos()) return ast.void_type } } @@ -1073,7 +1073,7 @@ pub fn (mut c Checker) method_call(mut node ast.CallExpr) ast.Type { arg_type := c.expr(arg_expr) arg_sym := c.table.sym(arg_type) if !c.check_types(arg_type, info.elem_type) && !c.check_types(left_type, arg_type) { - c.error('cannot $method_name `$arg_sym.name` to `$left_sym.name`', arg_expr.position()) + c.error('cannot $method_name `$arg_sym.name` to `$left_sym.name`', arg_expr.pos()) } } else if final_left_sym.kind == .array && method_name in ['first', 'last', 'pop'] { if final_left_sym.info is ast.Array { @@ -1099,7 +1099,7 @@ pub fn (mut c Checker) method_call(mut node ast.CallExpr) ast.Type { return info.return_type } else if left_sym.kind == .char && left_type.nr_muls() == 0 && method_name == 'str' { c.error('calling `.str()` on type `char` is not allowed, use its address or cast it to an integer instead', - node.left.position().extend(node.pos)) + node.left.pos().extend(node.pos)) return ast.void_type } mut method := ast.Fn{} @@ -1164,7 +1164,7 @@ pub fn (mut c Checker) method_call(mut node ast.CallExpr) ast.Type { if method.params[0].is_mut { to_lock, pos := c.fail_if_immutable(node.left) if !node.left.is_lvalue() { - c.error('cannot pass expression as `mut`', node.left.position()) + c.error('cannot pass expression as `mut`', node.left.pos()) } // node.is_mut = true if to_lock != '' && rec_share != .shared_t { @@ -1232,7 +1232,7 @@ pub fn (mut c Checker) method_call(mut node ast.CallExpr) ast.Type { } // Handle expected interface if final_arg_sym.kind == .interface_ { - if c.type_implements(got_arg_typ, final_arg_typ, arg.expr.position()) { + if c.type_implements(got_arg_typ, final_arg_typ, arg.expr.pos()) { if !got_arg_typ.is_ptr() && !got_arg_typ.is_pointer() && !c.inside_unsafe { got_arg_typ_sym := c.table.sym(got_arg_typ) if got_arg_typ_sym.kind != .interface_ { @@ -1293,10 +1293,10 @@ pub fn (mut c Checker) method_call(mut node ast.CallExpr) ast.Type { if !param_is_mut { tok := arg.share.str() c.error('`$node.name` parameter `$param.name` is not `$tok`, `$tok` is not needed`', - arg.expr.position()) + arg.expr.pos()) } else { if param_share != arg.share { - c.error('wrong shared type', arg.expr.position()) + c.error('wrong shared type', arg.expr.pos()) } if to_lock != '' && param_share != .shared_t { c.error('$to_lock is `shared` and must be `lock`ed to be passed as `mut`', @@ -1307,7 +1307,7 @@ pub fn (mut c Checker) method_call(mut node ast.CallExpr) ast.Type { if param_is_mut { tok := arg.share.str() c.error('`$node.name` parameter `$param.name` is `$tok`, you need to provide `$tok` e.g. `$tok arg${ - i + 1}`', arg.expr.position()) + i + 1}`', arg.expr.pos()) } else { c.fail_if_unreadable(arg.expr, got_arg_typ, 'argument') } @@ -1728,7 +1728,7 @@ fn (mut c Checker) array_builtin_method_call(mut node ast.CallExpr, left_type as node.return_type = c.table.find_or_register_array(thread_ret_type) } else { c.error('`$left_sym.name` has no method `wait()` (only thread handles and arrays of them have)', - node.left.position()) + node.left.pos()) } } // map/filter are supposed to have 1 arg only @@ -1783,7 +1783,7 @@ fn (mut c Checker) array_builtin_method_call(mut node ast.CallExpr, left_type as return node.return_type } -fn scope_register_it(mut s ast.Scope, pos token.Position, typ ast.Type) { +fn scope_register_it(mut s ast.Scope, pos token.Pos, typ ast.Type) { s.register(ast.Var{ name: 'it' pos: pos @@ -1792,7 +1792,7 @@ fn scope_register_it(mut s ast.Scope, pos token.Position, typ ast.Type) { }) } -fn scope_register_a_b(mut s ast.Scope, pos token.Position, typ ast.Type) { +fn scope_register_a_b(mut s ast.Scope, pos token.Pos, typ ast.Type) { s.register(ast.Var{ name: 'a' pos: pos diff --git a/vlib/v/checker/for.v b/vlib/v/checker/for.v index e483b47b8..05b401d2e 100644 --- a/vlib/v/checker/for.v +++ b/vlib/v/checker/for.v @@ -35,13 +35,13 @@ fn (mut c Checker) for_in_stmt(mut node ast.ForInStmt) { high_type := c.expr(node.high) high_type_idx := high_type.idx() if typ_idx in ast.integer_type_idxs && high_type_idx !in ast.integer_type_idxs { - c.error('range types do not match', node.cond.position()) + c.error('range types do not match', node.cond.pos()) } else if typ_idx in ast.float_type_idxs || high_type_idx in ast.float_type_idxs { - c.error('range type can not be float', node.cond.position()) + c.error('range type can not be float', node.cond.pos()) } else if typ_idx == ast.bool_type_idx || high_type_idx == ast.bool_type_idx { - c.error('range type can not be bool', node.cond.position()) + c.error('range type can not be bool', node.cond.pos()) } else if typ_idx == ast.string_type_idx || high_type_idx == ast.string_type_idx { - c.error('range type can not be string', node.cond.position()) + c.error('range type can not be string', node.cond.pos()) } if high_type in [ast.int_type, ast.int_literal_type] { node.val_type = typ @@ -55,19 +55,19 @@ fn (mut c Checker) for_in_stmt(mut node ast.ForInStmt) { if sym.kind == .struct_ { // iterators next_fn := sym.find_method_with_generic_parent('next') or { - c.error('a struct must have a `next()` method to be an iterator', node.cond.position()) + c.error('a struct must have a `next()` method to be an iterator', node.cond.pos()) return } if !next_fn.return_type.has_flag(.optional) { - c.error('iterator method `next()` must return an optional', node.cond.position()) + c.error('iterator method `next()` must return an optional', node.cond.pos()) } return_sym := c.table.sym(next_fn.return_type) if return_sym.kind == .multi_return { - c.error('iterator method `next()` must not return multiple values', node.cond.position()) + c.error('iterator method `next()` must not return multiple values', node.cond.pos()) } // the receiver if next_fn.params.len != 1 { - c.error('iterator method `next()` must have 0 parameters', node.cond.position()) + c.error('iterator method `next()` must have 0 parameters', node.cond.pos()) } mut val_type := next_fn.return_type.clear_flag(.optional) if node.val_is_mut { @@ -96,7 +96,7 @@ fn (mut c Checker) for_in_stmt(mut node ast.ForInStmt) { mut value_type := c.table.value_type(typ) if value_type == ast.void_type || typ.has_flag(.optional) { if typ != ast.void_type { - c.error('for in: cannot index `${c.table.type_to_str(typ)}`', node.cond.position()) + c.error('for in: cannot index `${c.table.type_to_str(typ)}`', node.cond.pos()) } } if node.val_is_mut { diff --git a/vlib/v/checker/if.v b/vlib/v/checker/if.v index 6dae10f53..b85217f8c 100644 --- a/vlib/v/checker/if.v +++ b/vlib/v/checker/if.v @@ -43,7 +43,7 @@ pub fn (mut c Checker) if_expr(mut node ast.IfExpr) ast.Type { if (cond_typ.idx() != ast.bool_type_idx || cond_typ.has_flag(.optional)) && !c.pref.translated { c.error('non-bool type `${c.table.type_to_str(cond_typ)}` used as if condition', - branch.cond.position()) + branch.cond.pos()) } } } @@ -53,13 +53,13 @@ pub fn (mut c Checker) if_expr(mut node ast.IfExpr) ast.Type { if mut branch.cond is ast.InfixExpr { if branch.cond.op == .key_is { if branch.cond.right !is ast.TypeNode { - c.error('invalid `\$if` condition: expected a type', branch.cond.right.position()) + c.error('invalid `\$if` condition: expected a type', branch.cond.right.pos()) return 0 } got_type := c.unwrap_generic((branch.cond.right as ast.TypeNode).typ) sym := c.table.sym(got_type) if sym.kind == .placeholder || got_type.has_flag(.generic) { - c.error('unknown type `$sym.name`', branch.cond.right.position()) + c.error('unknown type `$sym.name`', branch.cond.right.pos()) } left := branch.cond.left if left is ast.SelectorExpr { @@ -271,7 +271,7 @@ fn (mut c Checker) smartcast_if_conds(node ast.Expr, mut scope ast.Scope) { ast.none_type_idx } else { - c.error('invalid type `$right_expr`', right_expr.position()) + c.error('invalid type `$right_expr`', right_expr.pos()) ast.Type(0) } } diff --git a/vlib/v/checker/interface.v b/vlib/v/checker/interface.v index 7182667bf..d9a4dc08a 100644 --- a/vlib/v/checker/interface.v +++ b/vlib/v/checker/interface.v @@ -165,7 +165,7 @@ pub fn (mut c Checker) interface_decl(mut node ast.InterfaceDecl) { } } -fn (mut c Checker) resolve_generic_interface(typ ast.Type, interface_type ast.Type, pos token.Position) ast.Type { +fn (mut c Checker) resolve_generic_interface(typ ast.Type, interface_type ast.Type, pos token.Pos) ast.Type { utyp := c.unwrap_generic(typ) typ_sym := c.table.sym(utyp) mut inter_sym := c.table.sym(interface_type) diff --git a/vlib/v/checker/match.v b/vlib/v/checker/match.v index 134673396..1d0b774e8 100644 --- a/vlib/v/checker/match.v +++ b/vlib/v/checker/match.v @@ -73,7 +73,7 @@ pub fn (mut c Checker) match_expr(mut node ast.MatchExpr) ast.Type { is_noreturn := is_noreturn_callexpr(stmt.expr) if !(node.is_expr && ret_sym.kind == .sum_type) && !is_noreturn { c.error('return type mismatch, it should be `$ret_sym.name`', - stmt.expr.position()) + stmt.expr.pos()) } } } @@ -213,9 +213,9 @@ fn (mut c Checker) match_exprs(mut node ast.MatchExpr, cond_type_sym ast.TypeSym // TODO // This generates a memory issue with TCC // Needs to be checked later when TCC errors are fixed - // Current solution is to move expr.position() to its own statement - // c.type_implements(expr_type, c.expected_type, expr.position()) - expr_pos := expr.position() + // Current solution is to move expr.pos() to its own statement + // c.type_implements(expr_type, c.expected_type, expr.pos()) + expr_pos := expr.pos() if c.type_implements(expr_type, c.expected_type, expr_pos) { if !expr_type.is_ptr() && !expr_type.is_pointer() && !c.inside_unsafe { if expr_type_sym.kind != .interface_ { @@ -227,16 +227,16 @@ fn (mut c Checker) match_exprs(mut node ast.MatchExpr, cond_type_sym ast.TypeSym if expr_type !in cond_type_sym.info.variants { expr_str := c.table.type_to_str(expr_type) expect_str := c.table.type_to_str(node.cond_type) - c.error('`$expect_str` has no variant `$expr_str`', expr.position()) + c.error('`$expect_str` has no variant `$expr_str`', expr.pos()) } } else if cond_type_sym.info is ast.Alias && expr_type_sym.info is ast.Struct { expr_str := c.table.type_to_str(expr_type) expect_str := c.table.type_to_str(node.cond_type) - c.error('cannot match alias type `$expect_str` with `$expr_str`', expr.position()) + c.error('cannot match alias type `$expect_str` with `$expr_str`', expr.pos()) } else if !c.check_types(expr_type, node.cond_type) { expr_str := c.table.type_to_str(expr_type) expect_str := c.table.type_to_str(node.cond_type) - c.error('cannot match `$expect_str` with `$expr_str`', expr.position()) + c.error('cannot match `$expect_str` with `$expr_str`', expr.pos()) } branch_exprs[key] = val + 1 } diff --git a/vlib/v/checker/orm.v b/vlib/v/checker/orm.v index 72d8776b1..053bc12d5 100644 --- a/vlib/v/checker/orm.v +++ b/vlib/v/checker/orm.v @@ -174,7 +174,7 @@ fn (mut c Checker) sql_stmt_line(mut node ast.SqlStmtLine) ast.Type { return ast.void_type } -fn (mut c Checker) fetch_and_verify_orm_fields(info ast.Struct, pos token.Position, table_name string) []ast.StructField { +fn (mut c Checker) fetch_and_verify_orm_fields(info ast.Struct, pos token.Pos, table_name string) []ast.StructField { fields := info.fields.filter( (it.typ in [ast.string_type, ast.bool_type] || int(it.typ) in ast.number_type_idxs || c.table.type_symbols[int(it.typ)].kind == .struct_ diff --git a/vlib/v/checker/return.v b/vlib/v/checker/return.v index 92e805f8c..cbbf0cf2a 100644 --- a/vlib/v/checker/return.v +++ b/vlib/v/checker/return.v @@ -11,7 +11,7 @@ pub fn (mut c Checker) return_stmt(mut node ast.Return) { mut expected_type := c.unwrap_generic(c.expected_type) expected_type_sym := c.table.sym(expected_type) if node.exprs.len > 0 && c.table.cur_fn.return_type == ast.void_type { - c.error('unexpected argument, current function does not return anything', node.exprs[0].position()) + c.error('unexpected argument, current function does not return anything', node.exprs[0].pos()) return } else if node.exprs.len == 0 && !(c.expected_type == ast.void_type || expected_type_sym.kind == .void) { @@ -82,7 +82,7 @@ pub fn (mut c Checker) return_stmt(mut node ast.Return) { got_typ := c.unwrap_generic(got_types[i]) if got_typ.has_flag(.optional) && (!exp_type.has_flag(.optional) || c.table.type_to_str(got_typ) != c.table.type_to_str(exp_type)) { - pos := node.exprs[i].position() + pos := node.exprs[i].pos() c.error('cannot use `${c.table.type_to_str(got_typ)}` as type `${c.table.type_to_str(exp_type)}` in return argument', pos) } @@ -98,13 +98,13 @@ pub fn (mut c Checker) return_stmt(mut node ast.Return) { } continue } - pos := node.exprs[i].position() + pos := node.exprs[i].pos() c.error('cannot use `$got_typ_sym.name` as type `${c.table.type_to_str(exp_type)}` in return argument', pos) } if (got_typ.is_ptr() || got_typ.is_pointer()) && (!exp_type.is_ptr() && !exp_type.is_pointer()) { - pos := node.exprs[i].position() + pos := node.exprs[i].pos() if node.exprs[i].is_auto_deref_var() { continue } @@ -114,7 +114,7 @@ pub fn (mut c Checker) return_stmt(mut node ast.Return) { if (exp_type.is_ptr() || exp_type.is_pointer()) && (!got_typ.is_ptr() && !got_typ.is_pointer()) && got_typ != ast.int_literal_type && !c.pref.translated { - pos := node.exprs[i].position() + pos := node.exprs[i].pos() if node.exprs[i].is_auto_deref_var() { continue } diff --git a/vlib/v/checker/struct.v b/vlib/v/checker/struct.v index 3bc20562f..715a8ebd1 100644 --- a/vlib/v/checker/struct.v +++ b/vlib/v/checker/struct.v @@ -82,7 +82,7 @@ pub fn (mut c Checker) struct_decl(mut node ast.StructDecl) { } } else { c.error('incompatible initializer for field `$field.name`: $err.msg', - field.default_expr.position()) + field.default_expr.pos()) } } // Check for unnecessary inits like ` = 0` and ` = ''` @@ -394,7 +394,7 @@ pub fn (mut c Checker) struct_init(mut node ast.StructInit) ast.Type { node.update_expr_type = update_type if c.table.type_kind(update_type) != .struct_ { s := c.table.type_to_str(update_type) - c.error('expected struct, found `$s`', node.update_expr.position()) + c.error('expected struct, found `$s`', node.update_expr.pos()) } else if update_type != node.typ { from_sym := c.table.sym(update_type) to_sym := c.table.sym(node.typ) @@ -403,13 +403,13 @@ pub fn (mut c Checker) struct_init(mut node ast.StructInit) ast.Type { // TODO this check is too strict if !c.check_struct_signature(from_info, to_info) { c.error('struct `$from_sym.name` is not compatible with struct `$to_sym.name`', - node.update_expr.position()) + node.update_expr.pos()) } } if !node.update_expr.is_lvalue() { // cgen will repeat `update_expr` for each field // so enforce an lvalue for efficiency - c.error('expression is not an lvalue', node.update_expr.position()) + c.error('expression is not an lvalue', node.update_expr.pos()) } } return node.typ diff --git a/vlib/v/doc/comment.v b/vlib/v/doc/comment.v index 468f46e4a..5a870b258 100644 --- a/vlib/v/doc/comment.v +++ b/vlib/v/doc/comment.v @@ -10,7 +10,7 @@ pub struct DocComment { pub mut: text string // Raw text content of the comment, excluding the comment token chars ('//, /*, */') is_multi bool // Is a block / multi-line comment - pos token.Position + pos token.Pos } // is_example returns true if the contents of this comment is a doc example. diff --git a/vlib/v/doc/doc.v b/vlib/v/doc/doc.v index 314943980..583754b89 100644 --- a/vlib/v/doc/doc.v +++ b/vlib/v/doc/doc.v @@ -126,7 +126,7 @@ pub mut: name string content string comments []DocComment - pos token.Position + pos token.Pos file_path string kind SymbolKind tags []string diff --git a/vlib/v/doc/utils.v b/vlib/v/doc/utils.v index 3fb3973ff..3ca690447 100644 --- a/vlib/v/doc/utils.v +++ b/vlib/v/doc/utils.v @@ -19,7 +19,7 @@ pub fn ast_comment_to_doc_comment(ast_node ast.Comment) DocComment { return DocComment{ text: text is_multi: ast_node.is_multi - pos: token.Position{ + pos: token.Pos{ line_nr: ast_node.pos.line_nr col: 0 // ast_node.pos.pos - ast_node.text.len len: text.len diff --git a/vlib/v/errors/errors.v b/vlib/v/errors/errors.v index 37a1fd24d..4194a5dc4 100644 --- a/vlib/v/errors/errors.v +++ b/vlib/v/errors/errors.v @@ -15,7 +15,7 @@ pub: message string details string file_path string - pos token.Position + pos token.Pos backtrace string reporter Reporter } @@ -25,7 +25,7 @@ pub: message string details string file_path string - pos token.Position + pos token.Pos reporter Reporter } @@ -34,6 +34,6 @@ pub: message string details string file_path string - pos token.Position + pos token.Pos reporter Reporter } diff --git a/vlib/v/fmt/fmt.v b/vlib/v/fmt/fmt.v index cd20333c8..5e7c46d2c 100644 --- a/vlib/v/fmt/fmt.v +++ b/vlib/v/fmt/fmt.v @@ -331,7 +331,7 @@ fn (f Fmt) should_insert_newline_before_node(node ast.Node, prev_node ast.Node) if f.out.last_n(2) == '\n\n' { return false } - prev_line_nr := prev_node.position().last_line + prev_line_nr := prev_node.pos().last_line // The nodes are Stmts if node is ast.Stmt && prev_node is ast.Stmt { stmt := node @@ -372,7 +372,7 @@ fn (f Fmt) should_insert_newline_before_node(node ast.Node, prev_node ast.Node) } } // The node shouldn't have a newline before - if node.position().line_nr - prev_line_nr <= 1 { + if node.pos().line_nr - prev_line_nr <= 1 { return false } return true @@ -507,7 +507,7 @@ fn stmt_is_single_line(stmt ast.Stmt) bool { pub fn (mut f Fmt) expr(node ast.Expr) { if f.is_debug { - eprintln('expr: ${node.position():-42} | node: ${node.type_name():-20} | $node.str()') + eprintln('expr: ${node.pos():-42} | node: ${node.type_name():-20} | $node.str()') } match mut node { ast.NodeError {} @@ -1382,7 +1382,7 @@ pub fn (mut f Fmt) array_init(node ast.ArrayInit) { } } else { next_line := if node.exprs.len > 0 { - node.exprs[0].position().line_nr + node.exprs[0].pos().line_nr } else { node.pos.last_line } @@ -1402,11 +1402,11 @@ pub fn (mut f Fmt) array_init(node ast.ArrayInit) { } mut set_comma := false for i, expr in node.exprs { - pos := expr.position() + pos := expr.pos() if i == 0 { if f.array_init_depth > f.array_init_break.len { f.array_init_break << pos.line_nr > last_line_nr - || f.line_len + expr.position().len > fmt.max_len[3] + || f.line_len + expr.pos().len > fmt.max_len[3] } } line_break := f.array_init_break[f.array_init_depth - 1] @@ -1449,7 +1449,7 @@ pub fn (mut f Fmt) array_init(node ast.ArrayInit) { mut last_comment_was_inline := false mut has_comments := node.ecmnts[i].len > 0 if i < node.ecmnts.len && has_comments { - expr_pos := expr.position() + expr_pos := expr.pos() for icmt, cmt in node.ecmnts[i] { if !set_comma && cmt.pos.pos > expr_pos.pos + expr_pos.len + 2 { if icmt > 0 { @@ -1464,7 +1464,7 @@ pub fn (mut f Fmt) array_init(node ast.ArrayInit) { } mut next_pos := expr_pos if i + 1 < node.exprs.len { - next_pos = node.exprs[i + 1].position() + next_pos = node.exprs[i + 1].pos() } if cmt.pos.line_nr > expr_pos.last_line { embed := i + 1 < node.exprs.len && next_pos.line_nr == cmt.pos.last_line @@ -2114,7 +2114,7 @@ pub fn (mut f Fmt) map_init(node ast.MapInit) { f.write(': ') f.write(strings.repeat(` `, max_field_len - key.str().len)) f.expr(node.vals[i]) - f.comments(node.comments[i], prev_line: node.vals[i].position().last_line, has_nl: false) + f.comments(node.comments[i], prev_line: node.vals[i].pos().last_line, has_nl: false) f.writeln('') } f.indent-- diff --git a/vlib/v/fmt/struct.v b/vlib/v/fmt/struct.v index 1a1c18518..532fd27fe 100644 --- a/vlib/v/fmt/struct.v +++ b/vlib/v/fmt/struct.v @@ -91,7 +91,7 @@ pub fn (mut f Fmt) struct_decl(node ast.StructDecl) { before_last_line = mu.max(before_last_line, node.fields[i - 1].comments.last().pos.last_line) } if node.fields[i - 1].has_default_expr { - before_last_line = mu.max(before_last_line, node.fields[i - 1].default_expr.position().last_line) + before_last_line = mu.max(before_last_line, node.fields[i - 1].default_expr.pos().last_line) } mut next_first_line := field.pos.line_nr diff --git a/vlib/v/fmt/tests/inline_sum_type_keep.vv b/vlib/v/fmt/tests/inline_sum_type_keep.vv index 32f79123f..0f71497b3 100644 --- a/vlib/v/fmt/tests/inline_sum_type_keep.vv +++ b/vlib/v/fmt/tests/inline_sum_type_keep.vv @@ -8,6 +8,6 @@ interface Egg { milk string | int } -fn foo(bar string | int) int | string | token.Position { +fn foo(bar string | int) int | string | token.Pos { return 1 } diff --git a/vlib/v/fmt/tests/match_with_commented_branches_keep.vv b/vlib/v/fmt/tests/match_with_commented_branches_keep.vv index 3240eb55b..f5760005e 100644 --- a/vlib/v/fmt/tests/match_with_commented_branches_keep.vv +++ b/vlib/v/fmt/tests/match_with_commented_branches_keep.vv @@ -1,6 +1,6 @@ module ast -pub fn (stmt Stmt) position() Position { +pub fn (stmt Stmt) pos() Pos { match stmt { AssertStmt { return stmt.pos } AssignStmt { return stmt.pos } @@ -52,6 +52,6 @@ pub fn (stmt Stmt) position() Position { // } */ // - else { return Position{} } + else { return Pos{} } } } diff --git a/vlib/v/gen/c/assign.v b/vlib/v/gen/c/assign.v index 4dc8c862a..e04738a6d 100644 --- a/vlib/v/gen/c/assign.v +++ b/vlib/v/gen/c/assign.v @@ -691,7 +691,7 @@ fn (mut g Gen) gen_cross_tmp_variable(left []ast.Expr, val ast.Expr) { for lx in left { if val_.str() == lx.str() { g.write('_var_') - g.write(lx.position().pos.str()) + g.write(lx.pos().pos.str()) has_var = true break } @@ -731,7 +731,7 @@ fn (mut g Gen) gen_cross_tmp_variable(left []ast.Expr, val ast.Expr) { for lx in left { if val_.str() == lx.str() { g.write('_var_') - g.write(lx.position().pos.str()) + g.write(lx.pos().pos.str()) has_var = true break } diff --git a/vlib/v/gen/c/cgen.v b/vlib/v/gen/c/cgen.v index 284ee3a45..23f9fcaaf 100644 --- a/vlib/v/gen/c/cgen.v +++ b/vlib/v/gen/c/cgen.v @@ -1502,7 +1502,7 @@ fn (mut g Gen) stmts_with_tmp_var(stmts []ast.Stmt, tmp_var string) { if stmt is ast.ExprStmt { // For some reason ExprStmt.pos is 0 when ExprStmt.expr is comp if expr // Extract the pos. TODO figure out why and fix. - stmt_pos = stmt.expr.position() + stmt_pos = stmt.expr.pos() } if stmt_pos.pos == 0 { $if trace_autofree ? { @@ -1517,7 +1517,7 @@ fn (mut g Gen) stmts_with_tmp_var(stmts []ast.Stmt, tmp_var string) { } [inline] -fn (mut g Gen) write_v_source_line_info(pos token.Position) { +fn (mut g Gen) write_v_source_line_info(pos token.Pos) { if g.inside_ternary == 0 && g.pref.is_vlines && g.is_vlines_enabled { nline := pos.line_nr + 1 lineinfo := '\n#line $nline "$g.vlines_path"' @@ -1876,7 +1876,7 @@ fn (mut g Gen) stmt(node ast.Stmt) { if g.is_autofree { // if node is ast.ExprStmt {&& node.expr is ast.CallExpr { if node !is ast.FnDecl { - // p := node.position() + // p := node.pos() // g.autofree_call_postgen(p.pos) } } @@ -2440,7 +2440,7 @@ fn (mut g Gen) expr_with_cast(expr ast.Expr, got_type_raw ast.Type, expected_typ got_deref_type := if got_is_ptr { unwrapped_got_type.deref() } else { unwrapped_got_type } if g.table.sumtype_has_variant(expected_deref_type, got_deref_type, false) { mut is_already_sum_type := false - scope := g.file.scope.innermost(expr.position().pos) + scope := g.file.scope.innermost(expr.pos().pos) if expr is ast.Ident { if v := scope.find_var(expr.name) { if v.smartcasts.len > 0 { @@ -2477,7 +2477,7 @@ fn (mut g Gen) expr_with_cast(expr ast.Expr, got_type_raw ast.Type, expected_typ if to_shared { shared_styp := exp_styp[0..exp_styp.len - 1] // `shared` implies ptr, so eat one `*` if got_type_raw.is_ptr() { - g.error('cannot convert reference to `shared`', expr.position()) + g.error('cannot convert reference to `shared`', expr.pos()) } if exp_sym.kind == .array { g.writeln('($shared_styp*)__dup_shared_array(&($shared_styp){.mtx = {0}, .val =') @@ -3091,7 +3091,7 @@ fn (mut g Gen) expr(node ast.Expr) { // NB: please keep the type names in the match here in alphabetical order: match mut node { ast.EmptyExpr { - g.error('g.expr(): unhandled EmptyExpr', token.Position{}) + g.error('g.expr(): unhandled EmptyExpr', token.Pos{}) } ast.AnonFn { g.gen_anon_fn(mut node) @@ -4691,7 +4691,7 @@ fn (mut g Gen) if_expr(node ast.IfExpr) { } else { mut is_auto_heap := false if branch.stmts.len > 0 { - scope := g.file.scope.innermost(ast.Node(branch.stmts[branch.stmts.len - 1]).position().pos) + scope := g.file.scope.innermost(ast.Node(branch.stmts[branch.stmts.len - 1]).pos().pos) if v := scope.find_var(branch.cond.vars[0].name) { is_auto_heap = v.is_auto_heap } @@ -5634,13 +5634,13 @@ fn verror(s string) { } [noreturn] -fn (g &Gen) error(s string, pos token.Position) { +fn (g &Gen) error(s string, pos token.Pos) { ferror := util.formatted_error('cgen error:', s, g.file.path, pos) eprintln(ferror) exit(1) } -fn (g &Gen) checker_bug(s string, pos token.Position) { +fn (g &Gen) checker_bug(s string, pos token.Pos) { g.error('checker bug; $s', pos) } @@ -6943,7 +6943,7 @@ static inline __shared__$interface_name ${shared_fn_name}(__shared__$cctype* x) return sb.str() } -fn (mut g Gen) panic_debug_info(pos token.Position) (int, string, string, string) { +fn (mut g Gen) panic_debug_info(pos token.Pos) (int, string, string, string) { paline := pos.line_nr + 1 if isnil(g.fn_decl) { return paline, '', 'main', 'C._vinit' diff --git a/vlib/v/gen/js/js.v b/vlib/v/gen/js/js.v index e6e51d5a4..9c64f8e1b 100644 --- a/vlib/v/gen/js/js.v +++ b/vlib/v/gen/js/js.v @@ -580,7 +580,7 @@ fn (mut g JsGen) stmts(stmts []ast.Stmt) { } [inline] -fn (mut g JsGen) write_v_source_line_info(pos token.Position) { +fn (mut g JsGen) write_v_source_line_info(pos token.Pos) { // g.inside_ternary == 0 && if g.pref.sourcemap { g.ns.sourcemap_helper << SourcemapHelper{ diff --git a/vlib/v/gen/native/amd64.v b/vlib/v/gen/native/amd64.v index b73cb97f6..3bc5f4745 100644 --- a/vlib/v/gen/native/amd64.v +++ b/vlib/v/gen/native/amd64.v @@ -1176,7 +1176,7 @@ g.v_error('oops', node.pos) } else { // dump(node) - g.v_error('unhandled assign_stmt expression: $right.type_name()', right.position()) + g.v_error('unhandled assign_stmt expression: $right.type_name()', right.pos()) } } // } diff --git a/vlib/v/gen/native/gen.v b/vlib/v/gen/native/gen.v index 4668f497b..61d248508 100644 --- a/vlib/v/gen/native/gen.v +++ b/vlib/v/gen/native/gen.v @@ -762,7 +762,7 @@ pub fn (mut g Gen) n_error(s string) { util.verror('native error', s) } -pub fn (mut g Gen) warning(s string, pos token.Position) { +pub fn (mut g Gen) warning(s string, pos token.Pos) { if g.pref.output_mode == .stdout { werror := util.formatted_error('warning', s, g.pref.path, pos) eprintln(werror) @@ -776,7 +776,7 @@ pub fn (mut g Gen) warning(s string, pos token.Position) { } } -pub fn (mut g Gen) v_error(s string, pos token.Position) { +pub fn (mut g Gen) v_error(s string, pos token.Pos) { // TODO: store a file index in the Position too, // so that the file path can be retrieved from the pos, instead // of guessed from the pref.path ... diff --git a/vlib/v/parser/assign.v b/vlib/v/parser/assign.v index f95b9c688..776b54aaf 100644 --- a/vlib/v/parser/assign.v +++ b/vlib/v/parser/assign.v @@ -133,7 +133,7 @@ fn (mut p Parser) check_cross_variables(exprs []ast.Expr, val ast.Expr) bool { fn (mut p Parser) partial_assign_stmt(left []ast.Expr, left_comments []ast.Comment) ast.Stmt { p.is_stmt_ident = false op := p.tok.kind - mut pos := p.tok.position() + mut pos := p.tok.pos() p.next() mut comments := []ast.Comment{cap: 2 * left_comments.len + 1} comments << left_comments @@ -210,7 +210,7 @@ fn (mut p Parser) partial_assign_stmt(left []ast.Expr, left_comments []ast.Comme } else { // TODO: parexpr ( check vars) - // else { p.error_with_pos('unexpected `${typeof(lx)}`', lx.position()) } + // else { p.error_with_pos('unexpected `${typeof(lx)}`', lx.pos()) } } } } diff --git a/vlib/v/parser/comptime.v b/vlib/v/parser/comptime.v index 785f30009..7d0ea51ec 100644 --- a/vlib/v/parser/comptime.v +++ b/vlib/v/parser/comptime.v @@ -14,7 +14,7 @@ const ( // // #include, #flag, #v fn (mut p Parser) hash() ast.HashStmt { - pos := p.tok.position() + pos := p.tok.pos() val := p.tok.lit kind := val.all_before(' ') p.next() @@ -44,7 +44,7 @@ fn (mut p Parser) comptime_call() ast.ComptimeCall { scope: 0 } p.check(.dollar) - start_pos := p.prev_tok.position() + start_pos := p.prev_tok.pos() error_msg := 'only `\$tmpl()`, `\$env()`, `\$embed_file()`, `\$pkgconfig()` and `\$vweb.html()` comptime functions are supported right now' if p.peek_tok.kind == .dot { name := p.check_name() // skip `vweb.html()` TODO @@ -63,7 +63,7 @@ fn (mut p Parser) comptime_call() ast.ComptimeCall { is_html := method_name == 'html' // $env('ENV_VAR_NAME') p.check(.lpar) - spos := p.tok.position() + spos := p.tok.pos() if method_name == 'env' { s := p.tok.lit p.check(.string) @@ -74,7 +74,7 @@ fn (mut p Parser) comptime_call() ast.ComptimeCall { args_var: s is_env: true env_pos: spos - pos: spos.extend(p.prev_tok.position()) + pos: spos.extend(p.prev_tok.pos()) } } if method_name == 'pkgconfig' { @@ -87,7 +87,7 @@ fn (mut p Parser) comptime_call() ast.ComptimeCall { args_var: s is_pkgconfig: true env_pos: spos - pos: spos.extend(p.prev_tok.position()) + pos: spos.extend(p.prev_tok.pos()) } } literal_string_param := if is_html { '' } else { p.tok.lit } @@ -146,7 +146,7 @@ fn (mut p Parser) comptime_call() ast.ComptimeCall { apath: epath compression_type: embed_compression_type } - pos: start_pos.extend(p.prev_tok.position()) + pos: start_pos.extend(p.prev_tok.pos()) } } // Compile vweb html template to V code, parse that V code and embed the resulting V function @@ -180,7 +180,7 @@ fn (mut p Parser) comptime_call() ast.ComptimeCall { is_vweb: true method_name: method_name args_var: literal_string_param - pos: start_pos.extend(p.prev_tok.position()) + pos: start_pos.extend(p.prev_tok.pos()) } } if is_html { @@ -245,7 +245,7 @@ fn (mut p Parser) comptime_call() ast.ComptimeCall { vweb_tmpl: file method_name: method_name args_var: literal_string_param - pos: start_pos.extend(p.prev_tok.position()) + pos: start_pos.extend(p.prev_tok.pos()) } } @@ -255,13 +255,13 @@ fn (mut p Parser) comptime_for() ast.ComptimeFor { // $for field in App(fields) { p.next() p.check(.key_for) - var_pos := p.tok.position() + var_pos := p.tok.pos() val_var := p.check_name() p.check(.key_in) - mut typ_pos := p.tok.position() + mut typ_pos := p.tok.pos() lang := p.parse_language() typ := p.parse_any_type(lang, false, false) - typ_pos = typ_pos.extend(p.prev_tok.position()) + typ_pos = typ_pos.extend(p.prev_tok.pos()) p.check(.dot) for_val := p.check_name() mut kind := ast.ComptimeForKind.methods @@ -288,10 +288,10 @@ fn (mut p Parser) comptime_for() ast.ComptimeFor { kind = .attributes } else { p.error_with_pos('unknown kind `$for_val`, available are: `methods`, `fields` or `attributes`', - p.prev_tok.position()) + p.prev_tok.pos()) return ast.ComptimeFor{} } - spos := p.tok.position() + spos := p.tok.pos() stmts := p.parse_block() p.close_scope() return ast.ComptimeFor{ @@ -300,7 +300,7 @@ fn (mut p Parser) comptime_for() ast.ComptimeFor { kind: kind typ: typ typ_pos: typ_pos - pos: spos.extend(p.tok.position()) + pos: spos.extend(p.tok.pos()) } } @@ -326,16 +326,16 @@ fn (mut p Parser) at() ast.AtExpr { p.next() return ast.AtExpr{ name: name - pos: p.tok.position() + pos: p.tok.pos() kind: kind } } fn (mut p Parser) comptime_selector(left ast.Expr) ast.Expr { p.check(.dollar) - start_pos := p.prev_tok.position() + start_pos := p.prev_tok.pos() if p.peek_tok.kind == .lpar { - method_pos := p.tok.position() + method_pos := p.tok.pos() method_name := p.check_name() p.mark_var_as_used(method_name) // `app.$action()` (`action` is a string) @@ -353,7 +353,7 @@ fn (mut p Parser) comptime_selector(left ast.Expr) ast.Expr { scope: p.scope args_var: '' args: args - pos: start_pos.extend(p.prev_tok.position()) + pos: start_pos.extend(p.prev_tok.pos()) } } mut has_parens := false @@ -361,7 +361,7 @@ fn (mut p Parser) comptime_selector(left ast.Expr) ast.Expr { p.check(.lpar) has_parens = true } else { - p.warn_with_pos('use brackets instead e.g. `s.$(field.name)` - run vfmt', p.tok.position()) + p.warn_with_pos('use brackets instead e.g. `s.$(field.name)` - run vfmt', p.tok.pos()) } expr := p.expr(0) if has_parens { @@ -371,6 +371,6 @@ fn (mut p Parser) comptime_selector(left ast.Expr) ast.Expr { has_parens: has_parens left: left field_expr: expr - pos: start_pos.extend(p.prev_tok.position()) + pos: start_pos.extend(p.prev_tok.pos()) } } diff --git a/vlib/v/parser/containers.v b/vlib/v/parser/containers.v index 12cd95a28..4c5939e6d 100644 --- a/vlib/v/parser/containers.v +++ b/vlib/v/parser/containers.v @@ -6,8 +6,8 @@ module parser import v.ast fn (mut p Parser) array_init() ast.ArrayInit { - first_pos := p.tok.position() - mut last_pos := p.tok.position() + first_pos := p.tok.pos() + mut last_pos := p.tok.pos() p.check(.lsbr) // p.warn('array_init() exp=$p.expected_type') mut array_type := ast.void_type @@ -23,13 +23,13 @@ fn (mut p Parser) array_init() ast.ArrayInit { mut has_it := false mut default_expr := ast.empty_expr() if p.tok.kind == .rsbr { - last_pos = p.tok.position() + last_pos = p.tok.pos() // []typ => `[]` and `typ` must be on the same line line_nr := p.tok.line_nr p.next() // []string if p.tok.kind in [.name, .amp, .lsbr, .key_shared] && p.tok.line_nr == line_nr { - elem_type_pos = p.tok.position() + elem_type_pos = p.tok.pos() elem_type = p.parse_type() // this is set here because it's a known type, others could be the // result of expr so we do those in checker @@ -41,7 +41,7 @@ fn (mut p Parser) array_init() ast.ArrayInit { } has_type = true } - last_pos = p.tok.position() + last_pos = p.tok.pos() } else { // [1,2,3] or [const]byte old_inside_array_lit := p.inside_array_lit @@ -63,17 +63,17 @@ fn (mut p Parser) array_init() ast.ArrayInit { tcc_stack_bug := 12345 _ = tcc_stack_bug } - last_pos = p.tok.position() + last_pos = p.tok.pos() p.check(.rsbr) if exprs.len == 1 && p.tok.kind in [.name, .amp, .lsbr] && p.tok.line_nr == line_nr { // [100]byte elem_type = p.parse_type() - last_pos = p.tok.position() + last_pos = p.tok.pos() is_fixed = true if p.tok.kind == .lcbr { p.next() if p.tok.kind != .rcbr { - pos := p.tok.position() + pos := p.tok.pos() n := p.check_name() if n != 'init' { p.error_with_pos('expected `init:`, not `$n`', pos) @@ -94,7 +94,7 @@ fn (mut p Parser) array_init() ast.ArrayInit { } p.close_scope() } - last_pos = p.tok.position() + last_pos = p.tok.pos() p.check(.rcbr) } else { p.warn_with_pos('use e.g. `x := [1]Type{}` instead of `x := [1]Type`', @@ -102,13 +102,13 @@ fn (mut p Parser) array_init() ast.ArrayInit { } } else { if p.tok.kind == .not { // && p.tok.line_nr == p.prev_tok.line_nr { - last_pos = p.tok.position() + last_pos = p.tok.pos() is_fixed = true has_val = true p.next() } if p.tok.kind == .not && p.tok.line_nr == p.prev_tok.line_nr { - last_pos = p.tok.position() + last_pos = p.tok.pos() p.error_with_pos('use e.g. `[1, 2, 3]!` instead of `[1, 2, 3]!!`', last_pos) p.next() } @@ -188,7 +188,7 @@ fn (mut p Parser) array_init() ast.ArrayInit { // parse tokens between braces fn (mut p Parser) map_init() ast.MapInit { - first_pos := p.prev_tok.position() + first_pos := p.prev_tok.pos() mut keys := []ast.Expr{} mut vals := []ast.Expr{} mut comments := [][]ast.Comment{} @@ -207,7 +207,7 @@ fn (mut p Parser) map_init() ast.MapInit { return ast.MapInit{ keys: keys vals: vals - pos: first_pos.extend_with_last_line(p.tok.position(), p.tok.line_nr) + pos: first_pos.extend_with_last_line(p.tok.pos(), p.tok.line_nr) comments: comments pre_cmnts: pre_cmnts } @@ -216,7 +216,7 @@ fn (mut p Parser) map_init() ast.MapInit { fn (mut p Parser) scope_register_it_as_index() { p.scope.objects['it'] = ast.Var{ // override it variable if it already exist, else create it variable name: 'it' - pos: p.tok.position() + pos: p.tok.pos() typ: ast.int_type is_mut: false is_used: false diff --git a/vlib/v/parser/expr.v b/vlib/v/parser/expr.v index 990720126..c9bd4d5d2 100644 --- a/vlib/v/parser/expr.v +++ b/vlib/v/parser/expr.v @@ -9,7 +9,7 @@ import v.token pub fn (mut p Parser) expr(precedence int) ast.Expr { return p.check_expr(precedence) or { - p.error_with_pos('invalid expression: unexpected $p.tok', p.tok.position()) + p.error_with_pos('invalid expression: unexpected $p.tok', p.tok.pos()) } } @@ -47,7 +47,7 @@ pub fn (mut p Parser) check_expr(precedence int) ?ast.Expr { } else if p.tok.lit == 'map' && p.peek_tok.kind == .lcbr && !(p.builtin_mod && p.file_base in ['map.v', 'map_d_gcboehm_opt.v']) { p.warn_with_pos("deprecated map syntax, use syntax like `{'age': 20}`", - p.tok.position()) + p.tok.pos()) p.next() // `map` p.next() // `{` node = p.map_init() @@ -85,14 +85,14 @@ pub fn (mut p Parser) check_expr(precedence int) ?ast.Expr { return p.if_expr(true) } else { - return p.error_with_pos('unexpected `$`', p.peek_tok.position()) + return p.error_with_pos('unexpected `$`', p.peek_tok.pos()) } } } .chartoken { node = ast.CharLiteral{ val: p.tok.lit - pos: p.tok.position() + pos: p.tok.pos() } p.next() } @@ -116,7 +116,7 @@ pub fn (mut p Parser) check_expr(precedence int) ?ast.Expr { .key_true, .key_false { node = ast.BoolLiteral{ val: p.tok.kind == .key_true - pos: p.tok.position() + pos: p.tok.pos() } p.next() } @@ -130,13 +130,13 @@ pub fn (mut p Parser) check_expr(precedence int) ?ast.Expr { node = p.parse_number_literal() } .lpar { - mut pos := p.tok.position() + mut pos := p.tok.pos() p.check(.lpar) node = p.expr(0) p.check(.rpar) node = ast.ParExpr{ expr: node - pos: pos.extend(p.prev_tok.position()) + pos: pos.extend(p.prev_tok.pos()) } } .key_if { @@ -144,7 +144,7 @@ pub fn (mut p Parser) check_expr(precedence int) ?ast.Expr { } .key_unsafe { // unsafe { - mut pos := p.tok.position() + mut pos := p.tok.pos() p.next() if p.inside_unsafe { return p.error_with_pos('already inside `unsafe` block', pos) @@ -168,7 +168,7 @@ pub fn (mut p Parser) check_expr(precedence int) ?ast.Expr { // parse json.decode type (`json.decode([]User, s)`) node = p.name_expr() } else if p.is_amp && p.peek_tok.kind == .rsbr && p.peek_token(3).kind != .lcbr { - pos := p.tok.position() + pos := p.tok.pos() typ := p.parse_type() typname := p.table.sym(typ).name p.check(.lpar) @@ -185,7 +185,7 @@ pub fn (mut p Parser) check_expr(precedence int) ?ast.Expr { } } .key_none { - pos := p.tok.position() + pos := p.tok.pos() p.next() node = ast.None{ pos: pos @@ -195,7 +195,7 @@ pub fn (mut p Parser) check_expr(precedence int) ?ast.Expr { is_reftype := p.tok.kind == .key_isreftype p.next() // sizeof p.check(.lpar) - pos := p.tok.position() + pos := p.tok.pos() is_known_var := p.mark_var_as_used(p.tok.lit) || p.table.global_scope.known_const(p.mod + '.' + p.tok.lit) //|| p.table.known_fn(p.mod + '.' + p.tok.lit) @@ -242,7 +242,7 @@ pub fn (mut p Parser) check_expr(precedence int) ?ast.Expr { p.check(.rpar) } .key_typeof { - spos := p.tok.position() + spos := p.tok.pos() p.next() p.check(.lpar) expr := p.expr(0) @@ -253,29 +253,29 @@ pub fn (mut p Parser) check_expr(precedence int) ?ast.Expr { } node = ast.TypeOf{ expr: expr - pos: spos.extend(p.tok.position()) + pos: spos.extend(p.tok.pos()) } } .key_dump { - spos := p.tok.position() + spos := p.tok.pos() p.next() p.check(.lpar) expr := p.expr(0) p.check(.rpar) node = ast.DumpExpr{ expr: expr - pos: spos.extend(p.tok.position()) + pos: spos.extend(p.tok.pos()) } } .key_offsetof { - pos := p.tok.position() + pos := p.tok.pos() p.next() // __offsetof p.check(.lpar) st := p.parse_type() p.check(.comma) if p.tok.kind != .name { return p.error_with_pos('unexpected `$p.tok.lit`, expecting struct field', - p.tok.position()) + p.tok.pos()) } field := p.tok.lit p.next() @@ -290,7 +290,7 @@ pub fn (mut p Parser) check_expr(precedence int) ?ast.Expr { is_likely := p.tok.kind == .key_likely p.next() p.check(.lpar) - lpos := p.tok.position() + lpos := p.tok.pos() expr := p.expr(0) p.check(.rpar) node = ast.Likely{ @@ -308,10 +308,10 @@ pub fn (mut p Parser) check_expr(precedence int) ?ast.Expr { .key_fn { if p.expecting_type { // Anonymous function type - start_pos := p.tok.position() + start_pos := p.tok.pos() return ast.TypeNode{ typ: p.parse_type() - pos: start_pos.extend(p.prev_tok.position()) + pos: start_pos.extend(p.prev_tok.pos()) } } else { // Anonymous function @@ -322,7 +322,7 @@ pub fn (mut p Parser) check_expr(precedence int) ?ast.Expr { // but this would take a bit of modification if p.tok.kind == .lpar { p.next() - pos := p.tok.position() + pos := p.tok.pos() args := p.call_args() p.check(.rpar) node = ast.CallExpr{ @@ -340,7 +340,7 @@ pub fn (mut p Parser) check_expr(precedence int) ?ast.Expr { if p.tok.kind != .eof && !(p.tok.kind == .rsbr && p.inside_asm) { // eof should be handled where it happens return none - // return p.error_with_pos('invalid expression: unexpected $p.tok', p.tok.position()) + // return p.error_with_pos('invalid expression: unexpected $p.tok', p.tok.pos()) } } } @@ -355,17 +355,17 @@ pub fn (mut p Parser) check_expr(precedence int) ?ast.Expr { pub fn (mut p Parser) expr_with_left(left ast.Expr, precedence int, is_stmt_ident bool) ast.Expr { mut node := left - if p.inside_asm && p.prev_tok.position().line_nr < p.tok.position().line_nr { + if p.inside_asm && p.prev_tok.pos().line_nr < p.tok.pos().line_nr { return node } // Infix for precedence < p.tok.precedence() { if p.tok.kind == .dot { //&& (p.tok.line_nr == p.prev_tok.line_nr // TODO fix a bug with prev_tok.last_line - //|| p.prev_tok.position().last_line == p.tok.line_nr) { + //|| p.prev_tok.pos().last_line == p.tok.line_nr) { // if p.fileis('vcache.v') { // p.warn('tok.line_nr = $p.tok.line_nr; prev_tok.line_nr=$p.prev_tok.line_nr; - // prev_tok.last_line=$p.prev_tok.position().last_line') + // prev_tok.last_line=$p.prev_tok.pos().last_line') //} node = p.dot_expr(node) if p.name_error { @@ -384,7 +384,7 @@ pub fn (mut p Parser) expr_with_left(left ast.Expr, precedence int, is_stmt_iden p.is_stmt_ident = is_stmt_ident if p.tok.kind == .lpar && p.tok.line_nr == p.prev_tok.line_nr && node is ast.IndexExpr { p.next() - pos := p.tok.position() + pos := p.tok.pos() args := p.call_args() p.check(.rpar) node = ast.CallExpr{ @@ -398,7 +398,7 @@ pub fn (mut p Parser) expr_with_left(left ast.Expr, precedence int, is_stmt_iden } else if p.tok.kind == .key_as { // sum type as cast `x := SumType as Variant` if !p.inside_asm { - pos := p.tok.position() + pos := p.tok.pos() p.next() typ := p.parse_type() node = ast.AsCast{ @@ -412,7 +412,7 @@ pub fn (mut p Parser) expr_with_left(left ast.Expr, precedence int, is_stmt_iden } else if p.tok.kind == .left_shift && p.is_stmt_ident { // arr << elem tok := p.tok - mut pos := tok.position() + mut pos := tok.pos() p.next() right := p.expr(precedence - 1) pos.update_last_line(p.prev_tok.line_nr) @@ -434,7 +434,7 @@ pub fn (mut p Parser) expr_with_left(left ast.Expr, precedence int, is_stmt_iden } // added 10/2020: LATER this will be parsed as PrefixExpr instead p.warn_with_pos('move infix `$p.tok.kind` operator before new line (if infix intended) or use brackets for a prefix expression', - p.tok.position()) + p.tok.pos()) } // continue on infix expr node = p.infix_expr(node) @@ -448,12 +448,12 @@ pub fn (mut p Parser) expr_with_left(left ast.Expr, precedence int, is_stmt_iden if p.peek_tok.kind in [.rpar, .rsbr] { if !p.inside_ct_if_expr { p.warn_with_pos('`$p.tok.kind` operator can only be used as a statement', - p.peek_tok.position()) + p.peek_tok.pos()) } } if p.tok.kind in [.inc, .dec] && p.prev_tok.line_nr != p.tok.line_nr { p.error_with_pos('$p.tok must be on the same line as the previous token', - p.tok.position()) + p.tok.pos()) } if mut node is ast.IndexExpr { node.recursive_mapset_is_setter(true) @@ -461,7 +461,7 @@ pub fn (mut p Parser) expr_with_left(left ast.Expr, precedence int, is_stmt_iden node = ast.PostfixExpr{ op: p.tok.kind expr: node - pos: p.tok.position() + pos: p.tok.pos() } p.next() // return node // TODO bring back, only allow ++/-- in exprs in translated code @@ -479,7 +479,7 @@ fn (mut p Parser) infix_expr(left ast.Expr) ast.Expr { p.register_auto_import('sync') } precedence := p.tok.precedence() - mut pos := p.tok.position() + mut pos := p.tok.pos() p.next() mut right := ast.empty_expr() prev_expecting_type := p.expecting_type @@ -502,7 +502,7 @@ fn (mut p Parser) infix_expr(left ast.Expr) ast.Expr { } mut or_stmts := []ast.Stmt{} mut or_kind := ast.OrKind.absent - mut or_pos := p.tok.position() + mut or_pos := p.tok.pos() // allow `x := <-ch or {...}` to handle closed channel if op == .arrow { if p.tok.kind == .key_orelse { @@ -513,13 +513,13 @@ fn (mut p Parser) infix_expr(left ast.Expr) ast.Expr { p.scope.register(ast.Var{ name: 'err' typ: ast.error_type - pos: p.tok.position() + pos: p.tok.pos() is_used: true is_stack_obj: true }) or_kind = .block or_stmts = p.parse_block_no_scope(false) - or_pos = or_pos.extend(p.prev_tok.position()) + or_pos = or_pos.extend(p.prev_tok.pos()) p.close_scope() p.inside_or_expr = was_inside_or_expr } @@ -546,17 +546,17 @@ fn (mut p Parser) infix_expr(left ast.Expr) ast.Expr { fn (mut p Parser) go_expr() ast.GoExpr { p.next() - spos := p.tok.position() + spos := p.tok.pos() expr := p.expr(0) call_expr := if expr is ast.CallExpr { expr } else { - p.error_with_pos('expression in `go` must be a function call', expr.position()) + p.error_with_pos('expression in `go` must be a function call', expr.pos()) ast.CallExpr{ scope: p.scope } } - pos := spos.extend(p.prev_tok.position()) + pos := spos.extend(p.prev_tok.pos()) p.register_auto_import('sync.threads') p.table.gostmts++ return ast.GoExpr{ @@ -570,7 +570,7 @@ fn (p &Parser) fileis(s string) bool { } fn (mut p Parser) prefix_expr() ast.Expr { - mut pos := p.tok.position() + mut pos := p.tok.pos() op := p.tok.kind if op == .amp { p.is_amp = true @@ -608,7 +608,7 @@ fn (mut p Parser) prefix_expr() ast.Expr { } mut or_stmts := []ast.Stmt{} mut or_kind := ast.OrKind.absent - mut or_pos := p.tok.position() + mut or_pos := p.tok.pos() // allow `x := <-ch or {...}` to handle closed channel if op == .arrow { if p.tok.kind == .key_orelse { @@ -619,13 +619,13 @@ fn (mut p Parser) prefix_expr() ast.Expr { p.scope.register(ast.Var{ name: 'err' typ: ast.error_type - pos: p.tok.position() + pos: p.tok.pos() is_used: true is_stack_obj: true }) or_kind = .block or_stmts = p.parse_block_no_scope(false) - or_pos = or_pos.extend(p.prev_tok.position()) + or_pos = or_pos.extend(p.prev_tok.pos()) p.close_scope() p.inside_or_expr = was_inside_or_expr } @@ -648,7 +648,7 @@ fn (mut p Parser) prefix_expr() ast.Expr { } } -fn (mut p Parser) recast_as_pointer(mut cast_expr ast.CastExpr, pos token.Position) { +fn (mut p Parser) recast_as_pointer(mut cast_expr ast.CastExpr, pos token.Pos) { cast_expr.typ = cast_expr.typ.ref() cast_expr.typname = p.table.sym(cast_expr.typ).name cast_expr.pos = pos.extend(cast_expr.pos) diff --git a/vlib/v/parser/fn.v b/vlib/v/parser/fn.v index aaefac7c3..216edd2db 100644 --- a/vlib/v/parser/fn.v +++ b/vlib/v/parser/fn.v @@ -8,7 +8,7 @@ import v.token import v.util pub fn (mut p Parser) call_expr(language ast.Language, mod string) ast.CallExpr { - first_pos := p.tok.position() + first_pos := p.tok.pos() mut fn_name := if language == .c { 'C.$p.check_name()' } else if language == .js { @@ -34,16 +34,16 @@ pub fn (mut p Parser) call_expr(language ast.Language, mod string) ast.CallExpr p.expr_mod = '' mut concrete_types := []ast.Type{} - mut concrete_list_pos := p.tok.position() + mut concrete_list_pos := p.tok.pos() if p.tok.kind == .lt { // `foo(10)` p.expr_mod = '' concrete_types = p.parse_concrete_types() - concrete_list_pos = concrete_list_pos.extend(p.prev_tok.position()) + concrete_list_pos = concrete_list_pos.extend(p.prev_tok.pos()) } p.check(.lpar) args := p.call_args() - last_pos := p.tok.position() + last_pos := p.tok.pos() p.check(.rpar) // ! in mutable methods if p.tok.kind == .not { @@ -51,7 +51,7 @@ pub fn (mut p Parser) call_expr(language ast.Language, mod string) ast.CallExpr } mut pos := first_pos.extend(last_pos) mut or_stmts := []ast.Stmt{} // TODO remove unnecessary allocations by just using .absent - mut or_pos := p.tok.position() + mut or_pos := p.tok.pos() if p.tok.kind == .key_orelse { // `foo() or {}`` was_inside_or_expr := p.inside_or_expr @@ -61,12 +61,12 @@ pub fn (mut p Parser) call_expr(language ast.Language, mod string) ast.CallExpr p.scope.register(ast.Var{ name: 'err' typ: ast.error_type - pos: p.tok.position() + pos: p.tok.pos() is_used: true }) or_kind = .block or_stmts = p.parse_block_no_scope(false) - or_pos = or_pos.extend(p.prev_tok.position()) + or_pos = or_pos.extend(p.prev_tok.pos()) p.close_scope() p.inside_or_expr = was_inside_or_expr } @@ -74,7 +74,7 @@ pub fn (mut p Parser) call_expr(language ast.Language, mod string) ast.CallExpr // `foo()?` p.next() if p.inside_defer { - p.error_with_pos('error propagation not allowed inside `defer` blocks', p.prev_tok.position()) + p.error_with_pos('error propagation not allowed inside `defer` blocks', p.prev_tok.pos()) } or_kind = .propagate } @@ -104,7 +104,7 @@ pub fn (mut p Parser) call_expr(language ast.Language, mod string) ast.CallExpr pub fn (mut p Parser) call_args() []ast.CallArg { mut args := []ast.CallArg{} - start_pos := p.tok.position() + start_pos := p.tok.pos() for p.tok.kind != .rpar { if p.tok.kind == .eof { p.error_with_pos('unexpected eof reached, while parsing call argument', start_pos) @@ -117,7 +117,7 @@ pub fn (mut p Parser) call_args() []ast.CallArg { p.next() } mut comments := p.eat_comments() - arg_start_pos := p.tok.position() + arg_start_pos := p.tok.pos() mut array_decompose := false if p.tok.kind == .ellipsis { p.next() @@ -133,14 +133,14 @@ pub fn (mut p Parser) call_args() []ast.CallArg { if array_decompose { expr = ast.ArrayDecompose{ expr: expr - pos: p.tok.position() + pos: p.tok.pos() } } if mut expr is ast.StructInit { expr.pre_comments << comments comments = []ast.Comment{} } - pos := arg_start_pos.extend(p.prev_tok.position()) + pos := arg_start_pos.extend(p.prev_tok.pos()) comments << p.eat_comments() args << ast.CallArg{ is_mut: is_mut @@ -159,16 +159,16 @@ pub fn (mut p Parser) call_args() []ast.CallArg { struct ReceiverParsingInfo { mut: name string - pos token.Position + pos token.Pos typ ast.Type - type_pos token.Position + type_pos token.Pos is_mut bool language ast.Language } fn (mut p Parser) fn_decl() ast.FnDecl { p.top_level_statement_start() - start_pos := p.tok.position() + start_pos := p.tok.pos() mut is_manualfree := p.is_manualfree mut is_deprecated := false @@ -207,7 +207,7 @@ fn (mut p Parser) fn_decl() ast.FnDecl { p.open_scope() // C. || JS. mut language := ast.Language.v - language_tok_pos := p.tok.position() + language_tok_pos := p.tok.pos() if p.tok.kind == .name && p.tok.lit == 'C' { is_unsafe = !is_trusted language = .c @@ -251,7 +251,7 @@ fn (mut p Parser) fn_decl() ast.FnDecl { p.fn_language = language } mut name := '' - name_pos := p.tok.position() + name_pos := p.tok.pos() if p.tok.kind == .name { // TODO high order fn name = if language == .js { p.check_js_name() } else { p.check_name() } @@ -297,14 +297,14 @@ fn (mut p Parser) fn_decl() ast.FnDecl { name = p.tok.kind.str() // op_to_fn_name() if rec.typ == ast.void_type { p.error_with_pos('cannot use operator overloading with normal functions', - p.tok.position()) + p.tok.pos()) } p.next() } else if p.tok.kind in [.ne, .gt, .ge, .le] && p.peek_tok.kind == .lpar { p.error_with_pos('cannot overload `!=`, `>`, `<=` and `>=` as they are auto generated from `==` and`<`', - p.tok.position()) + p.tok.pos()) } else { - p.error_with_pos('expecting method name', p.tok.position()) + p.error_with_pos('expecting method name', p.tok.pos()) return ast.FnDecl{ scope: 0 } @@ -351,18 +351,18 @@ fn (mut p Parser) fn_decl() ast.FnDecl { } } // Return type - mut return_type_pos := p.tok.position() + mut return_type_pos := p.tok.pos() mut return_type := ast.void_type // don't confuse token on the next line: fn decl, [attribute] same_line := p.tok.line_nr == p.prev_tok.line_nr if (p.tok.kind.is_start_of_type() && (same_line || p.tok.kind != .lsbr)) || (same_line && p.tok.kind == .key_fn) { return_type = p.parse_type() - return_type_pos = return_type_pos.extend(p.prev_tok.position()) + return_type_pos = return_type_pos.extend(p.prev_tok.pos()) } mut type_sym_method_idx := 0 no_body := p.tok.kind != .lcbr - end_pos := p.prev_tok.position() + end_pos := p.prev_tok.pos() short_fn_name := name is_main := short_fn_name == 'main' && p.mod == 'main' mut is_test := (short_fn_name.starts_with('test_') || short_fn_name.starts_with('testsuite_')) @@ -470,10 +470,10 @@ fn (mut p Parser) fn_decl() ast.FnDecl { // Body p.cur_fn_name = name mut stmts := []ast.Stmt{} - body_start_pos := p.peek_tok.position() + body_start_pos := p.peek_tok.pos() if p.tok.kind == .lcbr { if language != .v && language != .js { - p.error_with_pos('interop functions cannot have a body', p.tok.position()) + p.error_with_pos('interop functions cannot have a body', p.tok.pos()) } p.inside_fn = true p.inside_unsafe_fn = is_unsafe @@ -546,7 +546,7 @@ fn (mut p Parser) fn_receiver(mut params []ast.Param, mut rec ReceiverParsingInf defer { p.inside_receiver_param = false } - lpar_pos := p.tok.position() + lpar_pos := p.tok.pos() p.next() // ( is_shared := p.tok.kind == .key_shared is_atomic := p.tok.kind == .key_atomic @@ -554,20 +554,20 @@ fn (mut p Parser) fn_receiver(mut params []ast.Param, mut rec ReceiverParsingInf if rec.is_mut { p.next() // `mut` } - rec_start_pos := p.tok.position() + rec_start_pos := p.tok.pos() rec.name = p.check_name() if !rec.is_mut { rec.is_mut = p.tok.kind == .key_mut if rec.is_mut { - ptoken2 := p.peek_token(2) // needed to prevent codegen bug, where .position() expects &Token - p.warn_with_pos('use `(mut f Foo)` instead of `(f mut Foo)`', lpar_pos.extend(ptoken2.position())) + ptoken2 := p.peek_token(2) // needed to prevent codegen bug, where .pos() expects &Token + p.warn_with_pos('use `(mut f Foo)` instead of `(f mut Foo)`', lpar_pos.extend(ptoken2.pos())) } } if p.tok.kind == .key_shared { - ptoken2 := p.peek_token(2) // needed to prevent codegen bug, where .position() expects &Token - p.error_with_pos('use `(shared f Foo)` instead of `(f shared Foo)`', lpar_pos.extend(ptoken2.position())) + ptoken2 := p.peek_token(2) // needed to prevent codegen bug, where .pos() expects &Token + p.error_with_pos('use `(shared f Foo)` instead of `(f shared Foo)`', lpar_pos.extend(ptoken2.pos())) } - rec.pos = rec_start_pos.extend(p.tok.position()) + rec.pos = rec_start_pos.extend(p.tok.pos()) is_amp := p.tok.kind == .amp if p.tok.kind == .name && p.tok.lit == 'JS' { rec.language = ast.Language.js @@ -577,16 +577,16 @@ fn (mut p Parser) fn_receiver(mut params []ast.Param, mut rec ReceiverParsingInf // } // TODO: talk to alex, should mut be parsed with the type like this? // or should it be a property of the arg, like this ptr/mut becomes indistinguishable - rec.type_pos = p.tok.position() + rec.type_pos = p.tok.pos() rec.typ = p.parse_type_with_mut(rec.is_mut) if rec.typ.idx() == 0 { // error is set in parse_type return error('void receiver type') } - rec.type_pos = rec.type_pos.extend(p.prev_tok.position()) + rec.type_pos = rec.type_pos.extend(p.prev_tok.pos()) if is_amp && rec.is_mut { p.error_with_pos('use `(mut f Foo)` or `(f &Foo)` instead of `(mut f &Foo)`', - lpar_pos.extend(p.tok.position())) + lpar_pos.extend(p.tok.pos())) return error('invalid `mut f &Foo`') } if is_shared { @@ -624,11 +624,11 @@ fn (mut p Parser) fn_receiver(mut params []ast.Param, mut rec ReceiverParsingInf } fn (mut p Parser) anon_fn() ast.AnonFn { - pos := p.tok.position() + pos := p.tok.pos() p.check(.key_fn) if p.pref.is_script && p.tok.kind == .name { p.error_with_pos('function declarations in script mode should be before all script statements', - p.tok.position()) + p.tok.pos()) return ast.AnonFn{} } old_inside_defer := p.inside_defer @@ -658,16 +658,16 @@ fn (mut p Parser) anon_fn() ast.AnonFn { } mut same_line := p.tok.line_nr == p.prev_tok.line_nr mut return_type := ast.void_type - mut return_type_pos := p.tok.position() + mut return_type_pos := p.tok.pos() // lpar: multiple return types if same_line { if (p.tok.kind.is_start_of_type() && (same_line || p.tok.kind != .lsbr)) || (same_line && p.tok.kind == .key_fn) { return_type = p.parse_type() - return_type_pos = return_type_pos.extend(p.tok.position()) + return_type_pos = return_type_pos.extend(p.tok.pos()) } else if p.tok.kind != .lcbr { p.error_with_pos('expected return type, not $p.tok for anonymous function', - p.tok.position()) + p.tok.pos()) } } mut stmts := []ast.Stmt{} @@ -675,7 +675,7 @@ fn (mut p Parser) anon_fn() ast.AnonFn { same_line = p.tok.line_nr == p.prev_tok.line_nr if no_body && same_line { p.error_with_pos('unexpected $p.tok after anonymous function signature, expecting `{`', - p.tok.position()) + p.tok.pos()) } mut label_names := []string{} mut func := ast.Fn{ @@ -712,7 +712,7 @@ fn (mut p Parser) anon_fn() ast.AnonFn { is_method: false is_anon: true no_body: no_body - pos: pos.extend(p.prev_tok.position()) + pos: pos.extend(p.prev_tok.pos()) file: p.file_name scope: p.scope label_names: label_names @@ -743,7 +743,7 @@ fn (mut p Parser) fn_args() ([]ast.Param, bool, bool) { mut arg_no := 1 for p.tok.kind != .rpar { if p.tok.kind == .eof { - p.error_with_pos('expecting `)`', p.tok.position()) + p.error_with_pos('expecting `)`', p.tok.pos()) return []ast.Param{}, false, false } is_shared := p.tok.kind == .key_shared @@ -756,7 +756,7 @@ fn (mut p Parser) fn_args() ([]ast.Param, bool, bool) { p.next() is_variadic = true } - pos := p.tok.position() + pos := p.tok.pos() mut arg_type := p.parse_type() if arg_type == 0 { // error is added in parse_type @@ -791,7 +791,7 @@ fn (mut p Parser) fn_args() ([]ast.Param, bool, bool) { arg_type = ast.new_type(p.table.find_or_register_array(arg_type)).set_flag(.variadic) } if p.tok.kind == .eof { - p.error_with_pos('expecting `)`', p.prev_tok.position()) + p.error_with_pos('expecting `)`', p.prev_tok.pos()) return []ast.Param{}, false, false } if p.tok.kind == .comma { @@ -822,7 +822,7 @@ fn (mut p Parser) fn_args() ([]ast.Param, bool, bool) { } else { for p.tok.kind != .rpar { if p.tok.kind == .eof { - p.error_with_pos('expecting `)`', p.tok.position()) + p.error_with_pos('expecting `)`', p.tok.pos()) return []ast.Param{}, false, false } is_shared := p.tok.kind == .key_shared @@ -831,9 +831,9 @@ fn (mut p Parser) fn_args() ([]ast.Param, bool, bool) { if is_mut { p.next() } - mut arg_pos := [p.tok.position()] + mut arg_pos := [p.tok.pos()] mut arg_names := [p.check_name()] - mut type_pos := [p.tok.position()] + mut type_pos := [p.tok.pos()] // `a, b, c int` for p.tok.kind == .comma { if !p.pref.is_fmt { @@ -842,25 +842,25 @@ fn (mut p Parser) fn_args() ([]ast.Param, bool, bool) { 'Use `fn f(x Type, y Type)` instead. You can run `v fmt -w "$p.scanner.file_path"` to automatically fix your code.') } p.next() - arg_pos << p.tok.position() + arg_pos << p.tok.pos() arg_names << p.check_name() - type_pos << p.tok.position() + type_pos << p.tok.pos() } if p.tok.kind == .key_mut { // TODO remove old syntax if !p.pref.is_fmt { - p.warn_with_pos('use `mut f Foo` instead of `f mut Foo`', p.tok.position()) + p.warn_with_pos('use `mut f Foo` instead of `f mut Foo`', p.tok.pos()) } is_mut = true } if p.tok.kind == .key_shared { - p.error_with_pos('use `shared f Foo` instead of `f shared Foo`', p.tok.position()) + p.error_with_pos('use `shared f Foo` instead of `f shared Foo`', p.tok.pos()) } if p.tok.kind == .ellipsis { p.next() is_variadic = true } - pos := p.tok.position() + pos := p.tok.pos() mut typ := p.parse_type() if typ == 0 { // error is added in parse_type @@ -911,7 +911,7 @@ fn (mut p Parser) fn_args() ([]ast.Param, bool, bool) { } } if p.tok.kind == .eof { - p.error_with_pos('expecting `)`', p.prev_tok.position()) + p.error_with_pos('expecting `)`', p.prev_tok.pos()) return []ast.Param{}, false, false } if p.tok.kind != .rpar { @@ -934,11 +934,11 @@ fn (mut p Parser) closure_vars() []ast.Param { if is_mut { p.next() } - var_pos := p.tok.position() + var_pos := p.tok.pos() p.check(.name) var_name := p.prev_tok.lit mut var := p.scope.parent.find_var(var_name) or { - p.error_with_pos('undefined ident: `$var_name`', p.prev_tok.position()) + p.error_with_pos('undefined ident: `$var_name`', p.prev_tok.pos()) continue } var.is_used = true @@ -967,7 +967,7 @@ fn (mut p Parser) closure_vars() []ast.Param { return vars } -fn (mut p Parser) check_fn_mutable_arguments(typ ast.Type, pos token.Position) { +fn (mut p Parser) check_fn_mutable_arguments(typ ast.Type, pos token.Pos) { sym := p.table.sym(typ) if sym.kind in [.array, .array_fixed, .interface_, .map, .placeholder, .struct_, .generic_inst, .sum_type] { @@ -990,7 +990,7 @@ fn (mut p Parser) check_fn_mutable_arguments(typ ast.Type, pos token.Position) { pos) } -fn (mut p Parser) check_fn_shared_arguments(typ ast.Type, pos token.Position) { +fn (mut p Parser) check_fn_shared_arguments(typ ast.Type, pos token.Pos) { sym := p.table.sym(typ) if sym.kind !in [.array, .struct_, .map, .placeholder] && !typ.is_ptr() { p.error_with_pos('shared arguments are only allowed for arrays, maps, and structs\n', @@ -998,7 +998,7 @@ fn (mut p Parser) check_fn_shared_arguments(typ ast.Type, pos token.Position) { } } -fn (mut p Parser) check_fn_atomic_arguments(typ ast.Type, pos token.Position) { +fn (mut p Parser) check_fn_atomic_arguments(typ ast.Type, pos token.Pos) { sym := p.table.sym(typ) if sym.kind !in [.u32, .int, .u64] { p.error_with_pos('atomic arguments are only allowed for 32/64 bit integers\n' + diff --git a/vlib/v/parser/for.v b/vlib/v/parser/for.v index 137088e5f..d9a2efb22 100644 --- a/vlib/v/parser/for.v +++ b/vlib/v/parser/for.v @@ -7,7 +7,7 @@ import v.ast fn (mut p Parser) for_stmt() ast.Stmt { p.check(.key_for) - mut pos := p.tok.position() + mut pos := p.tok.pos() p.open_scope() p.inside_for = true if p.tok.kind == .key_match { @@ -86,12 +86,12 @@ fn (mut p Parser) for_stmt() ast.Stmt { || (p.tok.kind == .key_mut && p.peek_token(2).kind in [.key_in, .comma]) { // `for i in vals`, `for i in start .. end`, `for mut user in users`, `for i, mut user in users` mut val_is_mut := p.tok.kind == .key_mut - mut_pos := p.tok.position() + mut_pos := p.tok.pos() if val_is_mut { p.next() } - key_var_pos := p.tok.position() - mut val_var_pos := p.tok.position() + key_var_pos := p.tok.pos() + mut val_var_pos := p.tok.pos() mut key_var_name := '' mut val_var_name := p.check_name() if p.tok.kind == .comma { @@ -105,7 +105,7 @@ fn (mut p Parser) for_stmt() ast.Stmt { val_is_mut = true } key_var_name = val_var_name - val_var_pos = p.tok.position() + val_var_pos = p.tok.pos() val_var_name = p.check_name() if key_var_name == val_var_name && key_var_name != '_' { return p.error_with_pos('key and value in a for loop cannot be the same', diff --git a/vlib/v/parser/if_match.v b/vlib/v/parser/if_match.v index 63a8ae4ee..ad4ce01a9 100644 --- a/vlib/v/parser/if_match.v +++ b/vlib/v/parser/if_match.v @@ -15,11 +15,11 @@ fn (mut p Parser) if_expr(is_comptime bool) ast.IfExpr { } p.inside_if_expr = true is_expr := p.prev_tok.kind == .key_return - mut pos := p.tok.position() + mut pos := p.tok.pos() if is_comptime { p.inside_ct_if_expr = true p.next() // `$` - pos = p.prev_tok.position().extend(p.tok.position()) + pos = p.prev_tok.pos().extend(p.tok.pos()) } mut branches := []ast.IfBranch{} mut has_else := false @@ -27,11 +27,7 @@ fn (mut p Parser) if_expr(is_comptime bool) ast.IfExpr { mut prev_guard := false for p.tok.kind in [.key_if, .key_else] { p.inside_if = true - start_pos := if is_comptime { - p.prev_tok.position().extend(p.tok.position()) - } else { - p.tok.position() - } + start_pos := if is_comptime { p.prev_tok.pos().extend(p.tok.pos()) } else { p.tok.pos() } if p.tok.kind == .key_else { comments << p.eat_comments() p.check(.key_else) @@ -44,15 +40,15 @@ fn (mut p Parser) if_expr(is_comptime bool) ast.IfExpr { // else { has_else = true p.inside_if = false - end_pos := p.prev_tok.position() - body_pos := p.tok.position() + end_pos := p.prev_tok.pos() + body_pos := p.tok.pos() p.open_scope() // only declare `err` if previous branch was an `if` guard if prev_guard { p.scope.register(ast.Var{ name: 'err' typ: ast.error_type - pos: p.tok.position() + pos: p.tok.pos() is_used: true is_stack_obj: true }) @@ -60,7 +56,7 @@ fn (mut p Parser) if_expr(is_comptime bool) ast.IfExpr { branches << ast.IfBranch{ stmts: p.parse_block_no_scope(false) pos: start_pos.extend(end_pos) - body_pos: body_pos.extend(p.tok.position()) + body_pos: body_pos.extend(p.tok.pos()) comments: comments scope: p.scope } @@ -95,7 +91,7 @@ fn (mut p Parser) if_expr(is_comptime bool) ast.IfExpr { p.next() } var.is_mut = is_mut - var.pos = p.tok.position() + var.pos = p.tok.pos() var.name = p.check_name() if p.scope.known_var(var.name) { @@ -132,8 +128,8 @@ fn (mut p Parser) if_expr(is_comptime bool) ast.IfExpr { p.comptime_if_cond = false } comments << p.eat_comments() - end_pos := p.prev_tok.position() - body_pos := p.tok.position() + end_pos := p.prev_tok.pos() + body_pos := p.tok.pos() p.inside_if = false p.open_scope() stmts := p.parse_block_no_scope(false) @@ -141,7 +137,7 @@ fn (mut p Parser) if_expr(is_comptime bool) ast.IfExpr { cond: cond stmts: stmts pos: start_pos.extend(end_pos) - body_pos: body_pos.extend(p.prev_tok.position()) + body_pos: body_pos.extend(p.prev_tok.pos()) comments: comments scope: p.scope } @@ -178,7 +174,7 @@ fn (mut p Parser) if_expr(is_comptime bool) ast.IfExpr { } fn (mut p Parser) match_expr() ast.MatchExpr { - match_first_pos := p.tok.position() + match_first_pos := p.tok.pos() p.inside_match = true p.check(.key_match) mut is_sum_type := false @@ -191,7 +187,7 @@ fn (mut p Parser) match_expr() ast.MatchExpr { comments := p.eat_comments() // comments before the first branch mut branches := []ast.MatchBranch{} for p.tok.kind != .eof { - branch_first_pos := p.tok.position() + branch_first_pos := p.tok.pos() mut exprs := []ast.Expr{} mut ecmnts := [][]ast.Comment{} p.open_scope() @@ -212,7 +208,7 @@ fn (mut p Parser) match_expr() ast.MatchExpr { types << parsed_type exprs << ast.TypeNode{ typ: parsed_type - pos: p.prev_tok.position() + pos: p.prev_tok.pos() } if p.tok.kind != .comma { break @@ -237,7 +233,7 @@ fn (mut p Parser) match_expr() ast.MatchExpr { p.inside_match_case = false if p.tok.kind == .dotdot { p.error_with_pos('match only supports inclusive (`...`) ranges, not exclusive (`..`)', - p.tok.position()) + p.tok.pos()) return ast.MatchExpr{} } else if p.tok.kind == .ellipsis { p.next() @@ -247,7 +243,7 @@ fn (mut p Parser) match_expr() ast.MatchExpr { high: expr2 has_low: true has_high: true - pos: p.tok.position() + pos: p.tok.pos() } } else { exprs << expr @@ -267,7 +263,7 @@ fn (mut p Parser) match_expr() ast.MatchExpr { } } } - branch_last_pos := p.prev_tok.position() + branch_last_pos := p.prev_tok.pos() // p.warn('match block') p.inside_match_body = true stmts := p.parse_block_no_scope(false) @@ -275,7 +271,7 @@ fn (mut p Parser) match_expr() ast.MatchExpr { p.close_scope() p.inside_match_body = false pos := branch_first_pos.extend_with_last_line(branch_last_pos, p.prev_tok.line_nr) - branch_pos := branch_first_pos.extend_with_last_line(p.tok.position(), p.tok.line_nr) + branch_pos := branch_first_pos.extend_with_last_line(p.tok.pos(), p.tok.line_nr) post_comments := p.eat_comments() branches << ast.MatchBranch{ exprs: exprs @@ -294,8 +290,8 @@ fn (mut p Parser) match_expr() ast.MatchExpr { break } } - match_last_pos := p.tok.position() - mut pos := token.Position{ + match_last_pos := p.tok.pos() + mut pos := token.Pos{ line_nr: match_first_pos.line_nr pos: match_first_pos.pos len: match_last_pos.pos - match_first_pos.pos + match_last_pos.len @@ -316,7 +312,7 @@ fn (mut p Parser) match_expr() ast.MatchExpr { } fn (mut p Parser) select_expr() ast.SelectExpr { - match_first_pos := p.tok.position() + match_first_pos := p.tok.pos() p.check(.key_select) no_lcbr := p.tok.kind != .lcbr if !no_lcbr { @@ -326,7 +322,7 @@ fn (mut p Parser) select_expr() ast.SelectExpr { mut has_else := false mut has_timeout := false for { - branch_first_pos := p.tok.position() + branch_first_pos := p.tok.pos() comment := p.check_comment() // comment before {} p.open_scope() // final else @@ -336,12 +332,12 @@ fn (mut p Parser) select_expr() ast.SelectExpr { if p.tok.kind == .key_else { if has_timeout { p.error_with_pos('timeout `> t` and `else` are mutually exclusive `select` keys', - p.tok.position()) + p.tok.pos()) return ast.SelectExpr{} } if has_else { p.error_with_pos('at most one `else` branch allowed in `select` block', - p.tok.position()) + p.tok.pos()) return ast.SelectExpr{} } is_else = true @@ -352,7 +348,7 @@ fn (mut p Parser) select_expr() ast.SelectExpr { if p.tok.kind == .gt { is_gt = true p.note_with_pos('`>` is deprecated and will soon be forbidden - just state the timeout in nanoseconds', - p.tok.position()) + p.tok.pos()) p.next() } p.inside_match = true @@ -367,7 +363,7 @@ fn (mut p Parser) select_expr() ast.SelectExpr { } else { stmt = ast.ExprStmt{ expr: exprs[0] - pos: exprs[0].position() + pos: exprs[0].pos() comments: [comment] is_expr: true } @@ -422,7 +418,7 @@ fn (mut p Parser) select_expr() ast.SelectExpr { } else { p.error_with_pos('select key: receive expression expected', - stmt.right[0].position()) + stmt.right[0].pos()) return ast.SelectExpr{} } } @@ -434,12 +430,12 @@ fn (mut p Parser) select_expr() ast.SelectExpr { } } } - branch_last_pos := p.tok.position() + branch_last_pos := p.tok.pos() p.inside_match_body = true stmts := p.parse_block_no_scope(false) p.close_scope() p.inside_match_body = false - mut pos := token.Position{ + mut pos := token.Pos{ line_nr: branch_first_pos.line_nr pos: branch_first_pos.pos len: branch_last_pos.pos - branch_first_pos.pos + branch_last_pos.len @@ -463,8 +459,8 @@ fn (mut p Parser) select_expr() ast.SelectExpr { break } } - match_last_pos := p.tok.position() - pos := token.Position{ + match_last_pos := p.tok.pos() + pos := token.Pos{ line_nr: match_first_pos.line_nr pos: match_first_pos.pos len: match_last_pos.pos - match_first_pos.pos + match_last_pos.len @@ -475,7 +471,7 @@ fn (mut p Parser) select_expr() ast.SelectExpr { } return ast.SelectExpr{ branches: branches - pos: pos.extend_with_last_line(p.prev_tok.position(), p.prev_tok.line_nr) + pos: pos.extend_with_last_line(p.prev_tok.pos(), p.prev_tok.line_nr) has_exception: has_else || has_timeout } } diff --git a/vlib/v/parser/lock.v b/vlib/v/parser/lock.v index 9ccb63922..11a95534d 100644 --- a/vlib/v/parser/lock.v +++ b/vlib/v/parser/lock.v @@ -6,12 +6,12 @@ import v.ast // parse `x` or `x.y.z` - no index, no struct literals (`{` starts lock block) fn (mut p Parser) lockable() ast.Expr { mut names := []string{} - mut positions := []token.Position{} - mut pos := p.tok.position() + mut positions := []token.Pos{} + mut pos := p.tok.pos() for { if p.tok.kind != .name { p.error_with_pos('unexpected `$p.tok.lit` (field/variable name expected)', - p.tok.position()) + p.tok.pos()) } names << p.tok.lit positions << pos @@ -20,7 +20,7 @@ fn (mut p Parser) lockable() ast.Expr { break } p.next() - pos.extend(p.tok.position()) + pos.extend(p.tok.pos()) } mut expr := ast.Expr(ast.Ident{ language: ast.Language.v @@ -67,14 +67,14 @@ fn (mut p Parser) lock_expr() ast.LockExpr { // TODO Handle aliasing sync p.register_auto_import('sync') p.open_scope() - mut pos := p.tok.position() + mut pos := p.tok.pos() mut lockeds := []ast.Expr{} mut comments := []ast.Comment{} mut is_rlocked := []bool{} for { is_rlock := p.tok.kind == .key_rlock if !is_rlock && p.tok.kind != .key_lock { - p.error_with_pos('unexpected `$p.tok`, expected `lock` or `rlock`', p.tok.position()) + p.error_with_pos('unexpected `$p.tok`, expected `lock` or `rlock`', p.tok.pos()) } p.next() if p.tok.kind == .lcbr { @@ -85,7 +85,7 @@ fn (mut p Parser) lock_expr() ast.LockExpr { for e in exprs { if !e.is_lockable() { p.error_with_pos('`$e` cannot be locked - only `x` or `x.y` are supported', - e.position()) + e.pos()) } lockeds << e is_rlocked << is_rlock diff --git a/vlib/v/parser/module.v b/vlib/v/parser/module.v index db082d115..f6f37110b 100644 --- a/vlib/v/parser/module.v +++ b/vlib/v/parser/module.v @@ -36,7 +36,7 @@ fn (mut p Parser) register_auto_import(alias string) { p.imports[alias] = alias p.table.imports << alias node := ast.Import{ - pos: p.tok.position() + pos: p.tok.pos() mod: alias alias: alias } diff --git a/vlib/v/parser/parse_type.v b/vlib/v/parser/parse_type.v index cd487b0d7..269a284c0 100644 --- a/vlib/v/parser/parse_type.v +++ b/vlib/v/parser/parse_type.v @@ -60,7 +60,7 @@ pub fn (mut p Parser) parse_array_type(expecting token.Kind) ast.Type { } else { p.error_with_pos('fixed array size cannot use non-constant value', - size_expr.position()) + size_expr.pos()) } } } @@ -71,7 +71,7 @@ pub fn (mut p Parser) parse_array_type(expecting token.Kind) ast.Type { return 0 } if fixed_size <= 0 { - p.error_with_pos('fixed size cannot be zero or negative', size_expr.position()) + p.error_with_pos('fixed size cannot be zero or negative', size_expr.pos()) } // sym := p.table.sym(elem_type) idx := p.table.find_or_register_array_fixed(elem_type, fixed_size, size_expr) @@ -128,7 +128,7 @@ pub fn (mut p Parser) parse_map_type() ast.Type { } s := p.table.type_to_str(key_type) p.error_with_pos('maps only support string, integer, float, rune, enum or voidptr keys for now (not `$s`)', - p.tok.position()) + p.tok.pos()) return 0 } p.check(.rsbr) @@ -138,7 +138,7 @@ pub fn (mut p Parser) parse_map_type() ast.Type { return 0 } if value_type.idx() == ast.void_type_idx { - p.error_with_pos('map value type cannot be void', p.tok.position()) + p.error_with_pos('map value type cannot be void', p.tok.pos()) return 0 } idx := p.table.find_or_register_map(key_type, value_type) @@ -238,14 +238,14 @@ pub fn (mut p Parser) parse_fn_type(name string) ast.Type { } } mut return_type := ast.void_type - mut return_type_pos := token.Position{} + mut return_type_pos := token.Pos{} if p.tok.line_nr == line_nr && p.tok.kind.is_start_of_type() && !p.is_attributes() { - return_type_pos = p.tok.position() + return_type_pos = p.tok.pos() return_type = p.parse_type() if return_type.has_flag(.generic) { has_generic = true } - return_type_pos = return_type_pos.extend(p.prev_tok.position()) + return_type_pos = return_type_pos.extend(p.prev_tok.pos()) } func := ast.Fn{ name: name @@ -335,11 +335,11 @@ pub fn (mut p Parser) parse_sum_type_variants() []ast.TypeNode { } mut types := []ast.TypeNode{} for { - type_start_pos := p.tok.position() + type_start_pos := p.tok.pos() typ := p.parse_type() // TODO: needs to be its own var, otherwise TCC fails because of a known stack error prev_tok := p.prev_tok - type_end_pos := prev_tok.position() + type_end_pos := prev_tok.pos() type_pos := type_start_pos.extend(type_end_pos) types << ast.TypeNode{ typ: typ @@ -356,7 +356,7 @@ pub fn (mut p Parser) parse_sum_type_variants() []ast.TypeNode { pub fn (mut p Parser) parse_type() ast.Type { // optional mut is_optional := false - optional_pos := p.tok.position() + optional_pos := p.tok.pos() if p.tok.kind == .question { line_nr := p.tok.line_nr p.next() @@ -394,7 +394,7 @@ pub fn (mut p Parser) parse_type() ast.Type { mut typ := ast.void_type is_array := p.tok.kind == .lsbr if p.tok.kind != .lcbr { - pos := p.tok.position() + pos := p.tok.pos() typ = p.parse_any_type(language, nr_muls > 0, true) if typ.idx() == 0 { // error is set in parse_type @@ -406,7 +406,7 @@ pub fn (mut p Parser) parse_type() ast.Type { } sym := p.table.sym(typ) if is_optional && sym.info is ast.SumType && (sym.info as ast.SumType).is_anon { - p.error_with_pos('an inline sum type cannot be optional', optional_pos.extend(p.prev_tok.position())) + p.error_with_pos('an inline sum type cannot be optional', optional_pos.extend(p.prev_tok.pos())) } } if is_optional { @@ -439,12 +439,12 @@ pub fn (mut p Parser) parse_any_type(language ast.Language, is_ptr bool, check_d } else if p.peek_tok.kind == .dot && check_dot { // `module.Type` mut mod := name - mut mod_pos := p.tok.position() + mut mod_pos := p.tok.pos() p.next() p.check(.dot) mut mod_last_part := mod for p.peek_tok.kind == .dot { - mod_pos = mod_pos.extend(p.tok.position()) + mod_pos = mod_pos.extend(p.tok.pos()) mod_last_part = p.tok.lit mod += '.$mod_last_part' p.next() @@ -615,7 +615,7 @@ pub fn (mut p Parser) parse_generic_type(name string) ast.Type { pub fn (mut p Parser) parse_generic_inst_type(name string) ast.Type { mut bs_name := name mut bs_cname := name - start_pos := p.tok.position() + start_pos := p.tok.pos() p.next() p.inside_generic_params = true bs_name += '<' @@ -638,7 +638,7 @@ pub fn (mut p Parser) parse_generic_inst_type(name string) ast.Type { bs_name += ', ' bs_cname += '_' } - concrete_types_pos := start_pos.extend(p.tok.position()) + concrete_types_pos := start_pos.extend(p.tok.pos()) p.check(.gt) p.inside_generic_params = false bs_name += '>' diff --git a/vlib/v/parser/parser.v b/vlib/v/parser/parser.v index 6e52da76a..958b22e6e 100644 --- a/vlib/v/parser/parser.v +++ b/vlib/v/parser/parser.v @@ -497,7 +497,7 @@ pub fn (mut p Parser) parse_block_no_scope(is_top_level bool) []ast.Stmt { } if count > 1000000 { p.error_with_pos('parsed over $count statements from fn $p.cur_fn_name, the parser is probably stuck', - p.tok.position()) + p.tok.pos()) return [] } } @@ -558,7 +558,7 @@ fn (mut p Parser) check_name() string { [if trace_parser ?] fn (p &Parser) trace_parser(label string) { - eprintln('parsing: ${p.file_name:-30}|tok.pos: ${p.tok.position().line_str():-39}|tok.kind: ${p.tok.kind:-10}|tok.lit: ${p.tok.lit:-10}|$label') + eprintln('parsing: ${p.file_name:-30}|tok.pos: ${p.tok.pos().line_str():-39}|tok.kind: ${p.tok.kind:-10}|tok.lit: ${p.tok.lit:-10}|$label') } pub fn (mut p Parser) top_stmt() ast.Stmt { @@ -603,7 +603,7 @@ pub fn (mut p Parser) top_stmt() ast.Stmt { } .key_import { p.error_with_pos('`import x` can only be declared at the beginning of the file', - p.tok.position()) + p.tok.pos()) return p.import_stmt() } .key_global { @@ -684,7 +684,7 @@ pub fn (mut p Parser) check_comment() ast.Comment { } pub fn (mut p Parser) comment() ast.Comment { - mut pos := p.tok.position() + mut pos := p.tok.pos() text := p.tok.lit num_newlines := text.count('\n') is_multi := num_newlines > 0 @@ -739,7 +739,7 @@ pub fn (mut p Parser) stmt(is_top_level bool) ast.Stmt { p.is_stmt_ident = p.tok.kind == .name match p.tok.kind { .lcbr { - mut pos := p.tok.position() + mut pos := p.tok.pos() stmts := p.parse_block() pos.last_line = p.prev_tok.line_nr return ast.Block{ @@ -749,12 +749,12 @@ pub fn (mut p Parser) stmt(is_top_level bool) ast.Stmt { } .key_assert { p.next() - mut pos := p.tok.position() + mut pos := p.tok.pos() expr := p.expr(0) pos.update_last_line(p.prev_tok.line_nr) return ast.AssertStmt{ expr: expr - pos: pos.extend(p.tok.position()) + pos: pos.extend(p.tok.pos()) is_used: p.inside_test_file || !p.pref.is_prod } } @@ -767,7 +767,7 @@ pub fn (mut p Parser) stmt(is_top_level bool) ast.Stmt { } if p.peek_tok.kind == .colon { // `label:` - spos := p.tok.position() + spos := p.tok.pos() name := p.check_name() if name in p.label_names { p.error_with_pos('duplicate label `$name`', spos) @@ -775,7 +775,7 @@ pub fn (mut p Parser) stmt(is_top_level bool) ast.Stmt { p.label_names << name p.next() if p.tok.kind == .key_for { - for_pos := p.tok.position() + for_pos := p.tok.pos() mut stmt := p.stmt(is_top_level) match mut stmt { ast.ForStmt { @@ -797,13 +797,13 @@ pub fn (mut p Parser) stmt(is_top_level bool) ast.Stmt { } return ast.GotoLabel{ name: name - pos: spos.extend(p.tok.position()) + pos: spos.extend(p.tok.pos()) } } else if p.peek_tok.kind == .name { - return p.error_with_pos('unexpected name `$p.tok.lit`', p.tok.position()) + return p.error_with_pos('unexpected name `$p.tok.lit`', p.tok.pos()) } else if !p.inside_if_expr && !p.inside_match_body && !p.inside_or_expr && p.peek_tok.kind in [.rcbr, .eof] && !p.mark_var_as_used(p.tok.lit) { - return p.error_with_pos('`$p.tok.lit` evaluated but not used', p.tok.position()) + return p.error_with_pos('`$p.tok.lit` evaluated but not used', p.tok.pos()) } return p.parse_multi_expr(is_top_level) } @@ -812,7 +812,7 @@ pub fn (mut p Parser) stmt(is_top_level bool) ast.Stmt { } .key_return { if p.inside_defer { - return p.error_with_pos('`return` not allowed inside `defer` block', p.tok.position()) + return p.error_with_pos('`return` not allowed inside `defer` block', p.tok.pos()) } else { return p.return_stmt() } @@ -820,7 +820,7 @@ pub fn (mut p Parser) stmt(is_top_level bool) ast.Stmt { .dollar { match p.peek_tok.kind { .key_if { - mut pos := p.tok.position() + mut pos := p.tok.pos() expr := p.if_expr(true) pos.update_last_line(p.prev_tok.line_nr) return ast.ExprStmt{ @@ -832,7 +832,7 @@ pub fn (mut p Parser) stmt(is_top_level bool) ast.Stmt { return p.comptime_for() } .name { - mut pos := p.tok.position() + mut pos := p.tok.pos() expr := p.comptime_call() pos.update_last_line(p.prev_tok.line_nr) return ast.ExprStmt{ @@ -841,7 +841,7 @@ pub fn (mut p Parser) stmt(is_top_level bool) ast.Stmt { } } else { - return p.error_with_pos('unexpected \$', p.tok.position()) + return p.error_with_pos('unexpected \$', p.tok.pos()) } } } @@ -856,7 +856,7 @@ pub fn (mut p Parser) stmt(is_top_level bool) ast.Stmt { return ast.BranchStmt{ kind: tok.kind label: label - pos: tok.position() + pos: tok.pos() } } .key_unsafe { @@ -867,10 +867,10 @@ pub fn (mut p Parser) stmt(is_top_level bool) ast.Stmt { } .key_defer { if p.inside_defer { - return p.error_with_pos('`defer` blocks cannot be nested', p.tok.position()) + return p.error_with_pos('`defer` blocks cannot be nested', p.tok.pos()) } else { p.next() - spos := p.tok.position() + spos := p.tok.pos() p.inside_defer = true p.defer_vars = []ast.Ident{} stmts := p.parse_block() @@ -878,7 +878,7 @@ pub fn (mut p Parser) stmt(is_top_level bool) ast.Stmt { return ast.DeferStmt{ stmts: stmts defer_vars: p.defer_vars.clone() - pos: spos.extend_with_last_line(p.tok.position(), p.prev_tok.line_nr) + pos: spos.extend_with_last_line(p.tok.pos(), p.prev_tok.line_nr) } } } @@ -891,7 +891,7 @@ pub fn (mut p Parser) stmt(is_top_level bool) ast.Stmt { } .key_goto { p.next() - spos := p.tok.position() + spos := p.tok.pos() name := p.check_name() return ast.GotoStmt{ name: name @@ -900,7 +900,7 @@ pub fn (mut p Parser) stmt(is_top_level bool) ast.Stmt { } .key_const { return p.error_with_pos('const can only be defined at the top level (outside of functions)', - p.tok.position()) + p.tok.pos()) } .key_asm { return p.asm_stmt(false) @@ -925,7 +925,7 @@ fn (mut p Parser) asm_stmt(is_top_level bool) ast.AsmStmt { } mut backup_scope := p.scope - pos := p.tok.position() + pos := p.tok.pos() p.check(.key_asm) mut arch := pref.arch_from_string(p.tok.lit) or { pref.Arch._auto } @@ -952,7 +952,7 @@ fn (mut p Parser) asm_stmt(is_top_level bool) ast.AsmStmt { p.next() } - p.check_for_impure_v(ast.pref_arch_to_table_language(arch), p.prev_tok.position()) + p.check_for_impure_v(ast.pref_arch_to_table_language(arch), p.prev_tok.pos()) p.check(.lcbr) p.scope = &ast.Scope{ @@ -968,7 +968,7 @@ fn (mut p Parser) asm_stmt(is_top_level bool) ast.AsmStmt { // arm: https://developer.arm.com/documentation/dui0068/b/arm-instruction-reference mut templates := []ast.AsmTemplate{} for p.tok.kind !in [.semicolon, .rcbr] { - template_pos := p.tok.position() + template_pos := p.tok.pos() mut name := '' if p.tok.kind == .name && arch == .amd64 && p.tok.lit in ['rex', 'vex', 'xop'] { name += p.tok.lit @@ -1008,7 +1008,7 @@ fn (mut p Parser) asm_stmt(is_top_level bool) ast.AsmStmt { mut args := []ast.AsmArg{} if p.tok.line_nr == p.prev_tok.line_nr { args_loop: for { - if p.prev_tok.position().line_nr < p.tok.position().line_nr { + if p.prev_tok.pos().line_nr < p.tok.pos().line_nr { break } mut segment := '' @@ -1049,7 +1049,7 @@ fn (mut p Parser) asm_stmt(is_top_level bool) ast.AsmStmt { .chartoken { args << ast.CharLiteral{ val: p.tok.lit - pos: p.tok.position() + pos: p.tok.pos() } p.next() } @@ -1080,7 +1080,7 @@ fn (mut p Parser) asm_stmt(is_top_level bool) ast.AsmStmt { break } } - // if p.prev_tok.position().line_nr < p.tok.position().line_nr { + // if p.prev_tok.pos().line_nr < p.tok.pos().line_nr { // break // } } @@ -1099,7 +1099,7 @@ fn (mut p Parser) asm_stmt(is_top_level bool) ast.AsmStmt { comments: comments is_label: is_label is_directive: is_directive - pos: template_pos.extend(p.tok.position()) + pos: template_pos.extend(p.tok.pos()) } } mut scope := p.scope @@ -1166,7 +1166,7 @@ fn (mut p Parser) asm_stmt(is_top_level bool) ast.AsmStmt { output: output input: input clobbered: clobbered - pos: pos.extend(p.prev_tok.position()) + pos: pos.extend(p.prev_tok.pos()) is_basic: is_top_level || output.len + input.len + clobbered.len == 0 scope: scope global_labels: global_labels @@ -1192,13 +1192,13 @@ fn (mut p Parser) reg_or_alias() ast.AsmArg { } else { return ast.AsmAlias{ name: p.prev_tok.lit - pos: p.prev_tok.position() + pos: p.prev_tok.pos() } } } // fn (mut p Parser) asm_addressing() ast.AsmAddressing { -// pos := p.tok.position() +// pos := p.tok.pos() // p.check(.lsbr) // unknown_addressing_mode := 'unknown addressing mode. supported ones are [displacement], [base], [base + displacement] [index ∗ scale + displacement], [base + index ∗ scale + displacement], [base + index + displacement] [rip + displacement]' // mut mode := ast.AddressingMode.invalid @@ -1283,12 +1283,12 @@ fn (mut p Parser) reg_or_alias() ast.AsmArg { // index: index // scale: scale // mode: mode -// pos: pos.extend(p.prev_tok.position()) +// pos: pos.extend(p.prev_tok.pos()) // } // } fn (mut p Parser) asm_addressing() ast.AsmAddressing { - pos := p.tok.position() + pos := p.tok.pos() p.check(.lsbr) unknown_addressing_mode := 'unknown addressing mode. supported ones are [displacement], [base], [base + displacement], [index ∗ scale + displacement], [base + index ∗ scale + displacement], [base + index + displacement], [rip + displacement]' // this mess used to look much cleaner before the removal of peek_tok2/3, see above code for cleaner version @@ -1299,7 +1299,7 @@ fn (mut p Parser) asm_addressing() ast.AsmAddressing { return ast.AsmAddressing{ mode: .base base: base - pos: pos.extend(p.prev_tok.position()) + pos: pos.extend(p.prev_tok.pos()) } } else if p.tok.kind == .number { displacement := if p.tok.kind == .name { @@ -1307,7 +1307,7 @@ fn (mut p Parser) asm_addressing() ast.AsmAddressing { } else { x := ast.AsmArg(ast.AsmDisp{ val: p.tok.lit - pos: p.tok.position() + pos: p.tok.pos() }) p.check(.number) x @@ -1316,7 +1316,7 @@ fn (mut p Parser) asm_addressing() ast.AsmAddressing { return ast.AsmAddressing{ mode: .displacement displacement: displacement - pos: pos.extend(p.prev_tok.position()) + pos: pos.extend(p.prev_tok.pos()) } } else { p.error(unknown_addressing_mode) @@ -1332,7 +1332,7 @@ fn (mut p Parser) asm_addressing() ast.AsmAddressing { } else { x := ast.AsmArg(ast.AsmDisp{ val: p.tok.lit - pos: p.tok.position() + pos: p.tok.pos() }) p.check(.number) x @@ -1342,7 +1342,7 @@ fn (mut p Parser) asm_addressing() ast.AsmAddressing { mode: .rip_plus_displacement base: rip displacement: displacement - pos: pos.extend(p.prev_tok.position()) + pos: pos.extend(p.prev_tok.pos()) } } base := p.reg_or_alias() @@ -1354,7 +1354,7 @@ fn (mut p Parser) asm_addressing() ast.AsmAddressing { } else { x := ast.AsmArg(ast.AsmDisp{ val: p.tok.lit - pos: p.tok.position() + pos: p.tok.pos() }) p.check(.number) x @@ -1364,7 +1364,7 @@ fn (mut p Parser) asm_addressing() ast.AsmAddressing { mode: .base_plus_displacement base: base displacement: displacement - pos: pos.extend(p.prev_tok.position()) + pos: pos.extend(p.prev_tok.pos()) } } else { p.error(unknown_addressing_mode) @@ -1381,7 +1381,7 @@ fn (mut p Parser) asm_addressing() ast.AsmAddressing { } else { x := ast.AsmArg(ast.AsmDisp{ val: p.tok.lit - pos: p.tok.position() + pos: p.tok.pos() }) p.check(.number) x @@ -1393,7 +1393,7 @@ fn (mut p Parser) asm_addressing() ast.AsmAddressing { index: index scale: scale displacement: displacement - pos: pos.extend(p.prev_tok.position()) + pos: pos.extend(p.prev_tok.pos()) } } else if p.tok.kind == .plus { p.next() @@ -1402,7 +1402,7 @@ fn (mut p Parser) asm_addressing() ast.AsmAddressing { } else { x := ast.AsmArg(ast.AsmDisp{ val: p.tok.lit - pos: p.tok.position() + pos: p.tok.pos() }) p.check(.number) x @@ -1413,7 +1413,7 @@ fn (mut p Parser) asm_addressing() ast.AsmAddressing { base: base index: index displacement: displacement - pos: pos.extend(p.prev_tok.position()) + pos: pos.extend(p.prev_tok.pos()) } } } @@ -1428,7 +1428,7 @@ fn (mut p Parser) asm_addressing() ast.AsmAddressing { } else { x := ast.AsmArg(ast.AsmDisp{ val: p.tok.lit - pos: p.tok.position() + pos: p.tok.pos() }) p.check(.number) x @@ -1439,7 +1439,7 @@ fn (mut p Parser) asm_addressing() ast.AsmAddressing { index: index scale: scale displacement: displacement - pos: pos.extend(p.prev_tok.position()) + pos: pos.extend(p.prev_tok.pos()) } } p.error(unknown_addressing_mode) @@ -1453,7 +1453,7 @@ fn (mut p Parser) asm_ios(output bool) []ast.AsmIO { return [] } for { - pos := p.tok.position() + pos := p.tok.pos() mut constraint := '' if p.tok.kind == .lpar { @@ -1511,7 +1511,7 @@ fn (mut p Parser) asm_ios(output bool) []ast.AsmIO { constraint: constraint expr: expr comments: comments - pos: pos.extend(p.prev_tok.position()) + pos: pos.extend(p.prev_tok.pos()) } p.n_asm++ if p.tok.kind in [.semicolon, .rcbr] { @@ -1566,16 +1566,16 @@ fn (mut p Parser) attributes() { p.check(.lsbr) mut has_ctdefine := false for p.tok.kind != .rsbr { - start_pos := p.tok.position() + start_pos := p.tok.pos() attr := p.parse_attr() if p.attrs.contains(attr.name) && attr.name != 'wasm_export' { - p.error_with_pos('duplicate attribute `$attr.name`', start_pos.extend(p.prev_tok.position())) + p.error_with_pos('duplicate attribute `$attr.name`', start_pos.extend(p.prev_tok.pos())) return } if attr.kind == .comptime_define { if has_ctdefine { p.error_with_pos('only one `[if flag]` may be applied at a time `$attr.name`', - start_pos.extend(p.prev_tok.position())) + start_pos.extend(p.prev_tok.pos())) return } else { has_ctdefine = true @@ -1593,20 +1593,20 @@ fn (mut p Parser) attributes() { p.next() } if p.attrs.len == 0 { - p.error_with_pos('attributes cannot be empty', p.prev_tok.position().extend(p.tok.position())) + p.error_with_pos('attributes cannot be empty', p.prev_tok.pos().extend(p.tok.pos())) return } } fn (mut p Parser) parse_attr() ast.Attr { mut kind := ast.AttrKind.plain - apos := p.prev_tok.position() + apos := p.prev_tok.pos() if p.tok.kind == .key_unsafe { p.next() return ast.Attr{ name: 'unsafe' kind: kind - pos: apos.extend(p.tok.position()) + pos: apos.extend(p.tok.pos()) } } mut name := '' @@ -1670,23 +1670,23 @@ fn (mut p Parser) parse_attr() ast.Attr { kind: kind ct_expr: comptime_cond ct_opt: comptime_cond_opt - pos: apos.extend(p.tok.position()) + pos: apos.extend(p.tok.pos()) } } -pub fn (mut p Parser) language_not_allowed_error(language ast.Language, pos token.Position) { +pub fn (mut p Parser) language_not_allowed_error(language ast.Language, pos token.Pos) { upcase_language := language.str().to_upper() p.error_with_pos('$upcase_language code is not allowed in .${p.file_backend_mode}.v files, please move it to a .${language}.v file', pos) } -pub fn (mut p Parser) language_not_allowed_warning(language ast.Language, pos token.Position) { +pub fn (mut p Parser) language_not_allowed_warning(language ast.Language, pos token.Pos) { upcase_language := language.str().to_upper() p.warn_with_pos('$upcase_language code will not be allowed in pure .v files, please move it to a .${language}.v file instead', pos) } -pub fn (mut p Parser) check_for_impure_v(language ast.Language, pos token.Position) { +pub fn (mut p Parser) check_for_impure_v(language ast.Language, pos token.Pos) { if language == .v { // pure V code is always allowed everywhere return @@ -1720,18 +1720,18 @@ pub fn (mut p Parser) check_for_impure_v(language ast.Language, pos token.Positi } pub fn (mut p Parser) error(s string) ast.NodeError { - return p.error_with_pos(s, p.tok.position()) + return p.error_with_pos(s, p.tok.pos()) } pub fn (mut p Parser) warn(s string) { - p.warn_with_pos(s, p.tok.position()) + p.warn_with_pos(s, p.tok.pos()) } pub fn (mut p Parser) note(s string) { - p.note_with_pos(s, p.tok.position()) + p.note_with_pos(s, p.tok.pos()) } -pub fn (mut p Parser) error_with_pos(s string, pos token.Position) ast.NodeError { +pub fn (mut p Parser) error_with_pos(s string, pos token.Pos) ast.NodeError { if p.pref.fatal_errors { exit(1) } @@ -1800,7 +1800,7 @@ pub fn (mut p Parser) error_with_error(error errors.Error) { } } -pub fn (mut p Parser) warn_with_pos(s string, pos token.Position) { +pub fn (mut p Parser) warn_with_pos(s string, pos token.Pos) { if p.pref.warns_are_errors { p.error_with_pos(s, pos) return @@ -1825,7 +1825,7 @@ pub fn (mut p Parser) warn_with_pos(s string, pos token.Position) { } } -pub fn (mut p Parser) note_with_pos(s string, pos token.Position) { +pub fn (mut p Parser) note_with_pos(s string, pos token.Pos) { if p.pref.skip_warnings { return } @@ -1846,7 +1846,7 @@ pub fn (mut p Parser) note_with_pos(s string, pos token.Position) { } pub fn (mut p Parser) vet_error(msg string, line int, fix vet.FixKind, typ vet.ErrorType) { - pos := token.Position{ + pos := token.Pos{ line_nr: line + 1 } p.vet_errors << vet.Error{ @@ -1865,7 +1865,7 @@ fn (mut p Parser) parse_multi_expr(is_top_level bool) ast.Stmt { // a, mut b ... :=/= // multi-assign // collect things upto hard boundaries tok := p.tok - mut pos := tok.position() + mut pos := tok.pos() mut defer_vars := p.defer_vars p.defer_vars = []ast.Ident{} @@ -1894,7 +1894,7 @@ fn (mut p Parser) parse_multi_expr(is_top_level bool) ast.Stmt { is_complex_infix_expr := node is ast.InfixExpr && (node as ast.InfixExpr).op in [.left_shift, .right_shift, .unsigned_right_shift, .arrow] if !is_complex_infix_expr { - return p.error_with_pos('expression evaluated but not used', node.position()) + return p.error_with_pos('expression evaluated but not used', node.pos()) } } } @@ -1903,7 +1903,7 @@ fn (mut p Parser) parse_multi_expr(is_top_level bool) ast.Stmt { if left.len == 1 { return ast.ExprStmt{ expr: left0 - pos: left0.position() + pos: left0.pos() comments: left_comments is_expr: p.inside_for } @@ -1911,7 +1911,7 @@ fn (mut p Parser) parse_multi_expr(is_top_level bool) ast.Stmt { return ast.ExprStmt{ expr: ast.ConcatExpr{ vals: left - pos: tok.position() + pos: tok.pos() } pos: pos comments: left_comments @@ -1925,7 +1925,7 @@ pub fn (mut p Parser) parse_ident(language ast.Language) ast.Ident { if is_shared { p.register_auto_import('sync') } - mut_pos := p.tok.position() + mut_pos := p.tok.pos() is_mut := p.tok.kind == .key_mut || is_shared || is_atomic if is_mut { p.next() @@ -1944,7 +1944,7 @@ pub fn (mut p Parser) parse_ident(language ast.Language) ast.Ident { scope: p.scope } } - pos := p.tok.position() + pos := p.tok.pos() mut name := p.check_name() if name == '_' { return ast.Ident{ @@ -2091,7 +2091,7 @@ pub fn (mut p Parser) name_expr() ast.Expr { if p.expecting_type { p.expecting_type = false // get type position before moving to next - type_pos := p.tok.position() + type_pos := p.tok.pos() typ := p.parse_type() return ast.TypeNode{ typ: typ @@ -2101,10 +2101,10 @@ pub fn (mut p Parser) name_expr() ast.Expr { mut language := ast.Language.v if p.tok.lit == 'C' { language = ast.Language.c - p.check_for_impure_v(language, p.tok.position()) + p.check_for_impure_v(language, p.tok.pos()) } else if p.tok.lit == 'JS' { language = ast.Language.js - p.check_for_impure_v(language, p.tok.position()) + p.check_for_impure_v(language, p.tok.pos()) } mut mod := '' // p.warn('resetting') @@ -2127,19 +2127,19 @@ pub fn (mut p Parser) name_expr() ast.Expr { } return ast.MapInit{ typ: map_type - pos: p.prev_tok.position() + pos: p.prev_tok.pos() } } // `chan typ{...}` if p.tok.lit == 'chan' { - first_pos := p.tok.position() + first_pos := p.tok.pos() mut last_pos := first_pos chan_type := p.parse_chan_type() mut has_cap := false mut cap_expr := ast.empty_expr() p.check(.lcbr) if p.tok.kind == .rcbr { - last_pos = p.tok.position() + last_pos = p.tok.pos() p.next() } else { key := p.check_name() @@ -2156,7 +2156,7 @@ pub fn (mut p Parser) name_expr() ast.Expr { return p.error('wrong field `$key`, expecting `cap`') } } - last_pos = p.tok.position() + last_pos = p.tok.pos() p.check(.rcbr) } return ast.ChanInit{ @@ -2259,7 +2259,7 @@ pub fn (mut p Parser) name_expr() ast.Expr { || (language == .v && name.len > 0 && name[0].is_capital()) { // MainLetter(x) is *always* a cast, as long as it is not `C.` // TODO handle C.stat() - start_pos := p.tok.position() + start_pos := p.tok.pos() mut to_typ := p.parse_type() // this prevents inner casts to also have an `&` // example: &Foo(malloc(int(num))) @@ -2276,7 +2276,7 @@ pub fn (mut p Parser) name_expr() ast.Expr { arg = p.expr(0) // len has_arg = true } - end_pos := p.tok.position() + end_pos := p.tok.pos() p.check(.rpar) node = ast.CastExpr{ typ: to_typ @@ -2291,7 +2291,7 @@ pub fn (mut p Parser) name_expr() ast.Expr { } else { // fn call if is_optional { - p.error_with_pos('unexpected $p.prev_tok', p.prev_tok.position()) + p.error_with_pos('unexpected $p.prev_tok', p.prev_tok.pos()) } node = p.call_expr(language, mod) } @@ -2317,7 +2317,7 @@ pub fn (mut p Parser) name_expr() ast.Expr { } else if p.peek_tok.kind == .dot && (lit0_is_capital && !known_var && language == .v) { // T.name if p.is_generic_name() { - pos := p.tok.position() + pos := p.tok.pos() name := p.check_name() p.check(.dot) field := p.check_name() @@ -2326,7 +2326,7 @@ pub fn (mut p Parser) name_expr() ast.Expr { 'typ' { ast.GenericKindField.typ } else { ast.GenericKindField.unknown } } - pos.extend(p.tok.position()) + pos.extend(p.tok.pos()) return ast.SelectorExpr{ expr: ast.Ident{ name: name @@ -2340,11 +2340,11 @@ pub fn (mut p Parser) name_expr() ast.Expr { } if p.peek_token(2).kind == .name && p.peek_token(3).kind == .lpar && !known_var { p.error_with_pos('the receiver of the method call must be an instantiated object, e.g. `foo.bar()`', - p.tok.position()) + p.tok.pos()) } // `Color.green` mut enum_name := p.check_name() - enum_name_pos := p.prev_tok.position() + enum_name_pos := p.prev_tok.pos() if mod != '' { enum_name = mod + '.' + enum_name } else { @@ -2356,7 +2356,7 @@ pub fn (mut p Parser) name_expr() ast.Expr { return ast.EnumVal{ enum_name: enum_name val: val - pos: enum_name_pos.extend(p.prev_tok.position()) + pos: enum_name_pos.extend(p.prev_tok.pos()) mod: mod } } else if language == .js && p.peek_tok.kind == .dot && p.peek_token(2).kind == .name { @@ -2367,7 +2367,7 @@ pub fn (mut p Parser) name_expr() ast.Expr { || (p.peek_tok.kind == .dot && p.peek_token(2).lit.len > 0 && p.peek_token(2).lit[0].is_capital()) || p.table.find_type_idx(p.mod + '.' + p.tok.lit) > 0) { - type_pos := p.tok.position() + type_pos := p.tok.pos() typ := p.parse_type() return ast.TypeNode{ typ: typ @@ -2390,7 +2390,7 @@ pub fn (mut p Parser) name_expr() ast.Expr { fn (mut p Parser) index_expr(left ast.Expr, is_gated bool) ast.IndexExpr { // left == `a` in `a[0]` - start_pos := p.tok.position() + start_pos := p.tok.pos() p.next() // [ mut has_low := true if p.tok.kind == .dotdot { @@ -2404,22 +2404,22 @@ fn (mut p Parser) index_expr(left ast.Expr, is_gated bool) ast.IndexExpr { has_high = true } - pos_high := start_pos.extend(p.tok.position()) + pos_high := start_pos.extend(p.tok.pos()) p.check(.rsbr) mut or_kind_high := ast.OrKind.absent mut or_stmts_high := []ast.Stmt{} - mut or_pos_high := token.Position{} + mut or_pos_high := token.Pos{} if !p.or_is_handled { // a[..end] or {...} if p.tok.kind == .key_orelse { was_inside_or_expr := p.inside_or_expr p.inside_or_expr = true - or_pos_high = p.tok.position() + or_pos_high = p.tok.pos() p.next() p.open_scope() or_stmts_high = p.parse_block_no_scope(false) - or_pos_high = or_pos_high.extend(p.prev_tok.position()) + or_pos_high = or_pos_high.extend(p.prev_tok.pos()) p.close_scope() p.inside_or_expr = was_inside_or_expr return ast.IndexExpr{ @@ -2442,7 +2442,7 @@ fn (mut p Parser) index_expr(left ast.Expr, is_gated bool) ast.IndexExpr { } // `a[start..end] ?` if p.tok.kind == .question { - or_pos_high = p.tok.position() + or_pos_high = p.tok.pos() or_kind_high = .propagate p.next() } @@ -2477,22 +2477,22 @@ fn (mut p Parser) index_expr(left ast.Expr, is_gated bool) ast.IndexExpr { has_high = true high = p.expr(0) } - pos_low := start_pos.extend(p.tok.position()) + pos_low := start_pos.extend(p.tok.pos()) p.check(.rsbr) mut or_kind_low := ast.OrKind.absent mut or_stmts_low := []ast.Stmt{} - mut or_pos_low := token.Position{} + mut or_pos_low := token.Pos{} if !p.or_is_handled { // a[start..end] or {...} if p.tok.kind == .key_orelse { was_inside_or_expr := p.inside_or_expr p.inside_or_expr = true - or_pos_low = p.tok.position() + or_pos_low = p.tok.pos() p.next() p.open_scope() or_stmts_low = p.parse_block_no_scope(false) - or_pos_low = or_pos_low.extend(p.prev_tok.position()) + or_pos_low = or_pos_low.extend(p.prev_tok.pos()) p.close_scope() p.inside_or_expr = was_inside_or_expr return ast.IndexExpr{ @@ -2516,7 +2516,7 @@ fn (mut p Parser) index_expr(left ast.Expr, is_gated bool) ast.IndexExpr { } // `a[start..end] ?` if p.tok.kind == .question { - or_pos_low = p.tok.position() + or_pos_low = p.tok.pos() or_kind_low = .propagate p.next() } @@ -2542,21 +2542,21 @@ fn (mut p Parser) index_expr(left ast.Expr, is_gated bool) ast.IndexExpr { } } // [expr] - pos := start_pos.extend(p.tok.position()) + pos := start_pos.extend(p.tok.pos()) p.check(.rsbr) mut or_kind := ast.OrKind.absent mut or_stmts := []ast.Stmt{} - mut or_pos := token.Position{} + mut or_pos := token.Pos{} if !p.or_is_handled { // a[i] or { ... } if p.tok.kind == .key_orelse { was_inside_or_expr := p.inside_or_expr p.inside_or_expr = true - or_pos = p.tok.position() + or_pos = p.tok.pos() p.next() p.open_scope() or_stmts = p.parse_block_no_scope(false) - or_pos = or_pos.extend(p.prev_tok.position()) + or_pos = or_pos.extend(p.prev_tok.pos()) p.close_scope() p.inside_or_expr = was_inside_or_expr return ast.IndexExpr{ @@ -2573,7 +2573,7 @@ fn (mut p Parser) index_expr(left ast.Expr, is_gated bool) ast.IndexExpr { } // `a[i] ?` if p.tok.kind == .question { - or_pos = p.tok.position() + or_pos = p.tok.pos() or_kind = .propagate p.next() } @@ -2594,7 +2594,7 @@ fn (mut p Parser) index_expr(left ast.Expr, is_gated bool) ast.IndexExpr { fn (mut p Parser) scope_register_it() { p.scope.register(ast.Var{ name: 'it' - pos: p.tok.position() + pos: p.tok.pos() is_used: true }) } @@ -2602,12 +2602,12 @@ fn (mut p Parser) scope_register_it() { fn (mut p Parser) scope_register_ab() { p.scope.register(ast.Var{ name: 'a' - pos: p.tok.position() + pos: p.tok.pos() is_used: true }) p.scope.register(ast.Var{ name: 'b' - pos: p.tok.position() + pos: p.tok.pos() is_used: true }) } @@ -2618,10 +2618,10 @@ fn (mut p Parser) dot_expr(left ast.Expr) ast.Expr { return p.comptime_selector(left) } is_generic_call := p.is_generic_call() - name_pos := p.tok.position() + name_pos := p.tok.pos() mut field_name := '' // check if the name is on the same line as the dot - if (p.prev_tok.position().line_nr == name_pos.line_nr) || p.tok.kind != .name { + if (p.prev_tok.pos().line_nr == name_pos.line_nr) || p.tok.kind != .name { field_name = p.check_name() } else { p.name_error = true @@ -2637,11 +2637,11 @@ fn (mut p Parser) dot_expr(left ast.Expr) ast.Expr { // Method call // TODO move to fn.v call_expr() mut concrete_types := []ast.Type{} - mut concrete_list_pos := p.tok.position() + mut concrete_list_pos := p.tok.pos() if is_generic_call { // `g.foo(10)` concrete_types = p.parse_concrete_types() - concrete_list_pos = concrete_list_pos.extend(p.prev_tok.position()) + concrete_list_pos = concrete_list_pos.extend(p.prev_tok.pos()) // In case of `foo()` // T is unwrapped and registered in the checker. has_generic := concrete_types.any(it.has_flag(.generic)) @@ -2656,7 +2656,7 @@ fn (mut p Parser) dot_expr(left ast.Expr) ast.Expr { p.check(.rpar) mut or_stmts := []ast.Stmt{} mut or_kind := ast.OrKind.absent - mut or_pos := p.tok.position() + mut or_pos := p.tok.pos() if p.tok.kind == .key_orelse { was_inside_or_expr := p.inside_or_expr p.inside_or_expr = true @@ -2665,13 +2665,13 @@ fn (mut p Parser) dot_expr(left ast.Expr) ast.Expr { p.scope.register(ast.Var{ name: 'err' typ: ast.error_type - pos: p.tok.position() + pos: p.tok.pos() is_used: true is_stack_obj: true }) or_kind = .block or_stmts = p.parse_block_no_scope(false) - or_pos = or_pos.extend(p.prev_tok.position()) + or_pos = or_pos.extend(p.prev_tok.pos()) p.close_scope() p.inside_or_expr = was_inside_or_expr } @@ -2681,7 +2681,7 @@ fn (mut p Parser) dot_expr(left ast.Expr) ast.Expr { or_kind = .propagate } // - end_pos := p.prev_tok.position() + end_pos := p.prev_tok.pos() pos := name_pos.extend(end_pos) comments := p.eat_comments(same_line: true) mcall_expr := ast.CallExpr{ @@ -2707,7 +2707,7 @@ fn (mut p Parser) dot_expr(left ast.Expr) ast.Expr { return mcall_expr } mut is_mut := false - mut mut_pos := token.Position{} + mut mut_pos := token.Pos{} if p.inside_match || p.inside_if_expr { match left { ast.Ident, ast.SelectorExpr { @@ -2717,7 +2717,7 @@ fn (mut p Parser) dot_expr(left ast.Expr) ast.Expr { else {} } } - pos := if p.name_error { left.position().extend(name_pos) } else { name_pos } + pos := if p.name_error { left.pos().extend(name_pos) } else { name_pos } sel_expr := ast.SelectorExpr{ expr: left field_name: field_name @@ -2809,16 +2809,16 @@ fn (p Parser) is_generic_name() bool { // `.green` // `pref.BuildMode.default_mode` fn (mut p Parser) enum_val() ast.EnumVal { - start_pos := p.tok.position() + start_pos := p.tok.pos() p.check(.dot) val := p.check_name() return ast.EnumVal{ val: val - pos: start_pos.extend(p.prev_tok.position()) + pos: start_pos.extend(p.prev_tok.pos()) } } -fn (mut p Parser) filter_string_vet_errors(pos token.Position) { +fn (mut p Parser) filter_string_vet_errors(pos token.Pos) { if p.vet_errors.len == 0 { return } @@ -2837,7 +2837,7 @@ fn (mut p Parser) string_expr() ast.Expr { } mut node := ast.empty_expr() val := p.tok.lit - mut pos := p.tok.position() + mut pos := p.tok.pos() pos.last_line = pos.line_nr + val.count('\n') if p.peek_tok.kind != .str_dollar { p.next() @@ -2858,7 +2858,7 @@ fn (mut p Parser) string_expr() ast.Expr { mut visible_pluss := []bool{} mut fills := []bool{} mut fmts := []byte{} - mut fposs := []token.Position{} + mut fposs := []token.Pos{} // Handle $ interpolation p.inside_str_interp = true for p.tok.kind == .string { @@ -2918,9 +2918,9 @@ fn (mut p Parser) string_expr() ast.Expr { visible_pluss << visible_plus fmts << fmt fills << fill - fposs << p.prev_tok.position() + fposs << p.prev_tok.pos() } - pos = pos.extend(p.prev_tok.position()) + pos = pos.extend(p.prev_tok.pos()) p.filter_string_vet_errors(pos) node = ast.StringInterLiteral{ vals: vals @@ -2940,11 +2940,11 @@ fn (mut p Parser) string_expr() ast.Expr { } fn (mut p Parser) parse_number_literal() ast.Expr { - mut pos := p.tok.position() + mut pos := p.tok.pos() is_neg := p.tok.kind == .minus if is_neg { p.next() - pos = pos.extend(p.tok.position()) + pos = pos.extend(p.tok.pos()) } lit := p.tok.lit full_lit := if is_neg { '-' + lit } else { lit } @@ -2966,21 +2966,21 @@ fn (mut p Parser) parse_number_literal() ast.Expr { fn (mut p Parser) module_decl() ast.Module { mut module_attrs := []ast.Attr{} - mut attrs_pos := p.tok.position() + mut attrs_pos := p.tok.pos() if p.tok.kind == .lsbr { p.attributes() module_attrs = p.attrs } mut name := 'main' is_skipped := p.tok.kind != .key_module - mut module_pos := token.Position{} - mut name_pos := token.Position{} + mut module_pos := token.Pos{} + mut name_pos := token.Pos{} mut mod_node := ast.Module{} if !is_skipped { p.attrs = [] - module_pos = p.tok.position() + module_pos = p.tok.pos() p.next() - name_pos = p.tok.position() + name_pos = p.tok.pos() name = p.check_name() mod_node = ast.Module{ pos: module_pos @@ -2992,7 +2992,7 @@ fn (mut p Parser) module_decl() ast.Module { // NB: this shouldn't be reassigned into name_pos // as it creates a wrong position when extended // to module_pos - n_pos := p.tok.position() + n_pos := p.tok.pos() if module_pos.line_nr == n_pos.line_nr && p.tok.kind != .comment && p.tok.kind != .eof { if p.tok.kind == .name { p.error_with_pos('`module $name`, you can only declare one module, unexpected `$p.tok.lit`', @@ -3045,9 +3045,9 @@ fn (mut p Parser) module_decl() ast.Module { } fn (mut p Parser) import_stmt() ast.Import { - import_pos := p.tok.position() + import_pos := p.tok.pos() p.check(.key_import) - mut pos := p.tok.position() + mut pos := p.tok.pos() mut import_node := ast.Import{ pos: import_pos.extend(pos) } @@ -3069,7 +3069,7 @@ fn (mut p Parser) import_stmt() ast.Import { } for p.tok.kind == .dot { p.next() - submod_pos := p.tok.position() + submod_pos := p.tok.pos() if p.tok.kind != .name { p.error_with_pos('module syntax error, please use `x.y.z`', submod_pos) return import_node @@ -3102,10 +3102,10 @@ fn (mut p Parser) import_stmt() ast.Import { mod_name := import_node.mod if p.tok.kind == .key_as { p.next() - alias_pos := p.tok.position() + alias_pos := p.tok.pos() mod_alias = p.check_name() if mod_alias == mod_name_arr.last() { - p.error_with_pos('import alias `$mod_name as $mod_alias` is redundant', p.prev_tok.position()) + p.error_with_pos('import alias `$mod_name as $mod_alias` is redundant', p.prev_tok.pos()) return import_node } import_node = ast.Import{ @@ -3117,9 +3117,9 @@ fn (mut p Parser) import_stmt() ast.Import { } } if p.tok.kind == .lcbr { // import module { fn1, Type2 } syntax - mut initial_syms_pos := p.tok.position() + mut initial_syms_pos := p.tok.pos() p.import_syms(mut import_node) - initial_syms_pos = initial_syms_pos.extend(p.tok.position()) + initial_syms_pos = initial_syms_pos.extend(p.tok.pos()) import_node = ast.Import{ ...import_node syms_pos: initial_syms_pos @@ -3127,7 +3127,7 @@ fn (mut p Parser) import_stmt() ast.Import { } p.register_used_import(mod_alias) // no `unused import` msg for parent } - pos_t := p.tok.position() + pos_t := p.tok.pos() if import_pos.line_nr == pos_t.line_nr { if p.tok.kind !in [.lcbr, .eof, .comment] { p.error_with_pos('cannot import multiple modules at a time', pos_t) @@ -3147,7 +3147,7 @@ fn (mut p Parser) import_stmt() ast.Import { // import_syms parses the inner part of `import module { submod1, submod2 }` fn (mut p Parser) import_syms(mut parent ast.Import) { p.next() - pos_t := p.tok.position() + pos_t := p.tok.pos() if p.tok.kind == .rcbr { // closed too early p.error_with_pos('empty `$parent.mod` import set, remove `{}`', pos_t) return @@ -3158,7 +3158,7 @@ fn (mut p Parser) import_syms(mut parent ast.Import) { return } for p.tok.kind == .name { - pos := p.tok.position() + pos := p.tok.pos() alias := p.check_name() p.imported_symbols[alias] = parent.mod + '.' + alias // so we can work with this in fmt+checker @@ -3175,7 +3175,7 @@ fn (mut p Parser) import_syms(mut parent ast.Import) { } } if p.tok.kind != .rcbr { - p.error_with_pos('import syntax error, no closing `}`', p.tok.position()) + p.error_with_pos('import syntax error, no closing `}`', p.tok.pos()) return } p.next() @@ -3195,12 +3195,12 @@ fn (mut p Parser) const_decl() ast.ConstDecl { else {} } } - start_pos := p.tok.position() + start_pos := p.tok.pos() is_pub := p.tok.kind == .key_pub if is_pub { p.next() } - const_pos := p.tok.position() + const_pos := p.tok.pos() p.check(.key_const) is_block := p.tok.kind == .lpar if is_block { @@ -3217,7 +3217,7 @@ fn (mut p Parser) const_decl() ast.ConstDecl { if p.tok.kind == .rpar { break } - pos := p.tok.position() + pos := p.tok.pos() name := p.check_name() if util.contains_capital(name) { p.warn_with_pos('const names cannot contain uppercase letters, use snake_case instead', @@ -3239,7 +3239,7 @@ fn (mut p Parser) const_decl() ast.ConstDecl { mod: p.mod is_pub: is_pub expr: expr - pos: pos.extend(expr.position()) + pos: pos.extend(expr.pos()) comments: comments is_markused: is_markused } @@ -3265,7 +3265,7 @@ fn (mut p Parser) const_decl() ast.ConstDecl { } fn (mut p Parser) return_stmt() ast.Return { - first_pos := p.tok.position() + first_pos := p.tok.pos() p.next() // no return mut comments := p.eat_comments() @@ -3278,7 +3278,7 @@ fn (mut p Parser) return_stmt() ast.Return { // return exprs exprs, comments2 := p.expr_list() comments << comments2 - end_pos := exprs.last().position() + end_pos := exprs.last().pos() return ast.Return{ exprs: exprs comments: comments @@ -3307,7 +3307,7 @@ fn (mut p Parser) global_decl() ast.GlobalDecl { p.error('use `v -enable-globals ...` to enable globals') return ast.GlobalDecl{} } - start_pos := p.tok.position() + start_pos := p.tok.pos() p.check(.key_global) is_block := p.tok.kind == .lpar if is_block { @@ -3324,12 +3324,12 @@ fn (mut p Parser) global_decl() ast.GlobalDecl { if p.tok.kind == .rpar { break } - pos := p.tok.position() + pos := p.tok.pos() name := p.check_name() has_expr := p.tok.kind == .assign mut expr := ast.empty_expr() mut typ := ast.void_type - mut typ_pos := token.Position{} + mut typ_pos := token.Pos{} if has_expr { p.next() // = expr = p.expr(0) @@ -3366,7 +3366,7 @@ fn (mut p Parser) global_decl() ast.GlobalDecl { } } } else { - typ_pos = p.tok.position() + typ_pos = p.tok.pos() typ = p.parse_type() } field := ast.GlobalField{ @@ -3390,7 +3390,7 @@ fn (mut p Parser) global_decl() ast.GlobalDecl { p.check(.rpar) } return ast.GlobalDecl{ - pos: start_pos.extend(p.prev_tok.position()) + pos: start_pos.extend(p.prev_tok.pos()) mod: p.mod fields: fields end_comments: comments @@ -3402,12 +3402,12 @@ fn (mut p Parser) global_decl() ast.GlobalDecl { fn (mut p Parser) enum_decl() ast.EnumDecl { p.top_level_statement_start() is_pub := p.tok.kind == .key_pub - start_pos := p.tok.position() + start_pos := p.tok.pos() if is_pub { p.next() } p.check(.key_enum) - end_pos := p.tok.position() + end_pos := p.tok.pos() enum_name := p.check_name() if enum_name.len == 1 { p.error_with_pos('single letter capital names are reserved for generic template types.', @@ -3426,7 +3426,7 @@ fn (mut p Parser) enum_decl() ast.EnumDecl { // mut default_exprs := []ast.Expr{} mut fields := []ast.EnumField{} for p.tok.kind != .eof && p.tok.kind != .rcbr { - pos := p.tok.position() + pos := p.tok.pos() val := p.check_name() vals << val mut expr := ast.empty_expr() @@ -3508,15 +3508,15 @@ fn (mut p Parser) enum_decl() ast.EnumDecl { } fn (mut p Parser) type_decl() ast.TypeDecl { - start_pos := p.tok.position() + start_pos := p.tok.pos() is_pub := p.tok.kind == .key_pub if is_pub { p.next() } p.check(.key_type) - end_pos := p.tok.position() + end_pos := p.tok.pos() decl_pos := start_pos.extend(end_pos) - name_pos := p.tok.position() + name_pos := p.tok.pos() name := p.check_name() if name.len == 1 && name[0].is_capital() { p.error_with_pos('single letter capital names are reserved for generic template types.', @@ -3530,16 +3530,16 @@ fn (mut p Parser) type_decl() ast.TypeDecl { } mut sum_variants := []ast.TypeNode{} generic_types, _ := p.parse_generic_types() - decl_pos_with_generics := decl_pos.extend(p.prev_tok.position()) + decl_pos_with_generics := decl_pos.extend(p.prev_tok.pos()) p.check(.assign) - mut type_pos := p.tok.position() + mut type_pos := p.tok.pos() mut comments := []ast.Comment{} if p.tok.kind == .key_fn { // function type: `type mycallback = fn(string, int)` fn_name := p.prepend_mod(name) fn_type := p.parse_fn_type(fn_name) p.table.sym(fn_type).is_public = is_pub - type_pos = type_pos.extend(p.tok.position()) + type_pos = type_pos.extend(p.tok.pos()) comments = p.eat_comments(same_line: true) return ast.FnTypeDecl{ name: fn_name @@ -3615,7 +3615,7 @@ fn (mut p Parser) type_decl() ast.TypeDecl { } is_public: is_pub }) - type_end_pos := p.prev_tok.position() + type_end_pos := p.prev_tok.pos() if idx == -1 { p.error_with_pos('cannot register alias `$name`, another type with this name exists', name_pos) @@ -3639,7 +3639,7 @@ fn (mut p Parser) type_decl() ast.TypeDecl { fn (mut p Parser) assoc() ast.Assoc { var_name := p.check_name() - pos := p.tok.position() + pos := p.tok.pos() mut v := p.scope.find_var(var_name) or { p.error('unknown variable `$var_name`') return ast.Assoc{ @@ -3674,7 +3674,7 @@ fn (mut p Parser) assoc() ast.Assoc { fn (p &Parser) new_true_expr() ast.Expr { return ast.BoolLiteral{ val: true - pos: p.tok.position() + pos: p.tok.pos() } } @@ -3747,10 +3747,10 @@ pub fn (mut p Parser) mark_var_as_used(varname string) bool { } fn (mut p Parser) unsafe_stmt() ast.Stmt { - mut pos := p.tok.position() + mut pos := p.tok.pos() p.next() if p.tok.kind != .lcbr { - return p.error_with_pos('please use `unsafe {`', p.tok.position()) + return p.error_with_pos('please use `unsafe {`', p.tok.pos()) } p.next() if p.inside_unsafe { diff --git a/vlib/v/parser/sql.v b/vlib/v/parser/sql.v index 0909afc09..7bb250784 100644 --- a/vlib/v/parser/sql.v +++ b/vlib/v/parser/sql.v @@ -7,11 +7,11 @@ import v.ast fn (mut p Parser) sql_expr() ast.Expr { // `sql db {` - pos := p.tok.position() + pos := p.tok.pos() p.check_name() db_expr := p.check_expr(0) or { p.error_with_pos('invalid expression: unexpected $p.tok, expecting database', - p.tok.position()) + p.tok.pos()) } p.check(.lcbr) p.check(.key_select) @@ -22,7 +22,7 @@ fn (mut p Parser) sql_expr() ast.Expr { p.check_name() // from typ = ast.int_type } - table_pos := p.tok.position() + table_pos := p.tok.pos() table_type := p.parse_type() // `User` mut where_expr := ast.empty_expr() has_where := p.tok.kind == .name && p.tok.lit == 'where' @@ -49,7 +49,7 @@ fn (mut p Parser) sql_expr() ast.Expr { mut has_desc := false if p.tok.kind == .name && p.tok.lit == 'order' { p.check_name() // `order` - order_pos := p.tok.position() + order_pos := p.tok.pos() if p.tok.kind == .name && p.tok.lit == 'by' { p.check_name() // `by` } else { @@ -100,7 +100,7 @@ fn (mut p Parser) sql_expr() ast.Expr { order_expr: order_expr has_desc: has_desc is_array: !query_one - pos: pos.extend(p.prev_tok.position()) + pos: pos.extend(p.prev_tok.pos()) table_expr: ast.TypeNode{ typ: table_type pos: table_pos @@ -111,7 +111,7 @@ fn (mut p Parser) sql_expr() ast.Expr { // insert user into User // update User set nr_oders=nr_orders+1 where id == user_id fn (mut p Parser) sql_stmt() ast.SqlStmt { - mut pos := p.tok.position() + mut pos := p.tok.pos() p.inside_match = true defer { p.inside_match = false @@ -120,7 +120,7 @@ fn (mut p Parser) sql_stmt() ast.SqlStmt { p.check_name() db_expr := p.check_expr(0) or { p.error_with_pos('invalid expression: unexpected $p.tok, expecting database', - p.tok.position()) + p.tok.pos()) } // println(typeof(db_expr)) p.check(.lcbr) @@ -134,7 +134,7 @@ fn (mut p Parser) sql_stmt() ast.SqlStmt { p.next() pos.last_line = p.prev_tok.line_nr return ast.SqlStmt{ - pos: pos.extend(p.prev_tok.position()) + pos: pos.extend(p.prev_tok.pos()) db_expr: db_expr lines: lines } @@ -142,7 +142,7 @@ fn (mut p Parser) sql_stmt() ast.SqlStmt { fn (mut p Parser) parse_sql_stmt_line() ast.SqlStmtLine { mut n := p.check_name() // insert - pos := p.tok.position() + pos := p.tok.pos() mut kind := ast.SqlStmtKind.insert if n == 'delete' { kind = .delete @@ -156,10 +156,10 @@ fn (mut p Parser) parse_sql_stmt_line() ast.SqlStmtLine { return ast.SqlStmtLine{} } typ := p.parse_type() - typ_pos := p.tok.position() + typ_pos := p.tok.pos() return ast.SqlStmtLine{ kind: kind - pos: pos.extend(p.prev_tok.position()) + pos: pos.extend(p.prev_tok.pos()) table_expr: ast.TypeNode{ typ: typ pos: typ_pos @@ -173,10 +173,10 @@ fn (mut p Parser) parse_sql_stmt_line() ast.SqlStmtLine { return ast.SqlStmtLine{} } typ := p.parse_type() - typ_pos := p.tok.position() + typ_pos := p.tok.pos() return ast.SqlStmtLine{ kind: kind - pos: pos.extend(p.prev_tok.position()) + pos: pos.extend(p.prev_tok.pos()) table_expr: ast.TypeNode{ typ: typ pos: typ_pos @@ -225,16 +225,16 @@ fn (mut p Parser) parse_sql_stmt_line() ast.SqlStmtLine { return ast.SqlStmtLine{} } - mut table_pos := p.tok.position() + mut table_pos := p.tok.pos() mut where_expr := ast.empty_expr() if kind == .insert { - table_pos = p.tok.position() + table_pos = p.tok.pos() table_type = p.parse_type() } else if kind == .update { p.check_sql_keyword('where') or { return ast.SqlStmtLine{} } where_expr = p.expr(0) } else if kind == .delete { - table_pos = p.tok.position() + table_pos = p.tok.pos() table_type = p.parse_type() p.check_sql_keyword('where') or { return ast.SqlStmtLine{} } where_expr = p.expr(0) diff --git a/vlib/v/parser/struct.v b/vlib/v/parser/struct.v index f714416d8..e66bc886a 100644 --- a/vlib/v/parser/struct.v +++ b/vlib/v/parser/struct.v @@ -12,7 +12,7 @@ fn (mut p Parser) struct_decl() ast.StructDecl { // save attributes, they will be changed later in fields attrs := p.attrs p.attrs = [] - start_pos := p.tok.position() + start_pos := p.tok.pos() is_pub := p.tok.kind == .key_pub if is_pub { p.next() @@ -34,7 +34,7 @@ fn (mut p Parser) struct_decl() ast.StructDecl { p.next() // C || JS p.next() // . } - name_pos := p.tok.position() + name_pos := p.tok.pos() p.check_for_impure_v(language, name_pos) mut name := p.check_name() // defer { @@ -90,7 +90,7 @@ fn (mut p Parser) struct_decl() ast.StructDecl { mut is_field_mut := false mut is_field_pub := false mut is_field_global := false - mut last_line := p.prev_tok.position().line_nr + 1 + mut last_line := p.prev_tok.pos().line_nr + 1 mut end_comments := []ast.Comment{} if !no_body { p.check(.lcbr) @@ -169,7 +169,7 @@ fn (mut p Parser) struct_decl() ast.StructDecl { break } } - field_start_pos := p.tok.position() + field_start_pos := p.tok.pos() mut is_field_volatile := false if p.tok.kind == .key_volatile { p.next() @@ -180,14 +180,14 @@ fn (mut p Parser) struct_decl() ast.StructDecl { is_on_top := ast_fields.len == 0 && !(is_field_mut || is_field_global) mut field_name := '' mut typ := ast.Type(0) - mut type_pos := token.Position{} - mut field_pos := token.Position{} + mut type_pos := token.Pos{} + mut field_pos := token.Pos{} if is_embed { // struct embedding - type_pos = p.tok.position() + type_pos = p.tok.pos() typ = p.parse_type() comments << p.eat_comments() - type_pos = type_pos.extend(p.prev_tok.position()) + type_pos = type_pos.extend(p.prev_tok.pos()) if !is_on_top { p.error_with_pos('struct embedding must be declared at the beginning of the struct body', type_pos) @@ -224,7 +224,7 @@ fn (mut p Parser) struct_decl() ast.StructDecl { // error is set in parse_type return ast.StructDecl{} } - type_pos = p.prev_tok.position() + type_pos = p.prev_tok.pos() field_pos = field_start_pos.extend(type_pos) } // Comments after type (same line) @@ -336,7 +336,7 @@ fn (mut p Parser) struct_decl() ast.StructDecl { } fn (mut p Parser) struct_init(typ_str string, short_syntax bool) ast.StructInit { - first_pos := (if short_syntax && p.prev_tok.kind == .lcbr { p.prev_tok } else { p.tok }).position() + first_pos := (if short_syntax && p.prev_tok.kind == .lcbr { p.prev_tok } else { p.tok }).pos() typ := if short_syntax { ast.void_type } else { p.parse_type() } p.expr_mod = '' // sym := p.table.sym(typ) @@ -356,15 +356,15 @@ fn (mut p Parser) struct_init(typ_str string, short_syntax bool) ast.StructInit for p.tok.kind !in [.rcbr, .rpar, .eof] { mut field_name := '' mut expr := ast.empty_expr() - mut field_pos := token.Position{} - mut first_field_pos := token.Position{} + mut field_pos := token.Pos{} + mut first_field_pos := token.Pos{} mut comments := []ast.Comment{} mut nline_comments := []ast.Comment{} is_update_expr := fields.len == 0 && p.tok.kind == .ellipsis if no_keys { // name will be set later in checker expr = p.expr(0) - field_pos = expr.position() + field_pos = expr.pos() first_field_pos = field_pos comments = p.eat_comments(same_line: true) } else if is_update_expr { @@ -374,18 +374,18 @@ fn (mut p Parser) struct_init(typ_str string, short_syntax bool) ast.StructInit update_expr_comments << p.eat_comments(same_line: true) has_update_expr = true } else { - first_field_pos = p.tok.position() + first_field_pos = p.tok.pos() field_name = p.check_name() p.check(.colon) expr = p.expr(0) comments = p.eat_comments(same_line: true) - last_field_pos := expr.position() + last_field_pos := expr.pos() field_len := if last_field_pos.len > 0 { last_field_pos.pos - first_field_pos.pos + last_field_pos.len } else { first_field_pos.len + 1 } - field_pos = token.Position{ + field_pos = token.Pos{ line_nr: first_field_pos.line_nr pos: first_field_pos.pos len: field_len @@ -423,7 +423,7 @@ fn (mut p Parser) struct_init(typ_str string, short_syntax bool) ast.StructInit update_expr_comments: update_expr_comments has_update_expr: has_update_expr name_pos: first_pos - pos: first_pos.extend(if short_syntax { p.tok.position() } else { p.prev_tok.position() }) + pos: first_pos.extend(if short_syntax { p.tok.pos() } else { p.prev_tok.pos() }) is_short: no_keys pre_comments: pre_comments } @@ -431,7 +431,7 @@ fn (mut p Parser) struct_init(typ_str string, short_syntax bool) ast.StructInit fn (mut p Parser) interface_decl() ast.InterfaceDecl { p.top_level_statement_start() - mut pos := p.tok.position() + mut pos := p.tok.pos() attrs := p.attrs is_pub := p.tok.kind == .key_pub if is_pub { @@ -449,7 +449,7 @@ fn (mut p Parser) interface_decl() ast.InterfaceDecl { p.next() // C || JS p.next() // . } - name_pos := p.tok.position() + name_pos := p.tok.pos() p.check_for_impure_v(language, name_pos) modless_name := p.check_name() mut interface_name := '' @@ -499,7 +499,7 @@ fn (mut p Parser) interface_decl() ast.InterfaceDecl { mut ifaces := []ast.InterfaceEmbedding{} for p.tok.kind != .rcbr && p.tok.kind != .eof { if p.tok.kind == .name && p.tok.lit.len > 0 && p.tok.lit[0].is_capital() { - iface_pos := p.tok.position() + iface_pos := p.tok.pos() mut iface_name := p.tok.lit iface_type := p.parse_type() if iface_name == 'JS' { @@ -519,7 +519,7 @@ fn (mut p Parser) interface_decl() ast.InterfaceDecl { } if p.tok.kind == .key_mut { if is_mut { - p.error_with_pos('redefinition of `mut` section', p.tok.position()) + p.error_with_pos('redefinition of `mut` section', p.tok.pos()) return ast.InterfaceDecl{} } p.next() @@ -528,7 +528,7 @@ fn (mut p Parser) interface_decl() ast.InterfaceDecl { mut_pos = fields.len } if p.peek_tok.kind == .lpar { - method_start_pos := p.tok.position() + method_start_pos := p.tok.pos() line_nr := p.tok.line_nr name := p.check_name() @@ -563,13 +563,13 @@ fn (mut p Parser) interface_decl() ast.InterfaceDecl { return_type: ast.void_type is_variadic: is_variadic is_pub: true - pos: method_start_pos.extend(p.prev_tok.position()) + pos: method_start_pos.extend(p.prev_tok.pos()) scope: p.scope } if p.tok.kind.is_start_of_type() && p.tok.line_nr == line_nr { - method.return_type_pos = p.tok.position() + method.return_type_pos = p.tok.pos() method.return_type = p.parse_type() - method.return_type_pos = method.return_type_pos.extend(p.tok.position()) + method.return_type_pos = method.return_type_pos.extend(p.tok.pos()) method.pos = method.pos.extend(method.return_type_pos) } mcomments := p.eat_comments(same_line: true) @@ -592,11 +592,11 @@ fn (mut p Parser) interface_decl() ast.InterfaceDecl { info.methods << tmethod } else { // interface fields - field_pos := p.tok.position() + field_pos := p.tok.pos() field_name := p.check_name() - mut type_pos := p.tok.position() + mut type_pos := p.tok.pos() field_typ := p.parse_type() - type_pos = type_pos.extend(p.prev_tok.position()) + type_pos = type_pos.extend(p.prev_tok.pos()) mut comments := []ast.Comment{} for p.tok.kind == .comment { comments << p.comment() @@ -624,7 +624,7 @@ fn (mut p Parser) interface_decl() ast.InterfaceDecl { ts.info = info p.top_level_statement_end() p.check(.rcbr) - pos = pos.extend_with_last_line(p.prev_tok.position(), p.prev_tok.line_nr) + pos = pos.extend_with_last_line(p.prev_tok.pos(), p.prev_tok.line_nr) res := ast.InterfaceDecl{ name: interface_name language: language diff --git a/vlib/v/parser/tests/inline_sum_type_return_type_too_many_variants.out b/vlib/v/parser/tests/inline_sum_type_return_type_too_many_variants.out index 7ca150120..027b103d2 100644 --- a/vlib/v/parser/tests/inline_sum_type_return_type_too_many_variants.out +++ b/vlib/v/parser/tests/inline_sum_type_return_type_too_many_variants.out @@ -1,21 +1,21 @@ vlib/v/parser/tests/inline_sum_type_return_type_too_many_variants.vv:4:6: warning: an inline sum type expects a maximum of 3 types (5 were given) - 2 | + 2 | 3 | struct Foo { - 4 | bar int | string | token.Position | bool | u32 - | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 4 | bar int | string | token.Pos | bool | u32 + | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 5 | } 6 | vlib/v/parser/tests/inline_sum_type_return_type_too_many_variants.vv:7:12: warning: an inline sum type expects a maximum of 3 types (5 were given) 5 | } - 6 | - 7 | fn foo(arg int | string | token.Position | bool | u32) int | string | token.Position | bool | u32 { - | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 6 | + 7 | fn foo(arg int | string | token.Pos | bool | u32) int | string | token.Pos | bool | u32 { + | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 8 | return 1 9 | } -vlib/v/parser/tests/inline_sum_type_return_type_too_many_variants.vv:7:56: warning: an inline sum type expects a maximum of 3 types (5 were given) +vlib/v/parser/tests/inline_sum_type_return_type_too_many_variants.vv:7:51: warning: an inline sum type expects a maximum of 3 types (5 were given) 5 | } - 6 | - 7 | fn foo(arg int | string | token.Position | bool | u32) int | string | token.Position | bool | u32 { - | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 6 | + 7 | fn foo(arg int | string | token.Pos | bool | u32) int | string | token.Pos | bool | u32 { + | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 8 | return 1 9 | } diff --git a/vlib/v/parser/tests/inline_sum_type_return_type_too_many_variants.vv b/vlib/v/parser/tests/inline_sum_type_return_type_too_many_variants.vv index d3c776432..d843c88a3 100644 --- a/vlib/v/parser/tests/inline_sum_type_return_type_too_many_variants.vv +++ b/vlib/v/parser/tests/inline_sum_type_return_type_too_many_variants.vv @@ -1,9 +1,9 @@ import v.token struct Foo { - bar int | string | token.Position | bool | u32 + bar int | string | token.Pos | bool | u32 } -fn foo(arg int | string | token.Position | bool | u32) int | string | token.Position | bool | u32 { +fn foo(arg int | string | token.Pos | bool | u32) int | string | token.Pos | bool | u32 { return 1 } diff --git a/vlib/v/parser/tmpl.v b/vlib/v/parser/tmpl.v index ab6645041..22f3beae7 100644 --- a/vlib/v/parser/tmpl.v +++ b/vlib/v/parser/tmpl.v @@ -133,7 +133,7 @@ fn vweb_tmpl_${fn_name}() string { p.error_with_error(errors.Error{ message: "Please use @include 'header' instead of @header (deprecated)" file_path: template_file - pos: token.Position{ + pos: token.Pos{ len: '@header'.len line_nr: tline_number pos: start_of_line_pos + position @@ -148,7 +148,7 @@ fn vweb_tmpl_${fn_name}() string { p.error_with_error(errors.Error{ message: "Please use @include 'footer' instead of @footer (deprecated)" file_path: template_file - pos: token.Position{ + pos: token.Pos{ len: '@footer'.len line_nr: tline_number pos: start_of_line_pos + position @@ -182,7 +182,7 @@ fn vweb_tmpl_${fn_name}() string { message: 'Reading file $file_name from path: $file_path failed' details: "Failed to @include '$file_name'" file_path: template_file - pos: token.Position{ + pos: token.Pos{ len: '@include '.len + file_name.len line_nr: tline_number pos: start_of_line_pos + position diff --git a/vlib/v/scanner/scanner.v b/vlib/v/scanner/scanner.v index 9bd32d9be..edf7e99b8 100644 --- a/vlib/v/scanner/scanner.v +++ b/vlib/v/scanner/scanner.v @@ -1143,7 +1143,7 @@ fn (s &Scanner) count_symbol_before(p int, sym byte) int { [direct_array_access] fn (mut s Scanner) ident_string() string { - lspos := token.Position{ + lspos := token.Pos{ line_nr: s.line_nr pos: s.pos col: s.pos - s.last_nl_pos - 1 @@ -1375,7 +1375,7 @@ fn trim_slash_line_break(s string) string { /// escaped utf8 runes in hex like `\xe2\x98\x85` => (★) /// escaped utf8 runes in octal like `\342\230\205` => (★) fn (mut s Scanner) ident_char() string { - lspos := token.Position{ + lspos := token.Pos{ line_nr: s.line_nr pos: s.pos col: s.pos - s.last_nl_pos - 1 @@ -1498,7 +1498,7 @@ fn (mut s Scanner) inc_line_number() { } pub fn (mut s Scanner) note(msg string) { - pos := token.Position{ + pos := token.Pos{ line_nr: s.line_nr pos: s.pos } @@ -1519,7 +1519,7 @@ pub fn (mut s Scanner) add_error_detail(msg string) { s.error_details << msg } -pub fn (mut s Scanner) add_error_detail_with_pos(msg string, pos token.Position) { +pub fn (mut s Scanner) add_error_detail_with_pos(msg string, pos token.Pos) { details := util.formatted_error('details:', msg, s.file_path, pos) s.add_error_detail(details) } @@ -1538,7 +1538,7 @@ pub fn (mut s Scanner) warn(msg string) { s.error(msg) return } - pos := token.Position{ + pos := token.Pos{ line_nr: s.line_nr pos: s.pos col: s.current_column() - 1 @@ -1565,7 +1565,7 @@ pub fn (mut s Scanner) warn(msg string) { } pub fn (mut s Scanner) error(msg string) { - pos := token.Position{ + pos := token.Pos{ line_nr: s.line_nr pos: s.pos col: s.current_column() - 1 @@ -1599,7 +1599,7 @@ fn (mut s Scanner) vet_error(msg string, fix vet.FixKind) { ve := vet.Error{ message: msg file_path: s.file_path - pos: token.Position{ + pos: token.Pos{ line_nr: s.line_nr col: s.current_column() - 1 } diff --git a/vlib/v/tests/struct_embed_test.v b/vlib/v/tests/struct_embed_test.v index 79476c7f0..f371bbb05 100644 --- a/vlib/v/tests/struct_embed_test.v +++ b/vlib/v/tests/struct_embed_test.v @@ -160,7 +160,7 @@ fn test_embed_method_generic() { type Piece = King | Queen -struct Position { +struct Pos { x byte y byte } @@ -171,11 +171,11 @@ enum TeamEnum { } struct PieceCommonFields { - pos Position + pos Pos team TeamEnum } -fn (p PieceCommonFields) get_pos() Position { +fn (p PieceCommonFields) get_pos() Pos { return p.pos } @@ -187,16 +187,16 @@ struct Queen { PieceCommonFields } -fn (piece Piece) position() Position { - mut pos := Position{} +fn (piece Piece) pos() Pos { + mut pos := Pos{} match piece { King, Queen { pos = piece.pos } } return pos } -fn (piece Piece) get_position() Position { - mut pos := Position{} +fn (piece Piece) get_pos() Pos { + mut pos := Pos{} match piece { King, Queen { pos = piece.get_pos() } } @@ -205,20 +205,20 @@ fn (piece Piece) get_position() Position { fn test_match_aggregate_field() { piece := Piece(King{ - pos: Position{1, 8} + pos: Pos{1, 8} team: .black }) - pos := piece.position() + pos := piece.pos() assert pos.x == 1 assert pos.y == 8 } fn test_match_aggregate_method() { piece := Piece(King{ - pos: Position{1, 8} + pos: Pos{1, 8} team: .black }) - pos := piece.get_position() + pos := piece.get_pos() assert pos.x == 1 assert pos.y == 8 } diff --git a/vlib/v/token/position.v b/vlib/v/token/pos.v similarity index 71% rename from vlib/v/token/position.v rename to vlib/v/token/pos.v index 9fe2cd454..f9835bb02 100644 --- a/vlib/v/token/position.v +++ b/vlib/v/token/pos.v @@ -3,7 +3,7 @@ // that can be found in the LICENSE file. module token -pub struct Position { +pub struct Pos { pub: len int // length of the literal in the source line_nr int // the line number in the source where the token occured @@ -14,23 +14,23 @@ pub mut: } [unsafe] -pub fn (mut p Position) free() { +pub fn (mut p Pos) free() { } -pub fn (p Position) line_str() string { +pub fn (p Pos) line_str() string { return '{l: ${p.line_nr + 1:5}, c: ${p.col:3}, p: ${p.pos:5}, ll: ${p.last_line + 1:5}}' } -pub fn (pos Position) extend(end Position) Position { - return Position{ +pub fn (pos Pos) extend(end Pos) Pos { + return Pos{ ...pos len: end.pos - pos.pos + end.len last_line: end.last_line } } -pub fn (pos Position) extend_with_last_line(end Position, last_line int) Position { - return Position{ +pub fn (pos Pos) extend_with_last_line(end Pos, last_line int) Pos { + return Pos{ len: end.pos - pos.pos + end.len line_nr: pos.line_nr pos: pos.pos @@ -39,13 +39,13 @@ pub fn (pos Position) extend_with_last_line(end Position, last_line int) Positio } } -pub fn (mut pos Position) update_last_line(last_line int) { +pub fn (mut pos Pos) update_last_line(last_line int) { pos.last_line = last_line - 1 } [inline] -pub fn (tok &Token) position() Position { - return Position{ +pub fn (tok &Token) pos() Pos { + return Pos{ len: tok.len line_nr: tok.line_nr - 1 pos: tok.pos diff --git a/vlib/v/transformer/transformer.v b/vlib/v/transformer/transformer.v index 5a4eb4be1..3eb278fd9 100644 --- a/vlib/v/transformer/transformer.v +++ b/vlib/v/transformer/transformer.v @@ -657,9 +657,9 @@ pub fn (mut t Transformer) infix_expr(mut node ast.InfixExpr) ast.Expr { node.left = t.expr(mut node.left) node.right = t.expr(mut node.right) - mut pos := node.left.position() + mut pos := node.left.pos() pos.extend(node.pos) - pos.extend(node.right.position()) + pos.extend(node.right.pos()) if t.pref.is_debug { return node diff --git a/vlib/v/util/errors.v b/vlib/v/util/errors.v index 754fb442b..3af9f2ff6 100644 --- a/vlib/v/util/errors.v +++ b/vlib/v/util/errors.v @@ -69,7 +69,7 @@ fn color(kind string, msg string) string { } // formatted_error - `kind` may be 'error' or 'warn' -pub fn formatted_error(kind string, omsg string, filepath string, pos token.Position) string { +pub fn formatted_error(kind string, omsg string, filepath string, pos token.Pos) string { emsg := omsg.replace('main.', '') mut path := filepath verror_paths_override := os.getenv('VERROR_PATHS') @@ -120,7 +120,7 @@ pub fn cached_file2sourcelines(path string) []string { return res } -pub fn source_file_context(kind string, filepath string, pos token.Position) []string { +pub fn source_file_context(kind string, filepath string, pos token.Pos) []string { mut clines := []string{} source_lines := unsafe { cached_file2sourcelines(filepath) } if source_lines.len == 0 { diff --git a/vlib/v/vet/vet.v b/vlib/v/vet/vet.v index 39feab0d4..98e8ddaec 100644 --- a/vlib/v/vet/vet.v +++ b/vlib/v/vet/vet.v @@ -27,10 +27,10 @@ pub mut: kind ErrorKind [required] pub: // General message - message string [required] - details string // Details about how to resolve or fix the situation - file_path string // file where the error have origin - pos token.Position // position in the file - fix FixKind [required] - typ ErrorType [required] + message string [required] + details string // Details about how to resolve or fix the situation + file_path string // file where the error have origin + pos token.Pos // position in the file + fix FixKind [required] + typ ErrorType [required] } -- 2.30.2