mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
parser: make most of parser methods private (#18249)
This commit is contained in:
parent
190f5c69ea
commit
f1c647cbbe
|
@ -15,7 +15,7 @@ const (
|
||||||
'sumtype', 'alias', 'function', 'option']
|
'sumtype', 'alias', 'function', 'option']
|
||||||
)
|
)
|
||||||
|
|
||||||
pub fn (mut p Parser) parse_comptime_type() ast.ComptimeType {
|
fn (mut p Parser) parse_comptime_type() ast.ComptimeType {
|
||||||
mut node := ast.ComptimeType{ast.ComptimeTypeKind.map_, p.tok.pos()}
|
mut node := ast.ComptimeType{ast.ComptimeTypeKind.map_, p.tok.pos()}
|
||||||
|
|
||||||
p.check(.dollar)
|
p.check(.dollar)
|
||||||
|
|
|
@ -7,7 +7,7 @@ import v.ast
|
||||||
import v.vet
|
import v.vet
|
||||||
import v.token
|
import v.token
|
||||||
|
|
||||||
pub fn (mut p Parser) expr(precedence int) ast.Expr {
|
fn (mut p Parser) expr(precedence int) ast.Expr {
|
||||||
return p.check_expr(precedence) or {
|
return p.check_expr(precedence) or {
|
||||||
if token.is_decl(p.tok.kind) && p.disallow_declarations_in_script_mode() {
|
if token.is_decl(p.tok.kind) && p.disallow_declarations_in_script_mode() {
|
||||||
return ast.empty_expr
|
return ast.empty_expr
|
||||||
|
@ -16,7 +16,7 @@ pub fn (mut p Parser) expr(precedence int) ast.Expr {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn (mut p Parser) check_expr(precedence int) !ast.Expr {
|
fn (mut p Parser) check_expr(precedence int) !ast.Expr {
|
||||||
p.trace_parser('expr(${precedence})')
|
p.trace_parser('expr(${precedence})')
|
||||||
mut node := ast.empty_expr
|
mut node := ast.empty_expr
|
||||||
is_stmt_ident := p.is_stmt_ident
|
is_stmt_ident := p.is_stmt_ident
|
||||||
|
@ -461,7 +461,7 @@ pub fn (mut p Parser) check_expr(precedence int) !ast.Expr {
|
||||||
return p.expr_with_left(node, precedence, is_stmt_ident)
|
return p.expr_with_left(node, precedence, is_stmt_ident)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn (mut p Parser) expr_with_left(left ast.Expr, precedence int, is_stmt_ident bool) ast.Expr {
|
fn (mut p Parser) expr_with_left(left ast.Expr, precedence int, is_stmt_ident bool) ast.Expr {
|
||||||
mut node := left
|
mut node := left
|
||||||
if p.inside_asm && p.prev_tok.pos().line_nr < p.tok.pos().line_nr {
|
if p.inside_asm && p.prev_tok.pos().line_nr < p.tok.pos().line_nr {
|
||||||
return node
|
return node
|
||||||
|
|
|
@ -8,7 +8,7 @@ import v.token
|
||||||
import v.util
|
import v.util
|
||||||
import os
|
import os
|
||||||
|
|
||||||
pub fn (mut p Parser) call_expr(language ast.Language, mod string) ast.CallExpr {
|
fn (mut p Parser) call_expr(language ast.Language, mod string) ast.CallExpr {
|
||||||
first_pos := p.tok.pos()
|
first_pos := p.tok.pos()
|
||||||
mut fn_name := if language == .c {
|
mut fn_name := if language == .c {
|
||||||
'C.${p.check_name()}'
|
'C.${p.check_name()}'
|
||||||
|
@ -89,7 +89,7 @@ pub fn (mut p Parser) call_expr(language ast.Language, mod string) ast.CallExpr
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn (mut p Parser) call_args() []ast.CallArg {
|
fn (mut p Parser) call_args() []ast.CallArg {
|
||||||
mut args := []ast.CallArg{}
|
mut args := []ast.CallArg{}
|
||||||
start_pos := p.tok.pos()
|
start_pos := p.tok.pos()
|
||||||
for p.tok.kind != .rpar {
|
for p.tok.kind != .rpar {
|
||||||
|
|
|
@ -6,7 +6,7 @@ module parser
|
||||||
import v.ast
|
import v.ast
|
||||||
|
|
||||||
// return true if file being parsed imports `mod`
|
// return true if file being parsed imports `mod`
|
||||||
pub fn (p &Parser) known_import(mod string) bool {
|
fn (p &Parser) known_import(mod string) bool {
|
||||||
return mod in p.imports
|
return mod in p.imports
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@ import v.token
|
||||||
|
|
||||||
const maximum_inline_sum_type_variants = 3
|
const maximum_inline_sum_type_variants = 3
|
||||||
|
|
||||||
pub fn (mut p Parser) parse_array_type(expecting token.Kind, is_option bool) ast.Type {
|
fn (mut p Parser) parse_array_type(expecting token.Kind, is_option bool) ast.Type {
|
||||||
p.check(expecting)
|
p.check(expecting)
|
||||||
// fixed array
|
// fixed array
|
||||||
if p.tok.kind in [.number, .name] {
|
if p.tok.kind in [.number, .name] {
|
||||||
|
@ -104,7 +104,7 @@ pub fn (mut p Parser) parse_array_type(expecting token.Kind, is_option bool) ast
|
||||||
return ast.new_type(idx)
|
return ast.new_type(idx)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn (mut p Parser) parse_map_type() ast.Type {
|
fn (mut p Parser) parse_map_type() ast.Type {
|
||||||
is_option := p.tok.kind == .question && p.peek_tok.kind == .name // option map
|
is_option := p.tok.kind == .question && p.peek_tok.kind == .name // option map
|
||||||
if is_option {
|
if is_option {
|
||||||
p.next()
|
p.next()
|
||||||
|
@ -155,7 +155,7 @@ pub fn (mut p Parser) parse_map_type() ast.Type {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn (mut p Parser) parse_chan_type() ast.Type {
|
fn (mut p Parser) parse_chan_type() ast.Type {
|
||||||
if p.peek_tok.kind !in [.name, .key_mut, .amp, .lsbr] {
|
if p.peek_tok.kind !in [.name, .key_mut, .amp, .lsbr] {
|
||||||
p.next()
|
p.next()
|
||||||
return ast.chan_type
|
return ast.chan_type
|
||||||
|
@ -171,7 +171,7 @@ pub fn (mut p Parser) parse_chan_type() ast.Type {
|
||||||
return ast.new_type(idx)
|
return ast.new_type(idx)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn (mut p Parser) parse_thread_type() ast.Type {
|
fn (mut p Parser) parse_thread_type() ast.Type {
|
||||||
is_opt := p.peek_tok.kind == .question
|
is_opt := p.peek_tok.kind == .question
|
||||||
if is_opt {
|
if is_opt {
|
||||||
p.next()
|
p.next()
|
||||||
|
@ -198,7 +198,7 @@ pub fn (mut p Parser) parse_thread_type() ast.Type {
|
||||||
return ast.new_type(idx)
|
return ast.new_type(idx)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn (mut p Parser) parse_multi_return_type() ast.Type {
|
fn (mut p Parser) parse_multi_return_type() ast.Type {
|
||||||
p.check(.lpar)
|
p.check(.lpar)
|
||||||
mut mr_types := []ast.Type{}
|
mut mr_types := []ast.Type{}
|
||||||
mut has_generic := false
|
mut has_generic := false
|
||||||
|
@ -230,7 +230,7 @@ pub fn (mut p Parser) parse_multi_return_type() ast.Type {
|
||||||
}
|
}
|
||||||
|
|
||||||
// given anon name based off signature when `name` is blank
|
// given anon name based off signature when `name` is blank
|
||||||
pub fn (mut p Parser) parse_fn_type(name string, generic_types []ast.Type) ast.Type {
|
fn (mut p Parser) parse_fn_type(name string, generic_types []ast.Type) ast.Type {
|
||||||
fn_type_pos := p.peek_token(-2).pos()
|
fn_type_pos := p.peek_token(-2).pos()
|
||||||
p.check(.key_fn)
|
p.check(.key_fn)
|
||||||
|
|
||||||
|
@ -293,7 +293,7 @@ pub fn (mut p Parser) parse_fn_type(name string, generic_types []ast.Type) ast.T
|
||||||
return ast.new_type(idx)
|
return ast.new_type(idx)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn (mut p Parser) parse_type_with_mut(is_mut bool) ast.Type {
|
fn (mut p Parser) parse_type_with_mut(is_mut bool) ast.Type {
|
||||||
typ := p.parse_type()
|
typ := p.parse_type()
|
||||||
if is_mut {
|
if is_mut {
|
||||||
return typ.set_nr_muls(1)
|
return typ.set_nr_muls(1)
|
||||||
|
@ -302,7 +302,7 @@ pub fn (mut p Parser) parse_type_with_mut(is_mut bool) ast.Type {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Parses any language indicators on a type.
|
// Parses any language indicators on a type.
|
||||||
pub fn (mut p Parser) parse_language() ast.Language {
|
fn (mut p Parser) parse_language() ast.Language {
|
||||||
language := if p.tok.lit == 'C' {
|
language := if p.tok.lit == 'C' {
|
||||||
ast.Language.c
|
ast.Language.c
|
||||||
} else if p.tok.lit == 'JS' {
|
} else if p.tok.lit == 'JS' {
|
||||||
|
@ -321,7 +321,7 @@ pub fn (mut p Parser) parse_language() ast.Language {
|
||||||
|
|
||||||
// parse_inline_sum_type parses the type and registers it in case the type is an anonymous sum type.
|
// parse_inline_sum_type parses the type and registers it in case the type is an anonymous sum type.
|
||||||
// It also takes care of inline sum types where parse_type only parses a standalone type.
|
// It also takes care of inline sum types where parse_type only parses a standalone type.
|
||||||
pub fn (mut p Parser) parse_inline_sum_type() ast.Type {
|
fn (mut p Parser) parse_inline_sum_type() ast.Type {
|
||||||
if !p.pref.is_fmt {
|
if !p.pref.is_fmt {
|
||||||
p.warn(
|
p.warn(
|
||||||
'inline sum types have been deprecated and will be removed on January 1, 2023 due ' +
|
'inline sum types have been deprecated and will be removed on January 1, 2023 due ' +
|
||||||
|
@ -363,7 +363,7 @@ pub fn (mut p Parser) parse_inline_sum_type() ast.Type {
|
||||||
|
|
||||||
// parse_sum_type_variants parses several types separated with a pipe and returns them as a list with at least one node.
|
// parse_sum_type_variants parses several types separated with a pipe and returns them as a list with at least one node.
|
||||||
// If there is less than one node, it will add an error to the error list.
|
// If there is less than one node, it will add an error to the error list.
|
||||||
pub fn (mut p Parser) parse_sum_type_variants() []ast.TypeNode {
|
fn (mut p Parser) parse_sum_type_variants() []ast.TypeNode {
|
||||||
p.inside_sum_type = true
|
p.inside_sum_type = true
|
||||||
defer {
|
defer {
|
||||||
p.inside_sum_type = false
|
p.inside_sum_type = false
|
||||||
|
@ -390,7 +390,7 @@ pub fn (mut p Parser) parse_sum_type_variants() []ast.TypeNode {
|
||||||
return types
|
return types
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn (mut p Parser) parse_type() ast.Type {
|
fn (mut p Parser) parse_type() ast.Type {
|
||||||
// option or result
|
// option or result
|
||||||
mut is_option := false
|
mut is_option := false
|
||||||
mut is_result := false
|
mut is_result := false
|
||||||
|
@ -507,7 +507,7 @@ If you need to modify an array in a function, use a mutable argument instead: `f
|
||||||
return typ
|
return typ
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn (mut p Parser) parse_any_type(language ast.Language, is_ptr bool, check_dot bool, is_option bool) ast.Type {
|
fn (mut p Parser) parse_any_type(language ast.Language, is_ptr bool, check_dot bool, is_option bool) ast.Type {
|
||||||
mut name := p.tok.lit
|
mut name := p.tok.lit
|
||||||
if language == .c {
|
if language == .c {
|
||||||
name = 'C.${name}'
|
name = 'C.${name}'
|
||||||
|
@ -670,7 +670,7 @@ pub fn (mut p Parser) parse_any_type(language ast.Language, is_ptr bool, check_d
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn (mut p Parser) find_type_or_add_placeholder(name string, language ast.Language) ast.Type {
|
fn (mut p Parser) find_type_or_add_placeholder(name string, language ast.Language) ast.Type {
|
||||||
// struct / enum / placeholder
|
// struct / enum / placeholder
|
||||||
mut idx := p.table.find_type_idx(name)
|
mut idx := p.table.find_type_idx(name)
|
||||||
if idx > 0 {
|
if idx > 0 {
|
||||||
|
@ -712,7 +712,7 @@ pub fn (mut p Parser) find_type_or_add_placeholder(name string, language ast.Lan
|
||||||
return ast.new_type(idx)
|
return ast.new_type(idx)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn (mut p Parser) parse_generic_type(name string) ast.Type {
|
fn (mut p Parser) parse_generic_type(name string) ast.Type {
|
||||||
mut idx := p.table.find_type_idx(name)
|
mut idx := p.table.find_type_idx(name)
|
||||||
if idx > 0 {
|
if idx > 0 {
|
||||||
return ast.new_type(idx).set_flag(.generic)
|
return ast.new_type(idx).set_flag(.generic)
|
||||||
|
@ -727,7 +727,7 @@ pub fn (mut p Parser) parse_generic_type(name string) ast.Type {
|
||||||
return ast.new_type(idx).set_flag(.generic)
|
return ast.new_type(idx).set_flag(.generic)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn (mut p Parser) parse_generic_inst_type(name string) ast.Type {
|
fn (mut p Parser) parse_generic_inst_type(name string) ast.Type {
|
||||||
mut bs_name := name
|
mut bs_name := name
|
||||||
mut bs_cname := name
|
mut bs_cname := name
|
||||||
start_pos := p.tok.pos()
|
start_pos := p.tok.pos()
|
||||||
|
|
|
@ -176,7 +176,7 @@ pub fn (mut p Parser) free() {
|
||||||
}
|
}
|
||||||
|
|
||||||
[unsafe]
|
[unsafe]
|
||||||
pub fn (mut p Parser) free_scanner() {
|
fn (mut p Parser) free_scanner() {
|
||||||
unsafe {
|
unsafe {
|
||||||
if p.scanner != 0 {
|
if p.scanner != 0 {
|
||||||
p.scanner.free()
|
p.scanner.free()
|
||||||
|
@ -463,19 +463,19 @@ pub fn (mut p Parser) codegen(code string) {
|
||||||
p.codegen_text += '\n' + code
|
p.codegen_text += '\n' + code
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn (mut p Parser) init_parse_fns() {
|
fn (mut p Parser) init_parse_fns() {
|
||||||
// p.prefix_parse_fns = make(100, 100, sizeof(PrefixParseFn))
|
// p.prefix_parse_fns = make(100, 100, sizeof(PrefixParseFn))
|
||||||
// p.prefix_parse_fns[token.Kind.name] = parse_name
|
// p.prefix_parse_fns[token.Kind.name] = parse_name
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn (mut p Parser) read_first_token() {
|
fn (mut p Parser) read_first_token() {
|
||||||
// need to call next() 2 times to get peek token and current token
|
// need to call next() 2 times to get peek token and current token
|
||||||
p.next()
|
p.next()
|
||||||
p.next()
|
p.next()
|
||||||
}
|
}
|
||||||
|
|
||||||
[inline]
|
[inline]
|
||||||
pub fn (p &Parser) peek_token(n int) token.Token {
|
fn (p &Parser) peek_token(n int) token.Token {
|
||||||
return p.scanner.peek_token(n - 2)
|
return p.scanner.peek_token(n - 2)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -554,14 +554,14 @@ fn (p &Parser) is_array_type() bool {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn (mut p Parser) open_scope() {
|
fn (mut p Parser) open_scope() {
|
||||||
p.scope = &ast.Scope{
|
p.scope = &ast.Scope{
|
||||||
parent: p.scope
|
parent: p.scope
|
||||||
start_pos: p.tok.pos
|
start_pos: p.tok.pos
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn (mut p Parser) close_scope() {
|
fn (mut p Parser) close_scope() {
|
||||||
// p.scope.end_pos = p.tok.pos
|
// p.scope.end_pos = p.tok.pos
|
||||||
// NOTE: since this is usually called after `p.parse_block()`
|
// NOTE: since this is usually called after `p.parse_block()`
|
||||||
// ie. when `prev_tok` is rcbr `}` we most likely want `prev_tok`
|
// ie. when `prev_tok` is rcbr `}` we most likely want `prev_tok`
|
||||||
|
@ -572,14 +572,14 @@ pub fn (mut p Parser) close_scope() {
|
||||||
p.scope = p.scope.parent
|
p.scope = p.scope.parent
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn (mut p Parser) parse_block() []ast.Stmt {
|
fn (mut p Parser) parse_block() []ast.Stmt {
|
||||||
p.open_scope()
|
p.open_scope()
|
||||||
stmts := p.parse_block_no_scope(false)
|
stmts := p.parse_block_no_scope(false)
|
||||||
p.close_scope()
|
p.close_scope()
|
||||||
return stmts
|
return stmts
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn (mut p Parser) parse_block_no_scope(is_top_level bool) []ast.Stmt {
|
fn (mut p Parser) parse_block_no_scope(is_top_level bool) []ast.Stmt {
|
||||||
p.check(.lcbr)
|
p.check(.lcbr)
|
||||||
mut stmts := []ast.Stmt{cap: 20}
|
mut stmts := []ast.Stmt{cap: 20}
|
||||||
if p.tok.kind != .rcbr {
|
if p.tok.kind != .rcbr {
|
||||||
|
@ -691,7 +691,7 @@ fn (p &Parser) trace_parser(label string) {
|
||||||
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}')
|
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 {
|
fn (mut p Parser) top_stmt() ast.Stmt {
|
||||||
p.trace_parser('top_stmt')
|
p.trace_parser('top_stmt')
|
||||||
for {
|
for {
|
||||||
match p.tok.kind {
|
match p.tok.kind {
|
||||||
|
@ -860,14 +860,14 @@ fn (mut p Parser) other_stmts(cur_stmt ast.Stmt) ast.Stmt {
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO [if vfmt]
|
// TODO [if vfmt]
|
||||||
pub fn (mut p Parser) check_comment() ast.Comment {
|
fn (mut p Parser) check_comment() ast.Comment {
|
||||||
if p.tok.kind == .comment {
|
if p.tok.kind == .comment {
|
||||||
return p.comment()
|
return p.comment()
|
||||||
}
|
}
|
||||||
return ast.Comment{}
|
return ast.Comment{}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn (mut p Parser) comment() ast.Comment {
|
fn (mut p Parser) comment() ast.Comment {
|
||||||
mut pos := p.tok.pos()
|
mut pos := p.tok.pos()
|
||||||
text := p.tok.lit
|
text := p.tok.lit
|
||||||
num_newlines := text.count('\n')
|
num_newlines := text.count('\n')
|
||||||
|
@ -888,7 +888,7 @@ pub fn (mut p Parser) comment() ast.Comment {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn (mut p Parser) comment_stmt() ast.ExprStmt {
|
fn (mut p Parser) comment_stmt() ast.ExprStmt {
|
||||||
comment := p.comment()
|
comment := p.comment()
|
||||||
return ast.ExprStmt{
|
return ast.ExprStmt{
|
||||||
expr: comment
|
expr: comment
|
||||||
|
@ -902,7 +902,7 @@ struct EatCommentsConfig {
|
||||||
follow_up bool // Comments directly below the previous token as long as there is no empty line
|
follow_up bool // Comments directly below the previous token as long as there is no empty line
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn (mut p Parser) eat_comments(cfg EatCommentsConfig) []ast.Comment {
|
fn (mut p Parser) eat_comments(cfg EatCommentsConfig) []ast.Comment {
|
||||||
mut line := p.prev_tok.line_nr
|
mut line := p.prev_tok.line_nr
|
||||||
mut comments := []ast.Comment{}
|
mut comments := []ast.Comment{}
|
||||||
for {
|
for {
|
||||||
|
@ -918,7 +918,7 @@ pub fn (mut p Parser) eat_comments(cfg EatCommentsConfig) []ast.Comment {
|
||||||
return comments
|
return comments
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn (mut p Parser) stmt(is_top_level bool) ast.Stmt {
|
fn (mut p Parser) stmt(is_top_level bool) ast.Stmt {
|
||||||
p.trace_parser('stmt(${is_top_level})')
|
p.trace_parser('stmt(${is_top_level})')
|
||||||
p.is_stmt_ident = p.tok.kind == .name
|
p.is_stmt_ident = p.tok.kind == .name
|
||||||
match p.tok.kind {
|
match p.tok.kind {
|
||||||
|
@ -1874,19 +1874,19 @@ fn (mut p Parser) parse_attr() ast.Attr {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn (mut p Parser) language_not_allowed_error(language ast.Language, pos token.Pos) {
|
fn (mut p Parser) language_not_allowed_error(language ast.Language, pos token.Pos) {
|
||||||
upcase_language := language.str().to_upper()
|
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',
|
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)
|
pos)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn (mut p Parser) language_not_allowed_warning(language ast.Language, pos token.Pos) {
|
fn (mut p Parser) language_not_allowed_warning(language ast.Language, pos token.Pos) {
|
||||||
upcase_language := language.str().to_upper()
|
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',
|
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)
|
pos)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn (mut p Parser) check_for_impure_v(language ast.Language, pos token.Pos) {
|
fn (mut p Parser) check_for_impure_v(language ast.Language, pos token.Pos) {
|
||||||
if language == .v {
|
if language == .v {
|
||||||
// pure V code is always allowed everywhere
|
// pure V code is always allowed everywhere
|
||||||
return
|
return
|
||||||
|
@ -1919,19 +1919,19 @@ pub fn (mut p Parser) check_for_impure_v(language ast.Language, pos token.Pos) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn (mut p Parser) error(s string) ast.NodeError {
|
fn (mut p Parser) error(s string) ast.NodeError {
|
||||||
return p.error_with_pos(s, p.tok.pos())
|
return p.error_with_pos(s, p.tok.pos())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn (mut p Parser) warn(s string) {
|
fn (mut p Parser) warn(s string) {
|
||||||
p.warn_with_pos(s, p.tok.pos())
|
p.warn_with_pos(s, p.tok.pos())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn (mut p Parser) note(s string) {
|
fn (mut p Parser) note(s string) {
|
||||||
p.note_with_pos(s, p.tok.pos())
|
p.note_with_pos(s, p.tok.pos())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn (mut p Parser) error_with_pos(s string, pos token.Pos) ast.NodeError {
|
fn (mut p Parser) error_with_pos(s string, pos token.Pos) ast.NodeError {
|
||||||
mut kind := 'error:'
|
mut kind := 'error:'
|
||||||
if p.pref.fatal_errors {
|
if p.pref.fatal_errors {
|
||||||
util.show_compiler_message(kind, pos: pos, file_path: p.file_name, message: s)
|
util.show_compiler_message(kind, pos: pos, file_path: p.file_name, message: s)
|
||||||
|
@ -1971,7 +1971,7 @@ pub fn (mut p Parser) error_with_pos(s string, pos token.Pos) ast.NodeError {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn (mut p Parser) error_with_error(error errors.Error) {
|
fn (mut p Parser) error_with_error(error errors.Error) {
|
||||||
mut kind := 'error:'
|
mut kind := 'error:'
|
||||||
if p.pref.fatal_errors {
|
if p.pref.fatal_errors {
|
||||||
util.show_compiler_message(kind, error.CompilerMessage)
|
util.show_compiler_message(kind, error.CompilerMessage)
|
||||||
|
@ -2000,7 +2000,7 @@ pub fn (mut p Parser) error_with_error(error errors.Error) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn (mut p Parser) warn_with_pos(s string, pos token.Pos) {
|
fn (mut p Parser) warn_with_pos(s string, pos token.Pos) {
|
||||||
if p.pref.warns_are_errors {
|
if p.pref.warns_are_errors {
|
||||||
p.error_with_pos(s, pos)
|
p.error_with_pos(s, pos)
|
||||||
return
|
return
|
||||||
|
@ -2024,7 +2024,7 @@ pub fn (mut p Parser) warn_with_pos(s string, pos token.Pos) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn (mut p Parser) note_with_pos(s string, pos token.Pos) {
|
fn (mut p Parser) note_with_pos(s string, pos token.Pos) {
|
||||||
if p.pref.skip_warnings {
|
if p.pref.skip_warnings {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -2043,7 +2043,7 @@ pub fn (mut p Parser) note_with_pos(s string, pos token.Pos) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn (mut p Parser) vet_error(msg string, line int, fix vet.FixKind, typ vet.ErrorType) {
|
fn (mut p Parser) vet_error(msg string, line int, fix vet.FixKind, typ vet.ErrorType) {
|
||||||
pos := token.Pos{
|
pos := token.Pos{
|
||||||
line_nr: line + 1
|
line_nr: line + 1
|
||||||
}
|
}
|
||||||
|
@ -2142,7 +2142,7 @@ fn (mut p Parser) is_following_concrete_types() bool {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn (mut p Parser) ident(language ast.Language) ast.Ident {
|
fn (mut p Parser) ident(language ast.Language) ast.Ident {
|
||||||
is_option := p.tok.kind == .question && p.peek_tok.kind == .lsbr
|
is_option := p.tok.kind == .question && p.peek_tok.kind == .lsbr
|
||||||
if is_option {
|
if is_option {
|
||||||
p.next()
|
p.next()
|
||||||
|
@ -2407,7 +2407,7 @@ fn (mut p Parser) is_generic_cast() bool {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn (mut p Parser) name_expr() ast.Expr {
|
fn (mut p Parser) name_expr() ast.Expr {
|
||||||
prev_tok_kind := p.prev_tok.kind
|
prev_tok_kind := p.prev_tok.kind
|
||||||
mut node := ast.empty_expr
|
mut node := ast.empty_expr
|
||||||
|
|
||||||
|
@ -4225,7 +4225,7 @@ fn (mut p Parser) rewind_scanner_to_current_token_in_new_mode() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// returns true if `varname` is known
|
// returns true if `varname` is known
|
||||||
pub fn (mut p Parser) mark_var_as_used(varname string) bool {
|
fn (mut p Parser) mark_var_as_used(varname string) bool {
|
||||||
if mut obj := p.scope.find(varname) {
|
if mut obj := p.scope.find(varname) {
|
||||||
match mut obj {
|
match mut obj {
|
||||||
ast.Var {
|
ast.Var {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user