From af6b5bdc7741be2c84e958fbbf627c9181796c03 Mon Sep 17 00:00:00 2001 From: Mark Olsen Date: Thu, 28 Sep 2006 02:46:42 +0000 Subject: [PATCH] Support forward declaration of classes (hopefully). Reject declarations of already declared classes. git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@2396 fc73d0e0-1445-4013-8a0c-d673dee63da5 --- engine/qclib/qcc_pr_lex.c | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/engine/qclib/qcc_pr_lex.c b/engine/qclib/qcc_pr_lex.c index 1c4b23afc..d5aafff28 100644 --- a/engine/qclib/qcc_pr_lex.c +++ b/engine/qclib/qcc_pr_lex.c @@ -3036,11 +3036,44 @@ QCC_type_t *QCC_PR_ParseType (int newtype) QCC_type_t *fieldtype; char membername[2048]; char *classname = QCC_PR_ParseName(); - newt = QCC_PR_NewType(classname, ev_entity); + int forwarddeclaration; + + newt = 0; + + /* Don't advance the line number yet */ + forwarddeclaration = pr_token[0] == ';'; + + /* Look to see if this type is already defined */ + for(i=0;inum_parms != 0) + QCC_PR_ParseError(ERR_REDECLARATION, "Redeclaration of class %s", classname); + + if (!newt) + newt = QCC_PR_NewType(classname, ev_entity); + newt->size=type_entity->size; type = NULL; + if (forwarddeclaration) + { + QCC_PR_CheckToken(";"); + return NULL; + } + + + if (QCC_PR_CheckToken(":")) { char *parentname = QCC_PR_ParseName();