3 * Copyright 2016 Microsoft
4 * Licensed under the MIT license. See LICENSE file in the project root for full license information.
6 #ifndef __MONO_METADATA_ICALL_INTERNALS_H__
7 #define __MONO_METADATA_ICALL_INTERNALS_H__
11 #include <mono/metadata/object-internals.h>
13 // On Windows platform implementation of bellow methods are hosted in separate source file
14 // icall-windows.c or icall-windows-*.c. On other platforms the implementation is still keept
15 // in icall.c still declared as static and in some places even inlined.
18 mono_icall_make_platform_path (gchar
*path
);
21 mono_icall_get_file_path_prefix (const gchar
*path
);
24 mono_icall_module_get_hinstance (MonoReflectionModuleHandle module
);
27 mono_icall_get_machine_name (MonoError
*error
);
30 mono_icall_get_platform (void);
33 mono_icall_get_new_line (MonoError
*error
);
36 mono_icall_is_64bit_os (void);
39 mono_icall_get_environment_variable_names (MonoError
*error
);
42 mono_icall_set_environment_variable (MonoString
*name
, MonoString
*value
);
45 mono_icall_get_windows_folder_path (int folder
, MonoError
*error
);
48 mono_icall_write_windows_debug_string (const gunichar2
*message
);
51 mono_icall_wait_for_input_idle (gpointer handle
, gint32 milliseconds
);
52 #endif /* HOST_WIN32 */
54 // On platforms not using classic WIN API support the implementation of bellow methods are hosted in separate source file
55 // icall-windows-*.c. On platforms using classic WIN API the implementation is still keept in icall.c and still declared
56 // static and in some places even inlined.
57 #if !G_HAVE_API_SUPPORT(HAVE_CLASSIC_WINAPI_SUPPORT)
59 mono_icall_get_logical_drives (void);
62 mono_icall_drive_info_get_drive_type (MonoString
*root_path_name
);
63 #endif /* !G_HAVE_API_SUPPORT(HAVE_CLASSIC_WINAPI_SUPPORT) */
66 mono_lookup_internal_call_full (MonoMethod
*method
, gboolean warn_on_missing
, mono_bool
*uses_handles
, mono_bool
*foreign
);
70 mono_add_internal_call_with_flags (const char *name
, const void* method
, gboolean cooperative
);
72 MONO_PROFILER_API
void
73 mono_add_internal_call_internal (const char *name
, gconstpointer method
);
76 mono_runtime_get_caller_from_stack_mark (MonoStackCrawlMark
*stack_mark
);
80 #include <type_traits>
83 inline typename
std::enable_if
<std::is_function
<T
>::value
||
84 std::is_function
<typename
std::remove_pointer
<T
>::type
>::value
>::type
85 mono_add_internal_call_with_flags (const char *name
, T method
, gboolean cooperative
)
87 return mono_add_internal_call_with_flags (name
, (const void*)method
, cooperative
);
91 inline typename
std::enable_if
<std::is_function
<T
>::value
||
92 std::is_function
<typename
std::remove_pointer
<T
>::type
>::value
>::type
93 mono_add_internal_call_internal (const char *name
, T method
)
95 return mono_add_internal_call_internal (name
, (const void*)method
);
100 #endif /* __MONO_METADATA_ICALL_INTERNALS_H__ */