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

1676 Commits

Author SHA1 Message Date
Ricardo Tomasi
868d6c808b compiler: avoid redeclaration of var during reassignment with optional value 2020-01-05 11:53:40 +01:00
joe-conigliaro
5a6f9024d3 v: small fixes typo & register struct & and add array elem pointer 2020-01-05 11:52:03 +01:00
joe-conigliaro
2061394ad7 v: initial impl of new type sys w/ pointer & placeholder support (#3323) 2020-01-04 17:57:25 +01:00
Delyan Angelov
778a1cc34a make g_str_buf a static buffer of size 1K (#3321) 2020-01-04 17:53:37 +01:00
Alexander Medvednikov
7bc5cfc53a fix windows test 2020-01-04 00:24:30 +01:00
Alexander Medvednikov
3344111a03 minor fixes and cleaning up 2020-01-04 00:06:06 +01:00
Delyan Angelov
aeda48d94e vpm: add support for other VCS for modules, like hg
Add ability to pass flags to vpm.

Implement -help , -verbose and -server-url ,
to enable easier diagnostics and testing with a local server.
2020-01-03 22:07:58 +01:00
Delyan Angelov
ddd83c2108 pg: add db.exec_param_many() 2020-01-03 22:07:28 +01:00
Delyan Angelov
67f397f888 os: implement os.cachedir() . Use it inside os.tmpdir() too 2020-01-03 19:46:23 +01:00
joe-conigliaro
43895269ff compiler: implement direct cast for sum type 2020-01-03 14:42:48 +01:00
Alexander Medvednikov
520ec0f53a fix cgen_test 2020-01-03 11:41:39 +01:00
Alexander Medvednikov
7c47f345be mingw on macos 2020-01-03 11:38:30 +01:00
joe-conigliaro
343ded18fd parser: dot fix 2020-01-03 11:36:17 +01:00
Alexander Medvednikov
492dfebd15 SelectorExpr; receivers; struct field check; if expression 2020-01-02 20:09:23 +01:00
sh0f
3c65af8b9a cli: fix warning 2020-01-02 18:09:24 +01:00
Charles WANG
7a031d5e23 update and rename ui_win.v to ui_windows.v 2020-01-02 18:09:09 +01:00
Charles WANG
166dc28480 update ui_linux.v: module ui to uiold 2020-01-02 18:08:54 +01:00
Alexander Medvednikov
a6a9958cfc register fn args; remove dup code 2020-01-02 08:37:41 +01:00
Alexander Medvednikov
460b35137a handle unknown fns; fn.v; type fixes 2020-01-02 08:30:15 +01:00
Alexander Medvednikov
e7e07be38c handle unknown functions; fix var types 2020-01-01 23:15:20 +01:00
Alexander Medvednikov
b1d6021875 x64 fixes 2020-01-01 22:34:46 +01:00
Alexander Medvednikov
807c16dd1b uiold fixes 2020-01-01 13:27:21 +01:00
Alexander Medvednikov
e8bbb00bde ui is in a separate repo for now, rename it to avoid conflicts 2020-01-01 13:14:01 +01:00
Alexander Medvednikov
e53bb6a9d4 parser: wrong else 2020-01-01 13:12:38 +01:00
Alexander Medvednikov
327314c2c3 parser: unknown function error 2020-01-01 13:08:05 +01:00
sh0f
f87177d34d base64: fix warnings 2020-01-01 12:58:32 +01:00
Alexander Medvednikov
b7663848ef os: fix create() 2020-01-01 12:57:27 +01:00
Alexander Medvednikov
47908c22df cgen_test: skip empty lines; os: make vc_gen compile 2020-01-01 12:50:25 +01:00
Alexander Medvednikov
78c706ab71 Revert "enable macos syscalls"
This reverts commit d226fa7b17.
2020-01-01 12:24:50 +01:00
Alexander Medvednikov
d226fa7b17 enable macos syscalls 2020-01-01 12:10:39 +01:00
Alexander Medvednikov
2f8969c604 time: Windows fix 2020-01-01 12:01:03 +01:00
Alexander Medvednikov
79b4a757c4 fix cgen_test.v 2020-01-01 10:32:22 +01:00
Alexander Medvednikov
4794598d06 if x := opt() {} else {} 2020-01-01 10:31:50 +01:00
Alexander Medvednikov
96d02849aa parser: parse_file(path) 2020-01-01 10:15:05 +01:00
Alexander Medvednikov
87cff0386c time: gmt offset; macos syscalls 2020-01-01 10:09:19 +01:00
sh0f
3c17851200 time: add test for #3291 2020-01-01 08:00:23 +01:00
sh0f
a99f214a0f time: fix error: array index out of range 2020-01-01 07:27:48 +01:00
Alexander Medvednikov
c75cb86203 0.1.24 2019-12-31 20:49:11 +01:00
Alexander Medvednikov
4d31d5882d x64, v2 backends 2019-12-31 19:42:16 +01:00
Delyan Angelov
222f2f08f6 vfmt: fix formatting of 'import mod as alias' 2019-12-31 19:26:44 +01:00
lutherwenxu
286a0a1371 time: rewrite unix() function 2019-12-31 17:11:47 +01:00
Alexander Medvednikov
da5fb5dcbd Revert "x64, v2 backends"
This reverts commit 81ae54d9bd.
2019-12-31 13:23:12 +01:00
Alexander Medvednikov
81ae54d9bd x64, v2 backends 2019-12-31 13:21:22 +01:00
Alexander Medvednikov
907254b9e8 Revert "B-tree map "
This reverts commit 8a4bce667c.
2019-12-31 12:46:56 +01:00
Alexander Medvednikov
4424f83470 os: disable write_bytes_at() and read_bytes_at() for now 2019-12-31 11:43:10 +00:00
Alexander Medvednikov
f9cc419dba os: syscalls 2019-12-31 10:16:34 +00:00
joe-conigliaro
80da2341aa v: fix unary +,- & rename token.TokenKind to token.Kind 2019-12-31 10:53:30 +01:00
Alexander Medvednikov
3a7f1db947 fix parser tests 2019-12-30 17:05:32 +01:00
Alexander Medvednikov
093a025ebf parse_files(); ast.File 2019-12-30 16:55:59 +01:00
Delyan Angelov
d2f2ac523f flag: fix displaying of both abbreviated and long options
Add tests for the usage screen
2019-12-30 16:38:32 +01:00
joe-conigliaro
d07953b0f0 v: fix postfix unary ++ -- operators & some cleanup 2019-12-30 15:06:56 +01:00
Charles WANG
ca62b66665 sqlite: a minor fix 2019-12-30 10:49:36 +01:00
Delyan Angelov
25beb7b3f4 in errors, print array_ instead of [] in function names 2019-12-30 10:48:08 +01:00
Alexander Medvednikov
cba6a6fdea as casting 2019-12-30 10:47:34 +01:00
Alexander Medvednikov
2d597d7804 array initialization 2019-12-30 10:37:09 +01:00
Alexander Medvednikov
1d9916f93e fix fn main generation 2019-12-30 09:29:07 +01:00
Alexander Medvednikov
f725aa2e8d rename cgen module to gen; jsgen 2019-12-30 09:21:48 +01:00
Alexander Medvednikov
edf8a2cd08 fix bool expressions 2019-12-30 08:17:58 +01:00
Alexander Medvednikov
806691c1db for loop; struct decl; struct init; < > <= >= 2019-12-30 08:05:20 +01:00
ka-weihe
8a4bce667c B-tree map 2019-12-30 06:57:56 +01:00
Alexander Medvednikov
2d2e0307b8 fn call; if expression; bool literals; 100k line program gen
fix

yay

lovely
2019-12-30 05:57:36 +01:00
Abdullah Atta
63b70ddb06 move http module to net.http 2019-12-30 05:42:23 +01:00
mY9Yd2
6cee50afda os: fix tmpdir on unix 2019-12-30 05:25:26 +01:00
Ulises Jeremias Cornejo Fandos
89d3075f88 math: update complex operators for multiplication and division 2019-12-30 05:24:30 +01:00
Delyan Angelov
a0f32f5c29 tests: improved test output formatting 2019-12-30 05:23:54 +01:00
Abdullah Atta
4f173c8900 vpm: implement & improve install, search, update, remove 2019-12-30 05:22:28 +01:00
Johan Hillerström
2d5f5a0c25 remove debug printing of sum types 2019-12-30 05:21:46 +01:00
radare
49430a5c31 flag help message is now a bit more compact 2019-12-30 05:21:22 +01:00
Alexander Medvednikov
349576b5cd fn call + fn args 2019-12-29 08:47:41 +01:00
Alexander Medvednikov
c915c58d12 local vars + Parser.errror() 2019-12-29 07:14:29 +01:00
Alexander Medvednikov
c81fbee4ab fix parser_test.v 2019-12-29 06:49:52 +01:00
Alexander Medvednikov
5a6428f1ff AssignStmt 2019-12-29 06:37:08 +01:00
Alexander Medvednikov
b5fe40624c staments + a sum type fix 2019-12-28 18:53:08 +01:00
Delyan Angelov
68e1d8e8eb net.ftp: make ftp's tests just compile (not run) on CI 2019-12-28 13:55:53 +01:00
Alexander Medvednikov
48585e54df fix parser_text.v 2019-12-28 13:51:36 +01:00
Alexander Medvednikov
59c784ae57 fix cgen_test.v 2019-12-28 12:06:53 +01:00
Alexander Medvednikov
651c7e8de1 cgen tests 2019-12-28 11:55:14 +01:00
Alexander Medvednikov
379c79025b run vfmt on v/ 2019-12-28 10:38:29 +01:00
Alexey
e02d6a3b04 ftp: flatten tests 2019-12-28 09:41:54 +01:00
Delyan Angelov
72acbad3f0 v help: document -verbose flag 2019-12-28 09:41:21 +01:00
Alexander Medvednikov
ec6a8cc9fd move ftp to net/ftp 2019-12-28 09:16:27 +01:00
joe-conigliaro
a986321b6d v: update parser / token & split parsing into methods 2019-12-28 09:15:32 +01:00
Alexey
f40f023487 ftp: cosmetic fixes
Use single quotes for strings.
Use string interpolation instead of concatenation.
Don't print messages in non-debug mode.
Fix typos in error messages.
Add space after comma, add spaces between operators.
extract code to separate functions
2019-12-28 08:53:28 +01:00
Nicolas Sauzede
4925aa594b os: fix deprecated os.dir to work as advertised 2019-12-28 08:49:27 +01:00
joe-conigliaro
a214778b74 fix bug with sum type 2019-12-28 08:48:55 +01:00
Don Alfons Nisnoni
06fba73ab9 os: add os.symlink() function 2019-12-27 19:10:06 +01:00
sha0coder
7518d2d0dc FTP module 2019-12-27 19:08:44 +01:00
vitalyster
2f23ee4818 windows: cleanup after bootstrapping with unicode entrypoint 2019-12-27 19:07:31 +01:00
Alexander Medvednikov
796c376408 fix parser_test.v 2019-12-27 18:55:51 +01:00
Alexander Medvednikov
66a07d7fe0 FnDecl, Return, statement block 2019-12-27 18:39:19 +01:00
Delyan Angelov
6c16bac908 vfmt: it can now be used for _platform.v files too, no matter the host os 2019-12-27 17:59:04 +01:00
Alexander Medvednikov
4da21d80e3 fix () warning 2019-12-27 10:16:00 +01:00
Alexander Medvednikov
fc5f4ff326 make types.check public 2019-12-27 10:12:40 +01:00
Alexander Medvednikov
d27c5eb345 handle floats 2019-12-27 10:09:06 +01:00
Alexander Medvednikov
1af274a714 test_parser + minor fixes 2019-12-27 10:00:44 +01:00
vitalyster
3f0f8bac49 windows: do not link gdi32/shell32 to console applications
* read os.args from argv when we have console
* dynamically load CommandLineToArgvW when we are GUI app
* link gdi32/shell32 in glfw module
2019-12-27 11:27:19 +03:00
Alexander Medvednikov
55dbb8b81c v.types module 2019-12-27 09:09:55 +01:00
Alexander Medvednikov
14e9c3c7bb rename compiler2.parser to v.parser etc 2019-12-27 06:09:16 +01:00
BigBlack
98b81252b7 fix #3217 (string.replace) 2019-12-27 07:20:06 +03:00
Alexander Medvednikov
e20ca28d5c fix v prod build 2019-12-27 07:04:41 +03:00
Alexander Medvednikov
0a3adb5de8 ast: return types, variable declaration 2019-12-27 07:01:22 +03:00
BigBlack
320174bd5b fix #3202 2019-12-27 06:09:09 +03:00
Ulises Jeremias Cornejo Fandos
1277ce22f8 math: factorial submodule 2019-12-27 06:08:17 +03:00
Alexey
a5b43e1f4d strconv: fix tests 2019-12-27 06:07:09 +03:00
Alexander Medvednikov
6363118aa9 remove ScalarExpr 2019-12-26 13:21:41 +03:00
Alexander Medvednikov
9b37fc7310 clean up parser_test.v 2019-12-26 13:05:06 +03:00
Alexander Medvednikov
d9835c1ecf move atofq.v to a separate module 2019-12-26 11:56:21 +03:00
Alexander Medvednikov
8d9f89e728 compiler2: proof of concept cgen 2019-12-26 07:47:33 +03:00
joe-conigliaro
fe8a6abb41 compiler2: update operator precedence and associativity (#3218) 2019-12-26 05:40:18 +03:00
Delyan Angelov
ae4c8af674 fmt: fixes for option syntax formatting 2019-12-25 16:08:52 +03:00
vitalyster
1d86f4b5d1 ensure that v fmt can be run over most .v files on each PR 2019-12-25 15:54:48 +03:00
Alexey
ccb041c831 arrays: improve range function 2019-12-25 15:52:27 +03:00
Alexey
f2bab4ab9a atoi: add tests 2019-12-25 15:42:00 +03:00
joe-conigliaro
de1be1dc66 compiler2: start implementing pratt style parser 2019-12-25 15:39:58 +03:00
Alexander Medvednikov
ca284482cb new AST built with sum types 2019-12-24 16:04:49 +03:00
Alexander Medvednikov
803ded3dec sum type type Foo = Bar | Baz 2019-12-24 16:04:49 +03:00
Delyan Angelov
96fa15c125 v fmt: process .v files from a module too 2019-12-24 05:43:31 +03:00
Don Alfons Nisnoni
4498dc6a47 tools/fast: remove unused function 2019-12-23 13:37:52 +03:00
yatsen1
137a473bb7 add time.parse_iso 2019-12-23 13:36:51 +03:00
yatsen1
d03f0ec294 fix time.parse() 2019-12-23 13:25:44 +03:00
Charles WANG
b1013697d1 vlib/vweb.v: add public const and functions 2019-12-23 13:24:53 +03:00
Delyan Angelov
cf37028a52 test: use 'stty size' for vtest --- line instead of 'tput cols' 2019-12-23 13:23:53 +03:00
Alexey
dced76d1a4 os, filepath: reorganize functions 2019-12-23 13:09:22 +03:00
Delyan Angelov
6e130cd446 compiler: support for custom flags
[if custom]fn..{} , #flag custom, $if custom {}
2019-12-23 13:09:00 +03:00
Delyan Angelov
42b1660c7e move vfmt frontend program to tools/vfmt.v 2019-12-23 13:02:50 +03:00
Alexander Medvednikov
28594a65a8 fix enum bitfield 2019-12-23 07:05:52 +03:00
Alexander Medvednikov
7ab993c218 sum types 2019-12-23 06:14:31 +03:00
Alexey
dacc129fd8 time: improve tests 2019-12-22 22:58:41 +03:00
Alexander Medvednikov
a251db068f run vfmt on math and sha; add vfmt check to test-compiler 2019-12-22 02:50:20 +03:00
Alexey
b88cb1ca69 extend tests for strings module 2019-12-22 02:05:30 +03:00
Alexander Medvednikov
848cd3cb3e run vfmt on http, net, sync, strconv 2019-12-22 01:57:50 +03:00
れもん
28ecfb231d compiler: map[string]pointer, ?pointer, fix []pointer 2019-12-22 01:44:16 +03:00
Alexander Medvednikov
b76227b781 small vfmt fixes 2019-12-22 01:39:04 +03:00
Alexander Medvednikov
749d3ec14d do not define __offsetof twice 2019-12-22 01:39:04 +03:00
penguindark
5cfbc7bab5 float: bug fix on +zero 2019-12-22 01:38:02 +03:00
Alexander Medvednikov
ef28a6b872 final vfmt run before CI check 2019-12-22 00:58:57 +03:00
Alexander Medvednikov
2b9392c46c move hashmap to its own module for now 2019-12-22 00:54:25 +03:00
Emily Hudson
8512c9fc9d compiler: __offsetof keyword for C offsetof() macro 2019-12-22 00:46:09 +03:00
Alexander Medvednikov
31b7991a93 negative enum vals + [10]C.Foo fix 2019-12-22 00:17:13 +03:00
Charles WANG
24739c9f5a sqlite: add Ubuntu instructions 2019-12-21 10:00:28 +03:00
joe-conigliaro
4dc4f12ccd hashmap: use fnv32 as hash algo 2019-12-21 09:59:12 +03:00
joe-conigliaro
6763a92834 fix multiple type parameters 2019-12-21 09:54:43 +03:00
joe-conigliaro
f7c1b78ec2 clean up generic structs 2019-12-21 05:33:59 +03:00
Alexander Medvednikov
61bfecfa09 vweb: minor fixes 2019-12-21 05:19:26 +03:00
joe-conigliaro
fbd9fedbfb implement generic structs 2019-12-21 03:53:57 +03:00
Changsen XU 徐昶森
b3a402eb82 add mysql -I flag for ubuntu 18.04 (#3153) 2019-12-20 23:18:23 +03:00
Don Alfons Nisnoni
090f444d8f scanner: small DRY 2019-12-20 23:15:16 +03:00
Steve Phillips
6e9493887d builtin/array.v: Fixed typo in new_array (cap -> cap_) 2019-12-20 23:09:59 +03:00
Delyan Angelov
b62e28dba5 compiler: fix interface generation for unused interfaces 2019-12-20 23:06:11 +03:00
Alexander Medvednikov
00b8a5d3e4 vfmt: enum fix 2019-12-20 02:38:11 +03:00
Alexander Medvednikov
6af54d0207 fix windows build 2019-12-20 02:20:03 +03:00
Alexander Medvednikov
6210984c97 run vfmt 2019-12-20 02:09:56 +03:00
Alexander Medvednikov
b6fe2ebc0b fix tools test 2019-12-20 00:20:22 +03:00
Alexander Medvednikov
d082b3f4b9 run vfmt on vlib/builtin 2019-12-20 00:12:29 +03:00
Alexander Medvednikov
76c800ffb6 bring back array.eq 2019-12-19 23:49:40 +03:00
Alexander Medvednikov
d38687f893 run vfmt on cc, cgen, comptime, if_match 2019-12-19 23:43:23 +03:00
Alexander Medvednikov
ce86626ec2 run vfmt on table.v 2019-12-19 23:26:23 +03:00
Alexander Medvednikov
1679457f6b clean up math_test.v 2019-12-19 22:16:10 +03:00
BigBlack
a38a0f4fb7 parser: fix x.function_pointer() 2019-12-19 21:23:29 +03:00
Alexander Medvednikov
2096018b00 map: another fix + test 2019-12-19 21:17:12 +03:00
Alexander Medvednikov
26f5d34e64 map: fix a bug with an incorrect size after delete() 2019-12-19 21:11:42 +03:00
Alexander Medvednikov
519f2990f2 vfmt: minor fixes 2019-12-19 10:02:47 +03:00
penguindark
929e7c1193 strconv: atof_quick for tasks that need speed but not big accuracy 2019-12-19 03:37:53 +03:00
Alexander Medvednikov
df2f98e276 run vfmt on more files 2019-12-19 02:38:54 +03:00
Alexander Medvednikov
1cef83aea4 run vfmt on array.v 2019-12-18 21:20:41 +03:00
Charles WANG
0ebe86fbd5 sqlite: readme 2019-12-18 13:22:22 +03:00
BigBlack
2f218b878b fix fn type call 2019-12-18 13:21:49 +03:00
Delyan Angelov
4b7aa4ec09 freebsd: fix compilation 2019-12-18 13:21:20 +03:00
Alexander Medvednikov
67bdc2c7a9 vfmt: fn args fixes 2019-12-18 11:11:47 +03:00
Alexander Medvednikov
569b32bd1e run vfmt on fn.v 2019-12-18 10:07:30 +03:00
Alexander Medvednikov
81045023c4 run vfmt on scanner.v 2019-12-18 08:26:51 +03:00
Abdullah Atta
20e73ff69a os: fix nreadelements naming 2019-12-18 08:22:52 +03:00
Abdullah Atta
489ec05b23 eventbus: remove hacks, add sender 2019-12-18 08:16:33 +03:00
Alexander Medvednikov
02939d776b vfmt: fix in, |, or {} 2019-12-18 08:01:29 +03:00
Alexander Medvednikov
3d1db3519d test enum printing 2019-12-18 05:45:48 +03:00
Alexander Medvednikov
7456d556e1 fix 2 repl tests 2019-12-18 05:02:23 +03:00
Alexander Medvednikov
a46a2e4715 run vfmt on parser.v 2019-12-18 04:43:41 +03:00
Alexander Medvednikov
ad211a86a6 vfmt: re-write V files + fix {} 2019-12-18 04:33:02 +03:00
Alexander Medvednikov
53b334145b lots of vfmt fixes 2019-12-18 04:15:41 +03:00
BigBlack
67cf7f18e6 array of pointers support 2019-12-18 03:26:04 +03:00
prime31
f00f9fbf5a os: fix bug where read_bytes would return only the first byte 2019-12-18 00:16:56 +03:00
BigBlack
e68200538a parser: call struct field fns 2019-12-17 22:00:08 +03:00
Delyan Angelov
d405cfbcf7 gg: remove spurious printing of gl.TEXT_VERT 2019-12-17 19:17:48 +03:00
Delyan Angelov
ba519f105a compiler: option/command parsing bugfix 2019-12-17 16:00:10 +03:00
Alexander Medvednikov
37add98043 fix programs without fn main 2019-12-17 05:05:10 +03:00
Alexander Medvednikov
84f535d242 atof: remove extra() causing warnings 2019-12-17 01:47:30 +03:00
Alexander Medvednikov
ea781a557f array: slice_clone() 2019-12-17 01:29:40 +03:00
Alexander Medvednikov
562f24336d add ./v2 to gitignore 2019-12-17 01:21:18 +03:00
Johan Hillerström
6008fa44c6 parser: fix generic function call in for in expression 2019-12-17 01:08:30 +03:00
penguindark
3dbf7a4039 atof implementation in V 2019-12-17 01:07:13 +03:00
Alexander Medvednikov
5a56ca0892 parser: handle operator overloading type errors 2019-12-17 00:50:41 +03:00
Alexander Medvednikov
560d1383d1 fix optional struct field assignment 2019-12-17 00:36:28 +03:00
Alexander Medvednikov
54707ff81d do not allow calloc(0) 2019-12-16 22:48:55 +03:00
Alexander Medvednikov
e7856a1afc do not allow malloc(0) 2019-12-16 21:29:32 +03:00
Alexander Medvednikov
10718557a2 increase the name limit to 15 2019-12-16 19:36:29 +03:00
Alexander Medvednikov
bcde155da7 test the recent type alias string; print vweb templates in verbose mode 2019-12-16 19:34:04 +03:00
BigBlack
8c0e0f8ab7 parser: fix type alias type check 2019-12-16 19:06:40 +03:00
Delyan Angelov
b7c477cc18 freestanding: ptr_str, string concat, struct declaration
* compiler: extract c_common_macros from c_headers, and use it in bare_c_headers too. Support for ptr_str and string concatenation in -freestanding mode.

* Add tests for structs and string concatenation in -freestanding mode .

* Move check_string_add_works to string/string.v .
2019-12-16 19:05:33 +03:00
lutherwenxu
dadf147382 flag: implement *_opt() and *_multi()
It's very often that someone will need to process values that were not
provided separately (eg. generating a complex default value like in V).

This commit allows the user to call the *_opt() functions instead of
forcing them to provide some magical default values.

* flag: Implement int_multi(), float_multi() and string_multi()

These 3 functions are useful when the application expects a flag to be
repeated more than once.

A sample would be:
v -cflags someflag -cflags secondflag

This feature exposes the raw array that the flag parser internally keeps
and allow the application to parse it however they want instead of
dropping everything except the first element.

* flag: Add documentation

Add comments describing what *_opt() and *_multi() do.
2019-12-16 19:03:38 +03:00
vitalyster
d1714c4a2a cc.v: build thirdparty objfiles with msvc when no cc installed 2019-12-16 18:56:37 +03:00