1
0
mirror of https://github.com/vlang/v.git synced 2023-08-10 21:13:21 +03:00

parser: ptr++,*(ptr+1)

This commit is contained in:
BigBlack
2019-11-12 04:39:16 +08:00
committed by Alexander Medvednikov
parent bd34524a1c
commit 99169ae4ff
3 changed files with 18 additions and 2 deletions

View File

@@ -146,6 +146,19 @@ fn (p mut Parser) name_expr() string {
p.next() p.next()
} }
if p.tok == .lpar {
p.gen('*'.repeat(deref_nr))
p.gen('(')
p.check(.lpar)
mut temp_type := p.bool_expression()
p.gen(')')
p.check(.rpar)
for _ in 0..deref_nr {
temp_type = temp_type.replace_once('*', '')
}
return temp_type
}
mut name := p.lit mut name := p.lit
// Raw string (`s := r'hello \n ') // Raw string (`s := r'hello \n ')
if name == 'r' && p.peek() == .str { if name == 'r' && p.peek() == .str {

View File

@@ -1623,7 +1623,7 @@ fn (p mut Parser) var_expr(v Var) string {
if !v.is_changed { if !v.is_changed {
p.mark_var_changed(v) p.mark_var_changed(v)
} }
if typ != 'int' { if typ != 'int' && !typ.contains('*') {
if !p.pref.translated && !is_number_type(typ) { if !p.pref.translated && !is_number_type(typ) {
p.error('cannot ++/-- value of type `$typ`') p.error('cannot ++/-- value of type `$typ`')
} }
@@ -1635,7 +1635,7 @@ fn (p mut Parser) var_expr(v Var) string {
//return p.index_expr(typ, fn_ph) //return p.index_expr(typ, fn_ph)
} }
else { else {
return 'void' return typ
} }
} }
typ = p.index_expr(typ, fn_ph) typ = p.index_expr(typ, fn_ph)

View File

@@ -5,6 +5,9 @@ fn test_pointer_arithmetic() {
mut parr := *int(arr.data) mut parr := *int(arr.data)
parr += 1 parr += 1
assert 2 == *parr assert 2 == *parr
parr++
assert 3 == *parr
assert *(parr + 1) == 4
} }
} }