mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
force mut a := ...
, do not allow mut a = ...
This commit is contained in:
parent
806ad80360
commit
42bb85197a
@ -32,14 +32,14 @@ pub fn ptr_str(ptr voidptr) string {
|
|||||||
// return i
|
// return i
|
||||||
// }
|
// }
|
||||||
pub fn (nn int) str() string {
|
pub fn (nn int) str() string {
|
||||||
mut n = nn
|
mut n := nn
|
||||||
if n == 0 {
|
if n == 0 {
|
||||||
return '0'
|
return '0'
|
||||||
}
|
}
|
||||||
max := 16
|
max := 16
|
||||||
mut buf := malloc(max)
|
mut buf := malloc(max)
|
||||||
mut len := 0
|
mut len := 0
|
||||||
mut is_neg = false
|
mut is_neg := false
|
||||||
if n < 0 {
|
if n < 0 {
|
||||||
n = -n
|
n = -n
|
||||||
is_neg = true
|
is_neg = true
|
||||||
@ -60,14 +60,14 @@ pub fn (nn int) str() string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn (nn u8) str() string {
|
pub fn (nn u8) str() string {
|
||||||
mut n = nn
|
mut n := nn
|
||||||
if n == u8(0) {
|
if n == u8(0) {
|
||||||
return '0'
|
return '0'
|
||||||
}
|
}
|
||||||
max := 5
|
max := 5
|
||||||
mut buf := malloc(max)
|
mut buf := malloc(max)
|
||||||
mut len := 0
|
mut len := 0
|
||||||
mut is_neg = false
|
mut is_neg := false
|
||||||
if n < u8(0) {
|
if n < u8(0) {
|
||||||
n = -n
|
n = -n
|
||||||
is_neg = true
|
is_neg = true
|
||||||
@ -88,14 +88,14 @@ pub fn (nn u8) str() string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn (nn i64) str() string {
|
pub fn (nn i64) str() string {
|
||||||
mut n = nn
|
mut n := nn
|
||||||
if n == i64(0) {
|
if n == i64(0) {
|
||||||
return '0'
|
return '0'
|
||||||
}
|
}
|
||||||
max := 32
|
max := 32
|
||||||
mut buf := malloc(max)
|
mut buf := malloc(max)
|
||||||
mut len := 0
|
mut len := 0
|
||||||
mut is_neg = false
|
mut is_neg := false
|
||||||
if n < i64(0) {
|
if n < i64(0) {
|
||||||
n = -n
|
n = -n
|
||||||
is_neg = true
|
is_neg = true
|
||||||
|
@ -110,7 +110,7 @@ pub fn (s string) replace(rep, with string) string {
|
|||||||
// Fill the new string
|
// Fill the new string
|
||||||
mut idx_pos := 0
|
mut idx_pos := 0
|
||||||
mut cur_idx := idxs[idx_pos]
|
mut cur_idx := idxs[idx_pos]
|
||||||
mut b_i = 0
|
mut b_i := 0
|
||||||
for i := 0; i < s.len; i++ {
|
for i := 0; i < s.len; i++ {
|
||||||
// Reached the location of rep, replace it with "with"
|
// Reached the location of rep, replace it with "with"
|
||||||
if i == cur_idx {
|
if i == cur_idx {
|
||||||
|
@ -531,7 +531,7 @@ fn (p mut Parser) fn_call(f Fn, method_ph int, receiver_var, receiver_type strin
|
|||||||
if !receiver.is_mut && receiver_type.contains('*') {
|
if !receiver.is_mut && receiver_type.contains('*') {
|
||||||
method_call += '*'
|
method_call += '*'
|
||||||
}
|
}
|
||||||
mut cast = ''
|
mut cast := ''
|
||||||
// Method returns (void*) => cast it to int, string, user etc
|
// Method returns (void*) => cast it to int, string, user etc
|
||||||
// number := *(int*)numbers.first()
|
// number := *(int*)numbers.first()
|
||||||
if f.typ == 'void*' {
|
if f.typ == 'void*' {
|
||||||
|
@ -693,7 +693,7 @@ fn (p mut Parser) get_type() string {
|
|||||||
debug := p.fileis('fn_test') && false
|
debug := p.fileis('fn_test') && false
|
||||||
mut mul := false
|
mut mul := false
|
||||||
mut nr_muls := 0
|
mut nr_muls := 0
|
||||||
mut typ = ''
|
mut typ := ''
|
||||||
// fn type
|
// fn type
|
||||||
if p.tok == FUNC {
|
if p.tok == FUNC {
|
||||||
if debug {
|
if debug {
|
||||||
@ -941,6 +941,7 @@ fn (p mut Parser) statement(add_semi bool) string {
|
|||||||
p.check(COLON)
|
p.check(COLON)
|
||||||
return ''
|
return ''
|
||||||
}
|
}
|
||||||
|
// `a := 777`
|
||||||
else if p.peek() == DECL_ASSIGN {
|
else if p.peek() == DECL_ASSIGN {
|
||||||
p.log('var decl')
|
p.log('var decl')
|
||||||
p.var_decl()
|
p.var_decl()
|
||||||
@ -949,7 +950,7 @@ fn (p mut Parser) statement(add_semi bool) string {
|
|||||||
p.js_decode()
|
p.js_decode()
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// "a + 3", "a(7)" or maybe just "a"
|
// `a + 3`, `a(7)` or maybe just `a`
|
||||||
q = p.bool_expression()
|
q = p.bool_expression()
|
||||||
}
|
}
|
||||||
case GOTO:
|
case GOTO:
|
||||||
@ -1081,34 +1082,20 @@ fn (p mut Parser) var_decl() {
|
|||||||
}
|
}
|
||||||
// println('var decl tok=${p.strtok()} ismut=$is_mut')
|
// println('var decl tok=${p.strtok()} ismut=$is_mut')
|
||||||
name := p.check_name()
|
name := p.check_name()
|
||||||
p.fgen(' := ')
|
|
||||||
// Don't allow declaring a variable with the same name. Even in a child scope
|
// Don't allow declaring a variable with the same name. Even in a child scope
|
||||||
// (shadowing is not allowed)
|
// (shadowing is not allowed)
|
||||||
if !p.builtin_pkg && p.cur_fn.known_var(name) {
|
if !p.builtin_pkg && p.cur_fn.known_var(name) {
|
||||||
v := p.cur_fn.find_var(name)
|
v := p.cur_fn.find_var(name)
|
||||||
p.error('redefinition of `$name`')
|
p.error('redefinition of `$name`')
|
||||||
// Check if this variable has already been declared only in the first run.
|
|
||||||
// Otherwise the is_script code outside main will run in the first run
|
|
||||||
// since we can't skip the function body since there's no function.
|
|
||||||
// And the variable will be registered twice.
|
|
||||||
if p.is_play && p.first_run() && !p.builtin_pkg {
|
|
||||||
p.error('variable `$name` is already declared.')
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
// println('var_decl $name')
|
p.check_space(DECL_ASSIGN) // :=
|
||||||
// p.assigned_var = name
|
|
||||||
p.next()// :=
|
|
||||||
// Generate expression to tmp because we need its type first
|
// Generate expression to tmp because we need its type first
|
||||||
// [TYP NAME =] bool_expression()
|
// [TYP NAME =] bool_expression()
|
||||||
pos := p.cgen.add_placeholder()
|
pos := p.cgen.add_placeholder()
|
||||||
// p.gen('typ $name = ')
|
|
||||||
// p.gen('/*^^^*/')
|
|
||||||
mut typ := p.bool_expression()
|
mut typ := p.bool_expression()
|
||||||
// p.gen('/*VVV*/')
|
|
||||||
// Option check ? or {
|
// Option check ? or {
|
||||||
or_else := p.tok == OR_ELSE
|
or_else := p.tok == OR_ELSE
|
||||||
tmp := p.get_tmp()
|
tmp := p.get_tmp()
|
||||||
// assigned_var_copy := p.assigned_var
|
|
||||||
if or_else {
|
if or_else {
|
||||||
// Option_User tmp = get_user(1);
|
// Option_User tmp = get_user(1);
|
||||||
// if (!tmp.ok) { or_statement }
|
// if (!tmp.ok) { or_statement }
|
||||||
@ -1126,7 +1113,6 @@ fn (p mut Parser) var_decl() {
|
|||||||
println(p.prev_tok2)
|
println(p.prev_tok2)
|
||||||
p.error('`or` statement must return/continue/break')
|
p.error('`or` statement must return/continue/break')
|
||||||
}
|
}
|
||||||
// p.assigned_var = assigned_var_copy
|
|
||||||
}
|
}
|
||||||
p.register_var(Var {
|
p.register_var(Var {
|
||||||
name: name
|
name: name
|
||||||
@ -1136,11 +1122,9 @@ fn (p mut Parser) var_decl() {
|
|||||||
mut cgen_typ := typ
|
mut cgen_typ := typ
|
||||||
if !or_else {
|
if !or_else {
|
||||||
gen_name := p.table.var_cgen_name(name)
|
gen_name := p.table.var_cgen_name(name)
|
||||||
// p.cgen.set_placeholder(pos, '$cgen_typ $gen_name = ')
|
|
||||||
mut nt_gen := p.table.cgen_name_type_pair(gen_name, cgen_typ) + '='
|
mut nt_gen := p.table.cgen_name_type_pair(gen_name, cgen_typ) + '='
|
||||||
if is_static {
|
if is_static {
|
||||||
nt_gen = 'static $nt_gen'
|
nt_gen = 'static $nt_gen'
|
||||||
// p.gen('static ')
|
|
||||||
}
|
}
|
||||||
p.cgen.set_placeholder(pos, nt_gen)
|
p.cgen.set_placeholder(pos, nt_gen)
|
||||||
}
|
}
|
||||||
@ -1165,7 +1149,7 @@ fn (p mut Parser) bool_expression() string {
|
|||||||
|
|
||||||
fn (p mut Parser) bterm() string {
|
fn (p mut Parser) bterm() string {
|
||||||
ph := p.cgen.add_placeholder()
|
ph := p.cgen.add_placeholder()
|
||||||
mut typ = p.expression()
|
mut typ := p.expression()
|
||||||
is_str := typ=='string'
|
is_str := typ=='string'
|
||||||
tok := p.tok
|
tok := p.tok
|
||||||
// if tok in [ EQ, GT, LT, LE, GE, NE] {
|
// if tok in [ EQ, GT, LT, LE, GE, NE] {
|
||||||
|
@ -129,7 +129,7 @@ fn (s mut Scanner) skip_whitespace() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn (s mut Scanner) get_var_name(pos int) string {
|
fn (s mut Scanner) get_var_name(pos int) string {
|
||||||
mut pos_start = pos
|
mut pos_start := pos
|
||||||
|
|
||||||
for ; pos_start >= 0 && s.text[pos_start] != `\n` && s.text[pos_start] != `;`; pos_start-- {}
|
for ; pos_start >= 0 && s.text[pos_start] != `\n` && s.text[pos_start] != `;`; pos_start-- {}
|
||||||
pos_start++
|
pos_start++
|
||||||
|
@ -100,7 +100,7 @@ fn (t Time) hhmm_tmp() string {
|
|||||||
// 9:04pm
|
// 9:04pm
|
||||||
pub fn (t Time) hhmm12() string {
|
pub fn (t Time) hhmm12() string {
|
||||||
mut am := 'am'
|
mut am := 'am'
|
||||||
mut hour = t.hour
|
mut hour := t.hour
|
||||||
if t.hour > 11 {
|
if t.hour > 11 {
|
||||||
am = 'pm'
|
am = 'pm'
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user