parent
6f5c1f060c
commit
7b9756be72
|
@ -229,10 +229,12 @@ fn (mut p Parser) fn_decl() ast.FnDecl {
|
||||||
}
|
}
|
||||||
mut name := ''
|
mut name := ''
|
||||||
if p.tok.kind == .name {
|
if p.tok.kind == .name {
|
||||||
|
pos := p.tok.position()
|
||||||
// TODO high order fn
|
// TODO high order fn
|
||||||
name = if language == .js { p.check_js_name() } else { p.check_name() }
|
name = if language == .js { p.check_js_name() } else { p.check_name() }
|
||||||
if language == .v && !p.pref.translated && util.contains_capital(name) && p.mod != 'builtin' {
|
if language == .v && !p.pref.translated && util.contains_capital(name) && p.mod != 'builtin' {
|
||||||
p.error('function names cannot contain uppercase letters, use snake_case instead')
|
p.error_with_pos('function names cannot contain uppercase letters, use snake_case instead',
|
||||||
|
pos)
|
||||||
return ast.FnDecl{
|
return ast.FnDecl{
|
||||||
scope: 0
|
scope: 0
|
||||||
}
|
}
|
||||||
|
@ -240,7 +242,14 @@ fn (mut p Parser) fn_decl() ast.FnDecl {
|
||||||
type_sym := p.table.get_type_symbol(rec_type)
|
type_sym := p.table.get_type_symbol(rec_type)
|
||||||
// interfaces are handled in the checker, methods can not be defined on them this way
|
// interfaces are handled in the checker, methods can not be defined on them this way
|
||||||
if is_method && (type_sym.has_method(name) && type_sym.kind != .interface_) {
|
if is_method && (type_sym.has_method(name) && type_sym.kind != .interface_) {
|
||||||
p.error('duplicate method `$name`')
|
p.error_with_pos('duplicate method `$name`', pos)
|
||||||
|
return ast.FnDecl{
|
||||||
|
scope: 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// cannot redefine buildin function
|
||||||
|
if !is_method && p.mod != 'builtin' && name in builtin_functions {
|
||||||
|
p.error_with_pos('cannot redefine builtin function `$name`', pos)
|
||||||
return ast.FnDecl{
|
return ast.FnDecl{
|
||||||
scope: 0
|
scope: 0
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,6 +14,10 @@ import os
|
||||||
import runtime
|
import runtime
|
||||||
import time
|
import time
|
||||||
|
|
||||||
|
const (
|
||||||
|
builtin_functions = ['print', 'println', 'eprint', 'eprintln', 'isnil', 'panic', 'exit']
|
||||||
|
)
|
||||||
|
|
||||||
pub struct Parser {
|
pub struct Parser {
|
||||||
pref &pref.Preferences
|
pref &pref.Preferences
|
||||||
mut:
|
mut:
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
vlib/v/parser/tests/fn_use_builtin_err.vv:1:4: error: cannot redefine builtin function `print`
|
||||||
|
1 | fn print(strings ...string) {
|
||||||
|
| ~~~~~
|
||||||
|
2 | for s in strings {
|
||||||
|
3 | println(s)
|
|
@ -0,0 +1,9 @@
|
||||||
|
fn print(strings ...string) {
|
||||||
|
for s in strings {
|
||||||
|
println(s)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
print('text')
|
||||||
|
}
|
Loading…
Reference in New Issue