gpt4 book ai didi

macros - rustc --pretty expanded 在解析 extern block 内的宏扩展时使用我所有的 RAM

转载 作者:行者123 更新时间:2023-11-29 08:07:22 24 4
gpt4 key购买 nike

我正在编写 Lua 的 Rust 实现,我遇到了一堆函数定义,这些函数定义一遍又一遍或多或少是相同的东西。我决定试试运气,编写一个宏来为我完成这项工作:

#![feature(macros_in_extern)]
#![feature(concat_idents)]

macro_rules! lua_func {
($name: ident, $ret: ty, $var: ident, $type: ty) => {
let fn_name = concat_idents!(lua_, $name);
pub fn fn_name (L: *mut lua_State, $var: $type) -> $ret
};
}

extern "C" {
lua_func!(toboolean, bool, idx, int);
}

当我这样做的时候

lua_func!(toboolean, bool, idx, int);

我希望它能扩展到

pub fn lua_toboolean (L: *mut lua_State, idx: int) -> bool;

但是运行 rustc --pretty expanded 来测试它会在几秒钟内清空我的计算机内存,如果我不立即执行 ^C

我说这个宏是问题的原因,因为当我删除宏的使用时,命令成功运行并输出所有宏展开的文本。

我做错了什么?

rustc --version --verbose 输出:

rustc 1.30.0-nightly (3bc2ca7e4 2018-09-20)
binary: rustc
commit-hash: 3bc2ca7e4f8507f82a4c357ee19300166bcd8099
commit-date: 2018-09-20
host: x86_64-unknown-linux-gnu
release: 1.30.0-nightly
LLVM version: 8.0

对于这个版本,带有 MCVE 文件的命令 rustc --pretty expanded -Z unstable-options 在我的电脑上重现了这个问题。

最佳答案

这是一个编译器错误:rust-lang/rust#54441 .它从 Rust 1.31 开始修复,并且在比 1.31.0-nightly 4efdc04a5 2018-10-06 更新的 nightlys 中得到修复。

关于macros - rustc --pretty expanded 在解析 extern block 内的宏扩展时使用我所有的 RAM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52447164/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com