widl: Always use new-style format strings in interpreted mode.
This commit is contained in:
parent
7cd0f395ca
commit
896b4f05ea
6 changed files with 82 additions and 147 deletions
|
@ -285,7 +285,6 @@ static void write_function_stub( const type_t *iface, const var_t *func,
|
|||
static void write_serialize_function(FILE *file, const type_t *type, const type_t *iface,
|
||||
const char *func_name, const char *ret_type)
|
||||
{
|
||||
enum stub_mode mode = get_stub_mode();
|
||||
static int emitted_pickling_info;
|
||||
|
||||
if (iface && !type->typestring_offset)
|
||||
|
@ -296,7 +295,7 @@ static void write_serialize_function(FILE *file, const type_t *type, const type_
|
|||
return;
|
||||
}
|
||||
|
||||
if (!emitted_pickling_info && iface && mode != MODE_Os)
|
||||
if (!emitted_pickling_info && iface && interpreted_mode)
|
||||
{
|
||||
fprintf(file, "static const MIDL_TYPE_PICKLING_INFO __MIDL_TypePicklingInfo =\n");
|
||||
fprintf(file, "{\n");
|
||||
|
@ -318,9 +317,9 @@ static void write_serialize_function(FILE *file, const type_t *type, const type_
|
|||
|
||||
fprintf(file, "{\n");
|
||||
fprintf(file, " %sNdrMesType%s%s(\n", ret_type ? "return " : "", func_name,
|
||||
mode != MODE_Os ? "2" : "");
|
||||
interpreted_mode ? "2" : "");
|
||||
fprintf(file, " IDL_handle,\n");
|
||||
if (mode != MODE_Os)
|
||||
if (interpreted_mode)
|
||||
fprintf(file, " (MIDL_TYPE_PICKLING_INFO*)&__MIDL_TypePicklingInfo,\n");
|
||||
fprintf(file, " &%s_StubDesc,\n", iface->name);
|
||||
fprintf(file, " (PFORMAT_STRING)&__MIDL_TypeFormatString.Format[%u],\n",
|
||||
|
@ -418,7 +417,7 @@ static void write_stubdescriptor(type_t *iface, int expr_eval_routines)
|
|||
print_client("0,\n");
|
||||
print_client("__MIDL_TypeFormatString.Format,\n");
|
||||
print_client("1, /* -error bounds_check flag */\n");
|
||||
print_client("0x%x, /* Ndr library version */\n", get_stub_mode() == MODE_Oif ? 0x50002 : 0x10001);
|
||||
print_client("0x%x, /* Ndr library version */\n", interpreted_mode ? 0x50002 : 0x10001);
|
||||
print_client("0,\n");
|
||||
print_client("0x50200ca, /* MIDL Version 5.2.202 */\n");
|
||||
print_client("0,\n");
|
||||
|
|
|
@ -61,7 +61,7 @@ static void write_stubdesc(int expr_eval_routines)
|
|||
print_proxy( "{0}, 0, 0, %s, 0,\n", expr_eval_routines ? "ExprEvalRoutines" : "0");
|
||||
print_proxy( "__MIDL_TypeFormatString.Format,\n");
|
||||
print_proxy( "1, /* -error bounds_check flag */\n");
|
||||
print_proxy( "0x%x, /* Ndr library version */\n", get_stub_mode() == MODE_Oif ? 0x50002 : 0x10001);
|
||||
print_proxy( "0x%x, /* Ndr library version */\n", interpreted_mode ? 0x50002 : 0x10001);
|
||||
print_proxy( "0,\n");
|
||||
print_proxy( "0x50200ca, /* MIDL Version 5.2.202 */\n");
|
||||
print_proxy( "0,\n");
|
||||
|
@ -193,7 +193,7 @@ static void gen_proxy(type_t *iface, const var_t *func, int idx,
|
|||
indent = 0;
|
||||
if (is_interpreted_func( iface, func ))
|
||||
{
|
||||
if (get_stub_mode() == MODE_Oif && !is_callas( func->attrs )) return;
|
||||
if (!is_callas( func->attrs )) return;
|
||||
write_type_decl_left(proxy, &retval->declspec);
|
||||
print_proxy( " %s %s_%s_Proxy(\n", callconv, iface->name, get_name(func));
|
||||
write_args(proxy, args, iface->name, 1, TRUE, NAME_DEFAULT);
|
||||
|
@ -519,7 +519,6 @@ static int write_proxy_methods(type_t *iface, int skip)
|
|||
if (skip || (is_local(func->attrs) && !get_callas_source(iface, func)))
|
||||
print_proxy( "0, /* %s::%s */\n", iface->name, get_name(func));
|
||||
else if (is_interpreted_func( iface, func ) &&
|
||||
get_stub_mode() == MODE_Oif &&
|
||||
!is_local( func->attrs ) &&
|
||||
type_iface_get_inherit(iface))
|
||||
print_proxy( "(void *)-1, /* %s::%s */\n", iface->name, get_name(func));
|
||||
|
@ -556,7 +555,7 @@ static int write_stub_methods(type_t *iface, int skip)
|
|||
if (i) fprintf(proxy,",\n");
|
||||
if (skip || missing) print_proxy("STUB_FORWARDING_FUNCTION");
|
||||
else if (is_interpreted_func( iface, func ))
|
||||
print_proxy( "(PRPC_STUB_FUNCTION)%s", get_stub_mode() == MODE_Oif ? "NdrStubCall2" : "NdrStubCall" );
|
||||
print_proxy( "(PRPC_STUB_FUNCTION)%s", interpreted_mode ? "NdrStubCall2" : "NdrStubCall" );
|
||||
else print_proxy( "%s_%s_Stub", iface->name, fname);
|
||||
i++;
|
||||
}
|
||||
|
@ -641,7 +640,7 @@ static void write_proxy(type_t *iface, unsigned int *proc_offset)
|
|||
print_proxy( "};\n\n" );
|
||||
|
||||
/* proxy info */
|
||||
if (get_stub_mode() == MODE_Oif)
|
||||
if (interpreted_mode)
|
||||
{
|
||||
print_proxy( "static const MIDL_STUBLESS_PROXY_INFO %s_ProxyInfo =\n", iface->name );
|
||||
print_proxy( "{\n" );
|
||||
|
@ -658,13 +657,13 @@ static void write_proxy(type_t *iface, unsigned int *proc_offset)
|
|||
|
||||
/* proxy vtable */
|
||||
print_proxy( "static %sCINTERFACE_PROXY_VTABLE(%d) _%sProxyVtbl =\n",
|
||||
(get_stub_mode() != MODE_Os || need_delegation_indirect(iface)) ? "" : "const ",
|
||||
(interpreted_mode || need_delegation_indirect(iface)) ? "" : "const ",
|
||||
count, iface->name);
|
||||
print_proxy( "{\n");
|
||||
indent++;
|
||||
print_proxy( "{\n");
|
||||
indent++;
|
||||
if (get_stub_mode() == MODE_Oif) print_proxy( "&%s_ProxyInfo,\n", iface->name );
|
||||
if (interpreted_mode) print_proxy( "&%s_ProxyInfo,\n", iface->name );
|
||||
print_proxy( "&IID_%s,\n", iface->name);
|
||||
indent--;
|
||||
print_proxy( "},\n");
|
||||
|
@ -785,7 +784,7 @@ int need_inline_stubs(const type_t *iface)
|
|||
{
|
||||
const statement_t *stmt;
|
||||
|
||||
if (get_stub_mode() == MODE_Os) return 1;
|
||||
if (!interpreted_mode) return 1;
|
||||
|
||||
STATEMENTS_FOR_EACH_FUNC( stmt, type_iface_get_stmts(iface) )
|
||||
{
|
||||
|
@ -801,7 +800,7 @@ static int need_proxy_and_inline_stubs(const type_t *iface)
|
|||
const statement_t *stmt;
|
||||
|
||||
if (!need_proxy( iface )) return 0;
|
||||
if (get_stub_mode() == MODE_Os) return 1;
|
||||
if (!interpreted_mode) return 1;
|
||||
|
||||
STATEMENTS_FOR_EACH_FUNC( stmt, type_iface_get_stmts(iface) )
|
||||
{
|
||||
|
@ -895,10 +894,10 @@ static void write_proxy_routines(const statement_list_t *stmts)
|
|||
const type_t * delegate_to;
|
||||
|
||||
print_proxy( "#ifndef __REDQ_RPCPROXY_H_VERSION__\n");
|
||||
print_proxy( "#define __REQUIRED_RPCPROXY_H_VERSION__ %u\n", get_stub_mode() == MODE_Oif ? 475 : 440);
|
||||
print_proxy( "#define __REQUIRED_RPCPROXY_H_VERSION__ %u\n", interpreted_mode ? 475 : 440);
|
||||
print_proxy( "#endif\n");
|
||||
print_proxy( "\n");
|
||||
if (get_stub_mode() == MODE_Oif) print_proxy( "#define USE_STUBLESS_PROXY\n");
|
||||
if (interpreted_mode) print_proxy( "#define USE_STUBLESS_PROXY\n");
|
||||
print_proxy( "#include \"rpcproxy.h\"\n");
|
||||
print_proxy( "#ifndef __RPCPROXY_H_VERSION__\n");
|
||||
print_proxy( "#error This code needs a newer version of rpcproxy.h\n");
|
||||
|
@ -1002,7 +1001,7 @@ static void write_proxy_routines(const statement_list_t *stmts)
|
|||
fprintf(proxy, "}\n");
|
||||
fprintf(proxy, "\n");
|
||||
|
||||
table_version = get_stub_mode() == MODE_Oif ? 2 : 1;
|
||||
table_version = interpreted_mode ? 2 : 1;
|
||||
for (i = 0; i < count; i++)
|
||||
{
|
||||
if (type_iface_get_async_iface(interfaces[i]) != interfaces[i]) continue;
|
||||
|
|
|
@ -273,7 +273,7 @@ static void write_dispatchtable(type_t *iface)
|
|||
{
|
||||
var_t *func = stmt->u.var;
|
||||
if (is_interpreted_func( iface, func ))
|
||||
print_server("%s,\n", get_stub_mode() == MODE_Oif ? "NdrServerCall2" : "NdrServerCall");
|
||||
print_server("NdrServerCall2,\n");
|
||||
else
|
||||
print_server("%s_%s,\n", iface->name, get_name(func));
|
||||
method_count++;
|
||||
|
@ -380,7 +380,7 @@ static void write_stubdescriptor(type_t *iface, int expr_eval_routines)
|
|||
print_server("0,\n");
|
||||
print_server("__MIDL_TypeFormatString.Format,\n");
|
||||
print_server("1, /* -error bounds_check flag */\n");
|
||||
print_server("0x%x, /* Ndr library version */\n", get_stub_mode() == MODE_Oif ? 0x50002 : 0x10001);
|
||||
print_server("0x%x, /* Ndr library version */\n", interpreted_mode ? 0x50002 : 0x10001);
|
||||
print_server("0,\n");
|
||||
print_server("0x50200ca, /* MIDL Version 5.2.202 */\n");
|
||||
print_server("0,\n");
|
||||
|
|
|
@ -1242,7 +1242,7 @@ static unsigned int write_new_procformatstring_type(FILE *file, int indent, cons
|
|||
}
|
||||
|
||||
static unsigned int write_old_procformatstring_type(FILE *file, int indent, const var_t *var,
|
||||
int is_return, int is_interpreted)
|
||||
int is_return)
|
||||
{
|
||||
unsigned int size;
|
||||
|
||||
|
@ -1281,7 +1281,7 @@ static unsigned int write_old_procformatstring_type(FILE *file, int indent, cons
|
|||
{
|
||||
unsigned short offset = var->typestring_offset;
|
||||
|
||||
if (!is_interpreted && is_array(var->declspec.type)
|
||||
if (is_array(var->declspec.type)
|
||||
&& type_array_is_decl_as_ptr(var->declspec.type)
|
||||
&& type_array_get_ptr_tfsoff(var->declspec.type))
|
||||
offset = var->declspec.type->typestring_offset;
|
||||
|
@ -1306,8 +1306,6 @@ static unsigned int write_old_procformatstring_type(FILE *file, int indent, cons
|
|||
int is_interpreted_func( const type_t *iface, const var_t *func )
|
||||
{
|
||||
const char *str;
|
||||
const var_t *var;
|
||||
const var_list_t *args = type_function_get_args( func->declspec.type );
|
||||
const type_t *ret_type = type_function_get_rettype( func->declspec.type );
|
||||
|
||||
if (type_get_type( ret_type ) == TYPE_BASIC)
|
||||
|
@ -1327,30 +1325,9 @@ int is_interpreted_func( const type_t *iface, const var_t *func )
|
|||
break;
|
||||
}
|
||||
}
|
||||
if (get_stub_mode() != MODE_Oif && args)
|
||||
{
|
||||
LIST_FOR_EACH_ENTRY( var, args, const var_t, entry )
|
||||
switch (type_get_type( var->declspec.type ))
|
||||
{
|
||||
case TYPE_BASIC:
|
||||
switch (type_basic_get_type( var->declspec.type ))
|
||||
{
|
||||
/* floating point arguments are not supported in Oi mode */
|
||||
case TYPE_BASIC_FLOAT: return 0;
|
||||
case TYPE_BASIC_DOUBLE: return 0;
|
||||
default: break;
|
||||
}
|
||||
break;
|
||||
/* unions passed by value are not supported in Oi mode */
|
||||
case TYPE_UNION: return 0;
|
||||
case TYPE_ENCAPSULATED_UNION: return 0;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
|
||||
if ((str = get_attrp( func->attrs, ATTR_OPTIMIZE ))) return !strcmp( str, "i" );
|
||||
if ((str = get_attrp( iface->attrs, ATTR_OPTIMIZE ))) return !strcmp( str, "i" );
|
||||
return (get_stub_mode() != MODE_Os);
|
||||
return interpreted_mode;
|
||||
}
|
||||
|
||||
static void write_proc_func_interp( FILE *file, int indent, const type_t *iface,
|
||||
|
@ -1364,18 +1341,22 @@ static void write_proc_func_interp( FILE *file, int indent, const type_t *iface,
|
|||
var_t *retval = type_function_get_retval( func->declspec.type );
|
||||
const var_t *handle_var = get_func_handle_var( iface, func, &explicit_fc, &implicit_fc );
|
||||
unsigned char oi_flags = Oi_HAS_RPCFLAGS | Oi_USE_NEW_INIT_ROUTINES;
|
||||
unsigned char oi2_flags = get_func_oi2_flags( func );
|
||||
unsigned char ext_flags = 0;
|
||||
unsigned int rpc_flags = get_rpc_flags( func->attrs );
|
||||
unsigned int nb_args = 0;
|
||||
unsigned int stack_size = 0;
|
||||
unsigned int stack_offset = 0;
|
||||
unsigned short param_num = 0;
|
||||
unsigned short handle_stack_offset = 0;
|
||||
unsigned short handle_param_num = 0;
|
||||
unsigned int size;
|
||||
|
||||
if (is_full_pointer_function( func )) oi_flags |= Oi_FULL_PTR_USED;
|
||||
if (is_object( iface ))
|
||||
{
|
||||
oi_flags |= Oi_OBJECT_PROC;
|
||||
if (get_stub_mode() == MODE_Oif) oi_flags |= Oi_OBJ_USE_V2_INTERPRETER;
|
||||
oi_flags |= Oi_OBJECT_PROC | Oi_OBJ_USE_V2_INTERPRETER;
|
||||
stack_offset = pointer_size;
|
||||
stack_size += pointer_size;
|
||||
}
|
||||
|
||||
|
@ -1441,93 +1422,62 @@ static void write_proc_func_interp( FILE *file, int indent, const type_t *iface,
|
|||
}
|
||||
}
|
||||
|
||||
if (get_stub_mode() == MODE_Oif)
|
||||
if (is_attr( func->attrs, ATTR_NOTIFY )) ext_flags |= 0x08; /* HasNotify */
|
||||
if (is_attr( func->attrs, ATTR_NOTIFYFLAG )) ext_flags |= 0x10; /* HasNotify2 */
|
||||
if (iface == type_iface_get_async_iface(iface)) oi2_flags |= 0x20;
|
||||
|
||||
size = get_function_buffer_size( func, PASS_IN );
|
||||
print_file( file, indent, "NdrFcShort(0x%x),\t/* client buffer = %u */\n", size, size );
|
||||
size = get_function_buffer_size( func, PASS_OUT );
|
||||
print_file( file, indent, "NdrFcShort(0x%x),\t/* server buffer = %u */\n", size, size );
|
||||
print_file( file, indent, "0x%02x,\n", oi2_flags );
|
||||
print_file( file, indent, "0x%02x,\t/* %u params */\n", nb_args, nb_args );
|
||||
print_file( file, indent, "0x%02x,\n", pointer_size == 8 ? 10 : 8 );
|
||||
print_file( file, indent, "0x%02x,\n", ext_flags );
|
||||
print_file( file, indent, "NdrFcShort(0x0),\n" ); /* server corr hint */
|
||||
print_file( file, indent, "NdrFcShort(0x0),\n" ); /* client corr hint */
|
||||
print_file( file, indent, "NdrFcShort(0x0),\n" ); /* FIXME: notify index */
|
||||
*offset += 14;
|
||||
if (pointer_size == 8)
|
||||
{
|
||||
unsigned int stack_offset = is_object(iface) ? pointer_size : 0;
|
||||
unsigned char oi2_flags = get_func_oi2_flags( func );
|
||||
unsigned char ext_flags = 0;
|
||||
unsigned int size;
|
||||
unsigned short pos = 0, fpu_mask = 0;
|
||||
|
||||
if (is_attr( func->attrs, ATTR_NOTIFY )) ext_flags |= 0x08; /* HasNotify */
|
||||
if (is_attr( func->attrs, ATTR_NOTIFYFLAG )) ext_flags |= 0x10; /* HasNotify2 */
|
||||
if (iface == type_iface_get_async_iface(iface)) oi2_flags |= 0x20;
|
||||
|
||||
size = get_function_buffer_size( func, PASS_IN );
|
||||
print_file( file, indent, "NdrFcShort(0x%x),\t/* client buffer = %u */\n", size, size );
|
||||
size = get_function_buffer_size( func, PASS_OUT );
|
||||
print_file( file, indent, "NdrFcShort(0x%x),\t/* server buffer = %u */\n", size, size );
|
||||
print_file( file, indent, "0x%02x,\n", oi2_flags );
|
||||
print_file( file, indent, "0x%02x,\t/* %u params */\n", nb_args, nb_args );
|
||||
print_file( file, indent, "0x%02x,\n", pointer_size == 8 ? 10 : 8 );
|
||||
print_file( file, indent, "0x%02x,\n", ext_flags );
|
||||
print_file( file, indent, "NdrFcShort(0x0),\n" ); /* server corr hint */
|
||||
print_file( file, indent, "NdrFcShort(0x0),\n" ); /* client corr hint */
|
||||
print_file( file, indent, "NdrFcShort(0x0),\n" ); /* FIXME: notify index */
|
||||
*offset += 14;
|
||||
if (pointer_size == 8)
|
||||
if (is_object( iface )) pos += 2;
|
||||
if (args) LIST_FOR_EACH_ENTRY( var, args, var_t, entry )
|
||||
{
|
||||
unsigned short pos = 0, fpu_mask = 0;
|
||||
|
||||
if (is_object( iface )) pos += 2;
|
||||
if (args) LIST_FOR_EACH_ENTRY( var, args, var_t, entry )
|
||||
if (type_get_type( var->declspec.type ) == TYPE_BASIC)
|
||||
{
|
||||
if (type_get_type( var->declspec.type ) == TYPE_BASIC)
|
||||
switch (type_basic_get_type( var->declspec.type ))
|
||||
{
|
||||
switch (type_basic_get_type( var->declspec.type ))
|
||||
{
|
||||
case TYPE_BASIC_FLOAT: fpu_mask |= 1 << pos; break;
|
||||
case TYPE_BASIC_DOUBLE: fpu_mask |= 2 << pos; break;
|
||||
default: break;
|
||||
}
|
||||
case TYPE_BASIC_FLOAT: fpu_mask |= 1 << pos; break;
|
||||
case TYPE_BASIC_DOUBLE: fpu_mask |= 2 << pos; break;
|
||||
default: break;
|
||||
}
|
||||
pos += 2;
|
||||
if (pos >= 16) break;
|
||||
}
|
||||
print_file( file, indent, "NdrFcShort(0x%x),\n", fpu_mask ); /* floating point mask */
|
||||
*offset += 2;
|
||||
}
|
||||
|
||||
/* emit argument data */
|
||||
if (args) LIST_FOR_EACH_ENTRY( var, args, var_t, entry )
|
||||
{
|
||||
if (explicit_fc == FC_BIND_PRIMITIVE && var == handle_var)
|
||||
{
|
||||
stack_offset += pointer_size;
|
||||
continue;
|
||||
}
|
||||
print_file( file, 0, "/* %u (parameter %s) */\n", *offset, var->name );
|
||||
*offset += write_new_procformatstring_type(file, indent, var, FALSE, &stack_offset);
|
||||
}
|
||||
|
||||
/* emit return value data */
|
||||
if (!is_void( retval->declspec.type ))
|
||||
{
|
||||
print_file( file, 0, "/* %u (return value) */\n", *offset );
|
||||
*offset += write_new_procformatstring_type(file, indent, retval, TRUE, &stack_offset);
|
||||
pos += 2;
|
||||
if (pos >= 16) break;
|
||||
}
|
||||
print_file( file, indent, "NdrFcShort(0x%x),\n", fpu_mask ); /* floating point mask */
|
||||
*offset += 2;
|
||||
}
|
||||
else /* old style */
|
||||
{
|
||||
/* emit argument data */
|
||||
if (args) LIST_FOR_EACH_ENTRY( var, args, var_t, entry )
|
||||
{
|
||||
print_file( file, 0, "/* %u (parameter %s) */\n", *offset, var->name );
|
||||
*offset += write_old_procformatstring_type(file, indent, var, FALSE, TRUE);
|
||||
}
|
||||
|
||||
/* emit return value data */
|
||||
if (is_void(retval->declspec.type))
|
||||
/* emit argument data */
|
||||
if (args) LIST_FOR_EACH_ENTRY( var, args, var_t, entry )
|
||||
{
|
||||
if (explicit_fc == FC_BIND_PRIMITIVE && var == handle_var)
|
||||
{
|
||||
print_file(file, 0, "/* %u (void) */\n", *offset);
|
||||
print_file(file, indent, "0x5b,\t/* FC_END */\n");
|
||||
print_file(file, indent, "0x5c,\t/* FC_PAD */\n");
|
||||
*offset += 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
print_file( file, 0, "/* %u (return value) */\n", *offset );
|
||||
*offset += write_old_procformatstring_type(file, indent, retval, TRUE, TRUE);
|
||||
stack_offset += pointer_size;
|
||||
continue;
|
||||
}
|
||||
print_file( file, 0, "/* %u (parameter %s) */\n", *offset, var->name );
|
||||
*offset += write_new_procformatstring_type(file, indent, var, FALSE, &stack_offset);
|
||||
}
|
||||
|
||||
/* emit return value data */
|
||||
if (!is_void( retval->declspec.type ))
|
||||
{
|
||||
print_file( file, 0, "/* %u (return value) */\n", *offset );
|
||||
*offset += write_new_procformatstring_type(file, indent, retval, TRUE, &stack_offset);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1550,7 +1500,7 @@ static void write_procformatstring_func( FILE *file, int indent, const type_t *i
|
|||
LIST_FOR_EACH_ENTRY( var, type_function_get_args(func->declspec.type), const var_t, entry )
|
||||
{
|
||||
print_file( file, 0, "/* %u (parameter %s) */\n", *offset, var->name );
|
||||
*offset += write_old_procformatstring_type(file, indent, var, FALSE, FALSE);
|
||||
*offset += write_old_procformatstring_type(file, indent, var, FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1566,7 +1516,7 @@ static void write_procformatstring_func( FILE *file, int indent, const type_t *i
|
|||
else
|
||||
{
|
||||
print_file( file, 0, "/* %u (return value) */\n", *offset );
|
||||
*offset += write_old_procformatstring_type(file, indent, retval, TRUE, FALSE);
|
||||
*offset += write_old_procformatstring_type(file, indent, retval, TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2228,7 +2178,7 @@ static unsigned int write_nonsimple_pointer(FILE *file, const attr_list_t *attrs
|
|||
if (out_attr && !in_attr && pointer_type == FC_RP)
|
||||
flags |= FC_ALLOCED_ON_STACK;
|
||||
}
|
||||
else if (get_stub_mode() == MODE_Oif)
|
||||
else
|
||||
{
|
||||
if (context == TYPE_CONTEXT_TOPLEVELPARAM && is_ptr(type) && pointer_type == FC_RP)
|
||||
{
|
||||
|
@ -2312,7 +2262,7 @@ static unsigned int write_simple_pointer(FILE *file, const attr_list_t *attrs,
|
|||
if (out_attr && !in_attr && pointer_fc == FC_RP)
|
||||
flags |= FC_ALLOCED_ON_STACK;
|
||||
}
|
||||
else if (get_stub_mode() == MODE_Oif)
|
||||
else
|
||||
{
|
||||
if (context == TYPE_CONTEXT_TOPLEVELPARAM && fc == FC_ENUM16 && pointer_fc == FC_RP)
|
||||
flags |= FC_ALLOCED_ON_STACK;
|
||||
|
@ -5091,7 +5041,7 @@ void write_client_call_routine( FILE *file, const type_t *iface, const var_t *fu
|
|||
|
||||
len = fprintf( file, " %s%s( ",
|
||||
has_ret ? "_RetVal = " : "",
|
||||
get_stub_mode() == MODE_Oif ? "NdrClientCall2" : "NdrClientCall" );
|
||||
interpreted_mode ? "NdrClientCall2" : "NdrClientCall" );
|
||||
fprintf( file, "&%s_StubDesc,", prefix );
|
||||
fprintf( file, "\n%*s&__MIDL_ProcFormatString.Format[%u]", len, "", proc_offset );
|
||||
if (needs_params)
|
||||
|
|
|
@ -109,9 +109,9 @@ int do_dlldata = 0;
|
|||
static int no_preprocess = 0;
|
||||
int old_names = 0;
|
||||
int winrt_mode = 0;
|
||||
int interpreted_mode = 0;
|
||||
int use_abi_namespace = 0;
|
||||
static int stdinc = 1;
|
||||
static enum stub_mode stub_mode = MODE_Os;
|
||||
|
||||
char *input_name;
|
||||
char *idl_name;
|
||||
|
@ -199,13 +199,6 @@ static const struct long_option long_options[] = {
|
|||
|
||||
static void rm_tempfile(void);
|
||||
|
||||
enum stub_mode get_stub_mode(void)
|
||||
{
|
||||
/* old-style interpreted stubs are not supported on 64-bit */
|
||||
if (stub_mode == MODE_Oi && pointer_size == 8) return MODE_Oif;
|
||||
return stub_mode;
|
||||
}
|
||||
|
||||
static char *make_token(const char *name)
|
||||
{
|
||||
char *token;
|
||||
|
@ -595,11 +588,11 @@ static void option_callback( int optc, char *optarg )
|
|||
output_name = xstrdup(optarg);
|
||||
break;
|
||||
case 'O':
|
||||
if (!strcmp( optarg, "s" )) stub_mode = MODE_Os;
|
||||
else if (!strcmp( optarg, "i" )) stub_mode = MODE_Oi;
|
||||
else if (!strcmp( optarg, "ic" )) stub_mode = MODE_Oif;
|
||||
else if (!strcmp( optarg, "if" )) stub_mode = MODE_Oif;
|
||||
else if (!strcmp( optarg, "icf" )) stub_mode = MODE_Oif;
|
||||
if (!strcmp( optarg, "s" )) interpreted_mode = 0;
|
||||
else if (!strcmp( optarg, "i" )) interpreted_mode = 1;
|
||||
else if (!strcmp( optarg, "ic" )) interpreted_mode = 1;
|
||||
else if (!strcmp( optarg, "if" )) interpreted_mode = 1;
|
||||
else if (!strcmp( optarg, "icf" )) interpreted_mode = 1;
|
||||
else error( "Invalid argument '-O%s'\n", optarg );
|
||||
break;
|
||||
case 'p':
|
||||
|
|
|
@ -48,6 +48,7 @@ extern int do_idfile;
|
|||
extern int do_dlldata;
|
||||
extern int old_names;
|
||||
extern int winrt_mode;
|
||||
extern int interpreted_mode;
|
||||
extern int use_abi_namespace;
|
||||
|
||||
extern char *input_name;
|
||||
|
@ -72,13 +73,6 @@ extern unsigned int packing;
|
|||
extern unsigned int pointer_size;
|
||||
extern time_t now;
|
||||
|
||||
enum stub_mode
|
||||
{
|
||||
MODE_Os, /* inline stubs */
|
||||
MODE_Oi, /* old-style interpreted stubs */
|
||||
MODE_Oif /* new-style fully interpreted stubs */
|
||||
};
|
||||
extern enum stub_mode get_stub_mode(void);
|
||||
extern int open_typelib( const char *name );
|
||||
|
||||
extern void write_header(const statement_list_t *stmts);
|
||||
|
|
Loading…
Add table
Reference in a new issue