mirror of
https://github.com/vlang/v.git
synced 2025-09-13 14:32:26 +03:00
ci: update linux image runners from ubuntu-20.04
to ubuntu-24.04
(#23706)
This commit is contained in:
parent
7b97709449
commit
55f482bb63
46 changed files with 445 additions and 195 deletions
2
.github/workflows/bootstrapping_ci.yml
vendored
2
.github/workflows/bootstrapping_ci.yml
vendored
|
@ -24,7 +24,7 @@ on:
|
|||
- '!**/bootstrapping_ci.yml'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref == 'refs/heads/master' && github.sha || github.ref }}
|
||||
group: bootstrapping-${{ github.workflow }}-${{ github.ref == 'refs/heads/master' && github.sha || github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
|
|
4
.github/workflows/c2v_ci.yml
vendored
4
.github/workflows/c2v_ci.yml
vendored
|
@ -23,7 +23,7 @@ on:
|
|||
- '!cmd/tools/builders/**.v'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref == 'refs/heads/master' && github.sha || github.ref }}
|
||||
group: c2v-${{ github.workflow }}-${{ github.ref == 'refs/heads/master' && github.sha || github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
|
@ -71,7 +71,7 @@ jobs:
|
|||
WAD_FILE=~/DOOM1.WAD ~/code/doom/build_whole_project.sh
|
||||
|
||||
test-regression:
|
||||
runs-on: ubuntu-20.04
|
||||
runs-on: ubuntu-24.04
|
||||
timeout-minutes: 20
|
||||
env:
|
||||
VFLAGS: -cc tcc
|
||||
|
|
20
.github/workflows/cross_ci.yml
vendored
20
.github/workflows/cross_ci.yml
vendored
|
@ -17,7 +17,7 @@ on:
|
|||
- '!cmd/tools/builders/**.v'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref == 'refs/heads/master' && github.sha || github.ref }}
|
||||
group: cross-${{ github.workflow }}-${{ github.ref == 'refs/heads/master' && github.sha || github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
|
@ -52,7 +52,7 @@ jobs:
|
|||
./v -os windows examples/2048/2048.v
|
||||
|
||||
linux-cross:
|
||||
runs-on: ubuntu-20.04
|
||||
runs-on: ubuntu-24.04
|
||||
timeout-minutes: 25
|
||||
env:
|
||||
VFLAGS: -cc tcc -no-retry-compilation
|
||||
|
@ -65,14 +65,12 @@ jobs:
|
|||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
## sudo dpkg --add-architecture i386
|
||||
./v retry -- sudo apt update
|
||||
./v retry -- sudo apt install --quiet -y libssl-dev sqlite3 libsqlite3-dev
|
||||
./v retry -- sudo apt install --quiet -y mingw-w64 wine-stable winetricks
|
||||
## ./v retry -- sudo apt install --quiet -y wine32
|
||||
./v retry -- sudo apt install --quiet -y mingw-w64 wine wine64 winetricks libssl-dev sqlite3 libsqlite3-dev
|
||||
|
||||
- name: Turn off the wine crash dialog
|
||||
run: winetricks nocrashdialog
|
||||
- name: Show diagnostics for wine
|
||||
run: |
|
||||
which wine
|
||||
ls -la $(realpath $(which wine))
|
||||
|
||||
- name: v.c can be compiled and run with -os cross
|
||||
run: |
|
||||
|
@ -86,13 +84,13 @@ jobs:
|
|||
./v -cc msvc -os windows -o /tmp/v_win.c cmd/v
|
||||
x86_64-w64-mingw32-gcc /tmp/v_win.c -std=c99 -w -municode -o v_from_vc.exe -lws2_32
|
||||
ls -lart v_from_vc.exe
|
||||
wine64 ./v_from_vc.exe version
|
||||
wine ./v_from_vc.exe version
|
||||
|
||||
- name: hello_world.v can be cross compiled to hello_world.exe
|
||||
run: |
|
||||
./v -os windows examples/hello_world.v
|
||||
ls -lart examples/hello_world.exe
|
||||
wine64 examples/hello_world.exe
|
||||
wine examples/hello_world.exe
|
||||
|
||||
- name: 2048.v can be cross compiled to 2048.exe
|
||||
run: |
|
||||
|
|
6
.github/workflows/docker_ci.yml
vendored
6
.github/workflows/docker_ci.yml
vendored
|
@ -17,7 +17,7 @@ on:
|
|||
- '!cmd/tools/builders/**.v'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref == 'refs/heads/master' && github.sha || github.ref }}
|
||||
group: docker-${{ github.workflow }}-${{ github.ref == 'refs/heads/master' && github.sha || github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
env:
|
||||
|
@ -25,7 +25,7 @@ env:
|
|||
|
||||
jobs:
|
||||
docker-alpine-musl-gcc:
|
||||
runs-on: ubuntu-20.04
|
||||
runs-on: ubuntu-24.04
|
||||
timeout-minutes: 241
|
||||
container:
|
||||
image: thevlang/vlang:alpine-build
|
||||
|
@ -54,7 +54,7 @@ jobs:
|
|||
run: VTEST_JUST_ESSENTIAL=1 ./v test-self
|
||||
|
||||
docker-ubuntu-musl:
|
||||
runs-on: ubuntu-20.04
|
||||
runs-on: ubuntu-24.04
|
||||
timeout-minutes: 121
|
||||
container:
|
||||
image: thevlang/vlang:ubuntu-build
|
||||
|
|
10
.github/workflows/docs_ci.yml
vendored
10
.github/workflows/docs_ci.yml
vendored
|
@ -17,24 +17,26 @@ on:
|
|||
- 'cmd/tools/vrepl.v'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref == 'refs/heads/master' && github.sha || github.ref }}
|
||||
group: docs-${{ github.workflow }}-${{ github.ref == 'refs/heads/master' && github.sha || github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
check-markdown:
|
||||
runs-on: ubuntu-20.04
|
||||
timeout-minutes: 5
|
||||
runs-on: ubuntu-24.04
|
||||
timeout-minutes: 10
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Build V
|
||||
run: make
|
||||
- name: Install dependencies (some examples show how to use sqlite and the x11 clipboard)
|
||||
run: ./v retry -- sudo apt install --quiet -y libx11-dev libssl-dev sqlite3 libsqlite3-dev
|
||||
- name: Check markdown line length & code examples
|
||||
run: ./v check-md -hide-warnings .
|
||||
## NB: -hide-warnings is used here, so that the output is less noisy,
|
||||
## thus real errors are easier to spot.
|
||||
|
||||
report-missing-fn-doc:
|
||||
runs-on: ubuntu-20.04
|
||||
runs-on: ubuntu-24.04
|
||||
timeout-minutes: 5
|
||||
env:
|
||||
MOPTIONS: --diff --deprecated --relative-paths --exclude /vlib/v/ --exclude /builtin/linux_bare/ --exclude /testdata/ --exclude /tests/
|
||||
|
|
2
.github/workflows/gen_vc_ci.yml
vendored
2
.github/workflows/gen_vc_ci.yml
vendored
|
@ -24,7 +24,7 @@ on:
|
|||
# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.
|
||||
# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
group: gen_vc-${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{ !contains(github.ref, 'master')}}
|
||||
|
||||
jobs:
|
||||
|
|
4
.github/workflows/gg_regressions_ci.yml
vendored
4
.github/workflows/gg_regressions_ci.yml
vendored
|
@ -17,12 +17,12 @@ on:
|
|||
- '!**.md'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref == 'refs/heads/master' && github.sha || github.ref }}
|
||||
group: gg-regressions-${{ github.workflow }}-${{ github.ref == 'refs/heads/master' && github.sha || github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
gg-regressions:
|
||||
runs-on: ubuntu-20.04
|
||||
runs-on: ubuntu-24.04
|
||||
timeout-minutes: 20
|
||||
env:
|
||||
VFLAGS: -cc tcc
|
||||
|
|
8
.github/workflows/linux_ci.yml
vendored
8
.github/workflows/linux_ci.yml
vendored
|
@ -18,12 +18,12 @@ on:
|
|||
- '!cmd/tools/builders/**.v'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref == 'refs/heads/master' && github.sha || github.ref }}
|
||||
group: linux-${{ github.workflow }}-${{ github.ref == 'refs/heads/master' && github.sha || github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
tcc:
|
||||
runs-on: ubuntu-20.04
|
||||
runs-on: ubuntu-24.04
|
||||
timeout-minutes: 121
|
||||
env:
|
||||
VFLAGS: -cc tcc -no-retry-compilation
|
||||
|
@ -81,7 +81,7 @@ jobs:
|
|||
run: v run ci/linux_ci.vsh test_leak_detector_not_active_tcc
|
||||
|
||||
gcc:
|
||||
runs-on: ubuntu-20.04
|
||||
runs-on: ubuntu-24.04
|
||||
timeout-minutes: 121
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
@ -135,7 +135,7 @@ jobs:
|
|||
run: v run ci/linux_ci.vsh test_vlib_skip_unused_gcc
|
||||
|
||||
clang:
|
||||
runs-on: ubuntu-20.04
|
||||
runs-on: ubuntu-24.04
|
||||
timeout-minutes: 121
|
||||
env:
|
||||
VFLAGS: -cc clang
|
||||
|
|
2
.github/workflows/macos_ci.yml
vendored
2
.github/workflows/macos_ci.yml
vendored
|
@ -17,7 +17,7 @@ on:
|
|||
- '!cmd/tools/builders/**.v'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref == 'refs/heads/master' && github.sha || github.ref }}
|
||||
group: macos-${{ github.workflow }}-${{ github.ref == 'refs/heads/master' && github.sha || github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
|
|
4
.github/workflows/module_docs_ci.yml
vendored
4
.github/workflows/module_docs_ci.yml
vendored
|
@ -17,12 +17,12 @@ on:
|
|||
# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.
|
||||
# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
group: module_docs-${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{ !contains(github.ref, 'master')}}
|
||||
|
||||
jobs:
|
||||
build-module-docs:
|
||||
runs-on: ubuntu-20.04
|
||||
runs-on: ubuntu-24.04
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Build V
|
||||
|
|
|
@ -17,7 +17,7 @@ on:
|
|||
- 'cmd/tools/**'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref == 'refs/heads/master' && github.sha || github.ref }}
|
||||
group: slower_tests-${{ github.workflow }}-${{ github.ref == 'refs/heads/master' && github.sha || github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
|
|
2
.github/workflows/native_backend_ci.yml
vendored
2
.github/workflows/native_backend_ci.yml
vendored
|
@ -45,7 +45,7 @@ on:
|
|||
- '.github/workflows/native_backend_ci.yml'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref == 'refs/heads/master' && github.sha || github.ref }}
|
||||
group: native_backend-${{ github.workflow }}-${{ github.ref == 'refs/heads/master' && github.sha || github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
|
|
12
.github/workflows/other_ci.yml
vendored
12
.github/workflows/other_ci.yml
vendored
|
@ -18,12 +18,12 @@ on:
|
|||
- '!cmd/tools/builders/**.v'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref == 'refs/heads/master' && github.sha || github.ref }}
|
||||
group: other-${{ github.workflow }}-${{ github.ref == 'refs/heads/master' && github.sha || github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
prevent-gpl-licenses:
|
||||
runs-on: ubuntu-20.04
|
||||
runs-on: ubuntu-24.04
|
||||
timeout-minutes: 15
|
||||
steps:
|
||||
- name: Checkout V ${{ github.head_ref }}
|
||||
|
@ -46,7 +46,7 @@ jobs:
|
|||
diff -d -a -U 2 --color=always gpl_res_vmaster gpl_res_vnew
|
||||
|
||||
code-formatting:
|
||||
runs-on: ubuntu-20.04
|
||||
runs-on: ubuntu-24.04
|
||||
timeout-minutes: 30
|
||||
env:
|
||||
VFLAGS: -cc gcc
|
||||
|
@ -62,7 +62,7 @@ jobs:
|
|||
run: ./v test-fmt
|
||||
|
||||
performance-regressions:
|
||||
runs-on: ubuntu-20.04
|
||||
runs-on: ubuntu-24.04
|
||||
timeout-minutes: 30
|
||||
env:
|
||||
VFLAGS: -cc gcc
|
||||
|
@ -86,7 +86,7 @@ jobs:
|
|||
run: ./v repeat --max_time 1731 --series 3 --runs 20 --nmins 2 --nmaxs 5 --warmup 3 --fail_percent 10 -t 'cd {T} ; ./v -o v.c cmd/v' . ./vmaster
|
||||
|
||||
misc-tooling:
|
||||
runs-on: ubuntu-20.04
|
||||
runs-on: ubuntu-24.04
|
||||
timeout-minutes: 121
|
||||
env:
|
||||
VFLAGS: -cc tcc -no-retry-compilation
|
||||
|
@ -124,7 +124,7 @@ jobs:
|
|||
./v should-compile-all examples/sokol/*.v examples/sokol/0?*/*.v
|
||||
|
||||
parser-silent:
|
||||
runs-on: ubuntu-20.04
|
||||
runs-on: ubuntu-24.04
|
||||
timeout-minutes: 121
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
|
4
.github/workflows/paths_ci.yml
vendored
4
.github/workflows/paths_ci.yml
vendored
|
@ -11,12 +11,12 @@ on:
|
|||
- '!**/paths_ci.yml'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref == 'refs/heads/master' && github.sha || github.ref }}
|
||||
group: paths-${{ github.workflow }}-${{ github.ref == 'refs/heads/master' && github.sha || github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
space-paths-linux:
|
||||
runs-on: ubuntu-20.04
|
||||
runs-on: ubuntu-24.04
|
||||
timeout-minutes: 30
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
|
2
.github/workflows/prebuilt.yml
vendored
2
.github/workflows/prebuilt.yml
vendored
|
@ -7,7 +7,7 @@ on:
|
|||
|
||||
jobs:
|
||||
ubuntu:
|
||||
runs-on: ubuntu-20.04
|
||||
runs-on: ubuntu-24.04
|
||||
timeout-minutes: 5
|
||||
steps:
|
||||
- name: Download V
|
||||
|
|
6
.github/workflows/puzzle_vibes_ci.yml
vendored
6
.github/workflows/puzzle_vibes_ci.yml
vendored
|
@ -20,13 +20,13 @@ on:
|
|||
- '!**.md'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref == 'refs/heads/master' && github.sha || github.ref }}
|
||||
group: puzzle_vibes-${{ github.workflow }}-${{ github.ref == 'refs/heads/master' && github.sha || github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
v-compiles-puzzle-vibes:
|
||||
runs-on: ubuntu-20.04
|
||||
timeout-minutes: 10
|
||||
runs-on: ubuntu-24.04
|
||||
timeout-minutes: 30
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Build V
|
||||
|
|
2
.github/workflows/release_ci.yml
vendored
2
.github/workflows/release_ci.yml
vendored
|
@ -13,7 +13,7 @@ on:
|
|||
- 0.**
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
group: release-${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{ github.ref_type != 'tag' }}
|
||||
|
||||
permissions:
|
||||
|
|
|
@ -1,4 +1,187 @@
|
|||
## See https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html
|
||||
## See https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html
|
||||
## Most of the supressed functions here use asserts, that in turn use an indirection through an interface. TODO: if that is solved, most of these can be removed.
|
||||
## Usually they contain a __test_ in their name, but not always (see the x.ttf ones like vlib/x/ttf/ttf_test.v ).
|
||||
## TODO: extract the common part of the assertions to a VDO_ function (1 for pass and 1 for failure), so that they can be whitelisted here just once.
|
||||
function:map_exists
|
||||
function:map_get
|
||||
function:IError_str
|
||||
|
||||
shift-exponent:math__bits__rotate_left_64
|
||||
shift-exponent:math__bits__div_64
|
||||
function:math__big__Integer_general_radix_str
|
||||
function:math__big__Integer_div_mod_internal
|
||||
function:math__bits__test_bits
|
||||
function:math__bits__test_div_64_edge_cases
|
||||
function:math__test_nan
|
||||
|
||||
alignment:rand__read_64
|
||||
function:rand__internal_ulid_at_millisecond
|
||||
function:sync__pool__process_in_thread
|
||||
function:rand__internal_string_from_set
|
||||
function:rand__internal_uuid_v4
|
||||
function:rand__deinit
|
||||
function:rand__read_internal
|
||||
function:rand__read_64
|
||||
function:rand__PRNG_f64
|
||||
|
||||
function:rand__cuid2__test_cuid2
|
||||
|
||||
function:sync__pool__process_in_thread
|
||||
function:sync__Once_do_slow_with_param
|
||||
|
||||
function:v__type_resolver__TypeResolver_resolve_fn_generic_args
|
||||
function:v__type_resolver__TypeResolver_unwrap_generic_expr
|
||||
function:v__type_resolver__TypeResolver_get_type
|
||||
|
||||
## these have asserts in them, and trigger due to the used indirection; TODO: remove them, when a more general solution is found for all interfaces
|
||||
function:x__ttf__TTF_File_get_glyph_offset
|
||||
function:x__ttf__TTF_File_get_horizontal_metrics
|
||||
function:x__ttf__TTF_File_glyph_count
|
||||
function:x__ttf__TTF_File_read_glyph
|
||||
function:x__ttf__TTF_File_read_simple_glyph
|
||||
function:x__ttf__TTF_File_read_kern_table
|
||||
function:x__ttf__TTF_File_read_hhea_table
|
||||
function:x__ttf__TTF_File_read_cmap_table
|
||||
function:x__ttf__TTF_File_read_name_table
|
||||
function:x__ttf__TTF_File_read_head_table
|
||||
function:x__ttf__TTF_File_read_offset_tables
|
||||
|
||||
function:net__unix__select_deadline
|
||||
function:net__select_deadline
|
||||
function:net__socks__test_parse_ipv4
|
||||
function:net__http__download_file_with_progress
|
||||
function:net__http__download_progres_cb
|
||||
function:net__http__check_headers
|
||||
function:net__http__test_str
|
||||
function:net__http__test_int
|
||||
function:net__http__test_is_valid
|
||||
function:net__http__test_is_error
|
||||
function:net__http__test_is_success
|
||||
function:net__http__test_parse_response_with_weird_cookie
|
||||
function:net__http__test_parse_response_with_cookies
|
||||
function:net__http__test_parse_response
|
||||
function:net__http__test_response_bytestr_1
|
||||
function:net__http__test_response_bytestr_2
|
||||
function:net__http__test_parse_large_body
|
||||
function:net__http__test_multipart_form_body
|
||||
function:net__http__test_parse_multipart_form2
|
||||
function:net__http__test_parse_request_no_headers
|
||||
function:net__http__test_parse_multipart_form
|
||||
function:net__http__test_parse_form
|
||||
function:net__http__test_parse_request_line
|
||||
function:net__http__test_parse_request_body
|
||||
function:net__http__test_parse_request_two_header_values
|
||||
function:net__http__test_parse_request_no_headers
|
||||
function:net__http__test_parse_request_two_headers
|
||||
function:net__http__test_proxy_fields
|
||||
function:net__http__test_proxy_headers
|
||||
function:net__http__test_set_cookie
|
||||
function:net__http__test_parse_headers
|
||||
function:net__http__parse_headers_test
|
||||
function:net__http__test_header_join
|
||||
function:net__http__test_header_from_map
|
||||
function:net__http__test_custom_header_from_map
|
||||
function:net__http__test_render_coerce_canonicalize
|
||||
function:net__http__test_render_canonicalize
|
||||
function:net__http__test_render_version
|
||||
function:net__http__test_coerce_canonicalize_custom
|
||||
function:net__http__test_coerce_custom
|
||||
function:net__http__test_coerce_canonicalize
|
||||
function:net__http__test_coerce
|
||||
function:net__http__test_custom_values
|
||||
function:net__http__test_starting_with
|
||||
function:net__http__test_get_custom
|
||||
function:net__http__test_contains_custom
|
||||
function:net__http__test_custom_header
|
||||
function:net__http__test_delete_header
|
||||
function:net__http__test_header_delete_not_existing
|
||||
function:net__http__test_header_delete
|
||||
function:net__http__test_header_set
|
||||
function:net__http__test_header_get
|
||||
function:net__http__test_header_adds_multiple
|
||||
function:net__http__test_header_new
|
||||
function:net__test_ip6_str
|
||||
function:net__test_ip_str
|
||||
function:net__test_sizes_unix
|
||||
function:net__test_sizes_ipv4
|
||||
function:net__test_sizes_ipv6
|
||||
function:net__test_offsets_unix
|
||||
function:net__test_offsets_ipv4
|
||||
function:net__test_offsets_ipv6
|
||||
function:net__test_sizes_unix_sun_path
|
||||
function:net__test_diagnostics
|
||||
function:net__test_ip_port
|
||||
function:net__websocket__delete_client_cb
|
||||
function:net__websocket__Server_listen
|
||||
function:net__websocket__Server_serve_client
|
||||
function:net__websocket__Server_parse_client_handshake
|
||||
function:net__websocket__Client_listen
|
||||
function:net__websocket__Client_send_message_event
|
||||
function:net__websocket__Client_send_close_event
|
||||
function:net__websocket__Client_debug_log
|
||||
function:net__websocket__Client_connect
|
||||
|
||||
function:io__BufferedReader_fill_buffer
|
||||
function:io__read_all
|
||||
|
||||
function:log__info
|
||||
function:log__debug
|
||||
function:log__warn
|
||||
function:log__error
|
||||
function:log__set_level
|
||||
function:log__Log_log_stream
|
||||
function:log__free_logger
|
||||
|
||||
function:picoev__Picoev_poll_once
|
||||
function:picoev__Picoev_set_timeout
|
||||
function:picoev__Picoev_update_events
|
||||
function:picoev__test_if_all_file_descriptors_are_properly_initialized
|
||||
|
||||
function:vweb__tests__vweb_test_server__App_index
|
||||
function:vweb__tests__vweb_test_server__start_in_background
|
||||
function:vweb__RoutePair_test_param
|
||||
function:veb__RoutePair_test_param
|
||||
function:veb__test_load_files_translations
|
||||
|
||||
## needed for tests; TODO: move the test specific setup code into its own separate VDO_tests function, so only it can be added here
|
||||
function:main
|
||||
|
||||
function:crypto__sha3__test_0_length_hash
|
||||
function:crypto__sha3__test_0_length_xof
|
||||
function:crypto__sha3__test_200_length_hash
|
||||
function:crypto__sha3__test_200_length_xof
|
||||
|
||||
function:crypto__sha3__test_2_x_24_rounds_on_zero
|
||||
function:crypto__sha3__test_stepping_functions_on_zero
|
||||
function:crypto__sha3__test_zero_state
|
||||
function:crypto__sha3__test_rho_offsets
|
||||
function:crypto__sha3__test_to_from_bytes
|
||||
function:crypto__sha3__test_round_constants
|
||||
|
||||
function:crypto__pem__test_decode_rfc1421
|
||||
function:crypto__pem__test_decode
|
||||
function:crypto__pem__test_encode_rfc1421
|
||||
function:crypto__pem__test_encode
|
||||
|
||||
function:crypto__hmac__test_hmac_equal
|
||||
function:crypto__hmac__test_hmac_sha3_224
|
||||
function:crypto__hmac__test_hmac_sha3_256
|
||||
function:crypto__hmac__test_hmac_sha3_384
|
||||
function:crypto__hmac__test_hmac_sha3_512
|
||||
function:crypto__hmac__test_hmac_blake3_256
|
||||
function:crypto__hmac__test_hmac_blake2b_160
|
||||
function:crypto__hmac__test_hmac_blake2b_256
|
||||
function:crypto__hmac__test_hmac_blake2b_384
|
||||
function:crypto__hmac__test_hmac_blake2b_512
|
||||
function:crypto__hmac__test_hmac_blake2s_128
|
||||
function:crypto__hmac__test_hmac_blake2s_160
|
||||
function:crypto__hmac__test_hmac_blake2s_224
|
||||
function:crypto__hmac__test_hmac_blake2s_256
|
||||
function:crypto__hmac__test_hmac_sha512
|
||||
function:crypto__hmac__test_hmac_sha384
|
||||
function:crypto__hmac__test_hmac_sha256
|
||||
function:crypto__hmac__test_hmac_sha224
|
||||
function:crypto__hmac__test_hmac_sha1
|
||||
function:crypto__hmac__test_hmac_md5
|
||||
|
||||
function:crypto__ed25519__internal__edwards25519__sc_reduce
|
||||
function:crypto__ed25519__internal__edwards25519__sc_reduce
|
||||
|
|
69
.github/workflows/sanitized_ci.yml
vendored
69
.github/workflows/sanitized_ci.yml
vendored
|
@ -71,17 +71,18 @@ on:
|
|||
- '**/sanitized_ci.yml'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref == 'refs/heads/master' && github.sha || github.ref }}
|
||||
group: sanitized-${{ github.workflow }}-${{ github.ref == 'refs/heads/master' && github.sha || github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
tests-sanitize-undefined-clang:
|
||||
runs-on: ubuntu-20.04
|
||||
runs-on: ubuntu-22.04
|
||||
timeout-minutes: 120
|
||||
env:
|
||||
VFLAGS: -cc clang
|
||||
VFLAGS: -cc clang -cflags -fno-omit-frame-pointer
|
||||
VJOBS: 1
|
||||
VTEST_SHOW_START: 1
|
||||
UBSAN_OPTIONS: print_stacktrace=1:halt_on_error=1:print_suppressions=0:suppressions=/home/runner/work/v/v/.github/workflows/run_sanitizers_undefined.suppressions
|
||||
VNATIVE_SKIP_LIBC_VV: 1
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Build V
|
||||
|
@ -97,17 +98,20 @@ jobs:
|
|||
- name: Recompile V with -cstrict
|
||||
run: ./v -cg -cstrict -o v cmd/v
|
||||
- name: Self tests (-fsanitize=undefined)
|
||||
run: ./v -cflags "-fsanitize=undefined" -o v2 cmd/v && ./v2 -cflags -fsanitize=undefined test-self vlib
|
||||
run: |
|
||||
./v -cflags -fsanitize=undefined -o v2 cmd/v
|
||||
./v2 -cflags -fsanitize=undefined test-self vlib
|
||||
- name: Build examples (V compiled with -fsanitize=undefined)
|
||||
run: ./v2 build-examples
|
||||
|
||||
tests-sanitize-undefined-gcc:
|
||||
runs-on: ubuntu-20.04
|
||||
runs-on: ubuntu-22.04
|
||||
timeout-minutes: 120
|
||||
env:
|
||||
VFLAGS: -cc gcc
|
||||
VFLAGS: -cc gcc -cflags -fno-omit-frame-pointer
|
||||
VJOBS: 1
|
||||
VTEST_SHOW_START: 1
|
||||
UBSAN_OPTIONS: print_stacktrace=1:halt_on_error=1:print_suppressions=0:suppressions=/home/runner/work/v/v/.github/workflows/run_sanitizers_undefined.suppressions
|
||||
VNATIVE_SKIP_LIBC_VV: 1
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Build V
|
||||
|
@ -122,17 +126,21 @@ jobs:
|
|||
- name: Recompile V with -cstrict
|
||||
run: ./v -cg -cstrict -o v cmd/v
|
||||
- name: Self tests (-fsanitize=undefined)
|
||||
run: ./v -cflags "-fsanitize=undefined" -o v2 cmd/v && ./v2 -cflags -fsanitize=undefined test-self vlib
|
||||
run: |
|
||||
./v -cflags -fsanitize=undefined -o v2 cmd/v
|
||||
./v2 -cflags -fsanitize=undefined test-self vlib
|
||||
- name: Build examples (V compiled with -fsanitize=undefined)
|
||||
run: ./v2 build-examples
|
||||
|
||||
tests-sanitize-address-clang:
|
||||
runs-on: ubuntu-20.04
|
||||
runs-on: ubuntu-22.04
|
||||
timeout-minutes: 300
|
||||
env:
|
||||
VFLAGS: -cc clang
|
||||
VFLAGS: -cc clang -cflags -fno-omit-frame-pointer
|
||||
VJOBS: 1
|
||||
VTEST_SHOW_START: 1
|
||||
ASAN_OPTIONS: detect_leaks=1
|
||||
LSAN_OPTIONS: max_leaks=1:print_suppressions=0:suppressions=/home/runner/work/v/v/.github/workflows/run_sanitizers_leak.suppressions
|
||||
VNATIVE_SKIP_LIBC_VV: 1
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Build V
|
||||
|
@ -148,12 +156,13 @@ jobs:
|
|||
- name: Recompile V with -cstrict
|
||||
run: ./v -cg -cstrict -o v cmd/v
|
||||
- name: Self tests (-fsanitize=address)
|
||||
run: ASAN_OPTIONS=detect_leaks=1 LSAN_OPTIONS=max_leaks=1:print_suppressions=0:suppressions=.github/workflows/run_sanitizers_leak.suppressions ./v -cflags "-fsanitize=address,pointer-compare,pointer-subtract" test-self vlib
|
||||
run: ./v -cflags -fsanitize=address,pointer-compare,pointer-subtract test-self vlib
|
||||
- name: Self tests (V compiled with -fsanitize=address)
|
||||
run: ./v -cflags -fsanitize=address -o v cmd/v &&
|
||||
ASAN_OPTIONS=detect_leaks=1 LSAN_OPTIONS=max_leaks=1:print_suppressions=0:suppressions=.github/workflows/run_sanitizers_leak.suppressions ./v -cc tcc test-self -asan-compiler vlib
|
||||
run: |
|
||||
./v -cflags -fsanitize=address -o v cmd/v
|
||||
./v -cc tcc test-self -asan-compiler vlib
|
||||
- name: Build examples (V compiled with -fsanitize=address)
|
||||
run: ASAN_OPTIONS=detect_leaks=1 LSAN_OPTIONS=max_leaks=1:print_suppressions=0:suppressions=.github/workflows/run_sanitizers_leak.suppressions ./v build-examples
|
||||
run: ./v build-examples
|
||||
|
||||
tests-sanitize-address-msvc:
|
||||
runs-on: windows-2019
|
||||
|
@ -161,7 +170,7 @@ jobs:
|
|||
env:
|
||||
VFLAGS: -cc msvc
|
||||
VJOBS: 1
|
||||
VTEST_SHOW_START: 1
|
||||
VNATIVE_SKIP_LIBC_VV: 1
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Build
|
||||
|
@ -180,12 +189,14 @@ jobs:
|
|||
# run: .\v.exe -cflags "/fsanitize=address" test-self vlib
|
||||
|
||||
tests-sanitize-address-gcc:
|
||||
runs-on: ubuntu-20.04
|
||||
runs-on: ubuntu-22.04
|
||||
timeout-minutes: 300
|
||||
env:
|
||||
VFLAGS: -cc gcc
|
||||
VFLAGS: -cc gcc -cflags -fno-omit-frame-pointer
|
||||
VJOBS: 1
|
||||
VTEST_SHOW_START: 1
|
||||
ASAN_OPTIONS: detect_leaks=1
|
||||
LSAN_OPTIONS: max_leaks=1:print_suppressions=0:suppressions=/home/runner/work/v/v/.github/workflows/run_sanitizers_leak.suppressions
|
||||
VNATIVE_SKIP_LIBC_VV: 1
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Build V
|
||||
|
@ -201,21 +212,21 @@ jobs:
|
|||
- name: Recompile V with -cstrict
|
||||
run: ./v -cg -cstrict -o v cmd/v
|
||||
- name: Self tests (-fsanitize=address)
|
||||
run: ASAN_OPTIONS=detect_leaks=1 LSAN_OPTIONS=max_leaks=1:print_suppressions=0:suppressions=.github/workflows/run_sanitizers_leak.suppressions ./v -cflags -fsanitize=address test-self vlib
|
||||
run: ./v -cflags -fsanitize=address test-self vlib
|
||||
- name: Self tests (V compiled with -fsanitize=address)
|
||||
run:
|
||||
./v -cflags -fsanitize=address,pointer-compare,pointer-subtract -o v cmd/v &&
|
||||
ASAN_OPTIONS=detect_leaks=1 LSAN_OPTIONS=max_leaks=1:print_suppressions=0:suppressions=.github/workflows/run_sanitizers_leak.suppressions ./v -cc tcc test-self -asan-compiler vlib
|
||||
run: |
|
||||
./v -cflags -fsanitize=address,pointer-compare,pointer-subtract -o v cmd/v
|
||||
./v -cc tcc test-self -asan-compiler vlib
|
||||
- name: Build examples (V compiled with -fsanitize=address)
|
||||
run: ASAN_OPTIONS=detect_leaks=1 LSAN_OPTIONS=max_leaks=1:print_suppressions=0:suppressions=.github/workflows/run_sanitizers_leak.suppressions ./v build-examples
|
||||
run: ./v build-examples
|
||||
|
||||
tests-sanitize-memory-clang:
|
||||
runs-on: ubuntu-20.04
|
||||
runs-on: ubuntu-22.04
|
||||
timeout-minutes: 240
|
||||
env:
|
||||
VFLAGS: -cc clang -gc none
|
||||
VFLAGS: -cc clang -gc none -cflags -fno-omit-frame-pointer
|
||||
VJOBS: 1
|
||||
VTEST_SHOW_START: 1
|
||||
VNATIVE_SKIP_LIBC_VV: 1
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Build V
|
||||
|
@ -231,7 +242,7 @@ jobs:
|
|||
- name: Recompile V with clang and -cstrict
|
||||
run: ./v -cc clang -cg -cstrict -o v cmd/v
|
||||
- name: Self tests (-fsanitize=memory)
|
||||
run: ./v -cflags -fsanitize=memory test-self vlib
|
||||
run: ./v -cflags -fsanitize=memory test-self -msan-compiler vlib
|
||||
- name: Self tests (V compiled with -fsanitize=memory)
|
||||
run: |
|
||||
./v -cflags -fsanitize=memory -o v cmd/v
|
||||
|
|
4
.github/workflows/sdl_ci.yml
vendored
4
.github/workflows/sdl_ci.yml
vendored
|
@ -20,12 +20,12 @@ on:
|
|||
- '!**.md'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref == 'refs/heads/master' && github.sha || github.ref }}
|
||||
group: sdl-${{ github.workflow }}-${{ github.ref == 'refs/heads/master' && github.sha || github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
v-compiles-sdl-examples:
|
||||
runs-on: ubuntu-20.04
|
||||
runs-on: ubuntu-24.04
|
||||
timeout-minutes: 30
|
||||
env:
|
||||
VFLAGS: -cc tcc
|
||||
|
|
2
.github/workflows/symlink_ci.yml
vendored
2
.github/workflows/symlink_ci.yml
vendored
|
@ -12,7 +12,7 @@ on:
|
|||
- '.github/workflows/symlink_ci.yml'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref_name == 'master' && github.sha || github.ref_name }}
|
||||
group: symlink-${{ github.workflow }}-${{ github.ref_name == 'master' && github.sha || github.ref_name }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
|
|
2
.github/workflows/time_ci.yml
vendored
2
.github/workflows/time_ci.yml
vendored
|
@ -15,7 +15,7 @@ on:
|
|||
- '!**.md'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref == 'refs/heads/master' && github.sha || github.ref }}
|
||||
group: time-${{ github.workflow }}-${{ github.ref == 'refs/heads/master' && github.sha || github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
|
|
2
.github/workflows/toml_ci.yml
vendored
2
.github/workflows/toml_ci.yml
vendored
|
@ -13,7 +13,7 @@ on:
|
|||
- '!**.md'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref == 'refs/heads/master' && github.sha || github.ref }}
|
||||
group: toml-${{ github.workflow }}-${{ github.ref == 'refs/heads/master' && github.sha || github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
|
|
22
.github/workflows/tools_ci.yml
vendored
22
.github/workflows/tools_ci.yml
vendored
|
@ -19,12 +19,12 @@ on:
|
|||
- '**/tools_ci.yml'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref == 'refs/heads/master' && github.sha || github.ref }}
|
||||
group: tools-${{ github.workflow }}-${{ github.ref == 'refs/heads/master' && github.sha || github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
linux:
|
||||
runs-on: ubuntu-20.04
|
||||
runs-on: ubuntu-22.04
|
||||
strategy:
|
||||
matrix:
|
||||
cc: [tcc, gcc, clang]
|
||||
|
@ -47,19 +47,19 @@ jobs:
|
|||
- name: Test sanitized
|
||||
if: ${{ matrix.cc != 'tcc' }}
|
||||
run: |
|
||||
export VNATIVE_SKIP_LIBC_VV=1
|
||||
if [[ ${{ matrix.cc }} == "clang" ]]; then
|
||||
cmd="./v -cc clang -cflags -fsanitize=undefined test-self cmd"
|
||||
cmd="./v -cc clang -cflags -fsanitize=undefined test-self -ubsan-compiler cmd"
|
||||
echo $cmd && $cmd
|
||||
cmd="./v -cc clang -cflags -fsanitize=memory test-self cmd"
|
||||
cmd="./v -cc clang -cflags -fsanitize=memory test-self -msan-compiler cmd"
|
||||
echo $cmd && $cmd
|
||||
else
|
||||
# TODO: enable thread sanitizer after switching to ubuntu-22.04. Ref. https://github.com/orgs/community/discussions/63391
|
||||
# cmd="./v -cc gcc -cflags -fsanitize=thread test-self cmd"
|
||||
# echo $cmd && $cmd
|
||||
cmd="./v -cc gcc -cflags -fsanitize=address,leak,undefined,shift,shift-exponent,shift-base,integer-divide-by-zero,unreachable,vla-bound,null,return,signed-integer-overflow,bounds,bounds-strict,alignment,object-size,float-divide-by-zero,float-cast-overflow,nonnull-attribute,returns-nonnull-attribute,bool,enum,vptr test-self cmd/tools"
|
||||
cmd="./v -cc gcc -cflags -fsanitize=thread test-self cmd"
|
||||
echo $cmd && $cmd
|
||||
# cmd="./v -cc gcc -cflags -fsanitize=kernel-address test-self cmd"
|
||||
# echo $cmd && $cmd
|
||||
cmd="./v -cc gcc -cflags -fsanitize=address,leak,undefined,shift,shift-exponent,shift-base,integer-divide-by-zero,unreachable,vla-bound,null,return,signed-integer-overflow,bounds,bounds-strict,alignment,object-size,float-divide-by-zero,float-cast-overflow,nonnull-attribute,returns-nonnull-attribute,bool,enum,vptr test-self -asan-compiler cmd/tools"
|
||||
echo $cmd && $cmd
|
||||
## cmd="./v -cc gcc -cflags -fsanitize=kernel-address test-self -asan-compiler cmd"
|
||||
## echo $cmd && $cmd
|
||||
fi
|
||||
|
||||
macos:
|
||||
|
@ -102,7 +102,7 @@ jobs:
|
|||
run: ./v -W -cstrict test-self cmd
|
||||
|
||||
tools-docker-ubuntu-musl:
|
||||
runs-on: ubuntu-20.04
|
||||
runs-on: ubuntu-24.04
|
||||
timeout-minutes: 121
|
||||
container:
|
||||
image: thevlang/vlang:ubuntu-build
|
||||
|
|
|
@ -17,7 +17,7 @@ on:
|
|||
- 'cmd/tools/vrepl.v'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref == 'refs/heads/master' && github.sha || github.ref }}
|
||||
group: v_apps-${{ github.workflow }}-${{ github.ref == 'refs/heads/master' && github.sha || github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
|
|
6
.github/workflows/vab_ci.yml
vendored
6
.github/workflows/vab_ci.yml
vendored
|
@ -18,12 +18,12 @@ on:
|
|||
- '!**.md'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref == 'refs/heads/master' && github.sha || github.ref }}
|
||||
group: vab-${{ github.workflow }}-${{ github.ref == 'refs/heads/master' && github.sha || github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
vab-compiles-v-examples:
|
||||
runs-on: ubuntu-20.04
|
||||
runs-on: ubuntu-24.04
|
||||
timeout-minutes: 121
|
||||
env:
|
||||
VAB_FLAGS: --api 30 --build-tools 29.0.0 -v 3
|
||||
|
@ -65,7 +65,7 @@ jobs:
|
|||
done
|
||||
|
||||
v-compiles-os-android:
|
||||
runs-on: ubuntu-20.04
|
||||
runs-on: ubuntu-24.04
|
||||
timeout-minutes: 20
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
|
4
.github/workflows/vinix_ci.yml
vendored
4
.github/workflows/vinix_ci.yml
vendored
|
@ -18,12 +18,12 @@ on:
|
|||
- 'cmd/tools/vrepl.v'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref == 'refs/heads/master' && github.sha || github.ref }}
|
||||
group: vinix-${{ github.workflow }}-${{ github.ref == 'refs/heads/master' && github.sha || github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
vinix-build:
|
||||
runs-on: ubuntu-20.04
|
||||
runs-on: ubuntu-24.04
|
||||
timeout-minutes: 10
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
|
2
.github/workflows/vpm_ci.yml
vendored
2
.github/workflows/vpm_ci.yml
vendored
|
@ -11,7 +11,7 @@ on:
|
|||
- '**/cmd/tools/vpm/**'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref == 'refs/heads/master' && github.sha || github.ref }}
|
||||
group: vpm-${{ github.workflow }}-${{ github.ref == 'refs/heads/master' && github.sha || github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
|
|
2
.github/workflows/vsl_and_vtl_compile_ci.yml
vendored
2
.github/workflows/vsl_and_vtl_compile_ci.yml
vendored
|
@ -17,7 +17,7 @@ on:
|
|||
- 'cmd/tools/vrepl.v'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref == 'refs/heads/master' && github.sha || github.ref }}
|
||||
group: vsl-vtl-${{ github.workflow }}-${{ github.ref == 'refs/heads/master' && github.sha || github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
|
|
2
.github/workflows/vup_works.yml
vendored
2
.github/workflows/vup_works.yml
vendored
|
@ -21,7 +21,7 @@ on:
|
|||
- 'cmd/tools/vrepl.v'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref == 'refs/heads/master' && github.sha || github.ref }}
|
||||
group: vup-${{ github.workflow }}-${{ github.ref == 'refs/heads/master' && github.sha || github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
|
|
2
.github/workflows/wasm_backend_ci.yml
vendored
2
.github/workflows/wasm_backend_ci.yml
vendored
|
@ -39,7 +39,7 @@ on:
|
|||
- '**/wasm_backend_ci.yml'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref == 'refs/heads/master' && github.sha || github.ref }}
|
||||
group: wasm-${{ github.workflow }}-${{ github.ref == 'refs/heads/master' && github.sha || github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
|
|
4
.github/workflows/websockets_ci.yml
vendored
4
.github/workflows/websockets_ci.yml
vendored
|
@ -17,12 +17,12 @@ on:
|
|||
- '!cmd/tools/builders/**.v'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref == 'refs/heads/master' && github.sha || github.ref }}
|
||||
group: websockets-${{ github.workflow }}-${{ github.ref == 'refs/heads/master' && github.sha || github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
websocket_tests:
|
||||
runs-on: ubuntu-20.04
|
||||
runs-on: ubuntu-24.04
|
||||
timeout-minutes: 121
|
||||
env:
|
||||
VFLAGS: -cc tcc -no-retry-compilation
|
||||
|
|
2
.github/workflows/windows_ci.yml
vendored
2
.github/workflows/windows_ci.yml
vendored
|
@ -20,7 +20,7 @@ on:
|
|||
- '!cmd/tools/builders/**.v'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref == 'refs/heads/master' && github.sha || github.ref }}
|
||||
group: windows-${{ github.workflow }}-${{ github.ref == 'refs/heads/master' && github.sha || github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
|
|
|
@ -60,10 +60,10 @@ fn install_dependencies_for_examples_and_tools_tcc() {
|
|||
exec('v retry -- sudo apt install --quiet -y libssl-dev sqlite3 libsqlite3-dev valgrind')
|
||||
exec('v retry -- sudo apt install --quiet -y libfreetype6-dev libxi-dev libxcursor-dev libgl-dev libxrandr-dev libasound2-dev')
|
||||
// The following is needed for examples/wkhtmltopdf.v
|
||||
exec('v retry -- wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6-1/wkhtmltox_0.12.6-1.focal_amd64.deb')
|
||||
exec('v retry -- wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-2/wkhtmltox_0.12.6.1-2.jammy_amd64.deb')
|
||||
exec('v retry -- sudo apt install --quiet -y xfonts-75dpi xfonts-base')
|
||||
exec('v retry -- sudo apt install --quiet -y expect')
|
||||
exec('v retry -- sudo dpkg -i wkhtmltox_0.12.6-1.focal_amd64.deb')
|
||||
exec('v retry -- sudo dpkg -i wkhtmltox_0.12.6.1-2.jammy_amd64.deb')
|
||||
}
|
||||
|
||||
fn test_v_to_c_tcc() {
|
||||
|
|
|
@ -4,6 +4,10 @@ const vexe = @VEXE
|
|||
const vroot = os.dir(vexe)
|
||||
const tfolder = os.join_path(os.vtmp_dir(), 'cover_test')
|
||||
|
||||
const t1 = np(os.join_path(tfolder, 't1'))
|
||||
const t2 = np(os.join_path(tfolder, 't2'))
|
||||
const t3 = np(os.join_path(tfolder, 't3'))
|
||||
|
||||
fn testsuite_begin() {
|
||||
os.setenv('VCOLORS', 'never', true)
|
||||
os.chdir(vroot)!
|
||||
|
@ -16,7 +20,7 @@ fn testsuite_end() {
|
|||
}
|
||||
|
||||
fn test_help() {
|
||||
res := os.execute('${os.quoted_path(vexe)} cover -h')
|
||||
res := execute('${os.quoted_path(vexe)} cover -h')
|
||||
assert res.exit_code == 0
|
||||
assert res.output.contains('Usage: v cover')
|
||||
assert res.output.contains('Description: Analyze & make reports')
|
||||
|
@ -34,27 +38,20 @@ fn np(path string) string {
|
|||
}
|
||||
|
||||
fn test_simple() {
|
||||
// if true {
|
||||
// return
|
||||
//}
|
||||
|
||||
t1 := np(os.join_path(tfolder, 't1'))
|
||||
t2 := np(os.join_path(tfolder, 't2'))
|
||||
t3 := np(os.join_path(tfolder, 't3'))
|
||||
assert !os.exists(t1), t1
|
||||
assert !os.exists(t2), t2
|
||||
assert !os.exists(t3), t3
|
||||
|
||||
r1 := os.execute('${os.quoted_path(vexe)} -no-skip-unused -coverage ${os.quoted_path(t1)} cmd/tools/vcover/testdata/simple/t1_test.v')
|
||||
r1 := execute('${os.quoted_path(vexe)} -no-skip-unused -coverage ${os.quoted_path(t1)} cmd/tools/vcover/testdata/simple/t1_test.v')
|
||||
assert r1.exit_code == 0, r1.str()
|
||||
assert r1.output.trim_space() == '10', r1.str()
|
||||
assert os.exists(t1), t1
|
||||
cmd := '${os.quoted_path(vexe)} cover ${os.quoted_path(t1)} --filter vcover/testdata/simple/'
|
||||
filter1 := os.execute(cmd)
|
||||
filter1 := execute(cmd)
|
||||
assert filter1.exit_code == 0, filter1.output
|
||||
assert filter1.output.contains('cmd/tools/vcover/testdata/simple/simple.v'), filter1.output
|
||||
assert filter1.output.trim_space().ends_with('| 4 | 9 | 44.44%'), filter1.output
|
||||
hfilter1 := os.execute('${os.quoted_path(vexe)} cover ${os.quoted_path(t1)} --filter vcover/testdata/simple/ -H -P false')
|
||||
hfilter1 := execute('${os.quoted_path(vexe)} cover ${os.quoted_path(t1)} --filter vcover/testdata/simple/ -H -P false')
|
||||
assert hfilter1.exit_code == 0, hfilter1.output
|
||||
assert !hfilter1.output.contains('%'), hfilter1.output
|
||||
houtput1 := hfilter1.output.trim_space().split_into_lines()
|
||||
|
@ -72,15 +69,15 @@ fn test_simple() {
|
|||
assert nzeros1.any(it.contains('simple.v:8')), nzeros1.str()
|
||||
assert nzeros1.any(it.contains('simple.v:25')), nzeros1.str()
|
||||
|
||||
r2 := os.execute('${os.quoted_path(vexe)} -no-skip-unused -coverage ${os.quoted_path(t2)} cmd/tools/vcover/testdata/simple/t2_test.v')
|
||||
r2 := execute('${os.quoted_path(vexe)} -no-skip-unused -coverage ${os.quoted_path(t2)} cmd/tools/vcover/testdata/simple/t2_test.v')
|
||||
assert r2.exit_code == 0, r2.str()
|
||||
assert r2.output.trim_space() == '24', r2.str()
|
||||
assert os.exists(t2), t2
|
||||
filter2 := os.execute('${os.quoted_path(vexe)} cover ${os.quoted_path(t2)} --filter vcover/testdata/simple')
|
||||
filter2 := execute('${os.quoted_path(vexe)} cover ${os.quoted_path(t2)} --filter vcover/testdata/simple')
|
||||
assert filter2.exit_code == 0, filter2.output
|
||||
assert filter2.output.contains('cmd/tools/vcover/testdata/simple/simple.v')
|
||||
assert filter2.output.trim_space().ends_with('| 6 | 9 | 66.67%'), filter2.output
|
||||
hfilter2 := os.execute('${os.quoted_path(vexe)} cover ${os.quoted_path(t2)} --filter testdata/simple -H -P false')
|
||||
hfilter2 := execute('${os.quoted_path(vexe)} cover ${os.quoted_path(t2)} --filter testdata/simple -H -P false')
|
||||
assert hfilter2.exit_code == 0, hfilter2.output
|
||||
assert !hfilter2.output.contains('%'), hfilter2.output
|
||||
houtput2 := hfilter2.output.trim_space().split_into_lines()
|
||||
|
@ -97,12 +94,17 @@ fn test_simple() {
|
|||
assert nzeros2.any(it.contains('simple.v:25')), nzeros2.str()
|
||||
|
||||
// Run both tests. The coverage should be combined and == 100%
|
||||
r3 := os.execute('${os.quoted_path(vexe)} -no-skip-unused -coverage ${os.quoted_path(t3)} test cmd/tools/vcover/testdata/simple/')
|
||||
r3 := execute('${os.quoted_path(vexe)} -no-skip-unused -coverage ${os.quoted_path(t3)} test cmd/tools/vcover/testdata/simple/')
|
||||
assert r3.exit_code == 0, r3.str()
|
||||
assert r3.output.trim_space().contains('Summary for all V _test.v files: '), r3.str()
|
||||
assert os.exists(t3), t3
|
||||
filter3 := os.execute('${os.quoted_path(vexe)} cover ${os.quoted_path(t3)} --filter simple/')
|
||||
filter3 := execute('${os.quoted_path(vexe)} cover ${os.quoted_path(t3)} --filter simple/')
|
||||
assert filter3.exit_code == 0, filter3.str()
|
||||
assert filter3.output.contains('cmd/tools/vcover/testdata/simple/simple.v'), filter3.str()
|
||||
assert filter3.output.trim_space().match_glob('*cmd/tools/vcover/testdata/simple/simple.v *| 9 | 9 | 100.00%'), filter3.str()
|
||||
}
|
||||
|
||||
fn execute(cmd string) os.Result {
|
||||
eprintln('Executing: ${cmd}')
|
||||
return os.execute(cmd)
|
||||
}
|
||||
|
|
|
@ -11,9 +11,10 @@ struct Config {
|
|||
is_sandboxed_packaging bool = os.getenv('VTEST_SANDBOXED_PACKAGING') != ''
|
||||
github_job string = os.getenv('GITHUB_JOB')
|
||||
mut:
|
||||
test_dirs []string = ['cmd', 'vlib']
|
||||
is_asan_compiler bool
|
||||
is_msan_compiler bool
|
||||
test_dirs []string = ['cmd', 'vlib']
|
||||
is_asan_compiler bool
|
||||
is_msan_compiler bool
|
||||
is_ubsan_compiler bool
|
||||
// Options relating to the v command itself (passed in the prefix) `v [...args] test-self`.
|
||||
werror bool
|
||||
sanitize_memory bool
|
||||
|
@ -234,6 +235,9 @@ const skip_with_asan_compiler = [
|
|||
const skip_with_msan_compiler = [
|
||||
'do_not_remove',
|
||||
]
|
||||
const skip_with_ubsan_compiler = [
|
||||
'do_not_remove',
|
||||
]
|
||||
const skip_on_musl = [
|
||||
'do_not_remove',
|
||||
'vlib/v/slow_tests/profile/profile_test.v',
|
||||
|
@ -396,6 +400,9 @@ fn Config.init(vargs []string, targs []string) !Config {
|
|||
'-msan-compiler', '--msan-compiler' {
|
||||
cfg.is_msan_compiler = true
|
||||
}
|
||||
'-ubsan-compiler', '--ubsan-compiler' {
|
||||
cfg.is_ubsan_compiler = true
|
||||
}
|
||||
else {
|
||||
if arg.starts_with('-') {
|
||||
errs << 'error: unknown flag `${arg}`'
|
||||
|
@ -465,7 +472,7 @@ fn main() {
|
|||
}
|
||||
if !cfg.run_slow_sanitize
|
||||
&& ((cfg.sanitize_undefined || cfg.sanitize_memory || cfg.sanitize_address)
|
||||
|| (cfg.is_msan_compiler || cfg.is_asan_compiler)) {
|
||||
|| (cfg.is_msan_compiler || cfg.is_asan_compiler || cfg.is_ubsan_compiler)) {
|
||||
tsession.skip_files << skip_fsanitize_too_slow
|
||||
}
|
||||
if cfg.werror {
|
||||
|
@ -486,6 +493,9 @@ fn main() {
|
|||
if cfg.is_msan_compiler {
|
||||
tsession.skip_files << skip_with_msan_compiler
|
||||
}
|
||||
if cfg.is_ubsan_compiler {
|
||||
tsession.skip_files << skip_with_ubsan_compiler
|
||||
}
|
||||
if cfg.is_musl_ci {
|
||||
tsession.skip_files << skip_on_musl
|
||||
}
|
||||
|
|
|
@ -29,6 +29,9 @@ pub fn vmemcpy(dest voidptr, const_src voidptr, n isize) voidptr {
|
|||
print_backtrace()
|
||||
}
|
||||
}
|
||||
if n == 0 {
|
||||
return dest
|
||||
}
|
||||
unsafe {
|
||||
return C.memcpy(dest, const_src, n)
|
||||
}
|
||||
|
@ -44,6 +47,9 @@ pub fn vmemmove(dest voidptr, const_src voidptr, n isize) voidptr {
|
|||
$if trace_vmemmove ? {
|
||||
C.fprintf(C.stderr, c'vmemmove dest: %p src: %p n: %6ld\n', dest, const_src, n)
|
||||
}
|
||||
if n == 0 {
|
||||
return dest
|
||||
}
|
||||
unsafe {
|
||||
return C.memmove(dest, const_src, n)
|
||||
}
|
||||
|
@ -66,6 +72,9 @@ pub fn vmemcmp(const_s1 voidptr, const_s2 voidptr, n isize) int {
|
|||
$if trace_vmemcmp ? {
|
||||
C.fprintf(C.stderr, c'vmemcmp s1: %p s2: %p n: %6ld\n', const_s1, const_s2, n)
|
||||
}
|
||||
if n == 0 {
|
||||
return 0
|
||||
}
|
||||
unsafe {
|
||||
return C.memcmp(const_s1, const_s2, n)
|
||||
}
|
||||
|
@ -85,6 +94,9 @@ pub fn vmemset(s voidptr, c int, n isize) voidptr {
|
|||
print_backtrace()
|
||||
}
|
||||
}
|
||||
if n == 0 {
|
||||
return s
|
||||
}
|
||||
unsafe {
|
||||
return C.memset(s, c, n)
|
||||
}
|
||||
|
|
|
@ -28,7 +28,11 @@ pub fn (mut d TerminalStreamingDownloader) on_chunk(request &Request, chunk []u8
|
|||
d.past_time = now
|
||||
d.past_received = already_received
|
||||
ratio := f64(already_received) / f64(expected)
|
||||
estimated := time.Duration(i64(f64(elapsed) / ratio))
|
||||
res := f64(elapsed) / ratio
|
||||
mut estimated := time.Duration(max_i64)
|
||||
if f64(min_i64) < res && res < f64(max_i64) {
|
||||
estimated = i64(res)
|
||||
}
|
||||
speed := f64(time.millisecond) * f64(already_received) / f64(elapsed)
|
||||
elapsed_s := elapsed.seconds()
|
||||
estimated_s := estimated.seconds()
|
||||
|
|
|
@ -206,12 +206,14 @@ fn (mut s Server) setup_callbacks(mut sc ServerClient) {
|
|||
}
|
||||
}
|
||||
// set standard close so we can remove client if closed
|
||||
sc.client.on_close_ref(fn (mut c Client, code int, reason string, mut sc ServerClient) ! {
|
||||
c.logger.debug('server-> Delete client')
|
||||
lock sc.server.server_state {
|
||||
sc.server.server_state.clients.delete(sc.client.id)
|
||||
}
|
||||
}, sc)
|
||||
sc.client.on_close_ref(delete_client_cb, sc)
|
||||
}
|
||||
|
||||
fn delete_client_cb(mut c Client, code int, reason string, mut sc ServerClient) ! {
|
||||
c.logger.debug('server-> Delete client')
|
||||
lock sc.server.server_state {
|
||||
sc.server.server_state.clients.delete(sc.client.id)
|
||||
}
|
||||
}
|
||||
|
||||
// accept_new_client creates a new client instance for client that connects to the socket
|
||||
|
|
|
@ -87,41 +87,46 @@ fn start_server_in_thread_and_wait_till_it_is_ready_to_accept_connections(mut ws
|
|||
eprintln('-----------------------------------------------------------------------------')
|
||||
}
|
||||
|
||||
fn open_cb(mut client websocket.Client) ! {
|
||||
client.pong()!
|
||||
assert true
|
||||
}
|
||||
|
||||
fn close_cb(mut client websocket.Client, err string) ! {
|
||||
println('error: ${err}')
|
||||
// this can be thrown by internet connection problems
|
||||
assert false
|
||||
}
|
||||
|
||||
fn message_cb(mut client websocket.Client, msg &websocket.Message, mut res WebsocketTestResults) ! {
|
||||
println('client got type: ${msg.opcode} payload:\n${msg.payload}')
|
||||
if msg.opcode == .text_frame {
|
||||
smessage := msg.payload.bytestr()
|
||||
match smessage {
|
||||
'pong' {
|
||||
res.nr_pong_received++
|
||||
}
|
||||
'a' {
|
||||
res.nr_messages++
|
||||
}
|
||||
else {
|
||||
assert false
|
||||
}
|
||||
}
|
||||
} else {
|
||||
println('Binary message: ${msg}')
|
||||
}
|
||||
}
|
||||
|
||||
// ws_test tests connect to the websocket server from websocket client
|
||||
fn ws_test(family net.AddrFamily, uri string) ! {
|
||||
eprintln('connecting to ${uri} ...')
|
||||
|
||||
mut test_results := WebsocketTestResults{}
|
||||
mut client := websocket.new_client(uri)!
|
||||
client.on_open(fn (mut client websocket.Client) ! {
|
||||
client.pong()!
|
||||
assert true
|
||||
})
|
||||
client.on_error(fn (mut client websocket.Client, err string) ! {
|
||||
println('error: ${err}')
|
||||
// this can be thrown by internet connection problems
|
||||
assert false
|
||||
})
|
||||
|
||||
client.on_message_ref(fn (mut client websocket.Client, msg &websocket.Message, mut res WebsocketTestResults) ! {
|
||||
println('client got type: ${msg.opcode} payload:\n${msg.payload}')
|
||||
if msg.opcode == .text_frame {
|
||||
smessage := msg.payload.bytestr()
|
||||
match smessage {
|
||||
'pong' {
|
||||
res.nr_pong_received++
|
||||
}
|
||||
'a' {
|
||||
res.nr_messages++
|
||||
}
|
||||
else {
|
||||
assert false
|
||||
}
|
||||
}
|
||||
} else {
|
||||
println('Binary message: ${msg}')
|
||||
}
|
||||
}, test_results)
|
||||
client.on_open(open_cb)
|
||||
client.on_error(close_cb)
|
||||
client.on_message_ref(message_cb, test_results)
|
||||
client.connect()!
|
||||
spawn client.listen()
|
||||
|
||||
|
@ -140,17 +145,21 @@ fn ws_test(family net.AddrFamily, uri string) ! {
|
|||
assert test_results.nr_messages == 2
|
||||
}
|
||||
|
||||
fn on_message_cb_2(mut cli websocket.Client, msg &websocket.Message) ! {
|
||||
if msg.opcode == .text_frame {
|
||||
cli.close(1000, 'closing connection')!
|
||||
}
|
||||
}
|
||||
|
||||
fn on_close_cb_2(mut cli websocket.Client, code int, reason string, mut res WebsocketTestResults) ! {
|
||||
res.nr_closes++
|
||||
}
|
||||
|
||||
fn test_on_close_when_server_closing_connection() ! {
|
||||
mut ws := websocket.new_server(.ip, 30003, '')
|
||||
ws.on_message(fn (mut cli websocket.Client, msg &websocket.Message) ! {
|
||||
if msg.opcode == .text_frame {
|
||||
cli.close(1000, 'closing connection')!
|
||||
}
|
||||
})
|
||||
ws.on_message(on_message_cb_2)
|
||||
mut test_results := WebsocketTestResults{}
|
||||
ws.on_close_ref(fn (mut cli websocket.Client, code int, reason string, mut res WebsocketTestResults) ! {
|
||||
res.nr_closes++
|
||||
}, test_results)
|
||||
ws.on_close_ref(on_close_cb_2, test_results)
|
||||
start_server_in_thread_and_wait_till_it_is_ready_to_accept_connections(mut ws)
|
||||
|
||||
mut client := websocket.new_client('ws://localhost:30003')!
|
||||
|
@ -162,15 +171,17 @@ fn test_on_close_when_server_closing_connection() ! {
|
|||
assert test_results.nr_closes == 1
|
||||
}
|
||||
|
||||
fn on_close_cb_3(mut cli websocket.Client, code int, reason string, mut res WebsocketTestResults) ! {
|
||||
res.nr_closes++
|
||||
}
|
||||
|
||||
fn test_on_close_when_client_closing_connection() ! {
|
||||
mut ws := websocket.new_server(.ip, 30004, '')
|
||||
start_server_in_thread_and_wait_till_it_is_ready_to_accept_connections(mut ws)
|
||||
|
||||
mut client := websocket.new_client('ws://localhost:30004')!
|
||||
mut test_results := WebsocketTestResults{}
|
||||
client.on_close_ref(fn (mut cli websocket.Client, code int, reason string, mut res WebsocketTestResults) ! {
|
||||
res.nr_closes++
|
||||
}, test_results)
|
||||
client.on_close_ref(on_close_cb_3, test_results)
|
||||
client.connect()!
|
||||
spawn client.listen()
|
||||
time.sleep(1000 * time.millisecond)
|
||||
|
|
|
@ -656,11 +656,13 @@ fn (mut c Checker) check_shift(mut node ast.InfixExpr, left_type_ ast.Type, righ
|
|||
node.right.pos())
|
||||
return left_type
|
||||
}
|
||||
if node.ct_left_value_evaled {
|
||||
if lval := node.ct_left_value.i64() {
|
||||
if lval < 0 {
|
||||
c.error('invalid bitshift of a negative number', node.left.pos())
|
||||
return left_type
|
||||
if !c.inside_unsafe {
|
||||
if node.ct_left_value_evaled {
|
||||
if lval := node.ct_left_value.i64() {
|
||||
if lval < 0 {
|
||||
c.error('invalid bitshift of a negative number', node.left.pos())
|
||||
return left_type
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5249,7 +5249,7 @@ fn (mut g Gen) ident(node ast.Ident) {
|
|||
key := node.name
|
||||
g.write('/* obf identfn: ${key} */')
|
||||
name = g.obf_table[key] or {
|
||||
panic('cgen: obf key name "${key}" not found, this should never happen')
|
||||
panic('cgen: obf name "${key}" not found, this should never happen')
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -362,7 +362,11 @@ const c_common_macros = '
|
|||
|
||||
// for __offset_of
|
||||
#ifndef __offsetof
|
||||
#if defined(__TINYC__) || defined(_MSC_VER)
|
||||
#define __offsetof(PTYPE,FIELDNAME) ((size_t)(&((PTYPE *)0)->FIELDNAME))
|
||||
#else
|
||||
#define __offsetof(st, m) __builtin_offsetof(st, m)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define OPTION_CAST(x) (x)
|
||||
|
|
|
@ -34,6 +34,13 @@ fn test_native() {
|
|||
}
|
||||
bench.set_total_expected_steps(tests.len)
|
||||
for test in tests {
|
||||
if test == 'libc.vv' {
|
||||
// TODO: remove the skip here, when the native backend is more advanced
|
||||
if os.getenv('VNATIVE_SKIP_LIBC_VV') != '' {
|
||||
println('>>> SKIPPING ${test} since VNATIVE_SKIP_LIBC_VV is defined')
|
||||
continue
|
||||
}
|
||||
}
|
||||
bench.step()
|
||||
full_test_path := os.real_path(os.join_path(dir, test))
|
||||
test_file_name := os.file_name(test)
|
||||
|
@ -41,7 +48,7 @@ fn test_native() {
|
|||
work_test_path := os.join_path(wrkdir, test_file_name)
|
||||
exe_test_path := os.join_path(wrkdir, test_file_name + '.exe')
|
||||
tmperrfile := os.join_path(dir, test + '.tmperr')
|
||||
cmd := '${os.quoted_path(vexe)} -o ${os.quoted_path(exe_test_path)} -b native -skip-unused ${os.quoted_path(full_test_path)} -d no_backtrace -d custom_define 2> ${os.quoted_path(tmperrfile)}'
|
||||
cmd := '${os.quoted_path(vexe)} -o ${os.quoted_path(exe_test_path)} -b native ${os.quoted_path(full_test_path)} -d no_backtrace -d custom_define 2> ${os.quoted_path(tmperrfile)}'
|
||||
if is_verbose {
|
||||
println(cmd)
|
||||
}
|
||||
|
|
|
@ -925,7 +925,7 @@ pub fn (mut t Transformer) infix_expr(mut node ast.InfixExpr) ast.Expr {
|
|||
}
|
||||
.left_shift {
|
||||
return ast.IntegerLiteral{
|
||||
val: (u32(left_val) << right_val).str()
|
||||
val: (unsafe { left_val << right_val }).str()
|
||||
pos: pos
|
||||
}
|
||||
}
|
||||
|
@ -937,7 +937,7 @@ pub fn (mut t Transformer) infix_expr(mut node ast.InfixExpr) ast.Expr {
|
|||
}
|
||||
.unsigned_right_shift {
|
||||
return ast.IntegerLiteral{
|
||||
val: (left_val >>> right_val).str()
|
||||
val: (u64(left_val) >>> right_val).str()
|
||||
pos: pos
|
||||
}
|
||||
}
|
||||
|
|
|
@ -291,19 +291,21 @@ pub fn (mut bmp BitMap) aline(in_x0 int, in_y0 int, in_x1 int, in_y1 int, c u32)
|
|||
mut y := y0
|
||||
for y <= y1 + 0.5 {
|
||||
x := n * (y - y0) + x0
|
||||
e := f32(1 - math.abs(x - 0.5 - int(x)))
|
||||
bmp.plot(int(x), int(y), color_multiply_alpha(c, f32(e * 0.75)))
|
||||
if !math.is_nan(x) && !math.is_nan(y) {
|
||||
e := f32(1 - math.abs(x - 0.5 - int(x)))
|
||||
bmp.plot(int(x), int(y), color_multiply_alpha(c, f32(e * 0.75)))
|
||||
|
||||
xs1 := x + dist
|
||||
if int(xs1) != int(x) {
|
||||
v1 := math.abs(xs1 - x) / dist * (1 - e)
|
||||
bmp.plot(int(xs1), int(y), color_multiply_alpha(c, f32(v1)))
|
||||
}
|
||||
xs1 := x + dist
|
||||
if int(xs1) != int(x) {
|
||||
v1 := math.abs(xs1 - x) / dist * (1 - e)
|
||||
bmp.plot(int(xs1), int(y), color_multiply_alpha(c, f32(v1)))
|
||||
}
|
||||
|
||||
xs2 := x - dist
|
||||
if int(xs2) != int(x) {
|
||||
v2 := math.abs(x - xs1) / dist * (1 - e)
|
||||
bmp.plot(int(xs2), int(y), color_multiply_alpha(c, f32(v2)))
|
||||
xs2 := x - dist
|
||||
if int(xs2) != int(x) {
|
||||
v2 := math.abs(x - xs1) / dist * (1 - e)
|
||||
bmp.plot(int(xs2), int(y), color_multiply_alpha(c, f32(v2)))
|
||||
}
|
||||
}
|
||||
y += 1.0
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue