X-Git-Url: https://git.draconx.ca/gitweb/gob-dx.git/blobdiff_plain/3e833eea9cb9822f04c639e143212c4b6f7940d4..HEAD:/src/parse.y diff --git a/src/parse.y b/src/parse.y index b8792bb..46df2d6 100644 --- a/src/parse.y +++ b/src/parse.y @@ -22,7 +22,7 @@ */ %{ -#include "config.h" +#include #include #include #include @@ -45,6 +45,7 @@ static GList *flag_vals = NULL; static GList *error_vals = NULL; static gboolean abstract = FALSE; +static gboolean dynamic = FALSE; static char *chunk_size = NULL; static char *bonobo_object_class = NULL; static int glade_xml = FALSE; @@ -70,6 +71,7 @@ static char *onerror = NULL; static char *defreturn = NULL; static GList *gtktypes = NULL; +static char *signal_name=NULL; static Property *property = NULL; @@ -92,9 +94,10 @@ yyerror(char *str) char *out=NULL; char *p; - if(strcmp(yytext,"\n")==0) { - out=g_strconcat("Error: ",str," before newline",NULL); - } else if(yytext[0]=='\0') { + if (strcmp (yytext, "\n") == 0 || + strcmp (yytext, "\r") == 0) { + out = g_strconcat ("Error: ", str, " before end of line", NULL); + } else if (yytext[0] == '\0') { out=g_strconcat("Error: ", str, " at end of input", NULL); } else { char *tmp = g_strdup(yytext); @@ -156,7 +159,11 @@ push_function (int scope, int method, char *oid, char *id, g_assert(scope != CLASS_SCOPE); - if(method == INIT_METHOD || method == CLASS_INIT_METHOD) { + if(method == INIT_METHOD || + method == CLASS_INIT_METHOD || + method == CONSTRUCTOR_METHOD || + method == DISPOSE_METHOD || + method == FINALIZE_METHOD) { type = (Type *)node_new (TYPE_NODE, "name", "void", NULL); @@ -197,6 +204,13 @@ push_function (int scope, int method, char *oid, char *id, } else c_cbuf = NULL; + if (signal_name == NULL ) + { + GString * buffer=g_string_new(""); + g_string_printf(buffer, "\"%s\"", id); + signal_name = buffer->str; + g_string_free(buffer, FALSE); + } node = node_new (METHOD_NODE, "scope", scope, "method", method, @@ -205,6 +219,7 @@ push_function (int scope, int method, char *oid, char *id, "gtktypes:steal", gtktypes, "flags:steal", flags, "id:steal", id, + "signal_name:steal", signal_name, "args:steal", funcargs, "funcattrs:steal", funcattrs, "onerror:steal", onerror, @@ -224,8 +239,8 @@ push_function (int scope, int method, char *oid, char *id, above */ c_cbuf?FALSE:TRUE); gtktypes = NULL; + signal_name = NULL; funcargs = NULL; - funcattrs = NULL; onerror = NULL; defreturn = NULL; @@ -401,15 +416,15 @@ export_accessors (const char *var_name, "pointer", "*", NULL); - g_string_sprintf (get_cbuf, - "\t%s%s val; " - "g_object_get (G_OBJECT (self), \"%s\", " - "&val, NULL); " - "return val;\n", - the_type->name, - the_type->pointer ? the_type->pointer : "", - var_name); - + g_string_printf(get_cbuf, + "\t%s%s val; " + "g_object_get (G_OBJECT (self), \"%s\", " + "&val, NULL); " + "return val;\n", + the_type->name, + the_type->pointer ? the_type->pointer : "", + var_name); + typestack = g_list_prepend (typestack, node1); typestack = g_list_prepend (typestack, node3); @@ -436,10 +451,10 @@ export_accessors (const char *var_name, "pointer", "*", NULL); - g_string_sprintf (set_cbuf, - "\tg_object_set (G_OBJECT (self), " - "\"%s\", val, NULL);\n", - var_name); + g_string_printf(set_cbuf, + "\tg_object_set (G_OBJECT (self), " + "\"%s\", val, NULL);\n", + var_name); typestack = g_list_prepend (typestack, node2); typestack = g_list_prepend (typestack, node1); @@ -599,9 +614,9 @@ property_link_and_export (Node *node) const char *setcast = ""; char *to_free = NULL; set_func = g_strdup_printf ("g_value_set_%s", prop->gtktype); - g_strdown (set_func); + gob_strdown (set_func); get_func = g_strdup_printf ("g_value_get_%s", prop->gtktype); - g_strdown (get_func); + gob_strdown (get_func); if (for_cpp) { if (strcmp (prop->gtktype, "FLAGS") == 0) { @@ -688,10 +703,10 @@ ensure_property (void) %token SIGNED UNSIGNED LONG SHORT INT FLOAT DOUBLE CHAR %token TOKEN NUMBER TYPETOKEN ARRAY_DIM SINGLE_CHAR -%token CCODE ADCODE HTCODE PHCODE HCODE ACODE ATCODE STRING +%token CCODE CTCODE ADCODE HTCODE PHCODE HCODE ACODE ATCODE STRING %token PUBLIC PRIVATE PROTECTED CLASSWIDE PROPERTY ARGUMENT %token VIRTUAL SIGNAL OVERRIDE -%token NICK BLURB MAXIMUM MINIMUM DEFAULT_VALUE ERROR FLAGS TYPE +%token NAME NICK BLURB MAXIMUM MINIMUM DEFAULT_VALUE ERROR FLAGS TYPE %token FLAGS_TYPE ENUM_TYPE PARAM_TYPE BOXED_TYPE OBJECT_TYPE %% @@ -765,6 +780,15 @@ ccode: CCODE { nodes = g_list_append(nodes,node); g_string_free($1,FALSE); } + | CTCODE { + Node *node = node_new (CCODE_NODE, + "cctype", CT_CCODE, + "cbuf:steal", ($1)->str, + "line_no", ccode_line, + NULL); + nodes = g_list_append(nodes,node); + g_string_free($1,FALSE); + } ; ccodes: ccodes ccode { ; } @@ -798,6 +822,7 @@ classdec: CLASS TYPETOKEN FROM TYPETOKEN classflags { "interfaces:steal", interfaces, "chunk_size:steal", chunk_size, "abstract", abstract, + "dynamic", dynamic, NULL); bonobo_object_class = NULL; glade_xml = FALSE; @@ -810,6 +835,8 @@ classflags: | '(' TOKEN ')' classflags { if(strcmp($2,"abstract") == 0) { abstract = TRUE; + } else if(strcmp($2,"dynamic") == 0) { + dynamic = TRUE; } else { yyerror(_("parse error")); YYERROR; @@ -1355,7 +1382,13 @@ anyval: numtok { $$ = $1; } | string { $$ = $1; } ; -param_spec_value: NICK '=' string { +param_spec_value: NAME '=' string { + ensure_property (); + node_set ((Node *)property, + "canonical_name:steal", gob_str_delete_quotes($3), + NULL); + } + | NICK '=' string { ensure_property (); node_set ((Node *)property, "nick:steal", $3, @@ -1669,6 +1702,10 @@ fullsigtype: scope TOKEN sigtype { sigtype: TOKEN '(' tokenlist ')' { gtktypes = g_list_prepend(gtktypes, debool ($1)); } + | TOKEN STRING '(' tokenlist ')' { + gtktypes = g_list_prepend(gtktypes, debool ($1)); + signal_name=$2; + } ; tokenlist: tokenlist ',' TOKEN {