code: function ccallFunc(func, returnType, argTypes, args) {
    var stack = 0;
    function toC(value, type) {
      if (type == 'string') {
        if (value === null || value === undefined || value === 0) return 0; // null string
        if (!stack) stack = Runtime.stackSave();
        var ret = Runtime.stackAlloc(value.length+1);
        writeStringToMemory(value, ret);
        return ret;
      } else if (type == 'array') {
        if (!stack) stack = Runtime.stackSave();
        var ret = Runtime.stackAlloc(value.length);
        writeArrayToMemory(value, ret);
        return ret;
      }
      return value;
    }
    function fromC(value, type) {
      if (type == 'string') {
        return Pointer_stringify(value);
      }
      assert(type != 'array');
      return value;
    }
    var i = 0;
    var cArgs = args ? args.map(function(arg) {
      return toC(arg, argTypes[i++]);
    }) : [];
    var ret = fromC(func.apply(null, cArgs), returnType);
    if (stack) Runtime.stackRestore(stack);
    return ret;
  }
docs: Internal function that does a C call using a function, not an identifier