名称重整¶
仍不完善
fn foo(int);
fn bar(int, int);
重整分为几种类型,以上面的函数为例:
- 不重整,函数名直接作为导出名
foobar - 函数名后添加参数数量
foo$1bar$2 - 函数名后添加参数类型
foo$intbar$int$int
基本规则¶
所有重整后的名称以 $$ 开头,接着是一个字母标识符,表示名称的类型。类型标识符如下:
N表示命名空间(namespace)S表示结构体(struct)C表示类(class)F表示函数(function)E表示枚举(enum)V表示变量(variable)T表示内部类型(inner type)
在类型标识符之后,跟随名称的长度和名称本身。
示例¶
<namespace>foo重整为$$N3foo<namespace>foo.<function>bar重整为$$N3fooF3bar
函数重整¶
对于函数,需要在重整后的函数名之后添加参数信息和返回值信息。
参数¶
重整参数时,首先重整参数类型,然后拼接上参数名,最后加上参数个数。
例如:
<namespace>foo.<class>bar重整为N3fooC3bar- 参数名
arg拼接为N3fooC3bar3arg
返回值¶
在所有参数之后,拼接返回值类型。如果函数没有返回值,则使用 T4void 表示返回 void 类型。
示例¶
-
没有返回值的函数
namespace foo { class bar {} fn my_func(bar a); }-
my_func重整为$$N3fooF7my_func1N3fooC3bar1aT4void解释:
-N3foo表示命名空间foo-F7my_func表示函数my_func(名称长度为 7) -1N3fooC3bar1a表示一个参数,类型为N3fooC3bar(命名空间foo下的类bar),参数名为a-T4void表示函数没有返回值 -
有基本类型参数的函数
namespace foo { fn my_func(int32 a); }-
my_func重整为$$N3fooF7my_func1T5int321aT4void解释:
-N3foo表示命名空间foo-F7my_func表示函数my_func(名称长度为 7) -1T5int321a表示一个参数,类型为int32,参数名为a-T4void表示函数没有返回值 -
有返回值的函数
namespace foo { fn my_func(int32 a) -> int64; }-
my_func重整为$$N3fooF7my_func1T5int321aT5int64解释:
-N3foo表示命名空间foo-F7my_func表示函数my_func(名称长度为 7) -1T5int321a表示一个参数,类型为int32,参数名为a-T5int64表示返回值类型为int64
其他示例¶
namespace math {
struct vector {}
fn add(vector a, vector b) -> vector;
}
add重整为$$N4mathF3add2N4mathS6vector1aN4mathS6vector1bN4mathS6vector
解释:
N4math表示命名空间mathF3add表示函数add(名称长度为 3)2N4mathS6vector1aN4mathS6vector1b表示两个参数,第一个参数类型为N4mathS6vector(命名空间math下的结构体vector),参数名为a,第二个参数类型相同,参数名为bN4mathS6vector表示返回值类型为math::vector
namespace app {
enum color { red, green, blue }
fn set_color(color c);
}
set_color重整为$$N3appF9set_color1N3appE5color1cT4void
解释:
N3app表示命名空间appF9set_color表示函数set_color(名称长度为 9)1N3appE5color1c表示一个参数,类型为N3appE5color(命名空间app下的枚举color),参数名为cT4void表示函数没有返回值