push_function (fun);
- var once_enter_call = new CCodeFunctionCall (new CCodeIdentifier ("g_once_init_enter"));
- if (context.require_glib_version (2, 68)) {
+ CCodeFunctionCall once_enter_call;
+ if (context.require_glib_version (2, 80)) {
+ once_enter_call = new CCodeFunctionCall (new CCodeIdentifier ("g_once_init_enter_pointer"));
+ once_enter_call.add_argument (new CCodeConstant ("re"));
+ } else if (context.require_glib_version (2, 68)) {
+ once_enter_call = new CCodeFunctionCall (new CCodeIdentifier ("g_once_init_enter"));
once_enter_call.add_argument (new CCodeConstant ("(gsize*) re"));
} else {
+ once_enter_call = new CCodeFunctionCall (new CCodeIdentifier ("g_once_init_enter"));
once_enter_call.add_argument (new CCodeConstant ("(volatile gsize*) re"));
}
ccode.open_if (once_enter_call);
regex_new_call.add_argument (new CCodeConstant ("NULL"));
ccode.add_assignment (new CCodeIdentifier ("GRegex* val"), regex_new_call);
- var once_leave_call = new CCodeFunctionCall (new CCodeIdentifier ("g_once_init_leave"));
- if (context.require_glib_version (2, 68)) {
+ CCodeFunctionCall once_leave_call;
+ if (context.require_glib_version (2, 80)) {
+ once_leave_call = new CCodeFunctionCall (new CCodeIdentifier ("g_once_init_leave_pointer"));
+ once_leave_call.add_argument (new CCodeConstant ("re"));
+ once_leave_call.add_argument (new CCodeConstant ("val"));
+ } else if (context.require_glib_version (2, 68)) {
+ once_leave_call = new CCodeFunctionCall (new CCodeIdentifier ("g_once_init_leave"));
once_leave_call.add_argument (new CCodeConstant ("(gsize*) re"));
+ once_leave_call.add_argument (new CCodeConstant ("(gsize) val"));
} else {
+ once_leave_call = new CCodeFunctionCall (new CCodeIdentifier ("g_once_init_leave"));
once_leave_call.add_argument (new CCodeConstant ("(volatile gsize*) re"));
+ once_leave_call.add_argument (new CCodeConstant ("(gsize) val"));
}
- once_leave_call.add_argument (new CCodeConstant ("(gsize) val"));
ccode.add_expression (once_leave_call);
ccode.close ();
var type_once_block = new CCodeBlock ();
CCodeDeclaration cdecl;
if (!plugin) {
- cdecl = new CCodeDeclaration ("gsize");
+ if (context.require_glib_version (2, 80)) {
+ cdecl = new CCodeDeclaration ("GType");
+ } else {
+ cdecl = new CCodeDeclaration ("gsize");
+ }
cdecl.add_declarator (new CCodeVariableDeclarator (type_id_name + "__once", new CCodeConstant ("0")));
if (context.require_glib_version (2, 68)) {
cdecl.modifiers = CCodeModifiers.STATIC;
if (!plugin) {
// the condition that guards the type initialisation
- var enter = new CCodeFunctionCall (new CCodeIdentifier ("g_once_init_enter"));
+ CCodeFunctionCall enter;
+ if (context.require_glib_version (2, 80)) {
+ enter = new CCodeFunctionCall (new CCodeIdentifier ("g_once_init_enter_pointer"));
+ } else {
+ enter = new CCodeFunctionCall (new CCodeIdentifier ("g_once_init_enter"));
+ }
enter.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, new CCodeIdentifier (type_id_name + "__once")));
- var leave = new CCodeFunctionCall (new CCodeIdentifier ("g_once_init_leave"));
+ CCodeFunctionCall leave;
+ if (context.require_glib_version (2, 80)) {
+ leave = new CCodeFunctionCall (new CCodeIdentifier ("g_once_init_leave_pointer"));
+ } else {
+ leave = new CCodeFunctionCall (new CCodeIdentifier ("g_once_init_leave"));
+ }
leave.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, new CCodeIdentifier (type_id_name + "__once")));
leave.add_argument (new CCodeIdentifier (type_id_name));
once_call_block.add_statement (new CCodeExpressionStatement (leave));