[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
[cdt-patch] Applied Patch - Parser fixes
|
Some minor fixes to get constructors/destructors parsing as
well as some minor clean up and robustness.
Doug Schaefer
Senior
Staff Software Engineer
Rational Software - IBM Software Group
Ottawa (Kanata), Ontario, Canada
|
Index: parser/org/eclipse/cdt/internal/core/model/NewModelBuilder.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/model/NewModelBuilder.java,v
retrieving revision 1.3
diff -u -r1.3 NewModelBuilder.java
--- parser/org/eclipse/cdt/internal/core/model/NewModelBuilder.java 6 Mar 2003 19:29:36 -0000 1.3
+++ parser/org/eclipse/cdt/internal/core/model/NewModelBuilder.java 6 Mar 2003 19:42:20 -0000
@@ -120,7 +120,6 @@
elem.setPos(offset, macroName.length());
((TranslationUnit)translationUnit.getElement()).addChild(elem);
-
}
private int startPos;
@@ -150,7 +149,6 @@
((TranslationUnit)translationUnit.getElement()).addChild(elem);
elem.setIdPos(offset, includeFile.length());
elem.setPos(offset, includeFile.length());
-
}
/**
Index: parser/org/eclipse/cdt/internal/core/model/SimpleDeclarationWrapper.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/model/SimpleDeclarationWrapper.java,v
retrieving revision 1.4
diff -u -r1.4 SimpleDeclarationWrapper.java
--- parser/org/eclipse/cdt/internal/core/model/SimpleDeclarationWrapper.java 6 Mar 2003 19:29:36 -0000 1.4
+++ parser/org/eclipse/cdt/internal/core/model/SimpleDeclarationWrapper.java 6 Mar 2003 19:42:20 -0000
@@ -78,6 +78,10 @@
List clause =currentDeclarator.getParameterDeclarationClause();
if( clause == null )
{
+ // TODO - this was to get rid of the NULL pointer we've been seeing
+ if (currentDeclarator.getName() == null)
+ return;
+
// this is an attribute or a varaible
if( parentElement instanceof IStructure )
{
@@ -85,9 +89,6 @@
}
else if( parentElement instanceof ITranslationUnit )
{
- // TODO - this was to get rid of the NULL pointer we've been seeing
- if (currentDeclarator.getName() == null)
- return;
declaration = new Variable( parentElement, currentDeclarator.getName().toString() );
}
}
Index: parser/org/eclipse/cdt/internal/core/parser/Parser.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Parser.java,v
retrieving revision 1.4
diff -u -r1.4 Parser.java
--- parser/org/eclipse/cdt/internal/core/parser/Parser.java 6 Mar 2003 19:29:36 -0000 1.4
+++ parser/org/eclipse/cdt/internal/core/parser/Parser.java 6 Mar 2003 19:42:21 -0000
@@ -78,10 +78,10 @@
public void translationUnit() throws Exception {
Object translationUnit = callback.translationUnitBegin();
Token lastBacktrack = null;
- Token lastToken = null;
+ Token lastToken = null;
while (LT(1) != Token.tEOF) {
try {
- lastToken = currToken;
+ lastToken = currToken;
declaration( translationUnit );
if( currToken == lastToken )
skipToNextSemi();
@@ -295,6 +295,8 @@
case Token.t_friend:
case Token.t_const:
case Token.t_volatile:
+ callback.simpleDeclSpecifier(decl, consume());
+ break;
case Token.t_char:
case Token.t_wchar_t:
case Token.t_bool:
@@ -317,7 +319,8 @@
consume();
// handle nested later:
case Token.tIDENTIFIER:
- if( ! encounteredRawType )
+ // TODO - Kludgy way to handle constructors/destructors
+ if (!encounteredRawType && LT(2) != Token.tCOLONCOLON && LT(2) != Token.tLPAREN)
{
// handle nested later:
if( ! encounteredTypename )
@@ -367,9 +370,11 @@
last = consume();
// TODO - whacky way to deal with destructors, please revisit
+ if (LT(1) == Token.tCOMPL)
+ consume();
+
switch (LT(1)) {
case Token.tIDENTIFIER:
- case Token.tCOMPL:
last = consume();
break;
default:
@@ -379,9 +384,11 @@
while (LT(1) == Token.tCOLONCOLON) {
last = consume();
+ if (LT(1) == Token.tCOMPL)
+ consume();
+
switch (LT(1)) {
case Token.tIDENTIFIER:
- case Token.tCOMPL:
last = consume();
}
}
@@ -430,6 +437,16 @@
// doNothing
}
+ // assignmentExpression || { initializerList , } || { }
+ try
+ {
+ assignmentExpression();
+ }
+ catch( Backtrack b )
+ {
+ // doNothing
+ }
+
if (LT(1) == Token.tLBRACE) {
// for now, just consume to matching brace
consume();
@@ -448,6 +465,9 @@
}
}
}
+ else
+ {
+ }
}
callback.declaratorEnd( declarator );
@@ -550,7 +570,7 @@
Token mark = mark();
if (t == Token.tIDENTIFIER || t == Token.tCOLONCOLON)
- name();
+ name();
if (t == Token.tSTAR) {
consume();
@@ -610,6 +630,8 @@
memberDeclarationLoop:
while (LT(1) != Token.tRBRACE) {
+ Token lastToken = currToken;
+
switch (LT(1)) {
case Token.t_public:
consume();
@@ -629,6 +651,8 @@
default:
declaration(classSpec);
}
+ if (lastToken == currToken)
+ skipToNextSemi();
}
// consume the }
consume();