/* GOB C Preprocessor
* Copyright (C) 1999-2000 the Free Software Foundation.
- * Copyright (C) 2001 George Lebl
+ * Copyright (C) 2000 Eazel, Inc.
+ * Copyright (C) 2001-2004 George (Jiri) Lebl
*
* Author: George Lebl
*
extern int ccode_line;
extern int line_no;
+extern gboolean for_cpp;
extern char *yytext;
if (prop->extra_gtktype != NULL) {
cast = remove_sep (prop->extra_gtktype);
} else {
- cast = "void";
+ cast = g_strdup ("void");
}
set = g_strdup_printf("{ GObject *___old = (GObject *)%s->%s; "
"%s->%s = (%s *)g_value_dup_object (VAL); "
root, prop->name);
g_free (cast);
} else if (strcmp (prop->gtktype, "BOXED") == 0) {
+ char *type = make_me_type (prop->extra_gtktype,
+ "G_TYPE_BOXED");
if (prop->extra_gtktype == NULL) {
error_print (GOB_ERROR, prop->line_no,
_("Property linking requested for BOXED, but "
"} "
"}",
root, prop->name,
- prop->extra_gtktype,
+ type,
root, prop->name,
- prop->extra_gtktype,
+ type,
root, prop->name);
- get = g_strdup_printf("g_value_set_object (VAL, %s->%s);",
+ get = g_strdup_printf("g_value_set_boxed (VAL, %s->%s);",
root, prop->name);
+ g_free (type);
} else {
char *set_func;
char *get_func;
get_func = g_strdup_printf ("g_value_get_%s", prop->gtktype);
g_strdown (get_func);
- if (strcmp (prop->gtktype, "FLAGS") == 0) {
- setcast = "(guint) ";
- getcast = to_free =
- get_prop_enum_flag_cast (prop);
- } else if (strcmp (prop->gtktype, "ENUM") == 0) {
- setcast = "(gint) ";
- getcast = to_free =
- get_prop_enum_flag_cast (prop);
+ if (for_cpp) {
+ if (strcmp (prop->gtktype, "FLAGS") == 0) {
+ setcast = "(guint) ";
+ getcast = to_free =
+ get_prop_enum_flag_cast (prop);
+ } else if (strcmp (prop->gtktype, "ENUM") == 0) {
+ setcast = "(gint) ";
+ getcast = to_free =
+ get_prop_enum_flag_cast (prop);
+ }
}
set = g_strdup_printf("%s->%s = %s%s (VAL);",
char *get, *set = NULL;
Variable *var;
Type *type;
- char *root;
+ const char *root;
if(strcmp($<id>6, "link")!=0 &&
strcmp($<id>6, "stringlink")!=0 &&
type = pop_type();
var = find_var_or_die($<id>4, $<line>1);
- if(var->scope == PRIVATE_SCOPE)
+ if(var->scope == PRIVATE_SCOPE) {
root = "self->_priv";
- else if(var->scope == CLASS_SCOPE) {
+ } else if(var->scope == CLASS_SCOPE) {
root = "SELF_GET_CLASS(self)";
if(no_self_alias)
error_print(GOB_ERROR, $<line>1,
_("Self aliases needed when autolinking to a classwide member"));
- } else
+ } else {
root = "self";
+ }
if(strcmp($<id>6, "link")==0) {
set = g_strdup_printf("%s->%s = ARG;",
retcode: numtok { $<id>$ = $<id>1; }
| '{' CCODE {
- $<id>$ = ($<cbuf>3)->str;
- g_string_free($<cbuf>3, FALSE);
+ $<id>$ = ($<cbuf>2)->str;
+ g_string_free($<cbuf>2, FALSE);
}
;