*/
%{
+#include "config.h"
#include <glib.h>
-#include "y.tab.h"
+#include "parse.h"
static int parenth_depth = 0;
static int before_comment = INITIAL;
static int header_c = FALSE;
static GString *cbuf = NULL;
+int ccode_line = 1;
int line_no = 1;
<*>\n { line_no++; REJECT; }
+<*>MOTHERFUCKER { fprintf(stderr,"You are a bad bad person!\n"); REJECT; }
+
\/\/.*$ { ; /*comment, ignore*/ }
<C_CODE>\/\/.*$ { ; /*comment, ignore*/ }
<CLASS_CODE>\/\/.*$ { ; /*comment, ignore*/ }
<CLASS_CODE_I>\/\* {BEGIN(COMMENT); before_comment = CLASS_CODE_I; }
<COMMENT>\*\/ {BEGIN(before_comment);}
<COMMENT>. { ; /* comment, ignore */ }
+<COMMENT>\n { ; /* comment, ignore */ }
^\%h\{ {
BEGIN(C_CODE);
class_after_c = FALSE;
header_c = TRUE;
clear_cbuf();
+ ccode_line = line_no;
}
^\%\{ {
BEGIN(C_CODE);
class_after_c = FALSE;
header_c = FALSE;
clear_cbuf();
+ ccode_line = line_no;
}
<C_CODE>^\%\} {
BEGIN(INITIAL);
<CLASS_CODE_I>float {return FLOAT;}
<CLASS_CODE_I>double {return DOUBLE;}
<CLASS_CODE_I>char {return CHAR;}
+<CLASS_CODE_I>const {return CONST;}
+
+<CLASS_CODE_I>\.\.\. {return THREEDOTS;}
<CLASS_CODE_I>public {yylval.line = line_no; return PUBLIC;}
<CLASS_CODE_I>private {yylval.line = line_no; return PRIVATE;}
<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>last {return LAST;}
-<CLASS_CODE_I>first {return FIRST;}
<CLASS_CODE_I>override {yylval.line = line_no; return OVERRIDE;}
-<CLASS_CODE_I>check {return CHECK;}
-<CLASS_CODE_I>null {return CNULL;}
-<CLASS_CODE_I>type {return TYPE;}
<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]* {
yylval.id = g_strdup(yytext);
BEGIN(C_CODE);
parenth_depth=1;
class_after_c = TRUE;
+ ccode_line = line_no;
+ yylval.line = line_no;
return '{';
}
<CLASS_CODE_I>\} {