コード例 #1
0
 private static InstructionImpl ImplementAsCall(MethodInfo callee)
 {
     return((context, gen) =>
     {
         var parameterTypes = callee.GetParameters().Select(p => ValueHelpers.ToWasmValueType(p.ParameterType)).ToArray();
         var paramTypesOnStack = context.Pop(parameterTypes.Length);
         for (int i = 0; i < parameterTypes.Length; i++)
         {
             if (parameterTypes[i] != paramTypesOnStack[i])
             {
                 throw new InvalidOperationException($"Expected type '{parameterTypes[i]}' on stack for argument {i} of method '{callee}', but got type '{paramTypesOnStack[i]}' instead.");
             }
         }
         gen.Emit(OpCodes.Call, callee);
         if (callee.ReturnType != null && callee.ReturnType != typeof(void))
         {
             context.Push(ValueHelpers.ToWasmValueType(callee.ReturnType));
         }
     });
 }
コード例 #2
0
 private object EvaluateConstExpr(SExpression expression, Type resultType)
 {
     return(EvaluateConstExpr(expression, ValueHelpers.ToWasmValueType(resultType)));
 }