#include <string.h>
#include "tree.h"
+#include "main.h"
#define _(x) (x)
static int stars = 0;
static GList *funcargs = NULL;
static GList *checks = NULL;
-static int has_this = FALSE;
+static int has_self = FALSE;
static GList *gtktypes = NULL;
}
static void
-push_variable(char *name, int scope)
+push_variable(char *name, int scope, int line_no)
{
Node *var;
Type *type = typestack->data;
typestack = g_list_remove(typestack,typestack->data);
- var = new_variable(scope,type,name);
+ var = new_variable(scope,type,name,line_no);
class_nodes = g_list_append(class_nodes, var);
}
}
static void
-push_this(char *this)
+push_self(char *id)
{
Node *node;
Node *type;
type = new_type(1,g_strdup(((Class *)class)->otype));
ch = g_list_append(ch,new_check(NULL_CHECK,NULL));
ch = g_list_append(ch,new_check(TYPE_CHECK,NULL));
- node = new_funcarg((Type *)type,this,ch);
+ node = new_funcarg((Type *)type,id,ch);
funcargs = g_list_prepend(funcargs, node);
}
;
variable: PUBLIC type TOKEN ';' {
- push_variable($<id>3,PUBLIC_SCOPE);
+ push_variable($<id>3,PUBLIC_SCOPE,$<line>1);
}
| PRIVATE type TOKEN ';' {
- push_variable($<id>3,PRIVATE_SCOPE);
+ push_variable($<id>3,PRIVATE_SCOPE,$<line>1);
}
;
argument: ARGUMENT argflags TOKEN TOKEN TOKEN '{' CCODE TOKEN '{' CCODE ';' {
g_free($<id>5); g_free($<id>8);
node = new_argument($<id>3,$<list>2,$<id>4,
$<cbuf>7,$<line>6,
- $<cbuf>10,$<line>9);
+ $<cbuf>10,$<line>9,
+ $<line>1);
class_nodes = g_list_append(class_nodes,node);
} else if(strcmp($<id>5,"set")==0 &&
strcmp($<id>8,"get")==0) {
g_free($<id>5); g_free($<id>8);
node = new_argument($<id>3,$<list>2,$<id>4,
$<cbuf>10,$<line>9,
- $<cbuf>7,$<line>6);
+ $<cbuf>7,$<line>6,
+ $<line>1);
class_nodes = g_list_append(class_nodes,node);
} else {
g_free($<id>3); g_free($<id>4);
Node *node;
g_free($<id>5);
node = new_argument($<id>3,$<list>2,$<id>4,
- $<cbuf>7,$<line>6,NULL,0);
+ $<cbuf>7,$<line>6,NULL,0,
+ $<line>1);
class_nodes = g_list_append(class_nodes,node);
} else if(strcmp($<id>5,"set")==0) {
Node *node;
g_free($<id>5);
node = new_argument($<id>3,$<list>2,$<id>4,
- NULL,0,$<cbuf>7,$<line>6);
+ NULL,0,$<cbuf>7,$<line>6,
+ $<line>1);
class_nodes = g_list_append(class_nodes,node);
} else {
g_free($<id>5); g_free($<id>3);
}
;
+codenocode: '{' CCODE { $<cbuf>$=$<cbuf>2; }
+ | ';' { $<cbuf>$ = NULL; }
+ ;
+
/*here CCODE will include the ending '}' */
-method: SIGNAL TOKEN sigtype type TOKEN '(' funcargs ')' onerror '{' CCODE {
+method: SIGNAL TOKEN sigtype type TOKEN '(' funcargs ')' onerror codenocode {
int sigtype = SIGNAL_LAST_METHOD;
if(strcmp($<id>2,"first")==0)
sigtype = SIGNAL_FIRST_METHOD;
}
g_free($<id>2);
- if(!has_this) {
- yyerror(_("signal without 'this' as "
+ if(!has_self) {
+ yyerror(_("signal without 'self' as "
"first parameter"));
YYERROR;
}
push_function(sigtype,NULL,
- $<id>5, $<id>9, $<cbuf>11,$<line>1,$<line>10);
+ $<id>5, $<id>9, $<cbuf>10,$<line>1,ccode_line);
}
- | SIGNAL TOKEN sigtype type TOKEN '(' funcargs ')' onerror ';' {
- int sigtype = SIGNAL_LAST_METHOD;
- if(strcmp($<id>2,"first")==0)
- sigtype = SIGNAL_FIRST_METHOD;
- else if(strcmp($<id>2,"last")==0)
- sigtype = SIGNAL_LAST_METHOD;
- else {
- yyerror(_("signal must be 'first' or 'last'"));
- g_free($<id>2);
- YYERROR;
- }
- g_free($<id>2);
- if(!has_this) {
- yyerror(_("signal without 'this' as "
- "first parameter"));
- YYERROR;
- }
- push_function(sigtype, NULL,
- $<id>5, $<id>9, NULL,$<line>1,0);
- }
- | SIGNAL sigtype type TOKEN '(' funcargs ')' onerror '{' CCODE {
- if(!has_this) {
- yyerror(_("signal without 'this' as "
+ | SIGNAL sigtype type TOKEN '(' funcargs ')' onerror codenocode {
+ if(!has_self) {
+ yyerror(_("signal without 'self' as "
"first parameter"));
YYERROR;
}
push_function(SIGNAL_LAST_METHOD, NULL,
- $<id>4, $<id>8, $<cbuf>10,$<line>1,$<line>9);
+ $<id>4, $<id>8, $<cbuf>9,$<line>1,ccode_line);
}
- | SIGNAL sigtype type TOKEN '(' funcargs ')' onerror ';' {
- if(!has_this) {
- yyerror(_("signal without 'this' as "
+ | VIRTUAL type TOKEN '(' funcargs ')' onerror codenocode {
+ if(!has_self) {
+ yyerror(_("virtual method without 'self' as "
"first parameter"));
YYERROR;
}
- push_function(SIGNAL_LAST_METHOD, NULL, $<id>4,
- $<id>8, NULL,$<line>1,0);
- }
- | VIRTUAL type TOKEN '(' funcargs ')' onerror '{' CCODE {
- push_function(VIRTUAL_METHOD, NULL, $<id>3,
- $<id>7, $<cbuf>9,$<line>1,$<line>8);
- }
- | VIRTUAL type TOKEN '(' funcargs ')' onerror ';' {
push_function(VIRTUAL_METHOD, NULL, $<id>3,
- $<id>7, NULL,$<line>1,0);
+ $<id>7, $<cbuf>8,$<line>1,ccode_line);
}
| OVERRIDE '(' TYPETOKEN ')' type TOKEN '(' funcargs ')' onerror '{' CCODE {
push_function(OVERRIDE_METHOD, $<id>3,
-funcargs: VOID { has_this = FALSE; }
+funcargs: VOID { has_self = FALSE; }
| TOKEN {
- has_this = TRUE;
- if(strcmp($<id>1,"this")==0)
- push_this($<id>1);
+ has_self = TRUE;
+ if(strcmp($<id>1,"this")==0) {
+ push_self($<id>1);
+ print_error(TRUE,_("Use of 'this' is "
+ "depreciated, use 'self' "
+ "instead"),line_no);
+ } else if(strcmp($<id>1,"self")==0)
+ push_self($<id>1);
else {
g_free($<id>1);
yyerror(_("parse error"));
}
}
| TOKEN ',' arglist {
- has_this = TRUE;
- if(strcmp($<id>1,"this")==0)
- push_this($<id>1);
+ has_self = TRUE;
+ if(strcmp($<id>1,"this")==0) {
+ push_self($<id>1);
+ print_error(TRUE,_("Use of 'this' is "
+ "depreciated, use 'self' "
+ "instead"),line_no);
+ } else if(strcmp($<id>1,"self")==0)
+ push_self($<id>1);
else {
g_free($<id>1);
yyerror(_("parse error"));
YYERROR;
}
}
- | arglist { has_this = FALSE; }
+ | arglist { has_self = FALSE; }
;
arglist: arglist ',' arg { ; }