#ats
#ats
Вопрос:
Есть ли способ указать ABI функции непосредственно в ATS? Например, я хочу сделать это:
%{^
typedef uint64_t __attribute__((ms_abi)) (*function)(uint16_t*);
%}
но в ATS вместо C.
Редактировать: Вот моя первоначальная проблема:
%{^
struct SimpleTextOutputInterface;
typedef uint64_t __attribute__((ms_abi)) (*EfiTextString)(struct SimpleTextOutputInterface*, uint16_t*);
%}
typedef EfiTextString = $extype"EfiTextString"
vtypedef SimpleTextOutputInterface =
@{ reset = EfiTextReset
, output_string = [l:addr] (EfiTextString@l | ptr l)
}
и я хочу вызвать output_string
с ms_abi
помощью. Я могу сделать это на C, но я не знаю, возможно ли это обойтись без C.
Комментарии:
1. Я хочу подчеркнуть, что ATS не предназначена для замены C; предполагается, что она используется вместе с C (то есть, так называемое совместное программирование ATS и C). Если вы покажете мне, как тип ‘function’ должен использоваться в C, тогда я, возможно, смогу что-то предложить.
2. @HongweiXi: Я отредактировал вопрос, чтобы показать свою первоначальную проблему. Есть ли способ вызвать функцию с другим ABI в ATS?
3. Теперь я вижу проблему. Я бы определил EfiTextString_app для применения EfiTextString к двум аргументам, а затем реализовал EfiTextString_app как макрос в C.