[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
[cdt-patch] Patch - Parser defects addressed for April Fools
|
CORE
- fixed bug35906
- updated scanner to not puke on certain control characters
TESTS
- added testBug35906() to DOMTests.
JohnC
Index: parser/ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/ChangeLog,v
retrieving revision 1.15
diff -u -r1.15 ChangeLog
--- parser/ChangeLog 1 Apr 2003 18:52:37 -0000 1.15
+++ parser/ChangeLog 1 Apr 2003 22:13:45 -0000
@@ -1,3 +1,7 @@
+2003-04-01 John Camelon
+ Fixed bug35906
+ Udated Scanner to not puke on certain control characters.
+
2003-03-31 John Camelon
Fixed unsigned short SimpleDeclarations not showing up in the outline view.
Fixed default visibilities for structs in outline view.
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.16
diff -u -r1.16 NewModelBuilder.java
--- parser/org/eclipse/cdt/internal/core/model/NewModelBuilder.java 1 Apr 2003 19:50:53 -0000 1.16
+++ parser/org/eclipse/cdt/internal/core/model/NewModelBuilder.java 1 Apr 2003 22:13:45 -0000
@@ -359,6 +359,7 @@
}
else
{
+ elem.setTypeName( wrapper.getClassKind().getImage() );
elem.setIdPos(wrapper.getClassKind().getOffset(), wrapper.getClassKind().getLength());
elem.setPos(wrapper.getClassKind().getOffset(), wrapper.getClassKind().getLength());
}
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.18
diff -u -r1.18 Parser.java
--- parser/org/eclipse/cdt/internal/core/parser/Parser.java 1 Apr 2003 18:52:18 -0000 1.18
+++ parser/org/eclipse/cdt/internal/core/parser/Parser.java 1 Apr 2003 22:13:47 -0000
@@ -719,7 +719,7 @@
// this is an elaborated class specifier
Object elab = null;
try{ elab = callback.elaboratedTypeSpecifierBegin( decl, consume() );} catch( Exception e ) {}
- className();
+ name();
try{ callback.elaboratedTypeSpecifierName( elab ); } catch( Exception e ) {}
try{ callback.elaboratedTypeSpecifierEnd( elab );} catch( Exception e ) {}
encounteredTypename = true;
@@ -830,6 +830,25 @@
switch (LT(1)) {
case Token.tIDENTIFIER:
last = consume();
+ if( LT(1) == Token.tLT )
+ {
+ consume( Token.tLT );
+
+ // until we get all the names sorted out
+ int depth = 1;
+
+ while (depth > 0) {
+ last = consume();
+ switch ( last.getType()) {
+ case Token.tGT:
+ --depth;
+ break;
+ case Token.tLT:
+ ++depth;
+ break;
+ }
+ }
+ }
break;
default:
throw backtrack;
@@ -844,6 +863,26 @@
switch (LT(1)) {
case Token.tIDENTIFIER:
last = consume();
+ if( LT(1) == Token.tLT )
+ {
+ consume( Token.tLT );
+
+ // until we get all the names sorted out
+ int depth = 1;
+
+ while (depth > 0) {
+ last = consume();
+ switch ( last.getType()) {
+ case Token.tGT:
+ --depth;
+ break;
+ case Token.tLT:
+ ++depth;
+ break;
+ }
+ }
+ }
+
}
}
Index: parser/org/eclipse/cdt/internal/core/parser/Scanner.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Scanner.java,v
retrieving revision 1.11
diff -u -r1.11 Scanner.java
--- parser/org/eclipse/cdt/internal/core/parser/Scanner.java 1 Apr 2003 18:52:18 -0000 1.11
+++ parser/org/eclipse/cdt/internal/core/parser/Scanner.java 1 Apr 2003 22:13:48 -0000
@@ -347,7 +347,7 @@
private boolean throwExceptionOnUnboundedString = true;
private boolean throwExceptionOnEOFWithinMultilineComment = true;
private boolean throwExceptionOnEOFWithoutBalancedEndifs = true;
- private boolean throwExceptionOnBadCharacterRead = true;
+ private boolean throwExceptionOnBadCharacterRead = false;
private boolean quickScan = false;
public void setQuickScan(boolean qs) {
@@ -1194,7 +1194,11 @@
// Bad character
if( throwExceptionOnBadCharacterRead )
throw new ScannerException( "Invalid character '" + (char)c + "' read @ offset " + currentContext.getOffset() + " of file " + currentContext.getFilename() );
- break;
+ else
+ {
+ c = getChar();
+ continue;
+ }
}
throw Parser.endOfFile;
Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.ui.tests/ChangeLog,v
retrieving revision 1.16
diff -u -r1.16 ChangeLog
--- ChangeLog 1 Apr 2003 18:54:16 -0000 1.16
+++ ChangeLog 1 Apr 2003 22:14:25 -0000
@@ -1,3 +1,6 @@
+2003-04-01
+ Added testBug35906() to DOMTests.
+
2003-03-31 John Camelon
Added testStruct() to DOMTests.
Added test35892()to ScannerTest.
Index: parser/org/eclipse/cdt/core/parser/tests/DOMTests.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.ui.tests/parser/org/eclipse/cdt/core/parser/tests/DOMTests.java,v
retrieving revision 1.11
diff -u -r1.11 DOMTests.java
--- parser/org/eclipse/cdt/core/parser/tests/DOMTests.java 1 Apr 2003 18:54:08 -0000 1.11
+++ parser/org/eclipse/cdt/core/parser/tests/DOMTests.java 1 Apr 2003 22:14:26 -0000
@@ -968,6 +968,26 @@
assertEquals( d.getPointerOperators().size(), 0 );
assertEquals( d.getName().toString(), "left" );
}
-
+
+
+ public void testBug35906() throws Exception
+ {
+ StringWriter code = new StringWriter();
+ code.write( "void TTest::MTest() {}\n" );
+ code.write( "struct TTest::STest *TTest::FTest (int i) {}\n" );
+ TranslationUnit tu = parse( code.toString() );
+ assertEquals( tu.getDeclarations().size(), 2 );
+ SimpleDeclaration declaration = (SimpleDeclaration)tu.getDeclarations().get(0);
+ assertEquals( declaration.getDeclSpecifier().getType(), DeclSpecifier.t_void );
+ assertEquals( declaration.getDeclarators().size(), 1 );
+ Declarator d = (Declarator)declaration.getDeclarators().get(0);
+ assertEquals( d.getName().toString(), "TTest::MTest");
+
+ declaration = (SimpleDeclaration)tu.getDeclarations().get(1);
+ ElaboratedTypeSpecifier spec = (ElaboratedTypeSpecifier)declaration.getTypeSpecifier();
+ assertEquals( spec.getClassKey(), ClassKey.t_struct );
+ assertEquals( spec.getName().toString(), "TTest::STest" );
+ }
+
}