Macros rustc——在解析外部块内的宏扩展时,pretty expanded会使用我所有的RAM

Macros rustc——在解析外部块内的宏扩展时,pretty expanded会使用我所有的RAM,macros,rust,Macros,Rust,我正在编写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_

我正在编写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;
但是,如果我不立即执行
^C
,运行
rustc——相当扩展的
来测试它会在几秒钟内清空计算机的RAM

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

我做错了什么

rustc--version--verbose
输出:

rustc 1.30.0-每晚(3bc2ca7e4 2018-09-20)
二进制代码:rustc
提交哈希:3bc2ca7e4f8507f82a4c357ee19300166bcd8099
提交日期:2018-09-20
主机:x86_64-unknown-linux-gnu
发布时间:1.30.0-每晚
LLVM版本:8.0

在这个版本中,带有MCVE文件的命令
rustc--pretty expanded-Z unstable options
在我的计算机上重现了这个问题。

这是一个编译器错误:。从1.31开始,它在比1.31.0-nightly 4efdc04a5 2018-10-06更新的夜间进行固定。

您的
concat\u标识将不起作用。我怀疑代码中的其他地方可能存在一些(相互)递归宏,而这个声明并不是(直接)触发问题的原因。我急于键入问题,因此缺少所有细节-请注意,下次匆忙对您没有帮助,事实上,这可能会让事情花更长的时间。我可以复制这个。考虑到删除
extern
块会导致编译器错误,这似乎是外部
宏的错误。你应该这样报告-