#include <glib.h>
#include <string.h>
+#include "treefuncs.h"
#include "parse.h"
#include "main.h"
#include "util.h"
clear_cbuf(void)
{
if(!cbuf) {
- cbuf = g_string_new("");
+ cbuf = g_string_new(NULL);
} else {
- cbuf = g_string_assign(cbuf,"");
+ cbuf = g_string_assign(cbuf, "");
}
}
gtk_doc_func = NULL;
}
+/* Ugly warning avoiding */
+#ifdef FLEX_SCANNER
+int yylex(void);
+#endif
%}
%x GTK_DOC
%x GTK_DOC_LINE
+
+
%%
<*>\n { line_no++; REJECT; }
-<*>MOTHERFUCKER { fprintf(stderr,"You are a bad bad person!\n"); REJECT; }
+<COMMENT>^(I(S.RI).E\(([1-9][0-9]+|[2-9]))/(\)) {
+/* Thy evil easter egg */
+#define QQ(x) long x
+#define KK(x) =atoi(__(&,,x,))
+#define MM(x,a) {QQ(i);for(i=2;i<x;i++){a}}
+#define PP(Q) (P%Q)==0
+#define ___(x,y,z) if(x z y)
+#define __(a,x,y,z) a(yytext[y] x z)
+#define O__O(a,b) fprintf(stderr,"%s is %s!\n",a,b)
+QQ(m)=1;___(__(,==,2,'P'),__(,==,5,'M'),&&
+){QQ(P)KK(8);MM(P,___(PP(i),,)m=0;)}__(,=,
+7,0);___(,,m){O__O(__( &,,8,),__(&,,2,));}
+#undef QQ
+#undef KK
+#undef MM
+#undef PP
+#undef ___
+#undef __
+#undef O__O
+REJECT;
+}
\/\/.*$ { ; /*comment, ignore*/ }
<C_CODE>^#[ \t]*include[ \t][<"][^\n">]*[>"] {
BEGIN(CLASS_CODE);
if(++found_classes > 1) {
- print_error(FALSE,
- "Only one class per file allowed",
- line_no);
+ error_print(GOB_ERROR, line_no,
+ "Only one class per file allowed");
}
return CLASS;
if(rmaj < maj ||
(rmaj == maj && rmin < min) ||
(rmaj == maj && rmin == min && rpl < pl)) {
- char *s;
- s = g_strdup_printf(
- "GOB version %d.%d.%d required "
- "(this is %s)\n"
- "To upgrade your gob, see: "
- "http://www.5z.com/jirka/gob.html",
- maj,min,pl,VERSION);
- print_error(FALSE, s, line_no);
- g_free(s);
+ error_printf(GOB_ERROR, line_no,
+ "GOB version %d.%d.%d required "
+ "(this is %s)\n"
+ "To upgrade your gob, see: "
+ "http://www.5z.com/jirka/gob.html",
+ maj, min, pl, VERSION);
}
}
<CLASS_CODE,CLASS_CODE_I>class|this {
if(for_cpp) {
- char *s;
- s = g_strdup_printf("'%s' keyword should not "
- "be used when generating "
- "C++ code",yytext);
- print_error(TRUE, s, line_no);
- g_free(s);
+ error_printf(GOB_WARN, line_no,
+ "'%s' keyword should not "
+ "be used when generating "
+ "C++ code", yytext);
}
REJECT;
}
<CLASS_CODE_I>public {yylval.line = line_no; return PUBLIC;}
<CLASS_CODE_I>private {yylval.line = line_no; return PRIVATE;}
<CLASS_CODE_I>protected {yylval.line = line_no; return PROTECTED;}
+<CLASS_CODE_I>classwide {yylval.line = line_no; return CLASSWIDE;}
<CLASS_CODE_I>argument {yylval.line = line_no; return ARGUMENT;}
<CLASS_CODE_I>virtual {yylval.line = line_no; return VIRTUAL;}
<CLASS_CODE_I>signal {yylval.line = line_no; return SIGNAL;}
<CLASS_CODE_I>override {yylval.line = line_no; return OVERRIDE;}
-<CLASS_CODE_I>onerror {return ONERROR;}
-<CLASS_CODE_I>0|[1-9][0-9]*|0x[0-9a-fA-F]+|0[0-7]+|[0-9]*\.[0-9]+|\.[0-9][0-9]* {
+<CLASS_CODE,CLASS_CODE_I>0|[1-9][0-9]*|0x[0-9a-fA-F]+|0[0-7]+|[0-9]*\.[0-9]+|\.[0-9][0-9]* {
yylval.id = g_strdup(yytext);
return NUMBER;
}
-<CLASS_CODE,CLASS_CODE_I>:?[A-Za-z_][A-Za-z0-9_]*(:[A-Za-z0-9_]*)+ {
+<CLASS_CODE,CLASS_CODE_I>[A-Za-z_][A-Za-z0-9_]*(:[A-Za-z0-9_]*)+ {
+ /* this one is for a classname with a namespace */
+ yylval.id = g_strdup(yytext);
+ return TYPETOKEN;
+ }
+<CLASS_CODE,CLASS_CODE_I>:[A-Za-z_][A-Za-z0-9_]*(:[A-Za-z0-9_]*)* {
+ /* this is for a classname with an empty namespace */
yylval.id = g_strdup(yytext);
return TYPETOKEN;
}
return TOKEN;
}
-<CLASS_CODE_I>(\[[0-9]*\])+ {
+<CLASS_CODE_I>(\[[0-9]*\]|\[[A-Za-z_][A-Za-z0-9_]*\])+ {
yylval.id = g_strdup(yytext);
return ARRAY_DIM;
}
}
<*>[\n\r] ; /*ignore*/
+
+%%
+
+/* Ugly warning avoiding */
+#ifdef FLEX_SCANNER
+static void warning_avoider(void) G_GNUC_UNUSED;
+static void warning_avoider(void) {
+ yy_flex_realloc(NULL, 0);
+ yyunput(0, NULL);
+ warning_avoider();
+}
+#endif
+