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

parser: do not allow "int?", only "?int"

This commit is contained in:
Alexander Medvednikov 2019-09-23 23:17:06 +03:00
parent f27f3515ae
commit d2d75f3824
6 changed files with 10 additions and 17 deletions

View File

@ -1022,12 +1022,9 @@ fn (p mut Parser) get_type() string {
p.register_array(typ) p.register_array(typ)
} }
p.next() p.next()
if p.tok == .question || is_question { if is_question {
typ = 'Option_$typ' typ = 'Option_$typ'
p.table.register_type_with_parent(typ, 'Option') p.table.register_type_with_parent(typ, 'Option')
if p.tok == .question {
p.next()
}
} }
// Because the code uses * to see if it's a pointer // Because the code uses * to see if it's a pointer
if typ == 'byteptr' { if typ == 'byteptr' {

View File

@ -154,17 +154,13 @@ fn (p mut Parser) get_type2() Type {
} }
else if is_arr { else if is_arr {
typ = 'array_$typ' typ = 'array_$typ'
// p.log('ARR TYPE="$typ" run=$p.pass')
// We come across "[]User" etc ? // We come across "[]User" etc ?
p.register_array(typ) p.register_array(typ)
} }
p.next() p.next()
if p.tok == .question || is_question { if is_question {
typ = 'Option_$typ' typ = 'Option_$typ'
p.table.register_type_with_parent(typ, 'Option') p.table.register_type_with_parent(typ, 'Option')
if p.tok == .question {
p.next()
}
} }
if typ.last_index('__') > typ.index('__') { if typ.last_index('__') > typ.index('__') {
p.error('2 __ in gettype(): typ="$typ"') p.error('2 __ in gettype(): typ="$typ"')

View File

@ -25,7 +25,7 @@ pub fn full_path_to_v() string {
return vexec return vexec
} }
pub fn run_repl_file(wd string, vexec string, file string) string? { pub fn run_repl_file(wd string, vexec string, file string) ?string {
fcontent := os.read_file(file) or { return error('Could not read file $file') } fcontent := os.read_file(file) or { return error('Could not read file $file') }
content := fcontent.replace('\r', '') content := fcontent.replace('\r', '')
input := content.all_before('===output===\n') input := content.all_before('===output===\n')

View File

@ -9,7 +9,7 @@ import(
encoding.binary encoding.binary
) )
pub fn int_u64(max u64) u64? { pub fn int_u64(max u64) ?u64 {
bitlen := bits.len64(max) bitlen := bits.len64(max)
if bitlen == 0 { if bitlen == 0 {
return u64(0) return u64(0)
@ -38,7 +38,7 @@ pub fn int_u64(max u64) u64? {
return n return n
} }
fn bytes_to_u64(b []byte) []u64 { fn bytes_to_u64(b []byte) []u64 {
ws := 64/8 ws := 64/8
mut z := [u64(0)].repeat((b.len + ws - 1) / ws) mut z := [u64(0)].repeat((b.len + ws - 1) / ws)
mut i := b.len mut i := b.len

View File

@ -206,7 +206,7 @@ pub fn dial(address string, port int) ?Socket {
} }
// send string data to socket // send string data to socket
pub fn (s Socket) send(buf byteptr, len int) int? { pub fn (s Socket) send(buf byteptr, len int) ?int {
res := int( C.send(s.sockfd, buf, len, 0) ) res := int( C.send(s.sockfd, buf, len, 0) )
if res < 0 { if res < 0 {
return error('socket: send failed') return error('socket: send failed')

View File

@ -1,10 +1,10 @@
import net import net
fn test_socket() { fn test_socket() {
mut server := net.listen(0) or { mut server := net.listen(0) or {
println(err) println(err)
return return
} }
server_port := server.get_port() server_port := server.get_port()
mut client := net.dial('127.0.0.1', server_port) or { mut client := net.dial('127.0.0.1', server_port) or {
println(err) println(err)
@ -20,7 +20,7 @@ fn test_socket() {
$if debug { println('message send: $message') } $if debug { println('message send: $message') }
$if debug { println('send socket: $socket.sockfd') } $if debug { println('send socket: $socket.sockfd') }
bytes, blen := client.recv(1024) bytes, blen := client.recv(1024)
received := tos(bytes, blen) received := tos(bytes, blen)
$if debug { println('message received: $received') } $if debug { println('message received: $received') }
$if debug { println('client: $client.sockfd') } $if debug { println('client: $client.sockfd') }
@ -30,4 +30,4 @@ fn test_socket() {
server.close() server.close()
client.close() client.close()
socket.close() socket.close()
} }