vlib: remove deprecated map{} usages as well as deprecated functions (#11035)
parent
b870f7a6f1
commit
800c0e5092
|
@ -134,7 +134,7 @@ fn (vd VDoc) render_search_index(out Output) {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn (mut vd VDoc) render_static_html(out Output) {
|
fn (mut vd VDoc) render_static_html(out Output) {
|
||||||
vd.assets = map{
|
vd.assets = {
|
||||||
'doc_css': vd.get_resource(css_js_assets[0], out)
|
'doc_css': vd.get_resource(css_js_assets[0], out)
|
||||||
'normalize_css': vd.get_resource(css_js_assets[1], out)
|
'normalize_css': vd.get_resource(css_js_assets[1], out)
|
||||||
'doc_js': vd.get_resource(css_js_assets[2], out)
|
'doc_js': vd.get_resource(css_js_assets[2], out)
|
||||||
|
|
|
@ -17,15 +17,15 @@ const (
|
||||||
excluded_dirs = ['cache', 'vlib']
|
excluded_dirs = ['cache', 'vlib']
|
||||||
supported_vcs_systems = ['git', 'hg']
|
supported_vcs_systems = ['git', 'hg']
|
||||||
supported_vcs_folders = ['.git', '.hg']
|
supported_vcs_folders = ['.git', '.hg']
|
||||||
supported_vcs_update_cmds = map{
|
supported_vcs_update_cmds = {
|
||||||
'git': 'git pull'
|
'git': 'git pull'
|
||||||
'hg': 'hg pull --update'
|
'hg': 'hg pull --update'
|
||||||
}
|
}
|
||||||
supported_vcs_install_cmds = map{
|
supported_vcs_install_cmds = {
|
||||||
'git': 'git clone --depth=1'
|
'git': 'git clone --depth=1'
|
||||||
'hg': 'hg clone'
|
'hg': 'hg clone'
|
||||||
}
|
}
|
||||||
supported_vcs_outdated_steps = map{
|
supported_vcs_outdated_steps = {
|
||||||
'git': ['git fetch', 'git rev-parse @', 'git rev-parse @{u}']
|
'git': ['git fetch', 'git rev-parse @', 'git rev-parse @{u}']
|
||||||
'hg': ['hg incoming']
|
'hg': ['hg incoming']
|
||||||
}
|
}
|
||||||
|
@ -467,7 +467,7 @@ fn resolve_dependencies(name string, module_path string, module_names []string)
|
||||||
|
|
||||||
fn parse_vmod(data string) Vmod {
|
fn parse_vmod(data string) Vmod {
|
||||||
keys := ['name', 'version', 'deps']
|
keys := ['name', 'version', 'deps']
|
||||||
mut m := map{
|
mut m := {
|
||||||
'name': ''
|
'name': ''
|
||||||
'version': ''
|
'version': ''
|
||||||
'deps': ''
|
'deps': ''
|
||||||
|
|
|
@ -12,7 +12,7 @@ const (
|
||||||
support_color = term.can_show_color_on_stderr() && term.can_show_color_on_stdout()
|
support_color = term.can_show_color_on_stderr() && term.can_show_color_on_stdout()
|
||||||
ecode_timeout = 101
|
ecode_timeout = 101
|
||||||
ecode_memout = 102
|
ecode_memout = 102
|
||||||
ecode_details = map{
|
ecode_details = {
|
||||||
-1: 'worker executable not found'
|
-1: 'worker executable not found'
|
||||||
101: 'too slow'
|
101: 'too slow'
|
||||||
102: 'too memory hungry'
|
102: 'too memory hungry'
|
||||||
|
|
20
doc/docs.md
20
doc/docs.md
|
@ -1042,7 +1042,7 @@ Maps can have keys of type string, rune, integer, float or voidptr.
|
||||||
|
|
||||||
The whole map can be initialized using this short syntax:
|
The whole map can be initialized using this short syntax:
|
||||||
```v
|
```v
|
||||||
numbers := map{
|
numbers := {
|
||||||
'one': 1
|
'one': 1
|
||||||
'two': 2
|
'two': 2
|
||||||
}
|
}
|
||||||
|
@ -1052,14 +1052,14 @@ println(numbers)
|
||||||
If a key is not found, a zero value is returned by default:
|
If a key is not found, a zero value is returned by default:
|
||||||
|
|
||||||
```v
|
```v
|
||||||
sm := map{
|
sm := {
|
||||||
'abc': 'xyz'
|
'abc': 'xyz'
|
||||||
}
|
}
|
||||||
val := sm['bad_key']
|
val := sm['bad_key']
|
||||||
println(val) // ''
|
println(val) // ''
|
||||||
```
|
```
|
||||||
```v
|
```v
|
||||||
intm := map{
|
intm := {
|
||||||
1: 1234
|
1: 1234
|
||||||
2: 5678
|
2: 5678
|
||||||
}
|
}
|
||||||
|
@ -1306,7 +1306,7 @@ To do the opposite, use `!in`.
|
||||||
nums := [1, 2, 3]
|
nums := [1, 2, 3]
|
||||||
println(1 in nums) // true
|
println(1 in nums) // true
|
||||||
println(4 !in nums) // true
|
println(4 !in nums) // true
|
||||||
m := map{
|
m := {
|
||||||
'one': 1
|
'one': 1
|
||||||
'two': 2
|
'two': 2
|
||||||
}
|
}
|
||||||
|
@ -1421,7 +1421,7 @@ The code above prints:
|
||||||
##### Map `for`
|
##### Map `for`
|
||||||
|
|
||||||
```v
|
```v
|
||||||
m := map{
|
m := {
|
||||||
'one': 1
|
'one': 1
|
||||||
'two': 2
|
'two': 2
|
||||||
}
|
}
|
||||||
|
@ -1434,7 +1434,7 @@ for key, value in m {
|
||||||
|
|
||||||
Either key or value can be ignored by using a single underscore as the identifier.
|
Either key or value can be ignored by using a single underscore as the identifier.
|
||||||
```v
|
```v
|
||||||
m := map{
|
m := {
|
||||||
'one': 1
|
'one': 1
|
||||||
'two': 2
|
'two': 2
|
||||||
}
|
}
|
||||||
|
@ -1783,7 +1783,7 @@ mut p := Point{
|
||||||
y: 20
|
y: 20
|
||||||
}
|
}
|
||||||
// you can omit the struct name when it's already known
|
// you can omit the struct name when it's already known
|
||||||
p = {
|
p = Point{
|
||||||
x: 30
|
x: 30
|
||||||
y: 4
|
y: 4
|
||||||
}
|
}
|
||||||
|
@ -1935,7 +1935,7 @@ clr1 := Rgba32{
|
||||||
}
|
}
|
||||||
|
|
||||||
clr2 := Rgba32{
|
clr2 := Rgba32{
|
||||||
Rgba32_Component: {
|
Rgba32_Component: Rgba32_Component{
|
||||||
a: 128
|
a: 128
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2029,7 +2029,7 @@ struct User {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn register(u User) User {
|
fn register(u User) User {
|
||||||
return {
|
return User{
|
||||||
...u
|
...u
|
||||||
is_registered: true
|
is_registered: true
|
||||||
}
|
}
|
||||||
|
@ -2095,7 +2095,7 @@ fn main() {
|
||||||
// You can even have an array/map of functions:
|
// You can even have an array/map of functions:
|
||||||
fns := [sqr, cube]
|
fns := [sqr, cube]
|
||||||
println(fns[0](10)) // "100"
|
println(fns[0](10)) // "100"
|
||||||
fns_map := map{
|
fns_map := {
|
||||||
'sqr': sqr
|
'sqr': sqr
|
||||||
'cube': cube
|
'cube': cube
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,7 +26,7 @@ fn breadth_first_search_path(graph map[string][]string, vertex string, target st
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
graph := map{
|
graph := {
|
||||||
'A': ['B', 'C']
|
'A': ['B', 'C']
|
||||||
'B': ['A', 'D', 'E']
|
'B': ['A', 'D', 'E']
|
||||||
'C': ['A', 'F']
|
'C': ['A', 'F']
|
||||||
|
|
|
@ -503,7 +503,7 @@ fn main(){
|
||||||
gg: 0
|
gg: 0
|
||||||
}
|
}
|
||||||
|
|
||||||
app.gg = gg.new_context({
|
app.gg = gg.new_context(
|
||||||
width: win_width
|
width: win_width
|
||||||
height: win_height
|
height: win_height
|
||||||
create_window: true
|
create_window: true
|
||||||
|
@ -514,7 +514,7 @@ fn main(){
|
||||||
init_fn: my_init
|
init_fn: my_init
|
||||||
cleanup_fn: cleanup
|
cleanup_fn: cleanup
|
||||||
event_fn: my_event_manager
|
event_fn: my_event_manager
|
||||||
})
|
)
|
||||||
|
|
||||||
app.ticks = time.ticks()
|
app.ticks = time.ticks()
|
||||||
app.gg.run()
|
app.gg.run()
|
||||||
|
|
|
@ -338,22 +338,6 @@ pub fn (instance BitField) clone() BitField {
|
||||||
return output
|
return output
|
||||||
}
|
}
|
||||||
|
|
||||||
// cmp compares two bit arrays bit by bit and returns 'true' if they are
|
|
||||||
// identical by length and contents and 'false' otherwise.
|
|
||||||
[deprecated: 'use a == b instead']
|
|
||||||
[deprecated_after: '2021-06-29']
|
|
||||||
pub fn (instance BitField) cmp(input BitField) bool {
|
|
||||||
if instance.size != input.size {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
for i in 0 .. zbitnslots(instance.size) {
|
|
||||||
if instance.field[i] != input.field[i] {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn (a BitField) == (b BitField) bool {
|
pub fn (a BitField) == (b BitField) bool {
|
||||||
if a.size != b.size {
|
if a.size != b.size {
|
||||||
return false
|
return false
|
||||||
|
|
|
@ -745,13 +745,13 @@ fn test_eq() {
|
||||||
age: 22
|
age: 22
|
||||||
name: 'bob'
|
name: 'bob'
|
||||||
}]
|
}]
|
||||||
assert [map{
|
assert [{
|
||||||
'bob': 22
|
'bob': 22
|
||||||
}, map{
|
}, {
|
||||||
'tom': 33
|
'tom': 33
|
||||||
}] == [map{
|
}] == [{
|
||||||
'bob': 22
|
'bob': 22
|
||||||
}, map{
|
}, {
|
||||||
'tom': 33
|
'tom': 33
|
||||||
}]
|
}]
|
||||||
assert [[1, 2, 3], [4]] == [[1, 2, 3], [4]]
|
assert [[1, 2, 3], [4]] == [[1, 2, 3], [4]]
|
||||||
|
@ -1315,20 +1315,20 @@ fn test_struct_array_of_multi_type_in() {
|
||||||
ivan := Person{
|
ivan := Person{
|
||||||
name: 'ivan'
|
name: 'ivan'
|
||||||
nums: [1, 2, 3]
|
nums: [1, 2, 3]
|
||||||
kv: map{
|
kv: {
|
||||||
'aaa': '111'
|
'aaa': '111'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
people := [Person{
|
people := [Person{
|
||||||
name: 'ivan'
|
name: 'ivan'
|
||||||
nums: [1, 2, 3]
|
nums: [1, 2, 3]
|
||||||
kv: map{
|
kv: {
|
||||||
'aaa': '111'
|
'aaa': '111'
|
||||||
}
|
}
|
||||||
}, Person{
|
}, Person{
|
||||||
name: 'bob'
|
name: 'bob'
|
||||||
nums: [2]
|
nums: [2]
|
||||||
kv: map{
|
kv: {
|
||||||
'bbb': '222'
|
'bbb': '222'
|
||||||
}
|
}
|
||||||
}]
|
}]
|
||||||
|
@ -1340,20 +1340,20 @@ fn test_struct_array_of_multi_type_index() {
|
||||||
ivan := Person{
|
ivan := Person{
|
||||||
name: 'ivan'
|
name: 'ivan'
|
||||||
nums: [1, 2, 3]
|
nums: [1, 2, 3]
|
||||||
kv: map{
|
kv: {
|
||||||
'aaa': '111'
|
'aaa': '111'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
people := [Person{
|
people := [Person{
|
||||||
name: 'ivan'
|
name: 'ivan'
|
||||||
nums: [1, 2, 3]
|
nums: [1, 2, 3]
|
||||||
kv: map{
|
kv: {
|
||||||
'aaa': '111'
|
'aaa': '111'
|
||||||
}
|
}
|
||||||
}, Person{
|
}, Person{
|
||||||
name: 'bob'
|
name: 'bob'
|
||||||
nums: [2]
|
nums: [2]
|
||||||
kv: map{
|
kv: {
|
||||||
'bbb': '222'
|
'bbb': '222'
|
||||||
}
|
}
|
||||||
}]
|
}]
|
||||||
|
|
|
@ -12,7 +12,7 @@ fn test_map_of_f32() {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn test_map_of_f64() {
|
fn test_map_of_f64() {
|
||||||
mut m64 := map{
|
mut m64 := {
|
||||||
3.14: 'pi'
|
3.14: 'pi'
|
||||||
}
|
}
|
||||||
m64[1.0] = 'one'
|
m64[1.0] = 'one'
|
||||||
|
|
|
@ -130,7 +130,7 @@ fn test_map() {
|
||||||
fn test_map_init() {
|
fn test_map_init() {
|
||||||
one := 'one'
|
one := 'one'
|
||||||
three := 'three'
|
three := 'three'
|
||||||
m := map{
|
m := {
|
||||||
one: 1
|
one: 1
|
||||||
'two': 2
|
'two': 2
|
||||||
three: 1 + 2
|
three: 1 + 2
|
||||||
|
@ -346,25 +346,25 @@ fn test_map_assign() {
|
||||||
mut a := map[string]f64{}
|
mut a := map[string]f64{}
|
||||||
mut b := map[string]int{}
|
mut b := map[string]int{}
|
||||||
mut c := map[string]u16{}
|
mut c := map[string]u16{}
|
||||||
a = map{
|
a = {
|
||||||
'x': 12.4
|
'x': 12.4
|
||||||
'y': 3
|
'y': 3
|
||||||
}
|
}
|
||||||
b = map{
|
b = {
|
||||||
'u': -13
|
'u': -13
|
||||||
'v': 12
|
'v': 12
|
||||||
}
|
}
|
||||||
c = map{
|
c = {
|
||||||
's': u16(5)
|
's': u16(5)
|
||||||
't': 3
|
't': 3
|
||||||
}
|
}
|
||||||
_ := Mstruct1{map{
|
_ := Mstruct1{{
|
||||||
'p': 12
|
'p': 12
|
||||||
}}
|
}}
|
||||||
_ := Mstruct2{map{
|
_ := Mstruct2{{
|
||||||
'q': 1.7
|
'q': 1.7
|
||||||
}}
|
}}
|
||||||
_ := Mstruct3{map{
|
_ := Mstruct3{{
|
||||||
'r': u16(6)
|
'r': u16(6)
|
||||||
's': 5
|
's': 5
|
||||||
}}
|
}}
|
||||||
|
@ -398,7 +398,7 @@ fn test_assign_directly() {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn test_map_in_directly() {
|
fn test_map_in_directly() {
|
||||||
for k, v in map{
|
for k, v in {
|
||||||
'aa': 1
|
'aa': 1
|
||||||
} {
|
} {
|
||||||
assert k == 'aa'
|
assert k == 'aa'
|
||||||
|
@ -407,7 +407,7 @@ fn test_map_in_directly() {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn test_plus_assign_string() {
|
fn test_plus_assign_string() {
|
||||||
mut m := map{
|
mut m := {
|
||||||
'one': ''
|
'one': ''
|
||||||
}
|
}
|
||||||
m['one'] += '1'
|
m['one'] += '1'
|
||||||
|
@ -416,7 +416,7 @@ fn test_plus_assign_string() {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn test_map_keys_to_array() {
|
fn test_map_keys_to_array() {
|
||||||
m := map{
|
m := {
|
||||||
'a': 'b'
|
'a': 'b'
|
||||||
'c': 'd'
|
'c': 'd'
|
||||||
}
|
}
|
||||||
|
@ -436,7 +436,7 @@ fn map_in_mut(mut m map[string]int) {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn test_map_in_mut() {
|
fn test_map_in_mut() {
|
||||||
mut m := map{
|
mut m := {
|
||||||
'one': 1
|
'one': 1
|
||||||
}
|
}
|
||||||
map_in_mut(mut m)
|
map_in_mut(mut m)
|
||||||
|
@ -444,7 +444,7 @@ fn test_map_in_mut() {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn test_map_in() {
|
fn test_map_in() {
|
||||||
m := map{
|
m := {
|
||||||
'Foo': 'bar'
|
'Foo': 'bar'
|
||||||
}
|
}
|
||||||
if 'foo'.capitalize() in m {
|
if 'foo'.capitalize() in m {
|
||||||
|
@ -476,7 +476,7 @@ fn mut_map_with_relation_op_in_fn(mut m map[string]int) {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn test_mut_map_with_relation_op_in_fn() {
|
fn test_mut_map_with_relation_op_in_fn() {
|
||||||
mut m := map{
|
mut m := {
|
||||||
'one': 1
|
'one': 1
|
||||||
'two': 2
|
'two': 2
|
||||||
}
|
}
|
||||||
|
@ -490,7 +490,7 @@ fn test_mut_map_with_relation_op_in_fn() {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn test_map_str_after_delete() {
|
fn test_map_str_after_delete() {
|
||||||
mut m := map{
|
mut m := {
|
||||||
'first': 1
|
'first': 1
|
||||||
'second': 2
|
'second': 2
|
||||||
'third': 3
|
'third': 3
|
||||||
|
@ -504,7 +504,7 @@ fn test_map_str_after_delete() {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn test_modify_map_value() {
|
fn test_modify_map_value() {
|
||||||
mut m1 := map{
|
mut m1 := {
|
||||||
'foo': 3
|
'foo': 3
|
||||||
'bar': -7
|
'bar': -7
|
||||||
}
|
}
|
||||||
|
@ -515,7 +515,7 @@ fn test_modify_map_value() {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn test_map_clone() {
|
fn test_map_clone() {
|
||||||
mut nums := map{
|
mut nums := {
|
||||||
'foo': 1
|
'foo': 1
|
||||||
'bar': 2
|
'bar': 2
|
||||||
}
|
}
|
||||||
|
@ -542,7 +542,7 @@ fn test_map_default_zero() {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn test_map_or() {
|
fn test_map_or() {
|
||||||
m := map{
|
m := {
|
||||||
'first': 1
|
'first': 1
|
||||||
'second': 2
|
'second': 2
|
||||||
'third': 3
|
'third': 3
|
||||||
|
@ -561,7 +561,7 @@ fn test_int_keys() {
|
||||||
m[5] += 24
|
m[5] += 24
|
||||||
m[5]++
|
m[5]++
|
||||||
assert m[5] == 25
|
assert m[5] == 25
|
||||||
mut m2 := map{
|
mut m2 := {
|
||||||
3: 9
|
3: 9
|
||||||
4: 16
|
4: 16
|
||||||
5: 25
|
5: 25
|
||||||
|
@ -577,7 +577,7 @@ fn test_int_keys() {
|
||||||
assert m2[5] == 0
|
assert m2[5] == 0
|
||||||
assert m2.keys() == []
|
assert m2.keys() == []
|
||||||
|
|
||||||
m2 = map{
|
m2 = {
|
||||||
3: 9
|
3: 9
|
||||||
4: 16
|
4: 16
|
||||||
5: 25
|
5: 25
|
||||||
|
@ -598,7 +598,7 @@ fn test_int_keys() {
|
||||||
}
|
}
|
||||||
assert all == [3, 9, 4, 16, 5, 25]
|
assert all == [3, 9, 4, 16, 5, 25]
|
||||||
|
|
||||||
mut m3 := map{
|
mut m3 := {
|
||||||
1: 'one'
|
1: 'one'
|
||||||
2: 'two'
|
2: 'two'
|
||||||
}
|
}
|
||||||
|
@ -639,7 +639,7 @@ fn test_voidptr_keys() {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn test_rune_keys() {
|
fn test_rune_keys() {
|
||||||
mut m := map{
|
mut m := {
|
||||||
`!`: 2
|
`!`: 2
|
||||||
`%`: 3
|
`%`: 3
|
||||||
}
|
}
|
||||||
|
@ -659,62 +659,62 @@ fn test_rune_keys() {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn test_eq() {
|
fn test_eq() {
|
||||||
a := map{
|
a := {
|
||||||
'a': 1
|
'a': 1
|
||||||
'b': 2
|
'b': 2
|
||||||
}
|
}
|
||||||
assert a == map{
|
assert a == {
|
||||||
'a': 1
|
'a': 1
|
||||||
'b': 2
|
'b': 2
|
||||||
}
|
}
|
||||||
b := map{
|
b := {
|
||||||
'a': [[1]]
|
'a': [[1]]
|
||||||
'b': [[2]]
|
'b': [[2]]
|
||||||
}
|
}
|
||||||
assert b == map{
|
assert b == {
|
||||||
'a': [[1]]
|
'a': [[1]]
|
||||||
'b': [[2]]
|
'b': [[2]]
|
||||||
}
|
}
|
||||||
c := map{
|
c := {
|
||||||
'a': map{
|
'a': {
|
||||||
'11': 1
|
'11': 1
|
||||||
}
|
}
|
||||||
'b': map{
|
'b': {
|
||||||
'22': 2
|
'22': 2
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
assert c == map{
|
assert c == {
|
||||||
'a': map{
|
'a': {
|
||||||
'11': 1
|
'11': 1
|
||||||
}
|
}
|
||||||
'b': map{
|
'b': {
|
||||||
'22': 2
|
'22': 2
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
d := map{
|
d := {
|
||||||
'a': MValue{
|
'a': MValue{
|
||||||
name: 'aa'
|
name: 'aa'
|
||||||
misc: map{
|
misc: {
|
||||||
'11': '1'
|
'11': '1'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
'b': MValue{
|
'b': MValue{
|
||||||
name: 'bb'
|
name: 'bb'
|
||||||
misc: map{
|
misc: {
|
||||||
'22': '2'
|
'22': '2'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
assert d == map{
|
assert d == {
|
||||||
'a': MValue{
|
'a': MValue{
|
||||||
name: 'aa'
|
name: 'aa'
|
||||||
misc: map{
|
misc: {
|
||||||
'11': '1'
|
'11': '1'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
'b': MValue{
|
'b': MValue{
|
||||||
name: 'bb'
|
name: 'bb'
|
||||||
misc: map{
|
misc: {
|
||||||
'22': '2'
|
'22': '2'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -722,31 +722,31 @@ fn test_eq() {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn test_non_string_key_map_str() {
|
fn test_non_string_key_map_str() {
|
||||||
assert map{
|
assert {
|
||||||
23: 4
|
23: 4
|
||||||
}.str() == '{23: 4}'
|
}.str() == '{23: 4}'
|
||||||
assert map{
|
assert {
|
||||||
`a`: 12
|
`a`: 12
|
||||||
`b`: 13
|
`b`: 13
|
||||||
}.str() == '{`a`: 12, `b`: 13}'
|
}.str() == '{`a`: 12, `b`: 13}'
|
||||||
assert map{
|
assert {
|
||||||
23: 'foo'
|
23: 'foo'
|
||||||
25: 'bar'
|
25: 'bar'
|
||||||
}.str() == "{23: 'foo', 25: 'bar'}"
|
}.str() == "{23: 'foo', 25: 'bar'}"
|
||||||
}
|
}
|
||||||
|
|
||||||
fn test_map_assign_empty_map_init() {
|
fn test_map_assign_empty_map_init() {
|
||||||
mut a := map{
|
mut a := {
|
||||||
'one': 1
|
'one': 1
|
||||||
}
|
}
|
||||||
a = map{}
|
a = {}
|
||||||
println(a)
|
println(a)
|
||||||
assert a == map[string]int{}
|
assert a == map[string]int{}
|
||||||
assert '$a' == '{}'
|
assert '$a' == '{}'
|
||||||
}
|
}
|
||||||
|
|
||||||
fn test_in_map_literal() {
|
fn test_in_map_literal() {
|
||||||
assert 1 in map{
|
assert 1 in {
|
||||||
1: 'one'
|
1: 'one'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -205,7 +205,7 @@ pub fn (c Color) abgr8() int {
|
||||||
}
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
string_colors = map{
|
string_colors = {
|
||||||
'blue': blue
|
'blue': blue
|
||||||
'red': red
|
'red': red
|
||||||
'green': green
|
'green': green
|
||||||
|
|
|
@ -7,7 +7,7 @@ fn C.wyhash(&byte, u64, u64, &u64) u64
|
||||||
fn C.wyhash64(u64, u64) u64
|
fn C.wyhash64(u64, u64) u64
|
||||||
|
|
||||||
fn init() {
|
fn init() {
|
||||||
_ := map{
|
_ := {
|
||||||
1: 1
|
1: 1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,16 +9,6 @@ pub interface Reader {
|
||||||
read(mut buf []byte) ?int
|
read(mut buf []byte) ?int
|
||||||
}
|
}
|
||||||
|
|
||||||
// make_reader is a temp that converts a type to a reader
|
|
||||||
// (e.g. for use in struct initialisation)
|
|
||||||
// (this shouldnt need to be a thing but until coercion gets made better
|
|
||||||
// it is required)
|
|
||||||
[deprecated: 'use just `x` instead of `io.make_reader(x)`. Interfaces are now checked against all types.']
|
|
||||||
[deprecated_after: '2021-05-27']
|
|
||||||
pub fn make_reader(r Reader) Reader {
|
|
||||||
return r
|
|
||||||
}
|
|
||||||
|
|
||||||
const (
|
const (
|
||||||
read_all_len = 10 * 1024
|
read_all_len = 10 * 1024
|
||||||
read_all_grow_len = 1024
|
read_all_grow_len = 1024
|
||||||
|
|
|
@ -151,7 +151,7 @@ fn test_struct_in_struct() ? {
|
||||||
|
|
||||||
fn test_encode_map() {
|
fn test_encode_map() {
|
||||||
expected := '{"one":1,"two":2,"three":3,"four":4}'
|
expected := '{"one":1,"two":2,"three":3,"four":4}'
|
||||||
numbers := map{
|
numbers := {
|
||||||
'one': 1
|
'one': 1
|
||||||
'two': 2
|
'two': 2
|
||||||
'three': 3
|
'three': 3
|
||||||
|
@ -163,7 +163,7 @@ fn test_encode_map() {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn test_parse_map() ? {
|
fn test_parse_map() ? {
|
||||||
expected := map{
|
expected := {
|
||||||
'one': 1
|
'one': 1
|
||||||
'two': 2
|
'two': 2
|
||||||
'three': 3
|
'three': 3
|
||||||
|
@ -193,7 +193,7 @@ fn test_nested_type() ? {
|
||||||
cities: [City{'Donlon'}, City{'Termanches'}]
|
cities: [City{'Donlon'}, City{'Termanches'}]
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
users: map{
|
users: {
|
||||||
'Foo': User{
|
'Foo': User{
|
||||||
age: 10
|
age: 10
|
||||||
nums: [1, 2, 3]
|
nums: [1, 2, 3]
|
||||||
|
@ -211,14 +211,14 @@ fn test_nested_type() ? {
|
||||||
pets: 'little boo'
|
pets: 'little boo'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
extra: map{
|
extra: {
|
||||||
'2': map{
|
'2': {
|
||||||
'n1': 2
|
'n1': 2
|
||||||
'n2': 4
|
'n2': 4
|
||||||
'n3': 8
|
'n3': 8
|
||||||
'n4': 16
|
'n4': 16
|
||||||
}
|
}
|
||||||
'3': map{
|
'3': {
|
||||||
'n1': 3
|
'n1': 3
|
||||||
'n2': 9
|
'n2': 9
|
||||||
'n3': 27
|
'n3': 27
|
||||||
|
|
|
@ -14,7 +14,7 @@ mut:
|
||||||
opened_code_type string
|
opened_code_type string
|
||||||
line_count int
|
line_count int
|
||||||
lexeme_builder strings.Builder = strings.new_builder(100)
|
lexeme_builder strings.Builder = strings.new_builder(100)
|
||||||
code_tags map[string]bool = map{
|
code_tags map[string]bool = {
|
||||||
'script': true
|
'script': true
|
||||||
'style': true
|
'style': true
|
||||||
}
|
}
|
||||||
|
|
|
@ -257,7 +257,7 @@ const (
|
||||||
]
|
]
|
||||||
read_set_cookies_tests = [
|
read_set_cookies_tests = [
|
||||||
ReadSetCookiesTestCase{
|
ReadSetCookiesTestCase{
|
||||||
header: map{
|
header: {
|
||||||
'Set-Cookie': ['Cookie-1=v1']
|
'Set-Cookie': ['Cookie-1=v1']
|
||||||
}
|
}
|
||||||
cookies: [&http.Cookie{
|
cookies: [&http.Cookie{
|
||||||
|
@ -292,7 +292,7 @@ const (
|
||||||
// }]
|
// }]
|
||||||
// },
|
// },
|
||||||
ReadSetCookiesTestCase{
|
ReadSetCookiesTestCase{
|
||||||
header: map{
|
header: {
|
||||||
'Set-Cookie': ['ASP.NET_SessionId=foo; path=/; HttpOnly']
|
'Set-Cookie': ['ASP.NET_SessionId=foo; path=/; HttpOnly']
|
||||||
}
|
}
|
||||||
cookies: [
|
cookies: [
|
||||||
|
@ -306,7 +306,7 @@ const (
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
ReadSetCookiesTestCase{
|
ReadSetCookiesTestCase{
|
||||||
header: map{
|
header: {
|
||||||
'Set-Cookie': ['samesitedefault=foo; SameSite']
|
'Set-Cookie': ['samesitedefault=foo; SameSite']
|
||||||
}
|
}
|
||||||
cookies: [
|
cookies: [
|
||||||
|
@ -319,7 +319,7 @@ const (
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
ReadSetCookiesTestCase{
|
ReadSetCookiesTestCase{
|
||||||
header: map{
|
header: {
|
||||||
'Set-Cookie': ['samesitelax=foo; SameSite=Lax']
|
'Set-Cookie': ['samesitelax=foo; SameSite=Lax']
|
||||||
}
|
}
|
||||||
cookies: [
|
cookies: [
|
||||||
|
@ -332,7 +332,7 @@ const (
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
ReadSetCookiesTestCase{
|
ReadSetCookiesTestCase{
|
||||||
header: map{
|
header: {
|
||||||
'Set-Cookie': ['samesitestrict=foo; SameSite=Strict']
|
'Set-Cookie': ['samesitestrict=foo; SameSite=Strict']
|
||||||
}
|
}
|
||||||
cookies: [
|
cookies: [
|
||||||
|
@ -345,7 +345,7 @@ const (
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
ReadSetCookiesTestCase{
|
ReadSetCookiesTestCase{
|
||||||
header: map{
|
header: {
|
||||||
'Set-Cookie': ['samesitenone=foo; SameSite=None']
|
'Set-Cookie': ['samesitenone=foo; SameSite=None']
|
||||||
}
|
}
|
||||||
cookies: [
|
cookies: [
|
||||||
|
@ -360,7 +360,7 @@ const (
|
||||||
// Make sure we can properly read back the Set-Cookie headers we create
|
// Make sure we can properly read back the Set-Cookie headers we create
|
||||||
// for values containing spaces or commas:
|
// for values containing spaces or commas:
|
||||||
ReadSetCookiesTestCase{
|
ReadSetCookiesTestCase{
|
||||||
header: map{
|
header: {
|
||||||
'Set-Cookie': ['special-1=a z']
|
'Set-Cookie': ['special-1=a z']
|
||||||
}
|
}
|
||||||
cookies: [
|
cookies: [
|
||||||
|
@ -372,7 +372,7 @@ const (
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
ReadSetCookiesTestCase{
|
ReadSetCookiesTestCase{
|
||||||
header: map{
|
header: {
|
||||||
'Set-Cookie': ['special-2=" z"']
|
'Set-Cookie': ['special-2=" z"']
|
||||||
}
|
}
|
||||||
cookies: [
|
cookies: [
|
||||||
|
@ -384,7 +384,7 @@ const (
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
ReadSetCookiesTestCase{
|
ReadSetCookiesTestCase{
|
||||||
header: map{
|
header: {
|
||||||
'Set-Cookie': ['special-3="a "']
|
'Set-Cookie': ['special-3="a "']
|
||||||
}
|
}
|
||||||
cookies: [
|
cookies: [
|
||||||
|
@ -396,7 +396,7 @@ const (
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
ReadSetCookiesTestCase{
|
ReadSetCookiesTestCase{
|
||||||
header: map{
|
header: {
|
||||||
'Set-Cookie': ['special-4=" "']
|
'Set-Cookie': ['special-4=" "']
|
||||||
}
|
}
|
||||||
cookies: [
|
cookies: [
|
||||||
|
@ -408,7 +408,7 @@ const (
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
ReadSetCookiesTestCase{
|
ReadSetCookiesTestCase{
|
||||||
header: map{
|
header: {
|
||||||
'Set-Cookie': ['special-5=a,z']
|
'Set-Cookie': ['special-5=a,z']
|
||||||
}
|
}
|
||||||
cookies: [
|
cookies: [
|
||||||
|
@ -420,7 +420,7 @@ const (
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
ReadSetCookiesTestCase{
|
ReadSetCookiesTestCase{
|
||||||
header: map{
|
header: {
|
||||||
'Set-Cookie': ['special-6=",z"']
|
'Set-Cookie': ['special-6=",z"']
|
||||||
}
|
}
|
||||||
cookies: [
|
cookies: [
|
||||||
|
@ -432,7 +432,7 @@ const (
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
ReadSetCookiesTestCase{
|
ReadSetCookiesTestCase{
|
||||||
header: map{
|
header: {
|
||||||
'Set-Cookie': ['special-7=","']
|
'Set-Cookie': ['special-7=","']
|
||||||
}
|
}
|
||||||
cookies: [
|
cookies: [
|
||||||
|
|
|
@ -216,7 +216,7 @@ pub fn (h CommonHeader) str() string {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const common_header_map = map{
|
const common_header_map = {
|
||||||
'accept': CommonHeader.accept
|
'accept': CommonHeader.accept
|
||||||
'accept-ch': .accept_ch
|
'accept-ch': .accept_ch
|
||||||
'accept-charset': .accept_charset
|
'accept-charset': .accept_charset
|
||||||
|
|
|
@ -276,7 +276,7 @@ fn test_str() ? {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn test_header_from_map() ? {
|
fn test_header_from_map() ? {
|
||||||
h := new_header_from_map(map{
|
h := new_header_from_map({
|
||||||
CommonHeader.accept: 'nothing'
|
CommonHeader.accept: 'nothing'
|
||||||
CommonHeader.expires: 'yesterday'
|
CommonHeader.expires: 'yesterday'
|
||||||
})
|
})
|
||||||
|
@ -287,7 +287,7 @@ fn test_header_from_map() ? {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn test_custom_header_from_map() ? {
|
fn test_custom_header_from_map() ? {
|
||||||
h := new_custom_header_from_map(map{
|
h := new_custom_header_from_map({
|
||||||
'Server': 'VWeb'
|
'Server': 'VWeb'
|
||||||
'foo': 'bar'
|
'foo': 'bar'
|
||||||
}) ?
|
}) ?
|
||||||
|
@ -298,11 +298,11 @@ fn test_custom_header_from_map() ? {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn test_header_join() ? {
|
fn test_header_join() ? {
|
||||||
h1 := new_header_from_map(map{
|
h1 := new_header_from_map({
|
||||||
CommonHeader.accept: 'nothing'
|
CommonHeader.accept: 'nothing'
|
||||||
CommonHeader.expires: 'yesterday'
|
CommonHeader.expires: 'yesterday'
|
||||||
})
|
})
|
||||||
h2 := new_custom_header_from_map(map{
|
h2 := new_custom_header_from_map({
|
||||||
'Server': 'VWeb'
|
'Server': 'VWeb'
|
||||||
'foo': 'bar'
|
'foo': 'bar'
|
||||||
}) ?
|
}) ?
|
||||||
|
@ -329,27 +329,27 @@ fn parse_headers_test(s string, expected map[string]string) ? {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn test_parse_headers() ? {
|
fn test_parse_headers() ? {
|
||||||
parse_headers_test('foo: bar', map{
|
parse_headers_test('foo: bar', {
|
||||||
'foo': 'bar'
|
'foo': 'bar'
|
||||||
}) ?
|
}) ?
|
||||||
parse_headers_test('foo: \t bar', map{
|
parse_headers_test('foo: \t bar', {
|
||||||
'foo': 'bar'
|
'foo': 'bar'
|
||||||
}) ?
|
}) ?
|
||||||
parse_headers_test('foo: bar\r\n\tbaz', map{
|
parse_headers_test('foo: bar\r\n\tbaz', {
|
||||||
'foo': 'bar baz'
|
'foo': 'bar baz'
|
||||||
}) ?
|
}) ?
|
||||||
parse_headers_test('foo: bar \r\n\tbaz\r\n buzz', map{
|
parse_headers_test('foo: bar \r\n\tbaz\r\n buzz', {
|
||||||
'foo': 'bar baz buzz'
|
'foo': 'bar baz buzz'
|
||||||
}) ?
|
}) ?
|
||||||
parse_headers_test('foo: bar\r\nbar:baz', map{
|
parse_headers_test('foo: bar\r\nbar:baz', {
|
||||||
'foo': 'bar'
|
'foo': 'bar'
|
||||||
'bar': 'baz'
|
'bar': 'baz'
|
||||||
}) ?
|
}) ?
|
||||||
parse_headers_test('foo: bar\r\nbar:baz\r\n', map{
|
parse_headers_test('foo: bar\r\nbar:baz\r\n', {
|
||||||
'foo': 'bar'
|
'foo': 'bar'
|
||||||
'bar': 'baz'
|
'bar': 'baz'
|
||||||
}) ?
|
}) ?
|
||||||
parse_headers_test('foo: bar\r\nbar:baz\r\n\r\n', map{
|
parse_headers_test('foo: bar\r\nbar:baz\r\n\r\n', {
|
||||||
'foo': 'bar'
|
'foo': 'bar'
|
||||||
'bar': 'baz'
|
'bar': 'baz'
|
||||||
}) ?
|
}) ?
|
||||||
|
|
|
@ -59,7 +59,7 @@ fn test_http_fetch_with_params() {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
responses := http_fetch_mock([],
|
responses := http_fetch_mock([],
|
||||||
params: map{
|
params: {
|
||||||
'a': 'b'
|
'a': 'b'
|
||||||
'c': 'd'
|
'c': 'd'
|
||||||
}
|
}
|
||||||
|
|
|
@ -71,27 +71,27 @@ fn test_parse_request_line() {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn test_parse_form() {
|
fn test_parse_form() {
|
||||||
assert parse_form('foo=bar&bar=baz') == map{
|
assert parse_form('foo=bar&bar=baz') == {
|
||||||
'foo': 'bar'
|
'foo': 'bar'
|
||||||
'bar': 'baz'
|
'bar': 'baz'
|
||||||
}
|
}
|
||||||
assert parse_form('foo=bar=&bar=baz') == map{
|
assert parse_form('foo=bar=&bar=baz') == {
|
||||||
'foo': 'bar='
|
'foo': 'bar='
|
||||||
'bar': 'baz'
|
'bar': 'baz'
|
||||||
}
|
}
|
||||||
assert parse_form('foo=bar%3D&bar=baz') == map{
|
assert parse_form('foo=bar%3D&bar=baz') == {
|
||||||
'foo': 'bar='
|
'foo': 'bar='
|
||||||
'bar': 'baz'
|
'bar': 'baz'
|
||||||
}
|
}
|
||||||
assert parse_form('foo=b%26ar&bar=baz') == map{
|
assert parse_form('foo=b%26ar&bar=baz') == {
|
||||||
'foo': 'b&ar'
|
'foo': 'b&ar'
|
||||||
'bar': 'baz'
|
'bar': 'baz'
|
||||||
}
|
}
|
||||||
assert parse_form('a=b& c=d') == map{
|
assert parse_form('a=b& c=d') == {
|
||||||
'a': 'b'
|
'a': 'b'
|
||||||
' c': 'd'
|
' c': 'd'
|
||||||
}
|
}
|
||||||
assert parse_form('a=b&c= d ') == map{
|
assert parse_form('a=b&c= d ') == {
|
||||||
'a': 'b'
|
'a': 'b'
|
||||||
'c': ' d '
|
'c': ' d '
|
||||||
}
|
}
|
||||||
|
@ -115,7 +115,7 @@ ${contents[1]}
|
||||||
--------------------------$boundary--
|
--------------------------$boundary--
|
||||||
"
|
"
|
||||||
form, files := parse_multipart_form(data, boundary)
|
form, files := parse_multipart_form(data, boundary)
|
||||||
assert files == map{
|
assert files == {
|
||||||
names[0]: [FileData{
|
names[0]: [FileData{
|
||||||
filename: file
|
filename: file
|
||||||
content_type: ct
|
content_type: ct
|
||||||
|
@ -123,7 +123,7 @@ ${contents[1]}
|
||||||
}]
|
}]
|
||||||
}
|
}
|
||||||
|
|
||||||
assert form == map{
|
assert form == {
|
||||||
names[1]: contents[1]
|
names[1]: contents[1]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,7 +8,7 @@ pub const (
|
||||||
float = [13, 14]
|
float = [13, 14]
|
||||||
string = 18
|
string = 18
|
||||||
time = -2
|
time = -2
|
||||||
type_idx = map{
|
type_idx = {
|
||||||
'i8': 5
|
'i8': 5
|
||||||
'i16': 6
|
'i16': 6
|
||||||
'int': 7
|
'int': 7
|
||||||
|
|
|
@ -1213,7 +1213,7 @@ pub:
|
||||||
pub const (
|
pub const (
|
||||||
// reference: https://en.wikipedia.org/wiki/X86#/media/File:Table_of_x86_Registers_svg.svg
|
// reference: https://en.wikipedia.org/wiki/X86#/media/File:Table_of_x86_Registers_svg.svg
|
||||||
// map register size -> register name
|
// map register size -> register name
|
||||||
x86_no_number_register_list = map{
|
x86_no_number_register_list = {
|
||||||
8: ['al', 'ah', 'bl', 'bh', 'cl', 'ch', 'dl', 'dh', 'bpl', 'sil', 'dil', 'spl']
|
8: ['al', 'ah', 'bl', 'bh', 'cl', 'ch', 'dl', 'dh', 'bpl', 'sil', 'dil', 'spl']
|
||||||
16: ['ax', 'bx', 'cx', 'dx', 'bp', 'si', 'di', 'sp', /* segment registers */ 'cs', 'ss',
|
16: ['ax', 'bx', 'cx', 'dx', 'bp', 'si', 'di', 'sp', /* segment registers */ 'cs', 'ss',
|
||||||
'ds', 'es', 'fs', 'gs', 'flags', 'ip', /* task registers */ 'gdtr', 'idtr', 'tr', 'ldtr',
|
'ds', 'es', 'fs', 'gs', 'flags', 'ip', /* task registers */ 'gdtr', 'idtr', 'tr', 'ldtr',
|
||||||
|
@ -1240,32 +1240,32 @@ pub const (
|
||||||
// st#: floating point numbers
|
// st#: floating point numbers
|
||||||
// cr#: control/status registers
|
// cr#: control/status registers
|
||||||
// dr#: debug registers
|
// dr#: debug registers
|
||||||
x86_with_number_register_list = map{
|
x86_with_number_register_list = {
|
||||||
8: map{
|
8: {
|
||||||
'r#b': 16
|
'r#b': 16
|
||||||
}
|
}
|
||||||
16: map{
|
16: {
|
||||||
'r#w': 16
|
'r#w': 16
|
||||||
}
|
}
|
||||||
32: map{
|
32: {
|
||||||
'r#d': 16
|
'r#d': 16
|
||||||
}
|
}
|
||||||
64: map{
|
64: {
|
||||||
'r#': 16
|
'r#': 16
|
||||||
'mm#': 16
|
'mm#': 16
|
||||||
'cr#': 16
|
'cr#': 16
|
||||||
'dr#': 16
|
'dr#': 16
|
||||||
}
|
}
|
||||||
80: map{
|
80: {
|
||||||
'st#': 16
|
'st#': 16
|
||||||
}
|
}
|
||||||
128: map{
|
128: {
|
||||||
'xmm#': 32
|
'xmm#': 32
|
||||||
}
|
}
|
||||||
256: map{
|
256: {
|
||||||
'ymm#': 32
|
'ymm#': 32
|
||||||
}
|
}
|
||||||
512: map{
|
512: {
|
||||||
'zmm#': 32
|
'zmm#': 32
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1277,14 +1277,14 @@ pub const (
|
||||||
'sp' /* aka r13 */, 'lr' /* aka r14 */, /* this is instruction pointer ('program counter'): */
|
'sp' /* aka r13 */, 'lr' /* aka r14 */, /* this is instruction pointer ('program counter'): */
|
||||||
'pc' /* aka r15 */,
|
'pc' /* aka r15 */,
|
||||||
] // 'cpsr' and 'apsr' are special flags registers, but cannot be referred to directly
|
] // 'cpsr' and 'apsr' are special flags registers, but cannot be referred to directly
|
||||||
arm_with_number_register_list = map{
|
arm_with_number_register_list = {
|
||||||
'r#': 16
|
'r#': 16
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
pub const (
|
pub const (
|
||||||
riscv_no_number_register_list = ['zero', 'ra', 'sp', 'gp', 'tp']
|
riscv_no_number_register_list = ['zero', 'ra', 'sp', 'gp', 'tp']
|
||||||
riscv_with_number_register_list = map{
|
riscv_with_number_register_list = {
|
||||||
'x#': 32
|
'x#': 32
|
||||||
't#': 3
|
't#': 3
|
||||||
's#': 12
|
's#': 12
|
||||||
|
|
|
@ -1338,13 +1338,6 @@ pub fn (mut c Checker) infix_expr(mut node ast.InfixExpr) ast.Type {
|
||||||
}
|
}
|
||||||
node.left_type = map_info.key_type
|
node.left_type = map_info.key_type
|
||||||
}
|
}
|
||||||
.string {
|
|
||||||
c.warn('use `str.contains(substr)` instead of `substr in str`', left_right_pos)
|
|
||||||
c.check_expected(left_type, right_type) or {
|
|
||||||
c.error('left operand to `$node.op` does not match: $err.msg',
|
|
||||||
left_right_pos)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
else {
|
||||||
c.error('`$node.op.str()` can only be used with an array/map/string',
|
c.error('`$node.op.str()` can only be used with an array/map/string',
|
||||||
node.pos)
|
node.pos)
|
||||||
|
|
|
@ -1,14 +1,14 @@
|
||||||
type Map = map[string]string
|
type Map = map[string]string
|
||||||
|
|
||||||
pub fn new_map() Map {
|
pub fn new_map() Map {
|
||||||
return Map(map{
|
return Map({
|
||||||
'23': 'str'
|
'23': 'str'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fn (a Map) + (b Map) Map {
|
fn (a Map) + (b Map) Map {
|
||||||
str := b['23']
|
str := b['23']
|
||||||
return Map(map{
|
return Map({
|
||||||
'34': str + '12'
|
'34': str + '12'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,10 +11,10 @@ vlib/v/checker/tests/array_or_map_assign_err.vv:5:5: error: use `array2 = array1
|
||||||
5 | a3 = a1
|
5 | a3 = a1
|
||||||
| ^
|
| ^
|
||||||
6 |
|
6 |
|
||||||
7 | m1 := map{'one': 1}
|
7 | m1 := {'one': 1}
|
||||||
vlib/v/checker/tests/array_or_map_assign_err.vv:8:8: error: cannot copy map: call `move` or `clone` method (or use a reference)
|
vlib/v/checker/tests/array_or_map_assign_err.vv:8:8: error: cannot copy map: call `move` or `clone` method (or use a reference)
|
||||||
6 |
|
6 |
|
||||||
7 | m1 := map{'one': 1}
|
7 | m1 := {'one': 1}
|
||||||
8 | m2 := m1
|
8 | m2 := m1
|
||||||
| ~~
|
| ~~
|
||||||
9 | mut m3 := map[string]int{}
|
9 | mut m3 := map[string]int{}
|
||||||
|
|
|
@ -4,7 +4,7 @@ fn main() {
|
||||||
mut a3 := []int{}
|
mut a3 := []int{}
|
||||||
a3 = a1
|
a3 = a1
|
||||||
|
|
||||||
m1 := map{'one': 1}
|
m1 := {'one': 1}
|
||||||
m2 := m1
|
m2 := m1
|
||||||
mut m3 := map[string]int{}
|
mut m3 := map[string]int{}
|
||||||
m3 = m1
|
m3 = m1
|
||||||
|
@ -12,7 +12,7 @@ fn main() {
|
||||||
_ = a2
|
_ = a2
|
||||||
_ = m2
|
_ = m2
|
||||||
|
|
||||||
mut m := map{'foo':1}
|
mut m := {'foo':1}
|
||||||
foo(mut m)
|
foo(mut m)
|
||||||
|
|
||||||
_ = a3
|
_ = a3
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
vlib/v/checker/tests/assign_expr_undefined_err_k.vv:2:22: error: undefined variable: `a`
|
vlib/v/checker/tests/assign_expr_undefined_err_k.vv:2:19: error: undefined variable: `a`
|
||||||
1 | fn main() {
|
1 | fn main() {
|
||||||
2 | mut a := map{'one': a}
|
2 | mut a := {'one': a}
|
||||||
| ^
|
| ^
|
||||||
3 | println(a)
|
3 | println(a)
|
||||||
4 | }
|
4 | }
|
|
@ -1,4 +1,4 @@
|
||||||
fn main() {
|
fn main() {
|
||||||
mut a := map{'one': a}
|
mut a := {'one': a}
|
||||||
println(a)
|
println(a)
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
vlib/v/checker/tests/for_in_map_one_variable_err.vv:3:6: error: declare a key and a value variable when ranging a map: `for key, val in map {`
|
vlib/v/checker/tests/for_in_map_one_variable_err.vv:3:6: error: declare a key and a value variable when ranging a map: `for key, val in map {`
|
||||||
use `_` if you do not need the variable
|
use `_` if you do not need the variable
|
||||||
1 | fn main() {
|
1 | fn main() {
|
||||||
2 | kvs := map{'foo':'bar'}
|
2 | kvs := {'foo':'bar'}
|
||||||
3 | for k in kvs {
|
3 | for k in kvs {
|
||||||
| ^
|
| ^
|
||||||
4 | println('$k')
|
4 | println('$k')
|
||||||
5 | }
|
5 | }
|
|
@ -1,5 +1,5 @@
|
||||||
fn main() {
|
fn main() {
|
||||||
kvs := map{'foo':'bar'}
|
kvs := {'foo':'bar'}
|
||||||
for k in kvs {
|
for k in kvs {
|
||||||
println('$k')
|
println('$k')
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,7 +14,7 @@ vlib/v/checker/tests/for_in_mut_val_type.vv:7:15: error: `a2` is immutable, it c
|
||||||
9 | }
|
9 | }
|
||||||
vlib/v/checker/tests/for_in_mut_val_type.vv:11:18: error: `m` is immutable, it cannot be changed
|
vlib/v/checker/tests/for_in_mut_val_type.vv:11:18: error: `m` is immutable, it cannot be changed
|
||||||
9 | }
|
9 | }
|
||||||
10 | m := map{'aa': 1, 'bb': 2}
|
10 | m := {'aa': 1, 'bb': 2}
|
||||||
11 | for _, mut j in m {
|
11 | for _, mut j in m {
|
||||||
| ^
|
| ^
|
||||||
12 | j *= 2
|
12 | j *= 2
|
||||||
|
@ -33,10 +33,10 @@ vlib/v/checker/tests/for_in_mut_val_type.vv:17:15: error: array literal is immut
|
||||||
| ~~~~~~~~~~
|
| ~~~~~~~~~~
|
||||||
18 | j *= 2
|
18 | j *= 2
|
||||||
19 | }
|
19 | }
|
||||||
vlib/v/checker/tests/for_in_mut_val_type.vv:20:21: error: map literal is immutable, it cannot be changed
|
vlib/v/checker/tests/for_in_mut_val_type.vv:20:18: error: map literal is immutable, it cannot be changed
|
||||||
18 | j *= 2
|
18 | j *= 2
|
||||||
19 | }
|
19 | }
|
||||||
20 | for _, mut j in map{'aa': 1, 'bb': 2} {
|
20 | for _, mut j in {'aa': 1, 'bb': 2} {
|
||||||
| ~~~~~~~~~~~~~~~~~~
|
| ~~~~~~~~~~~~~~~~~~
|
||||||
21 | j *= 2
|
21 | j *= 2
|
||||||
22 | }
|
22 | }
|
|
@ -7,7 +7,7 @@ fn main() {
|
||||||
for mut j in a2 {
|
for mut j in a2 {
|
||||||
j *= 2
|
j *= 2
|
||||||
}
|
}
|
||||||
m := map{'aa': 1, 'bb': 2}
|
m := {'aa': 1, 'bb': 2}
|
||||||
for _, mut j in m {
|
for _, mut j in m {
|
||||||
j *= 2
|
j *= 2
|
||||||
}
|
}
|
||||||
|
@ -17,7 +17,7 @@ fn main() {
|
||||||
for mut j in [1, 2, 3]! {
|
for mut j in [1, 2, 3]! {
|
||||||
j *= 2
|
j *= 2
|
||||||
}
|
}
|
||||||
for _, mut j in map{'aa': 1, 'bb': 2} {
|
for _, mut j in {'aa': 1, 'bb': 2} {
|
||||||
j *= 2
|
j *= 2
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,10 +10,10 @@ vlib/v/checker/tests/import_symbol_private_err.vv:4:13: error: module `io` type
|
||||||
3 | import time { now, since }
|
3 | import time { now, since }
|
||||||
4 | import io { ReaderWriterImpl }
|
4 | import io { ReaderWriterImpl }
|
||||||
| ~~~~~~~~~~~~~~~~
|
| ~~~~~~~~~~~~~~~~
|
||||||
5 |
|
5 |
|
||||||
6 | fn main() {
|
6 | fn main() {
|
||||||
vlib/v/checker/tests/import_symbol_private_err.vv:7:18: error: constant `v.scanner.single_quote` is private
|
vlib/v/checker/tests/import_symbol_private_err.vv:7:18: error: constant `v.scanner.single_quote` is private
|
||||||
5 |
|
5 |
|
||||||
6 | fn main() {
|
6 | fn main() {
|
||||||
7 | println(scanner.single_quote)
|
7 | println(scanner.single_quote)
|
||||||
| ~~~~~~~~~~~~
|
| ~~~~~~~~~~~~
|
||||||
|
@ -25,24 +25,24 @@ vlib/v/checker/tests/import_symbol_private_err.vv:8:17: error: enum `v.parser.St
|
||||||
8 | println(parser.State.html)
|
8 | println(parser.State.html)
|
||||||
| ~~~~~~~~~~
|
| ~~~~~~~~~~
|
||||||
9 | since(now())
|
9 | since(now())
|
||||||
10 | _ = map{'h': 2}.exists('h')
|
10 | _ = {'h': 2}.exists('h')
|
||||||
vlib/v/checker/tests/import_symbol_private_err.vv:9:2: error: function `time.since` is private
|
vlib/v/checker/tests/import_symbol_private_err.vv:9:2: error: function `time.since` is private
|
||||||
7 | println(scanner.single_quote)
|
7 | println(scanner.single_quote)
|
||||||
8 | println(parser.State.html)
|
8 | println(parser.State.html)
|
||||||
9 | since(now())
|
9 | since(now())
|
||||||
| ~~~~~~~~~~~~
|
| ~~~~~~~~~~~~
|
||||||
10 | _ = map{'h': 2}.exists('h')
|
10 | _ = {'h': 2}.exists('h')
|
||||||
11 | _ = ReaderWriterImpl{}
|
11 | _ = ReaderWriterImpl{}
|
||||||
vlib/v/checker/tests/import_symbol_private_err.vv:10:18: error: method `map[string]int.exists` is private
|
vlib/v/checker/tests/import_symbol_private_err.vv:10:15: error: method `map[string]int.exists` is private
|
||||||
8 | println(parser.State.html)
|
8 | println(parser.State.html)
|
||||||
9 | since(now())
|
9 | since(now())
|
||||||
10 | _ = map{'h': 2}.exists('h')
|
10 | _ = {'h': 2}.exists('h')
|
||||||
| ~~~~~~~~~~~
|
| ~~~~~~~~~~~
|
||||||
11 | _ = ReaderWriterImpl{}
|
11 | _ = ReaderWriterImpl{}
|
||||||
12 | }
|
12 | }
|
||||||
vlib/v/checker/tests/import_symbol_private_err.vv:11:6: error: type `io.ReaderWriterImpl` is private
|
vlib/v/checker/tests/import_symbol_private_err.vv:11:6: error: type `io.ReaderWriterImpl` is private
|
||||||
9 | since(now())
|
9 | since(now())
|
||||||
10 | _ = map{'h': 2}.exists('h')
|
10 | _ = {'h': 2}.exists('h')
|
||||||
11 | _ = ReaderWriterImpl{}
|
11 | _ = ReaderWriterImpl{}
|
||||||
| ~~~~~~~~~~~~~~~~~~
|
| ~~~~~~~~~~~~~~~~~~
|
||||||
12 | }
|
12 | }
|
|
@ -7,6 +7,6 @@ fn main() {
|
||||||
println(scanner.single_quote)
|
println(scanner.single_quote)
|
||||||
println(parser.State.html)
|
println(parser.State.html)
|
||||||
since(now())
|
since(now())
|
||||||
_ = map{'h': 2}.exists('h')
|
_ = {'h': 2}.exists('h')
|
||||||
_ = ReaderWriterImpl{}
|
_ = ReaderWriterImpl{}
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,18 +12,18 @@ vlib/v/checker/tests/in_mismatch_type.vv:13:5: error: left operand to `in` does
|
||||||
| ~~~~~~
|
| ~~~~~~
|
||||||
14 | println('yeah')
|
14 | println('yeah')
|
||||||
15 | }
|
15 | }
|
||||||
vlib/v/checker/tests/in_mismatch_type.vv:16:5: error: use `str.contains(substr)` instead of `substr in str`
|
vlib/v/checker/tests/in_mismatch_type.vv:16:7: error: `in` can only be used with an array/map/string
|
||||||
14 | println('yeah')
|
14 | println('yeah')
|
||||||
15 | }
|
15 | }
|
||||||
16 | if 3 in s {
|
16 | if 3 in s {
|
||||||
| ~~~~~~
|
| ~~
|
||||||
17 | println('dope')
|
17 | println('dope')
|
||||||
18 | }
|
18 | }
|
||||||
vlib/v/checker/tests/in_mismatch_type.vv:19:5: error: use `str.contains(substr)` instead of `substr in str`
|
vlib/v/checker/tests/in_mismatch_type.vv:19:9: error: `in` can only be used with an array/map/string
|
||||||
17 | println('dope')
|
17 | println('dope')
|
||||||
18 | }
|
18 | }
|
||||||
19 | if `a` in s {
|
19 | if `a` in s {
|
||||||
| ~~~~~~~~
|
| ~~
|
||||||
20 | println("oh no :'(")
|
20 | println("oh no :'(")
|
||||||
21 | }
|
21 | }
|
||||||
vlib/v/checker/tests/in_mismatch_type.vv:22:7: error: `in` can only be used with an array/map/string
|
vlib/v/checker/tests/in_mismatch_type.vv:22:7: error: `in` can only be used with an array/map/string
|
||||||
|
@ -74,4 +74,4 @@ vlib/v/checker/tests/in_mismatch_type.vv:41:5: error: left operand to `!in` does
|
||||||
41 | if 5 !in m {
|
41 | if 5 !in m {
|
||||||
| ~~~~~~~
|
| ~~~~~~~
|
||||||
42 | println('yay')
|
42 | println('yay')
|
||||||
43 | }
|
43 | }
|
|
@ -3,7 +3,7 @@ type Int = int
|
||||||
fn main() {
|
fn main() {
|
||||||
a_i := [1, 2, 3]
|
a_i := [1, 2, 3]
|
||||||
a_s := ['1', '2', '3']
|
a_s := ['1', '2', '3']
|
||||||
m := map{
|
m := {
|
||||||
'test': 1
|
'test': 1
|
||||||
}
|
}
|
||||||
s := 'abcd'
|
s := 'abcd'
|
||||||
|
|
|
@ -4,13 +4,13 @@ vlib/v/checker/tests/map_delete.vv:5:11: error: cannot use `int literal` as `str
|
||||||
5 | m.delete(1)
|
5 | m.delete(1)
|
||||||
| ^
|
| ^
|
||||||
6 | m.delete(1, 2)
|
6 | m.delete(1, 2)
|
||||||
7 | m2 := map{
|
7 | m2 := {
|
||||||
vlib/v/checker/tests/map_delete.vv:6:4: error: expected 1 argument, but got 2
|
vlib/v/checker/tests/map_delete.vv:6:4: error: expected 1 argument, but got 2
|
||||||
4 | }
|
4 | }
|
||||||
5 | m.delete(1)
|
5 | m.delete(1)
|
||||||
6 | m.delete(1, 2)
|
6 | m.delete(1, 2)
|
||||||
| ~~~~~~~~~~~~
|
| ~~~~~~~~~~~~
|
||||||
7 | m2 := map{
|
7 | m2 := {
|
||||||
8 | '1': 1
|
8 | '1': 1
|
||||||
vlib/v/checker/tests/map_delete.vv:10:2: error: `m2` is immutable, declare it with `mut` to make it mutable
|
vlib/v/checker/tests/map_delete.vv:10:2: error: `m2` is immutable, declare it with `mut` to make it mutable
|
||||||
8 | '1': 1
|
8 | '1': 1
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
fn main() {
|
fn main() {
|
||||||
mut m := map{
|
mut m := {
|
||||||
'1': 1
|
'1': 1
|
||||||
}
|
}
|
||||||
m.delete(1)
|
m.delete(1)
|
||||||
m.delete(1, 2)
|
m.delete(1, 2)
|
||||||
m2 := map{
|
m2 := {
|
||||||
'1': 1
|
'1': 1
|
||||||
}
|
}
|
||||||
m2.delete('1')
|
m2.delete('1')
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
vlib/v/checker/tests/map_init_invalid_syntax.vv:2:10: error: invalid empty map initilization syntax, use e.g. map[string]int{} instead
|
vlib/v/checker/tests/map_init_invalid_syntax.vv:2:7: error: invalid empty map initilization syntax, use e.g. map[string]int{} instead
|
||||||
1 | fn main() {
|
1 | fn main() {
|
||||||
2 | a := map{}
|
2 | a := {}
|
||||||
| ~~
|
| ~~
|
||||||
3 | println(a)
|
3 | println(a)
|
||||||
4 | }
|
4 | }
|
|
@ -1,4 +1,4 @@
|
||||||
fn main() {
|
fn main() {
|
||||||
a := map{}
|
a := {}
|
||||||
println(a)
|
println(a)
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,9 +5,9 @@ vlib/v/checker/tests/map_init_key_duplicate_err.vv:5:3: error: duplicate key "fo
|
||||||
| ~~~~~
|
| ~~~~~
|
||||||
6 | }
|
6 | }
|
||||||
7 | println(a)
|
7 | println(a)
|
||||||
vlib/v/checker/tests/map_init_key_duplicate_err.vv:9:18: error: duplicate key "2" in map literal
|
vlib/v/checker/tests/map_init_key_duplicate_err.vv:9:15: error: duplicate key "2" in map literal
|
||||||
7 | println(a)
|
7 | println(a)
|
||||||
8 |
|
8 |
|
||||||
9 | _ = map{2:0 3:0 2:0}
|
9 | _ = {2:0 3:0 2:0}
|
||||||
| ^
|
| ^
|
||||||
10 | }
|
10 | }
|
|
@ -1,10 +1,10 @@
|
||||||
fn main() {
|
fn main() {
|
||||||
a := map{
|
a := {
|
||||||
'foo': 'bar'
|
'foo': 'bar'
|
||||||
'abc': 'abc'
|
'abc': 'abc'
|
||||||
'foo': 'bar'
|
'foo': 'bar'
|
||||||
}
|
}
|
||||||
println(a)
|
println(a)
|
||||||
|
|
||||||
_ = map{2:0 3:0 2:0}
|
_ = {2:0 3:0 2:0}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,21 +1,21 @@
|
||||||
vlib/v/checker/tests/map_init_wrong_type.vv:3:18: error: invalid map value: expected `f32`, not `float literal`
|
vlib/v/checker/tests/map_init_wrong_type.vv:3:15: error: invalid map value: expected `f32`, not `float literal`
|
||||||
1 | fn main() {
|
1 | fn main() {
|
||||||
2 | mut a := map[string]f32{}
|
2 | mut a := map[string]f32{}
|
||||||
3 | a = map{ 'x': 12.3 }
|
3 | a = { 'x': 12.3 }
|
||||||
| ~~~~
|
| ~~~~
|
||||||
4 | _ = map{2:0 3:0 "hi":0}
|
4 | _ = {2:0 3:0 "hi":0}
|
||||||
5 | _ = map{2:0 3:`@` 4:0}
|
5 | _ = {2:0 3:`@` 4:0}
|
||||||
vlib/v/checker/tests/map_init_wrong_type.vv:4:20: error: invalid map key: expected `int`, not `string`
|
vlib/v/checker/tests/map_init_wrong_type.vv:4:17: error: invalid map key: expected `int`, not `string`
|
||||||
2 | mut a := map[string]f32{}
|
2 | mut a := map[string]f32{}
|
||||||
3 | a = map{ 'x': 12.3 }
|
3 | a = { 'x': 12.3 }
|
||||||
4 | _ = map{2:0 3:0 "hi":0}
|
4 | _ = {2:0 3:0 "hi":0}
|
||||||
| ~~~~
|
| ~~~~
|
||||||
5 | _ = map{2:0 3:`@` 4:0}
|
5 | _ = {2:0 3:`@` 4:0}
|
||||||
6 | _ = a
|
6 | _ = a
|
||||||
vlib/v/checker/tests/map_init_wrong_type.vv:5:18: error: invalid map value: expected `int`, not `rune`
|
vlib/v/checker/tests/map_init_wrong_type.vv:5:15: error: invalid map value: expected `int`, not `rune`
|
||||||
3 | a = map{ 'x': 12.3 }
|
3 | a = { 'x': 12.3 }
|
||||||
4 | _ = map{2:0 3:0 "hi":0}
|
4 | _ = {2:0 3:0 "hi":0}
|
||||||
5 | _ = map{2:0 3:`@` 4:0}
|
5 | _ = {2:0 3:`@` 4:0}
|
||||||
| ~~~
|
| ~~~
|
||||||
6 | _ = a
|
6 | _ = a
|
||||||
7 | }
|
7 | }
|
|
@ -1,7 +1,7 @@
|
||||||
fn main() {
|
fn main() {
|
||||||
mut a := map[string]f32{}
|
mut a := map[string]f32{}
|
||||||
a = map{ 'x': 12.3 }
|
a = { 'x': 12.3 }
|
||||||
_ = map{2:0 3:0 "hi":0}
|
_ = {2:0 3:0 "hi":0}
|
||||||
_ = map{2:0 3:`@` 4:0}
|
_ = {2:0 3:`@` 4:0}
|
||||||
_ = a
|
_ = a
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
vlib/v/checker/tests/mut_map_get_value_address_err.vv:3:12: error: cannot take the address of map values
|
vlib/v/checker/tests/mut_map_get_value_address_err.vv:3:12: error: cannot take the address of map values
|
||||||
1 | fn main() {
|
1 | fn main() {
|
||||||
2 | mut m := map{'key' : 3}
|
2 | mut m := {'key' : 3}
|
||||||
3 | a := &m['key']
|
3 | a := &m['key']
|
||||||
| ~~~~~~~
|
| ~~~~~~~
|
||||||
4 | println(a)
|
4 | println(a)
|
||||||
5 | }
|
5 | }
|
|
@ -1,5 +1,5 @@
|
||||||
fn main() {
|
fn main() {
|
||||||
mut m := map{'key' : 3}
|
mut m := {'key' : 3}
|
||||||
a := &m['key']
|
a := &m['key']
|
||||||
println(a)
|
println(a)
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
vlib/v/checker/tests/or_expr_types_mismatch.vv:3:19: error: wrong return type `none` in the `or {}` block, expected `string`
|
vlib/v/checker/tests/or_expr_types_mismatch.vv:3:19: error: wrong return type `none` in the `or {}` block, expected `string`
|
||||||
1 | fn get_map() ?string {
|
1 | fn get_map() ?string {
|
||||||
2 | m := map{1: 'a', 2: 'b'}
|
2 | m := {1: 'a', 2: 'b'}
|
||||||
3 | return m[1] or { none }
|
3 | return m[1] or { none }
|
||||||
| ~~~~
|
| ~~~~
|
||||||
4 | }
|
4 | }
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
fn get_map() ?string {
|
fn get_map() ?string {
|
||||||
m := map{1: 'a', 2: 'b'}
|
m := {1: 'a', 2: 'b'}
|
||||||
return m[1] or { none }
|
return m[1] or { none }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -37,7 +37,7 @@ fn a_val(a []int) int {
|
||||||
fn test_shared_as_value() {
|
fn test_shared_as_value() {
|
||||||
shared s := St{ a: 5 }
|
shared s := St{ a: 5 }
|
||||||
shared a := [3, 4, 6, 13, -23]
|
shared a := [3, 4, 6, 13, -23]
|
||||||
shared m := map{'qw': 12.75, 'yxcv': -3.125, 'poiu': 88.0625}
|
shared m := {'qw': 12.75, 'yxcv': -3.125, 'poiu': 88.0625}
|
||||||
shared r := Qr{ a: 7 }
|
shared r := Qr{ a: 7 }
|
||||||
lock s {
|
lock s {
|
||||||
u := r.s_val(s)
|
u := r.s_val(s)
|
||||||
|
@ -55,7 +55,7 @@ fn test_shared_as_value() {
|
||||||
fn test_shared_as_mut() {
|
fn test_shared_as_mut() {
|
||||||
shared s := St{ a: 5 }
|
shared s := St{ a: 5 }
|
||||||
shared a := [3, 4, 6, 13, -23]
|
shared a := [3, 4, 6, 13, -23]
|
||||||
shared m := map{'qw': 12.75, 'yxcv': -3.125, 'poiu': 88.0625}
|
shared m := {'qw': 12.75, 'yxcv': -3.125, 'poiu': 88.0625}
|
||||||
shared r := Qr{ a: 7 }
|
shared r := Qr{ a: 7 }
|
||||||
lock s {
|
lock s {
|
||||||
r.s_mut(mut s)
|
r.s_mut(mut s)
|
||||||
|
|
|
@ -1,13 +0,0 @@
|
||||||
vlib/v/checker/tests/struct_short_init_warning.vv:6:9: warning: short struct initalization is deprecated, use explicit struct name
|
|
||||||
4 |
|
|
||||||
5 | fn f(foo Foo) Foo {
|
|
||||||
6 | return {v: foo.v}
|
|
||||||
| ~~~~~~~~~~
|
|
||||||
7 | }
|
|
||||||
8 |
|
|
||||||
vlib/v/checker/tests/struct_short_init_warning.vv:10:4: warning: short struct initalization is deprecated, use explicit struct name
|
|
||||||
8 |
|
|
||||||
9 | fn main() {
|
|
||||||
10 | f({v: 10})
|
|
||||||
| ~~~~~~~
|
|
||||||
11 | }
|
|
|
@ -1,11 +0,0 @@
|
||||||
struct Foo {
|
|
||||||
v int
|
|
||||||
}
|
|
||||||
|
|
||||||
fn f(foo Foo) Foo {
|
|
||||||
return {v: foo.v}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn main() {
|
|
||||||
f({v: 10})
|
|
||||||
}
|
|
|
@ -279,7 +279,7 @@ pub fn (mut d Doc) stmt(stmt ast.Stmt, filename string) ?DocNode {
|
||||||
kind: .variable
|
kind: .variable
|
||||||
parent_name: node.name
|
parent_name: node.name
|
||||||
pos: param.pos
|
pos: param.pos
|
||||||
attrs: map{
|
attrs: {
|
||||||
'mut': param.is_mut.str()
|
'mut': param.is_mut.str()
|
||||||
}
|
}
|
||||||
return_type: d.type_to_str(param.typ)
|
return_type: d.type_to_str(param.typ)
|
||||||
|
|
|
@ -1970,14 +1970,11 @@ pub fn (mut f Fmt) map_init(node ast.MapInit) {
|
||||||
info := sym.info as ast.Map
|
info := sym.info as ast.Map
|
||||||
f.mark_types_import_as_used(info.key_type)
|
f.mark_types_import_as_used(info.key_type)
|
||||||
f.write(f.table.type_to_str_using_aliases(node.typ, f.mod2alias))
|
f.write(f.table.type_to_str_using_aliases(node.typ, f.mod2alias))
|
||||||
} else {
|
|
||||||
// m = map{}
|
|
||||||
f.write('map')
|
|
||||||
}
|
}
|
||||||
f.write('{}')
|
f.write('{}')
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
f.writeln('map{')
|
f.writeln('{')
|
||||||
f.indent++
|
f.indent++
|
||||||
f.comments(node.pre_cmnts)
|
f.comments(node.pre_cmnts)
|
||||||
mut max_field_len := 0
|
mut max_field_len := 0
|
||||||
|
|
|
@ -3,7 +3,7 @@ import net.http
|
||||||
const (
|
const (
|
||||||
write_set_cookie_tests = [
|
write_set_cookie_tests = [
|
||||||
ReadSetCookiesTestCase{
|
ReadSetCookiesTestCase{
|
||||||
header: map{
|
header: {
|
||||||
'Set-Cookie': ['special-7=","']
|
'Set-Cookie': ['special-7=","']
|
||||||
}
|
}
|
||||||
cookies: [
|
cookies: [
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
fn main() {
|
fn main() {
|
||||||
_ := []int{len: 10, cap: 10, init: 7}
|
_ := []int{len: 10, cap: 10, init: 7}
|
||||||
_ := []map[string]string{len: 5, cap: 50, init: map{
|
_ := []map[string]string{len: 5, cap: 50, init: {
|
||||||
'a': 'a'
|
'a': 'a'
|
||||||
}}
|
}}
|
||||||
_ := []map[string][]int{len: 7, cap: 100, init: map{
|
_ := []map[string][]int{len: 7, cap: 100, init: {
|
||||||
'a': [1, 2]
|
'a': [1, 2]
|
||||||
}}
|
}}
|
||||||
}
|
}
|
||||||
|
|
|
@ -70,7 +70,7 @@ fn linebreaks_in_ascii_art_block_comments() {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn map_comments() {
|
fn map_comments() {
|
||||||
mymap := map{
|
mymap := {
|
||||||
// pre
|
// pre
|
||||||
`:`: 1
|
`:`: 1
|
||||||
`!`: 2 // after
|
`!`: 2 // after
|
||||||
|
|
|
@ -80,7 +80,7 @@ fn no_empty_lines() {
|
||||||
mut files := map[string][]FileData{}
|
mut files := map[string][]FileData{}
|
||||||
code := 'foo
|
code := 'foo
|
||||||
bar'
|
bar'
|
||||||
params[0] = {
|
params[0] = IfExpr{
|
||||||
...params[0]
|
...params[0]
|
||||||
typ: params[0].typ.set_nr_muls(1)
|
typ: params[0].typ.set_nr_muls(1)
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,7 +9,7 @@ pub struct Foo {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn (f Foo) new_some<T>(value T) Optional<T> {
|
pub fn (f Foo) new_some<T>(value T) Optional<T> {
|
||||||
return {
|
return Optional{
|
||||||
value: value
|
value: value
|
||||||
some: true
|
some: true
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,8 +22,8 @@ fn main() {
|
||||||
y: 0
|
y: 0
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
bar2_func({})
|
bar2_func()
|
||||||
bar2_func({ x: 's' },
|
bar2_func(Bar{ x: 's' },
|
||||||
x: 's'
|
x: 's'
|
||||||
)
|
)
|
||||||
baz_func('foo', 'bar',
|
baz_func('foo', 'bar',
|
||||||
|
@ -32,7 +32,7 @@ fn main() {
|
||||||
)
|
)
|
||||||
ui.row(
|
ui.row(
|
||||||
// stretch: true
|
// stretch: true
|
||||||
margin: {
|
margin: Margin{
|
||||||
top: 10
|
top: 10
|
||||||
left: 10
|
left: 10
|
||||||
right: 10
|
right: 10
|
||||||
|
|
|
@ -16,15 +16,15 @@ fn main() {
|
||||||
x: 0
|
x: 0
|
||||||
y: 0
|
y: 0
|
||||||
})
|
})
|
||||||
bar2_func({})
|
bar2_func()
|
||||||
bar2_func({x: 's'}, {x: 's'})
|
bar2_func(Bar{x: 's'}, x: 's')
|
||||||
baz_func('foo', 'bar', x: 0
|
baz_func('foo', 'bar', x: 0
|
||||||
y: 0
|
y: 0
|
||||||
)
|
)
|
||||||
ui.row({
|
ui.row(
|
||||||
//stretch: true
|
//stretch: true
|
||||||
margin: {top:10,left:10,right:10,bottom:10}
|
margin: Margin{top:10,left:10,right:10,bottom:10}
|
||||||
})
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn bar_func(bar Bar) {
|
fn bar_func(bar Bar) {
|
||||||
|
|
|
@ -52,6 +52,5 @@ fn main() {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn trailing_struct_with_update_expr() {
|
fn trailing_struct_with_update_expr() {
|
||||||
c.error('duplicate const `$field.name`', { ...field.pos, len: name_len })
|
|
||||||
c.error('duplicate const `$field.name`', Position{ ...field.pos, len: name_len })
|
c.error('duplicate const `$field.name`', Position{ ...field.pos, len: name_len })
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,7 +28,7 @@ struct Struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn (s Struct) method(v StructMethodArg) StructMethodRet {
|
fn (s Struct) method(v StructMethodArg) StructMethodRet {
|
||||||
return {}
|
return StructMethodRet{}
|
||||||
}
|
}
|
||||||
|
|
||||||
interface Interface {
|
interface Interface {
|
||||||
|
@ -43,7 +43,7 @@ fn f(v FnArg) FnRet {
|
||||||
|
|
||||||
println(Enum.val)
|
println(Enum.val)
|
||||||
|
|
||||||
return {}
|
return FnRet{}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct App {
|
struct App {
|
||||||
|
|
|
@ -33,7 +33,7 @@ struct Struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn (s Struct) method(v StructMethodArg) StructMethodRet {
|
fn (s Struct) method(v StructMethodArg) StructMethodRet {
|
||||||
return {}
|
return StructMethodRet{}
|
||||||
}
|
}
|
||||||
|
|
||||||
interface Interface {
|
interface Interface {
|
||||||
|
@ -47,7 +47,7 @@ fn f(v FnArg) FnRet {
|
||||||
|
|
||||||
println(Enum.val)
|
println(Enum.val)
|
||||||
|
|
||||||
return {}
|
return FnRet{}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct App {
|
struct App {
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
const (
|
const (
|
||||||
reserved_types = map{
|
reserved_types = {
|
||||||
'i8': true
|
'i8': true
|
||||||
'i16': true
|
'i16': true
|
||||||
'int': true
|
'int': true
|
||||||
|
@ -8,7 +8,7 @@ const (
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
numbers := map{
|
numbers := {
|
||||||
'one': 1
|
'one': 1
|
||||||
'two': 2
|
'two': 2
|
||||||
'sevenhundredseventyseven': 777
|
'sevenhundredseventyseven': 777
|
||||||
|
|
|
@ -5,11 +5,11 @@ fn workaround() {
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
mut ams := []map[string]string{}
|
mut ams := []map[string]string{}
|
||||||
ams << map{
|
ams << {
|
||||||
'a': 'b'
|
'a': 'b'
|
||||||
'c': 'd'
|
'c': 'd'
|
||||||
}
|
}
|
||||||
ams << map{
|
ams << {
|
||||||
'e': 'f'
|
'e': 'f'
|
||||||
'g': 'h'
|
'g': 'h'
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,7 +5,7 @@ fn sqr(n int) int {
|
||||||
fn main() {
|
fn main() {
|
||||||
fns := [sqr]
|
fns := [sqr]
|
||||||
println(fns[0](10))
|
println(fns[0](10))
|
||||||
fns_map := map{
|
fns_map := {
|
||||||
'sqr': sqr
|
'sqr': sqr
|
||||||
}
|
}
|
||||||
println(fns_map['sqr'])
|
println(fns_map['sqr'])
|
||||||
|
|
|
@ -73,8 +73,6 @@ fn main() {
|
||||||
println('key' in m)
|
println('key' in m)
|
||||||
print('true\t=> ')
|
print('true\t=> ')
|
||||||
println('badkey' !in m)
|
println('badkey' !in m)
|
||||||
print('true\t=> ')
|
|
||||||
println('o' in 'hello')
|
|
||||||
|
|
||||||
// for in
|
// for in
|
||||||
for _ in arr1 {}
|
for _ in arr1 {}
|
||||||
|
|
|
@ -71,7 +71,7 @@ fn main() {
|
||||||
arr := [1, 2, 3, 4, 5]
|
arr := [1, 2, 3, 4, 5]
|
||||||
for i in arr {
|
for i in arr {
|
||||||
}
|
}
|
||||||
ma := map{
|
ma := {
|
||||||
'str': 'done'
|
'str': 'done'
|
||||||
'ddo': 'baba'
|
'ddo': 'baba'
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,6 +50,8 @@ pub fn (mut p Parser) check_expr(precedence int) ?ast.Expr {
|
||||||
p.inside_match = false
|
p.inside_match = false
|
||||||
} else if p.tok.lit == 'map' && p.peek_tok.kind == .lcbr && !(p.builtin_mod
|
} else if p.tok.lit == 'map' && p.peek_tok.kind == .lcbr && !(p.builtin_mod
|
||||||
&& p.file_base in ['map.v', 'map_d_gcboehm_opt.v']) {
|
&& p.file_base in ['map.v', 'map_d_gcboehm_opt.v']) {
|
||||||
|
p.warn_with_pos("deprecated map syntax, use syntax like `{'age': 20}`",
|
||||||
|
p.tok.position())
|
||||||
p.next() // `map`
|
p.next() // `map`
|
||||||
p.next() // `{`
|
p.next() // `{`
|
||||||
node = p.map_init()
|
node = p.map_init()
|
||||||
|
@ -297,33 +299,9 @@ pub fn (mut p Parser) check_expr(precedence int) ?ast.Expr {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.lcbr {
|
.lcbr {
|
||||||
// TODO: remove this when deprecation will be removed, vfmt should handle it for a while
|
// Map `{"age": 20}`
|
||||||
// Map `{"age": 20}` or `{ x | foo:bar, a:10 }`
|
|
||||||
p.next()
|
p.next()
|
||||||
if p.tok.kind in [.chartoken, .number, .string] {
|
node = p.map_init()
|
||||||
p.warn_with_pos("deprecated map syntax, use syntax like `map{'age': 20}`",
|
|
||||||
p.prev_tok.position())
|
|
||||||
node = p.map_init()
|
|
||||||
} else {
|
|
||||||
// it should be a struct
|
|
||||||
if p.tok.kind == .name && p.peek_tok.kind == .pipe {
|
|
||||||
// TODO: remove deprecated
|
|
||||||
p.warn_with_pos('use e.g. `...struct_var` instead', p.peek_tok.position())
|
|
||||||
node = p.assoc()
|
|
||||||
} else if (p.tok.kind == .name && p.peek_tok.kind == .colon)
|
|
||||||
|| p.tok.kind in [.rcbr, .comment, .ellipsis] {
|
|
||||||
node = p.struct_init(true) // short_syntax: true
|
|
||||||
p.warn_with_pos('short struct initalization is deprecated, use explicit struct name',
|
|
||||||
node.position())
|
|
||||||
} else if p.tok.kind == .name {
|
|
||||||
p.next()
|
|
||||||
return p.error_with_pos('unexpected $p.tok, expecting `:` after struct field name',
|
|
||||||
p.tok.position())
|
|
||||||
} else {
|
|
||||||
return p.error_with_pos('unexpected $p.tok, expecting struct field name',
|
|
||||||
p.tok.position())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
p.check(.rcbr)
|
p.check(.rcbr)
|
||||||
}
|
}
|
||||||
.key_fn {
|
.key_fn {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
vlib/v/parser/tests/for_in_mut_key_of_map.vv:3:6: error: index of array or key of map cannot be mutated
|
vlib/v/parser/tests/for_in_mut_key_of_map.vv:3:6: error: index of array or key of map cannot be mutated
|
||||||
1 | fn main() {
|
1 | fn main() {
|
||||||
2 | mut m := map{'foo': 1, 'bar': 2}
|
2 | mut m := {'foo': 1, 'bar': 2}
|
||||||
3 | for mut k, _ in m {
|
3 | for mut k, _ in m {
|
||||||
| ~~~
|
| ~~~
|
||||||
4 | println(k)
|
4 | println(k)
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
fn main() {
|
fn main() {
|
||||||
mut m := map{'foo': 1, 'bar': 2}
|
mut m := {'foo': 1, 'bar': 2}
|
||||||
for mut k, _ in m {
|
for mut k, _ in m {
|
||||||
println(k)
|
println(k)
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,7 @@ fn test_array_or() {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn test_map_or() {
|
fn test_map_or() {
|
||||||
m := map{
|
m := {
|
||||||
'as': 3
|
'as': 3
|
||||||
'qw': 4
|
'qw': 4
|
||||||
'kl': 5
|
'kl': 5
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
vlib/v/parser/tests/struct_field_expected.vv:6:2: error: unexpected token `.`, expecting struct field name
|
vlib/v/parser/tests/struct_field_expected.vv:6:4: error: invalid expression: unexpected token `:`
|
||||||
4 |
|
4 |
|
||||||
5 | x = {
|
5 | x = Bar{
|
||||||
6 | .a : 'Alpha'
|
6 | .a: 'Alpha'
|
||||||
| ^
|
| ^
|
||||||
7 | .b : 'Beta'
|
7 | .b: 'Beta'
|
||||||
8 | }
|
8 | }
|
|
@ -2,8 +2,8 @@ enum TestEnum {
|
||||||
a b
|
a b
|
||||||
}
|
}
|
||||||
|
|
||||||
x = {
|
x = Bar{
|
||||||
.a : 'Alpha'
|
.a: 'Alpha'
|
||||||
.b : 'Beta'
|
.b: 'Beta'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -55,7 +55,7 @@ fn test_samples() {
|
||||||
assert x.cflags == ['-I/usr/include', '-pthread', '-I/usr/include/glib-2.0',
|
assert x.cflags == ['-I/usr/include', '-pthread', '-I/usr/include/glib-2.0',
|
||||||
'-I/usr/lib/x86_64-linux-gnu/glib-2.0/include',
|
'-I/usr/lib/x86_64-linux-gnu/glib-2.0/include',
|
||||||
]
|
]
|
||||||
assert x.vars == map{
|
assert x.vars == {
|
||||||
'prefix': '/usr'
|
'prefix': '/usr'
|
||||||
'libdir': '/usr/lib/x86_64-linux-gnu'
|
'libdir': '/usr/lib/x86_64-linux-gnu'
|
||||||
'includedir': '/usr/include'
|
'includedir': '/usr/include'
|
||||||
|
@ -74,7 +74,7 @@ fn test_samples() {
|
||||||
assert x.libs_private == ['-pthread']
|
assert x.libs_private == ['-pthread']
|
||||||
assert x.cflags == ['-I/usr/include/glib-2.0',
|
assert x.cflags == ['-I/usr/include/glib-2.0',
|
||||||
'-I/usr/lib/x86_64-linux-gnu/glib-2.0/include', '-I/usr/include']
|
'-I/usr/lib/x86_64-linux-gnu/glib-2.0/include', '-I/usr/include']
|
||||||
assert x.vars == map{
|
assert x.vars == {
|
||||||
'prefix': '/usr'
|
'prefix': '/usr'
|
||||||
'libdir': '/usr/lib/x86_64-linux-gnu'
|
'libdir': '/usr/lib/x86_64-linux-gnu'
|
||||||
'includedir': '/usr/include'
|
'includedir': '/usr/include'
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import geometry
|
import geometry
|
||||||
|
|
||||||
fn test_aliases_map_init() {
|
fn test_aliases_map_init() {
|
||||||
a := geometry.ShapeMap(map{
|
a := geometry.ShapeMap({
|
||||||
geometry.Shape.circle: 'Shape is a circle.'
|
geometry.Shape.circle: 'Shape is a circle.'
|
||||||
})
|
})
|
||||||
assert a[geometry.Shape.circle] == 'Shape is a circle.'
|
assert a[geometry.Shape.circle] == 'Shape is a circle.'
|
||||||
|
|
|
@ -1,14 +1,14 @@
|
||||||
type Map = map[string]string
|
type Map = map[string]string
|
||||||
|
|
||||||
pub fn new_map() Map {
|
pub fn new_map() Map {
|
||||||
return Map(map{
|
return Map({
|
||||||
'23': 'str'
|
'23': 'str'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fn (a Map) + (b Map) Map {
|
fn (a Map) + (b Map) Map {
|
||||||
str := b['23']
|
str := b['23']
|
||||||
return Map(map{
|
return Map({
|
||||||
'34': str + '12'
|
'34': str + '12'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -16,7 +16,7 @@ fn (a Map) + (b Map) Map {
|
||||||
fn test_map_alias_op_overloading() {
|
fn test_map_alias_op_overloading() {
|
||||||
a := new_map()
|
a := new_map()
|
||||||
b := new_map()
|
b := new_map()
|
||||||
assert a + b == Map(map{
|
assert a + b == Map({
|
||||||
'34': 'str12'
|
'34': 'str12'
|
||||||
})
|
})
|
||||||
assert '${a + b}' == "Map({'34': 'str12'})"
|
assert '${a + b}' == "Map({'34': 'str12'})"
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
fn test_anon_fn_in_map() {
|
fn test_anon_fn_in_map() {
|
||||||
mut woop := map{
|
mut woop := {
|
||||||
'what': fn () string {
|
'what': fn () string {
|
||||||
return 'whoopity whoop'
|
return 'whoopity whoop'
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,7 +4,7 @@ struct Page {
|
||||||
|
|
||||||
fn test_array_append_short_struct() {
|
fn test_array_append_short_struct() {
|
||||||
mut pages := []Page{}
|
mut pages := []Page{}
|
||||||
pages << {
|
pages << Page{
|
||||||
contents: 3
|
contents: 3
|
||||||
}
|
}
|
||||||
println(pages)
|
println(pages)
|
||||||
|
|
|
@ -32,7 +32,7 @@ fn test_array_or_direct() {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn test_map_or() {
|
fn test_map_or() {
|
||||||
m := map{
|
m := {
|
||||||
'as': 3
|
'as': 3
|
||||||
'qw': 4
|
'qw': 4
|
||||||
'kl': 5
|
'kl': 5
|
||||||
|
@ -52,7 +52,7 @@ fn test_map_or() {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_map_el(key string) ?int {
|
fn get_map_el(key string) ?int {
|
||||||
m := map{
|
m := {
|
||||||
'as': 3
|
'as': 3
|
||||||
'qw': 4
|
'qw': 4
|
||||||
'kl': 5
|
'kl': 5
|
||||||
|
|
|
@ -8,13 +8,13 @@ fn (a Num) < (b Num) bool {
|
||||||
|
|
||||||
fn test_sort_lt_overloaded_struct_array() {
|
fn test_sort_lt_overloaded_struct_array() {
|
||||||
mut arr := []Num{}
|
mut arr := []Num{}
|
||||||
arr << {
|
arr << Num{
|
||||||
value: 10
|
value: 10
|
||||||
}
|
}
|
||||||
arr << {
|
arr << Num{
|
||||||
value: 5
|
value: 5
|
||||||
}
|
}
|
||||||
arr << {
|
arr << Num{
|
||||||
value: 7
|
value: 7
|
||||||
}
|
}
|
||||||
arr.sort()
|
arr.sort()
|
||||||
|
|
|
@ -45,11 +45,11 @@ fn test_interpolation_array_to_string() {
|
||||||
|
|
||||||
fn test_interpolation_array_of_map_to_string() {
|
fn test_interpolation_array_of_map_to_string() {
|
||||||
mut ams := []map[string]string{}
|
mut ams := []map[string]string{}
|
||||||
ams << map{
|
ams << {
|
||||||
'a': 'b'
|
'a': 'b'
|
||||||
'c': 'd'
|
'c': 'd'
|
||||||
}
|
}
|
||||||
ams << map{
|
ams << {
|
||||||
'e': 'f'
|
'e': 'f'
|
||||||
'g': 'h'
|
'g': 'h'
|
||||||
}
|
}
|
||||||
|
|
|
@ -115,7 +115,7 @@ fn test_nested_for_in_array_both() {
|
||||||
}
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
m = map{
|
m = {
|
||||||
'key': 'value'
|
'key': 'value'
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import json
|
import json
|
||||||
|
|
||||||
fn test_calling_functions_with_map_initializations_containing_arrays() {
|
fn test_calling_functions_with_map_initializations_containing_arrays() {
|
||||||
result := json.encode(map{
|
result := json.encode({
|
||||||
// NB: []string{} should NOT be treated as []json.string{}
|
// NB: []string{} should NOT be treated as []json.string{}
|
||||||
'users': []string{}
|
'users': []string{}
|
||||||
'groups': []string{}
|
'groups': []string{}
|
||||||
|
|
|
@ -26,7 +26,7 @@ fn test_cross_assign_of_array_in_fn() {
|
||||||
|
|
||||||
// Test cross assign of map values
|
// Test cross assign of map values
|
||||||
fn test_cross_assign_of_map() {
|
fn test_cross_assign_of_map() {
|
||||||
mut a := map{
|
mut a := {
|
||||||
'one': 1
|
'one': 1
|
||||||
'two': 2
|
'two': 2
|
||||||
}
|
}
|
||||||
|
@ -42,7 +42,7 @@ fn foo2(mut a map[string]int) {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn test_cross_assign_of_map_in_fn() {
|
fn test_cross_assign_of_map_in_fn() {
|
||||||
mut a := map{
|
mut a := {
|
||||||
'one': 1
|
'one': 1
|
||||||
'two': 2
|
'two': 2
|
||||||
}
|
}
|
||||||
|
@ -94,7 +94,7 @@ fn test_cross_assign_of_struct_in_fn() {
|
||||||
// Test cross assign of mixed types
|
// Test cross assign of mixed types
|
||||||
fn test_cross_assign_of_mixed_types() {
|
fn test_cross_assign_of_mixed_types() {
|
||||||
mut a := [0, 1]
|
mut a := [0, 1]
|
||||||
mut m := map{
|
mut m := {
|
||||||
'one': 1
|
'one': 1
|
||||||
'two': 2
|
'two': 2
|
||||||
}
|
}
|
||||||
|
@ -119,7 +119,7 @@ fn foo(mut a []int, mut m map[string]int, mut x Zoo) {
|
||||||
|
|
||||||
fn test_cross_assign_of_mixed_types_in_fn() {
|
fn test_cross_assign_of_mixed_types_in_fn() {
|
||||||
mut a := [0, 1]
|
mut a := [0, 1]
|
||||||
mut m := map{
|
mut m := {
|
||||||
'one': 1
|
'one': 1
|
||||||
'two': 2
|
'two': 2
|
||||||
}
|
}
|
||||||
|
@ -140,7 +140,7 @@ fn test_cross_assign_of_mixed_types_in_fn() {
|
||||||
// Test cross assign of complex types
|
// Test cross assign of complex types
|
||||||
fn test_cross_assign_of_complex_types() {
|
fn test_cross_assign_of_complex_types() {
|
||||||
mut a := [0, 1]
|
mut a := [0, 1]
|
||||||
mut m := map{
|
mut m := {
|
||||||
'one': 1
|
'one': 1
|
||||||
'two': 2
|
'two': 2
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,7 +18,7 @@ fn test_fn_array_direct_call() {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn test_fn_map_direct_call() {
|
fn test_fn_map_direct_call() {
|
||||||
a := map{
|
a := {
|
||||||
'aaa': fn () string {
|
'aaa': fn () string {
|
||||||
return 'aaa'
|
return 'aaa'
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,7 +12,7 @@ fn test_fn_mut_args_of_array() {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn init_map(mut n map[string]int) {
|
fn init_map(mut n map[string]int) {
|
||||||
n = map{
|
n = {
|
||||||
'one': 1
|
'one': 1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -21,7 +21,7 @@ fn test_fn_mut_args_of_map() {
|
||||||
mut m := map[string]int{}
|
mut m := map[string]int{}
|
||||||
init_map(mut m)
|
init_map(mut m)
|
||||||
println(m)
|
println(m)
|
||||||
assert m == map{
|
assert m == {
|
||||||
'one': 1
|
'one': 1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -64,7 +64,7 @@ fn test_for_in_fixed_array_of_fixed_array_literal() {
|
||||||
|
|
||||||
fn test_for_in_map_of_fixed_array() {
|
fn test_for_in_map_of_fixed_array() {
|
||||||
mut rets := []string{}
|
mut rets := []string{}
|
||||||
m := map{
|
m := {
|
||||||
'aa': [1, 2]!
|
'aa': [1, 2]!
|
||||||
'bb': [3, 4]!
|
'bb': [3, 4]!
|
||||||
'cc': [5, 6]!
|
'cc': [5, 6]!
|
||||||
|
@ -82,7 +82,7 @@ fn test_for_in_map_of_fixed_array() {
|
||||||
fn test_for_in_map_of_fixed_array_literal() {
|
fn test_for_in_map_of_fixed_array_literal() {
|
||||||
mut rets := []string{}
|
mut rets := []string{}
|
||||||
|
|
||||||
for k, v in map{
|
for k, v in {
|
||||||
'aa': [1, 2]!
|
'aa': [1, 2]!
|
||||||
'bb': [3, 4]!
|
'bb': [3, 4]!
|
||||||
'cc': [5, 6]!
|
'cc': [5, 6]!
|
||||||
|
@ -97,7 +97,7 @@ fn test_for_in_map_of_fixed_array_literal() {
|
||||||
|
|
||||||
fn test_for_mut_in_map_of_fixed_array() {
|
fn test_for_mut_in_map_of_fixed_array() {
|
||||||
mut rets := []string{}
|
mut rets := []string{}
|
||||||
mut m := map{
|
mut m := {
|
||||||
'aa': [1, 2]!
|
'aa': [1, 2]!
|
||||||
'bb': [3, 4]!
|
'bb': [3, 4]!
|
||||||
'cc': [5, 6]!
|
'cc': [5, 6]!
|
||||||
|
|
|
@ -31,7 +31,7 @@ fn foo3(mut m map[string][3]int) {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn test_fn_mut_val_of_map() {
|
fn test_fn_mut_val_of_map() {
|
||||||
mut m := map{
|
mut m := {
|
||||||
'hello': [1, 2, 3]!
|
'hello': [1, 2, 3]!
|
||||||
}
|
}
|
||||||
foo3(mut m)
|
foo3(mut m)
|
||||||
|
@ -46,7 +46,7 @@ fn foo4(mut m map[string][3]int) {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn test_for_in_mut_val_of_map() {
|
fn test_for_in_mut_val_of_map() {
|
||||||
mut m := map{
|
mut m := {
|
||||||
'hello': [1, 2, 3]!
|
'hello': [1, 2, 3]!
|
||||||
}
|
}
|
||||||
foo4(mut m)
|
foo4(mut m)
|
||||||
|
@ -55,7 +55,7 @@ fn test_for_in_mut_val_of_map() {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn test_for_in_mut_val_of_map_direct() {
|
fn test_for_in_mut_val_of_map_direct() {
|
||||||
mut m := map{
|
mut m := {
|
||||||
'foo': 1
|
'foo': 1
|
||||||
'bar': 2
|
'bar': 2
|
||||||
}
|
}
|
||||||
|
@ -67,16 +67,16 @@ fn test_for_in_mut_val_of_map_direct() {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn test_for_in_mut_val_of_map_fixed_array() {
|
fn test_for_in_mut_val_of_map_fixed_array() {
|
||||||
mut m := map{
|
mut m := {
|
||||||
'foo': [map{
|
'foo': [{
|
||||||
'a': 1
|
'a': 1
|
||||||
}]!
|
}]!
|
||||||
'bar': [map{
|
'bar': [{
|
||||||
'b': 2
|
'b': 2
|
||||||
}]!
|
}]!
|
||||||
}
|
}
|
||||||
for _, mut j in m {
|
for _, mut j in m {
|
||||||
j = [map{
|
j = [{
|
||||||
'c': 3
|
'c': 3
|
||||||
}]!
|
}]!
|
||||||
}
|
}
|
||||||
|
|
|
@ -62,7 +62,7 @@ fn test_for_in_fixed_array_label_continue_break() {
|
||||||
|
|
||||||
fn test_for_in_map_label_continue_break() {
|
fn test_for_in_map_label_continue_break() {
|
||||||
mut rets := []string{}
|
mut rets := []string{}
|
||||||
m := map{
|
m := {
|
||||||
'a': 4
|
'a': 4
|
||||||
'b': 5
|
'b': 5
|
||||||
'c': 6
|
'c': 6
|
||||||
|
|
|
@ -44,7 +44,7 @@ fn test_for_char_in_string() {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn test_for_string_in_map() {
|
fn test_for_string_in_map() {
|
||||||
m := map{
|
m := {
|
||||||
'a': 'b'
|
'a': 'b'
|
||||||
'c': 'd'
|
'c': 'd'
|
||||||
}
|
}
|
||||||
|
@ -54,7 +54,7 @@ fn test_for_string_in_map() {
|
||||||
}
|
}
|
||||||
assert acc == 'a: b, c: d, '
|
assert acc == 'a: b, c: d, '
|
||||||
|
|
||||||
mut m2 := map{
|
mut m2 := {
|
||||||
'a': 3
|
'a': 3
|
||||||
'b': 4
|
'b': 4
|
||||||
'c': 5
|
'c': 5
|
||||||
|
|
|
@ -4,32 +4,32 @@ fn print_map<K, V>(x map[K]V) string {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn test_generics_infer_map_type() {
|
fn test_generics_infer_map_type() {
|
||||||
m1 := map{
|
m1 := {
|
||||||
'one': 1
|
'one': 1
|
||||||
}
|
}
|
||||||
assert print_map(m1) == "{'one': 1}"
|
assert print_map(m1) == "{'one': 1}"
|
||||||
|
|
||||||
m2 := map{
|
m2 := {
|
||||||
'one': 1.1
|
'one': 1.1
|
||||||
}
|
}
|
||||||
assert print_map(m2) == "{'one': 1.1}"
|
assert print_map(m2) == "{'one': 1.1}"
|
||||||
|
|
||||||
m3 := map{
|
m3 := {
|
||||||
'one': 'a'
|
'one': 'a'
|
||||||
}
|
}
|
||||||
assert print_map(m3) == "{'one': 'a'}"
|
assert print_map(m3) == "{'one': 'a'}"
|
||||||
|
|
||||||
m4 := map{
|
m4 := {
|
||||||
1: 'one'
|
1: 'one'
|
||||||
}
|
}
|
||||||
assert print_map(m4) == "{1: 'one'}"
|
assert print_map(m4) == "{1: 'one'}"
|
||||||
|
|
||||||
m5 := map{
|
m5 := {
|
||||||
1.1: 'one'
|
1.1: 'one'
|
||||||
}
|
}
|
||||||
assert print_map(m5) == "{1.1: 'one'}"
|
assert print_map(m5) == "{1.1: 'one'}"
|
||||||
|
|
||||||
m6 := map{
|
m6 := {
|
||||||
'a': 'one'
|
'a': 'one'
|
||||||
}
|
}
|
||||||
assert print_map(m6) == "{'a': 'one'}"
|
assert print_map(m6) == "{'a': 'one'}"
|
||||||
|
|
|
@ -41,7 +41,7 @@ fn test_generic_fn_infer_multi_paras() {
|
||||||
page: 'one'
|
page: 'one'
|
||||||
var_one: 'variable one'
|
var_one: 'variable one'
|
||||||
var_two: 'variable two'
|
var_two: 'variable two'
|
||||||
var_three: {
|
var_three: Two_data{
|
||||||
title: 'what a title'
|
title: 'what a title'
|
||||||
content: 'what a content'
|
content: 'what a content'
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,7 +6,7 @@ mut:
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn new_some<T>(value T) Optional<T> {
|
pub fn new_some<T>(value T) Optional<T> {
|
||||||
return {
|
return Optional{
|
||||||
value: value
|
value: value
|
||||||
some: true
|
some: true
|
||||||
}
|
}
|
||||||
|
@ -40,7 +40,7 @@ pub struct Foo {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn (f Foo) new_some<T>(value T) Optional<T> {
|
pub fn (f Foo) new_some<T>(value T) Optional<T> {
|
||||||
return {
|
return Optional{
|
||||||
value: value
|
value: value
|
||||||
some: true
|
some: true
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,7 @@ mut:
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn new_some<T, B>(value T, b B) Optional<T> {
|
pub fn new_some<T, B>(value T, b B) Optional<T> {
|
||||||
return {
|
return Optional{
|
||||||
value: value
|
value: value
|
||||||
some: true
|
some: true
|
||||||
typ: typeof(b).name
|
typ: typeof(b).name
|
||||||
|
@ -54,7 +54,7 @@ pub struct Foo {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn (f Foo) new_some<T, B>(value T, b B) Optional<T> {
|
pub fn (f Foo) new_some<T, B>(value T, b B) Optional<T> {
|
||||||
return {
|
return Optional{
|
||||||
value: value
|
value: value
|
||||||
some: true
|
some: true
|
||||||
typ: typeof(b).name
|
typ: typeof(b).name
|
||||||
|
|
|
@ -5,7 +5,7 @@ mut:
|
||||||
}
|
}
|
||||||
|
|
||||||
fn new_foo<A, B>(a A, b B) Foo<A, B> {
|
fn new_foo<A, B>(a A, b B) Foo<A, B> {
|
||||||
return {
|
return Foo{
|
||||||
a: a
|
a: a
|
||||||
b: b
|
b: b
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,7 +11,7 @@ fn test_identity() {
|
||||||
assert simple<string>('g') + 'h' == 'gh'
|
assert simple<string>('g') + 'h' == 'gh'
|
||||||
|
|
||||||
assert simple<[]int>([1])[0] == 1
|
assert simple<[]int>([1])[0] == 1
|
||||||
assert simple<map[string]string>(map{
|
assert simple<map[string]string>({
|
||||||
'a': 'b'
|
'a': 'b'
|
||||||
})['a'] == 'b'
|
})['a'] == 'b'
|
||||||
|
|
||||||
|
@ -399,7 +399,7 @@ fn test_pass_generic_to_nested_function() {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn generic_return_map<M>() map[string]M {
|
fn generic_return_map<M>() map[string]M {
|
||||||
return map{
|
return {
|
||||||
'': M{}
|
'': M{}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -409,8 +409,8 @@ fn test_generic_return_map() {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn generic_return_nested_map<M>() map[string]map[string]M {
|
fn generic_return_nested_map<M>() map[string]map[string]M {
|
||||||
return map{
|
return {
|
||||||
'': map{
|
'': {
|
||||||
'': M{}
|
'': M{}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,7 +26,7 @@ fn test_fn_return_empty() {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn test_map_get() {
|
fn test_map_get() {
|
||||||
mut m := map{
|
mut m := {
|
||||||
'xy': 5
|
'xy': 5
|
||||||
'zu': 7
|
'zu': 7
|
||||||
}
|
}
|
||||||
|
@ -42,7 +42,7 @@ fn test_map_get() {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn test_map_get_empty() {
|
fn test_map_get_empty() {
|
||||||
mut m := map{
|
mut m := {
|
||||||
'xy': 5
|
'xy': 5
|
||||||
'zu': 7
|
'zu': 7
|
||||||
}
|
}
|
||||||
|
|
|
@ -115,7 +115,7 @@ fn test_in_expression_in_alias() {
|
||||||
assert 0 in arr
|
assert 0 in arr
|
||||||
assert 100 !in arr
|
assert 100 !in arr
|
||||||
|
|
||||||
m := MapAlias(map{
|
m := MapAlias({
|
||||||
'one': 1
|
'one': 1
|
||||||
'two': 2
|
'two': 2
|
||||||
'three': 3
|
'three': 3
|
||||||
|
@ -125,7 +125,7 @@ fn test_in_expression_in_alias() {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn test_in_expression_in_map() {
|
fn test_in_expression_in_map() {
|
||||||
m := map{
|
m := {
|
||||||
'one': 1
|
'one': 1
|
||||||
'two': 2
|
'two': 2
|
||||||
'three': 3
|
'three': 3
|
||||||
|
@ -134,14 +134,6 @@ fn test_in_expression_in_map() {
|
||||||
assert 'four' !in m
|
assert 'four' !in m
|
||||||
}
|
}
|
||||||
|
|
||||||
fn test_in_expression_in_string() {
|
|
||||||
s := 'abcd'
|
|
||||||
assert 'a' in s
|
|
||||||
assert 'ab' in s
|
|
||||||
assert 'abcd' in s
|
|
||||||
assert 'dbca' !in s
|
|
||||||
}
|
|
||||||
|
|
||||||
fn test_optimized_in_expression() {
|
fn test_optimized_in_expression() {
|
||||||
mut a := false
|
mut a := false
|
||||||
a = true && 2 in [1, 2]
|
a = true && 2 in [1, 2]
|
||||||
|
|
|
@ -69,7 +69,7 @@ __global (
|
||||||
testexpl = f32(7)
|
testexpl = f32(7)
|
||||||
testfn = get_u64()
|
testfn = get_u64()
|
||||||
testarr = []f64{len: 10, init: 2.75}
|
testarr = []f64{len: 10, init: 2.75}
|
||||||
testmap = map{
|
testmap = {
|
||||||
'qwe': 2.5
|
'qwe': 2.5
|
||||||
'asd': -7.25
|
'asd': -7.25
|
||||||
'yxc': 3.125
|
'yxc': 3.125
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue