From 071c2505c9d4e948cdfb63542d008bcd1018e334 Mon Sep 17 00:00:00 2001 From: Jen-Chieh Shen Date: Mon, 25 Aug 2025 21:52:16 +0800 Subject: [PATCH 1/6] ci: Attempt to fix build --- .github/workflows/main.yml | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 5b0a05f..efb4c06 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -20,12 +20,12 @@ jobs: fail-fast: false matrix: os: - - macos-12 - macos-13 - - ubuntu-20.04 + - macos-14 - ubuntu-22.04 - - windows-2019 + - ubuntu-24.04 - windows-2022 + - windows-2025 emacs-version: - '27.2' - '28.2' @@ -50,20 +50,14 @@ jobs: - run: cargo test --all - - uses: purcell/setup-emacs@v6.0 - if: runner.os != 'Windows' - with: - version: ${{ matrix.emacs-version }} - - - uses: jcs090218/setup-emacs-windows@master - if: runner.os == 'Windows' + - uses: jcs090218/setup-emacs@master with: version: ${{ matrix.emacs-version }} - run: ./bin/test ci-aarch64: - runs-on: macos-12 + runs-on: macos-13 steps: - name: Set up Rust run: | From 8725fb1f95e8904a12c246f0181849cabd9861a7 Mon Sep 17 00:00:00 2001 From: Jen-Chieh Shen Date: Mon, 25 Aug 2025 22:58:38 +0800 Subject: [PATCH 2/6] chore: Update bindgen --- emacs-module/Cargo.toml | 2 +- emacs-module/src/emacs-module.rs | 311 ++++++++----------------------- 2 files changed, 74 insertions(+), 239 deletions(-) diff --git a/emacs-module/Cargo.toml b/emacs-module/Cargo.toml index 67eaf67..305d9a8 100644 --- a/emacs-module/Cargo.toml +++ b/emacs-module/Cargo.toml @@ -13,7 +13,7 @@ license = "BSD-3-Clause" build = "build.rs" [build-dependencies] -bindgen = { version = "0.59.0", optional = true } +bindgen = { version = "0.72.0", optional = true } [features] default = [] \ No newline at end of file diff --git a/emacs-module/src/emacs-module.rs b/emacs-module/src/emacs-module.rs index ddaedd6..d7420f5 100644 --- a/emacs-module/src/emacs-module.rs +++ b/emacs-module/src/emacs-module.rs @@ -1,4 +1,4 @@ -/* automatically generated by rust-bindgen 0.56.0 */ +/* automatically generated by rust-bindgen 0.72.0 */ pub type intmax_t = ::std::os::raw::c_longlong; pub type emacs_finalizer_function = @@ -20,34 +20,16 @@ pub struct emacs_runtime { pub get_environment: ::std::option::Option *mut emacs_env>, } -#[test] -fn bindgen_test_layout_emacs_runtime() { - assert_eq!( - ::std::mem::size_of::(), - 24usize, - concat!("Size of: ", stringify!(emacs_runtime)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(emacs_runtime)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).size as *const _ as usize }, - 0usize, - concat!("Offset of field: ", stringify!(emacs_runtime), "::", stringify!(size)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).private_members as *const _ as usize }, - 8usize, - concat!("Offset of field: ", stringify!(emacs_runtime), "::", stringify!(private_members)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).get_environment as *const _ as usize }, - 16usize, - concat!("Offset of field: ", stringify!(emacs_runtime), "::", stringify!(get_environment)) - ); -} +#[allow(clippy::unnecessary_operation, clippy::identity_op)] +const _: () = { + ["Size of emacs_runtime"][::std::mem::size_of::() - 24usize]; + ["Alignment of emacs_runtime"][::std::mem::align_of::() - 8usize]; + ["Offset of field: emacs_runtime::size"][::std::mem::offset_of!(emacs_runtime, size) - 0usize]; + ["Offset of field: emacs_runtime::private_members"] + [::std::mem::offset_of!(emacs_runtime, private_members) - 8usize]; + ["Offset of field: emacs_runtime::get_environment"] + [::std::mem::offset_of!(emacs_runtime, get_environment) - 16usize]; +}; pub type emacs_init_function = ::std::option::Option ::std::os::raw::c_int>; pub type emacs_subr = ::std::option::Option< @@ -190,215 +172,68 @@ pub struct emacs_env_25 { pub vec_size: ::std::option::Option isize>, } -#[test] -fn bindgen_test_layout_emacs_env_25() { - assert_eq!( - ::std::mem::size_of::(), - 232usize, - concat!("Size of: ", stringify!(emacs_env_25)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(emacs_env_25)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).size as *const _ as usize }, - 0usize, - concat!("Offset of field: ", stringify!(emacs_env_25), "::", stringify!(size)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).private_members as *const _ as usize }, - 8usize, - concat!("Offset of field: ", stringify!(emacs_env_25), "::", stringify!(private_members)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).make_global_ref as *const _ as usize }, - 16usize, - concat!("Offset of field: ", stringify!(emacs_env_25), "::", stringify!(make_global_ref)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).free_global_ref as *const _ as usize }, - 24usize, - concat!("Offset of field: ", stringify!(emacs_env_25), "::", stringify!(free_global_ref)) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).non_local_exit_check as *const _ as usize - }, - 32usize, - concat!( - "Offset of field: ", - stringify!(emacs_env_25), - "::", - stringify!(non_local_exit_check) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).non_local_exit_clear as *const _ as usize - }, - 40usize, - concat!( - "Offset of field: ", - stringify!(emacs_env_25), - "::", - stringify!(non_local_exit_clear) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).non_local_exit_get as *const _ as usize }, - 48usize, - concat!( - "Offset of field: ", - stringify!(emacs_env_25), - "::", - stringify!(non_local_exit_get) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).non_local_exit_signal as *const _ as usize - }, - 56usize, - concat!( - "Offset of field: ", - stringify!(emacs_env_25), - "::", - stringify!(non_local_exit_signal) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).non_local_exit_throw as *const _ as usize - }, - 64usize, - concat!( - "Offset of field: ", - stringify!(emacs_env_25), - "::", - stringify!(non_local_exit_throw) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).make_function as *const _ as usize }, - 72usize, - concat!("Offset of field: ", stringify!(emacs_env_25), "::", stringify!(make_function)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).funcall as *const _ as usize }, - 80usize, - concat!("Offset of field: ", stringify!(emacs_env_25), "::", stringify!(funcall)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).intern as *const _ as usize }, - 88usize, - concat!("Offset of field: ", stringify!(emacs_env_25), "::", stringify!(intern)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).type_of as *const _ as usize }, - 96usize, - concat!("Offset of field: ", stringify!(emacs_env_25), "::", stringify!(type_of)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).is_not_nil as *const _ as usize }, - 104usize, - concat!("Offset of field: ", stringify!(emacs_env_25), "::", stringify!(is_not_nil)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).eq as *const _ as usize }, - 112usize, - concat!("Offset of field: ", stringify!(emacs_env_25), "::", stringify!(eq)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).extract_integer as *const _ as usize }, - 120usize, - concat!("Offset of field: ", stringify!(emacs_env_25), "::", stringify!(extract_integer)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).make_integer as *const _ as usize }, - 128usize, - concat!("Offset of field: ", stringify!(emacs_env_25), "::", stringify!(make_integer)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).extract_float as *const _ as usize }, - 136usize, - concat!("Offset of field: ", stringify!(emacs_env_25), "::", stringify!(extract_float)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).make_float as *const _ as usize }, - 144usize, - concat!("Offset of field: ", stringify!(emacs_env_25), "::", stringify!(make_float)) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).copy_string_contents as *const _ as usize - }, - 152usize, - concat!( - "Offset of field: ", - stringify!(emacs_env_25), - "::", - stringify!(copy_string_contents) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).make_string as *const _ as usize }, - 160usize, - concat!("Offset of field: ", stringify!(emacs_env_25), "::", stringify!(make_string)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).make_user_ptr as *const _ as usize }, - 168usize, - concat!("Offset of field: ", stringify!(emacs_env_25), "::", stringify!(make_user_ptr)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).get_user_ptr as *const _ as usize }, - 176usize, - concat!("Offset of field: ", stringify!(emacs_env_25), "::", stringify!(get_user_ptr)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).set_user_ptr as *const _ as usize }, - 184usize, - concat!("Offset of field: ", stringify!(emacs_env_25), "::", stringify!(set_user_ptr)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).get_user_finalizer as *const _ as usize }, - 192usize, - concat!( - "Offset of field: ", - stringify!(emacs_env_25), - "::", - stringify!(get_user_finalizer) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).set_user_finalizer as *const _ as usize }, - 200usize, - concat!( - "Offset of field: ", - stringify!(emacs_env_25), - "::", - stringify!(set_user_finalizer) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).vec_get as *const _ as usize }, - 208usize, - concat!("Offset of field: ", stringify!(emacs_env_25), "::", stringify!(vec_get)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).vec_set as *const _ as usize }, - 216usize, - concat!("Offset of field: ", stringify!(emacs_env_25), "::", stringify!(vec_set)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).vec_size as *const _ as usize }, - 224usize, - concat!("Offset of field: ", stringify!(emacs_env_25), "::", stringify!(vec_size)) - ); -} -extern "C" { +#[allow(clippy::unnecessary_operation, clippy::identity_op)] +const _: () = { + ["Size of emacs_env_25"][::std::mem::size_of::() - 232usize]; + ["Alignment of emacs_env_25"][::std::mem::align_of::() - 8usize]; + ["Offset of field: emacs_env_25::size"][::std::mem::offset_of!(emacs_env_25, size) - 0usize]; + ["Offset of field: emacs_env_25::private_members"] + [::std::mem::offset_of!(emacs_env_25, private_members) - 8usize]; + ["Offset of field: emacs_env_25::make_global_ref"] + [::std::mem::offset_of!(emacs_env_25, make_global_ref) - 16usize]; + ["Offset of field: emacs_env_25::free_global_ref"] + [::std::mem::offset_of!(emacs_env_25, free_global_ref) - 24usize]; + ["Offset of field: emacs_env_25::non_local_exit_check"] + [::std::mem::offset_of!(emacs_env_25, non_local_exit_check) - 32usize]; + ["Offset of field: emacs_env_25::non_local_exit_clear"] + [::std::mem::offset_of!(emacs_env_25, non_local_exit_clear) - 40usize]; + ["Offset of field: emacs_env_25::non_local_exit_get"] + [::std::mem::offset_of!(emacs_env_25, non_local_exit_get) - 48usize]; + ["Offset of field: emacs_env_25::non_local_exit_signal"] + [::std::mem::offset_of!(emacs_env_25, non_local_exit_signal) - 56usize]; + ["Offset of field: emacs_env_25::non_local_exit_throw"] + [::std::mem::offset_of!(emacs_env_25, non_local_exit_throw) - 64usize]; + ["Offset of field: emacs_env_25::make_function"] + [::std::mem::offset_of!(emacs_env_25, make_function) - 72usize]; + ["Offset of field: emacs_env_25::funcall"] + [::std::mem::offset_of!(emacs_env_25, funcall) - 80usize]; + ["Offset of field: emacs_env_25::intern"] + [::std::mem::offset_of!(emacs_env_25, intern) - 88usize]; + ["Offset of field: emacs_env_25::type_of"] + [::std::mem::offset_of!(emacs_env_25, type_of) - 96usize]; + ["Offset of field: emacs_env_25::is_not_nil"] + [::std::mem::offset_of!(emacs_env_25, is_not_nil) - 104usize]; + ["Offset of field: emacs_env_25::eq"][::std::mem::offset_of!(emacs_env_25, eq) - 112usize]; + ["Offset of field: emacs_env_25::extract_integer"] + [::std::mem::offset_of!(emacs_env_25, extract_integer) - 120usize]; + ["Offset of field: emacs_env_25::make_integer"] + [::std::mem::offset_of!(emacs_env_25, make_integer) - 128usize]; + ["Offset of field: emacs_env_25::extract_float"] + [::std::mem::offset_of!(emacs_env_25, extract_float) - 136usize]; + ["Offset of field: emacs_env_25::make_float"] + [::std::mem::offset_of!(emacs_env_25, make_float) - 144usize]; + ["Offset of field: emacs_env_25::copy_string_contents"] + [::std::mem::offset_of!(emacs_env_25, copy_string_contents) - 152usize]; + ["Offset of field: emacs_env_25::make_string"] + [::std::mem::offset_of!(emacs_env_25, make_string) - 160usize]; + ["Offset of field: emacs_env_25::make_user_ptr"] + [::std::mem::offset_of!(emacs_env_25, make_user_ptr) - 168usize]; + ["Offset of field: emacs_env_25::get_user_ptr"] + [::std::mem::offset_of!(emacs_env_25, get_user_ptr) - 176usize]; + ["Offset of field: emacs_env_25::set_user_ptr"] + [::std::mem::offset_of!(emacs_env_25, set_user_ptr) - 184usize]; + ["Offset of field: emacs_env_25::get_user_finalizer"] + [::std::mem::offset_of!(emacs_env_25, get_user_finalizer) - 192usize]; + ["Offset of field: emacs_env_25::set_user_finalizer"] + [::std::mem::offset_of!(emacs_env_25, set_user_finalizer) - 200usize]; + ["Offset of field: emacs_env_25::vec_get"] + [::std::mem::offset_of!(emacs_env_25, vec_get) - 208usize]; + ["Offset of field: emacs_env_25::vec_set"] + [::std::mem::offset_of!(emacs_env_25, vec_set) - 216usize]; + ["Offset of field: emacs_env_25::vec_size"] + [::std::mem::offset_of!(emacs_env_25, vec_size) - 224usize]; +}; +unsafe extern "C" { pub fn emacs_module_init(ert: *mut emacs_runtime) -> ::std::os::raw::c_int; } #[repr(C)] From a7ad62334f20e5d44cdc6940ba63bdf9376f14f0 Mon Sep 17 00:00:00 2001 From: Jen-Chieh Shen Date: Mon, 25 Aug 2025 23:04:28 +0800 Subject: [PATCH 3/6] ci: Avoid building removed macos build --- .github/workflows/main.yml | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index efb4c06..a10c262 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -27,14 +27,15 @@ jobs: - windows-2022 - windows-2025 emacs-version: + - '26.3' - '27.2' - '28.2' - '29.2' - include: - - os: macos-12 - emacs-version: '26.3' - - os: ubuntu-20.04 - emacs-version: '26.3' + exclude: + - os: macos-latest + emacs-version: 26.3 + - os: macos-latest + emacs-version: 27.2 runs-on: ${{ matrix.os }} steps: - name: Set up Rust From 1e79f60da1882bf821c83ba848aa16eb952dc0a2 Mon Sep 17 00:00:00 2001 From: Jen-Chieh Shen Date: Mon, 25 Aug 2025 23:08:47 +0800 Subject: [PATCH 4/6] test: Now RefCell already borrowed --- test-module/tests/main.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test-module/tests/main.el b/test-module/tests/main.el index bef2f90..344e83d 100644 --- a/test-module/tests/main.el +++ b/test-module/tests/main.el @@ -275,7 +275,7 @@ ;; FIX: Don't rely on error's string representation. (should (equal (cdr (should-error (t/ref-cell-unwrap-and-call r (lambda () (t/ref-cell-inc r))) :type 'rust-error)) - '("already borrowed"))))) + '("RefCell already borrowed"))))) (ert-deftest transfer::type-check () (should-error (t/ref-cell-inc (t/vector-make 1 2)) From ec1ee6c749bc10bb2da10da93c73ebe0f104e727 Mon Sep 17 00:00:00 2001 From: Jen-Chieh Shen Date: Mon, 25 Aug 2025 23:19:59 +0800 Subject: [PATCH 5/6] ci: exclude macos --- .github/workflows/main.yml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index a10c262..85b0a85 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -32,9 +32,13 @@ jobs: - '28.2' - '29.2' exclude: - - os: macos-latest + - os: macos-13 emacs-version: 26.3 - - os: macos-latest + - os: macos-13 + emacs-version: 27.2 + - os: macos-14 + emacs-version: 26.3 + - os: macos-14 emacs-version: 27.2 runs-on: ${{ matrix.os }} steps: From d758069e07ec0833b2d77e89bbd1dd613fc7f3d5 Mon Sep 17 00:00:00 2001 From: JenChieh Date: Tue, 9 Sep 2025 01:52:27 -0700 Subject: [PATCH 6/6] ci: Revert tests for 26.3 --- .github/workflows/main.yml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 85b0a85..b645267 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -27,17 +27,12 @@ jobs: - windows-2022 - windows-2025 emacs-version: - - '26.3' - '27.2' - '28.2' - '29.2' exclude: - - os: macos-13 - emacs-version: 26.3 - os: macos-13 emacs-version: 27.2 - - os: macos-14 - emacs-version: 26.3 - os: macos-14 emacs-version: 27.2 runs-on: ${{ matrix.os }}