mirror of
https://github.com/AdaCore/uwrap.git
synced 2026-02-12 13:06:34 -08:00
157 lines
3.7 KiB
Plaintext
157 lines
3.7 KiB
Plaintext
template w_CS do
|
|
var contents : text;
|
|
end;
|
|
|
|
template w_NamedEntity extends w_CS do
|
|
var name : text;
|
|
end;
|
|
|
|
template w_Unit extends w_NamedEntity do
|
|
|
|
end;
|
|
|
|
template w_Using extends w_CS do
|
|
var ref : text;
|
|
end;
|
|
|
|
template w_Namespace extends w_NamedEntity do
|
|
|
|
end;
|
|
|
|
template w_Function extends w_NamedEntity do
|
|
var returned_type : text;
|
|
var static : text;
|
|
end;
|
|
|
|
template w_FunctionCall extends w_Function do
|
|
var pre_call_decl : text;
|
|
var pre_call_stmt : text;
|
|
var call_decl_exp : text;
|
|
var call_decl : text;
|
|
var call_stmt : text;
|
|
var post_call_decl : text;
|
|
var post_call_stmt : text;
|
|
|
|
var return_stmt : text;
|
|
var call_assoc_list : text;
|
|
var call : text;
|
|
var call_name : text;
|
|
end;
|
|
|
|
template w_FunctionCallback extends w_Function do
|
|
|
|
end;
|
|
|
|
template w_DllImportFunction extends w_Function do
|
|
var dll : text;
|
|
end;
|
|
|
|
template w_Param extends w_NamedEntity do
|
|
var generate_formal: text;
|
|
|
|
var formal_text: text => defer (type_expr & " " & name);
|
|
var actual_text: text;
|
|
|
|
var type_expr: text;
|
|
|
|
var pre_call_decl: text;
|
|
var pre_call_stmt: text;
|
|
var call_decl: text;
|
|
var call_stmt: text;
|
|
var actual_value: text;
|
|
var post_call_decl: text;
|
|
var post_call_stmt: text;
|
|
var return_stmt: text;
|
|
var result_type_expr: text => "_";
|
|
|
|
var mode: text;
|
|
end;
|
|
|
|
template w_ParamCall extends w_Param do
|
|
|
|
end;
|
|
|
|
template w_ParamCallback extends w_Param do
|
|
|
|
end;
|
|
|
|
template w_ParamDll extends w_Param do
|
|
|
|
end;
|
|
|
|
|
|
template w_TypeExpr extends w_CS do
|
|
var txt : text;
|
|
end;
|
|
|
|
template w_Class extends w_NamedEntity do
|
|
|
|
end;
|
|
|
|
template wrappers2cs pick origin do
|
|
match w_DllImportFunction () do
|
|
weave (contents => defer (i"""
|
|
[DllImport("libproxy")]
|
|
private \e<static> extern \e<returned_type> \e<name> (\e<child (w_ParamDll ()).fold ("", @ & formal_text, @ & ", ")>);"""));
|
|
end;
|
|
|
|
match w_FunctionCall () do
|
|
weave (contents => defer (i"""
|
|
public \e<static> \e<returned_type> \e<name> (\e<child (w_ParamCall ()).fold ("", @ & formal_text, @ & ", ")>) {
|
|
\e<pre_call_decl>
|
|
\e<pre_call_stmt>
|
|
\e<call_decl_exp>
|
|
\e<call_decl>
|
|
\e<call_stmt>
|
|
\e<post_call_decl>
|
|
\e<post_call_stmt>
|
|
}"""));
|
|
end;
|
|
|
|
match p: w_ParamCall () and s: parent (w_FunctionCall) do
|
|
pick s weave (
|
|
pre_call_decl => defer (@ & p.pre_call_decl),
|
|
pre_call_stmt => defer (@ & p.pre_call_stmt),
|
|
call_decl => defer (@ & p.call_decl),
|
|
post_call_decl => defer (@ & p.post_call_decl),
|
|
post_call_stmt => defer (@ & p.post_call_stmt)
|
|
);
|
|
end;
|
|
|
|
match w_Class () do
|
|
weave (contents => defer (i"""
|
|
public class \e<name> {
|
|
public System.IntPtr handle;
|
|
|
|
\e<child (\ w_NamedEntity ()).fold ("", @ & contents, @ & "\n\n")>
|
|
}"""));
|
|
end;
|
|
|
|
match w_Namespace () do
|
|
weave (contents => defer (i"""
|
|
namespace \e<name> {
|
|
public static class \e<name>Module {
|
|
\e<child (\ w_Function ()).fold ("", @ & contents & "\n")>
|
|
}
|
|
|
|
\e<child (\ w_Class ()).fold ("", @ & contents & "\n")>
|
|
}"""));
|
|
end;
|
|
|
|
match w_Unit () do
|
|
wrap standard.file (defer (name & ".cs"), defer (contents));
|
|
|
|
weave (contents => defer (i"""
|
|
using System.Runtime.InteropServices;
|
|
|
|
\e<child (w_Using ()).fold ("", @ & "using " & ref & ";\n")>
|
|
namespace \e<name> {
|
|
public static class \e<name>Unit {
|
|
\e<child (w_Function ()).filter (\ true).fold ("", @ & contents & "\n")>
|
|
}
|
|
|
|
\e<child (w_Class ()).fold ("", @ & contents & "\n")>
|
|
}"""));
|
|
end;
|
|
end;
|