Укажите ABI функции

#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.