Только что проверил - оказывается, можно.
myinc.inc
static @SomeFunc();
static @SomeFunc()
{
emit const.pri 0;
}
main.p:
#include "myinc.inc"
@SomeFunc();
@SomeFunc()
{
emit const.pri 1;
}
main()
{
@SomeFunc();
}
Вывод pawndisasm:
00000000 halt 00000000
00000008 proc ; @SomeFunc
0000000c const.pri 00000000
00000014 zero.pri
00000018 retn
0000001c proc ; @SomeFunc
00000020 const.pri 00000001
00000028 zero.pri
0000002c retn
00000030 proc
00000034 push.c 00000000
0000003c call 0000001c ; @SomeFunc
00000044 zero.pri
00000048 retn
Как видно из листинга, создаются две public-функции с одинаковым именем. В таблице экспортируемых (public-) функций название "@SomeFunc" тоже дублируется. Нужно будет сообщить об этом баге...
Также интересно, что CallLocalFunction перед вызовом отыскивает нужную функцию по названию в таблице public-функций, причём использует не линейный, а бинарный поиск. Это означает, что из двух и более функций с одинаковым названием CallLocalFunction может вызвать любую из них. Например, сейчас она может вызывать вторую, а добавь или удали какую-нибудь ещё public-функцию, и вызываться будет первая.