7 public string Emit (char c
) {
11 return $"(int)margs->iargs [{iarg - 1}]";
14 return $"*(float*)&margs->fargs [FIDX ({farg - 1})]";
17 return $"get_long_arg (margs, {iarg - 2})";
20 return $"margs->fargs [FIDX ({farg - 1})]";
22 throw new Exception ("IDK how to handle " + c
);
28 static string[] cookies
= new string[] {
122 static string TypeToSigType (char c
) {
124 case 'V': return "void";
125 case 'I': return "int";
126 case 'L': return "gint64";
127 case 'F': return "float";
128 case 'D': return "double";
130 throw new Exception ("Can't handle " + c
);
134 static void Main () {
135 Console
.WriteLine ("/*");
136 Console
.WriteLine ("* DON'T EDIT THIS FILE");
137 Console
.WriteLine ("* This file was generated by m2n-gen.cs - use it instead.");
138 Console
.WriteLine ("*/");
139 foreach (var c
in cookies
) {
140 Console
.WriteLine ("static void");
141 Console
.WriteLine ($"wasm_invoke_{c.ToLower ()} (void *target_func, InterpMethodArguments *margs)");
142 Console
.WriteLine ("{");
145 Console
.Write ($"\ttypedef {TypeToSigType (c [0])} (*T)(");
146 for (int i
= 1; i
< c
.Length
; ++i
) {
149 Console
.Write (", ");
150 Console
.Write ($"{TypeToSigType (p)} arg_{i - 1}");
153 Console
.Write ("void");
155 Console
.WriteLine (");\n\tT func = (T)target_func;");
157 var ctx
= new EmitCtx ();
159 Console
.Write ("\t");
161 Console
.Write ($"{TypeToSigType (c [0])} res = ");
163 Console
.Write ("func (");
164 for (int i
= 1; i
< c
.Length
; ++i
) {
167 Console
.Write (", ");
168 Console
.Write (ctx
.Emit (p
));
170 Console
.WriteLine (");");
173 Console
.WriteLine ($"\t*({TypeToSigType (c [0])}*)margs->retval = res;");
175 Console
.WriteLine ("\n}\n");
178 Console
.WriteLine ("static void\nicall_trampoline_dispatch (const char *cookie, void *target_func, InterpMethodArguments *margs)");
179 Console
.WriteLine ("{");
180 for (int i
= 0; i
< cookies
.Length
; ++i
) {
182 Console
.Write ("\t");
184 Console
.Write ("else ");
185 Console
.WriteLine ($"if (!strcmp (\"{c}\", cookie))");
186 Console
.WriteLine ($"\t\twasm_invoke_{c.ToLower ()} (target_func, margs);");
188 Console
.WriteLine ("\telse {");
189 Console
.WriteLine ("\t\tprintf (\"CANNOT HANDLE COOKIE %s\\n\", cookie);");
190 Console
.WriteLine ("\t\tg_assert (0);");
191 Console
.WriteLine ("\t}");
192 Console
.WriteLine ("}");