From 771d05100d478f977b1eeca9fc6e25f4b7e0c401 Mon Sep 17 00:00:00 2001 From: John Camelon Date: Mon, 28 Apr 2003 16:01:38 +0000 Subject: [PATCH] CORE Partial fix for Bug37002 - Order of Offsetables is wrong TESTS Added DOMTests::testOrder(). --- .../cdt/internal/core/dom/DOMBuilder.java | 2 ++ core/org.eclipse.cdt.core/parser/ChangeLog | 3 +++ core/org.eclipse.cdt.ui.tests/ChangeLog | 3 +++ .../cdt/core/parser/tests/DOMTests.java | 24 +++++++++++++++++++ 4 files changed, 32 insertions(+) diff --git a/core/org.eclipse.cdt.core/dom/org/eclipse/cdt/internal/core/dom/DOMBuilder.java b/core/org.eclipse.cdt.core/dom/org/eclipse/cdt/internal/core/dom/DOMBuilder.java index 7ace71992e3..c0cde71fb99 100644 --- a/core/org.eclipse.cdt.core/dom/org/eclipse/cdt/internal/core/dom/DOMBuilder.java +++ b/core/org.eclipse.cdt.core/dom/org/eclipse/cdt/internal/core/dom/DOMBuilder.java @@ -807,6 +807,7 @@ public class DOMBuilder implements IParserCallback TemplateDeclaration d = new TemplateDeclaration( (IScope)container, exported ); if( container instanceof IAccessable ) d.setVisibility( ((IAccessable)container).getVisibility() ); + d.setStartingOffset( exported.getOffset() ); return d; } @@ -824,6 +825,7 @@ public class DOMBuilder implements IParserCallback TemplateDeclaration decl = (TemplateDeclaration)templateDecl; decl.setLastToken(lastToken); decl.getOwnerScope().addDeclaration(decl); + decl.setTotalLength(lastToken.getOffset() + lastToken.getLength() - decl.getStartingOffset() ); } /* (non-Javadoc) diff --git a/core/org.eclipse.cdt.core/parser/ChangeLog b/core/org.eclipse.cdt.core/parser/ChangeLog index 69ba20bdaa9..67455267338 100644 --- a/core/org.eclipse.cdt.core/parser/ChangeLog +++ b/core/org.eclipse.cdt.core/parser/ChangeLog @@ -1,3 +1,6 @@ +2003-04-28 John Camelon + Partial fix for Bug37002 - Order of Offsetables is wrong + 2003-04-27 John Camelon Partial fix for Bug 36932 - RTS: Parser fails on "new" in ctor initializer Fixed Bug 36704 - Problem parsing Loki's Reference Typelist.h diff --git a/core/org.eclipse.cdt.ui.tests/ChangeLog b/core/org.eclipse.cdt.ui.tests/ChangeLog index 03539d5b216..9f5b71f500d 100644 --- a/core/org.eclipse.cdt.ui.tests/ChangeLog +++ b/core/org.eclipse.cdt.ui.tests/ChangeLog @@ -1,3 +1,6 @@ +2003-04-28 John Camelon + Added DOMTests::testOrder(). + 2003-04-28 Peter Graves * model/org/eclipse/cdt/core/model/tests/BinaryTests: Updated to remove a few small errors, and deal with some changes diff --git a/core/org.eclipse.cdt.ui.tests/parser/org/eclipse/cdt/core/parser/tests/DOMTests.java b/core/org.eclipse.cdt.ui.tests/parser/org/eclipse/cdt/core/parser/tests/DOMTests.java index d9416e8a444..be81ca0a3a8 100644 --- a/core/org.eclipse.cdt.ui.tests/parser/org/eclipse/cdt/core/parser/tests/DOMTests.java +++ b/core/org.eclipse.cdt.ui.tests/parser/org/eclipse/cdt/core/parser/tests/DOMTests.java @@ -16,6 +16,7 @@ import org.eclipse.cdt.internal.core.dom.ConstructorChain; import org.eclipse.cdt.internal.core.dom.ConstructorChainElement; import org.eclipse.cdt.internal.core.dom.ConstructorChainElementExpression; import org.eclipse.cdt.internal.core.dom.DeclSpecifier; +import org.eclipse.cdt.internal.core.dom.Declaration; import org.eclipse.cdt.internal.core.dom.Declarator; import org.eclipse.cdt.internal.core.dom.ElaboratedTypeSpecifier; import org.eclipse.cdt.internal.core.dom.EnumerationSpecifier; @@ -1755,5 +1756,28 @@ public class DOMTests extends BaseDOMTest { parse(code.toString()); } + public void testOrder() throws Exception + { + Writer code = new StringWriter(); + code.write( "#define __SGI_STL_INTERNAL_ALGOBASE_H\n" ); + code.write( "#include \n" ); + code.write( "template \n" ); + code.write( "inline void swap(_Tp& __a, _Tp& __b) {\n" ); + code.write( "__STL_REQUIRES(_Tp, _Assignable);\n" ); + code.write( "_Tp __tmp = __a;\n" ); + code.write( "__a = __b;\n" ); + code.write( "__b = __tmp;\n" ); + code.write( "}\n" ); + + Iterator i = parse( code.toString(), true, true ).iterateOffsetableElements(); + assertTrue( i.hasNext() ); + assertTrue( i.next() instanceof Macro ); + assertTrue( i.hasNext() ); + assertTrue( i.next() instanceof Inclusion ); + assertTrue( i.hasNext() ); + assertTrue( i.next() instanceof Declaration ); + assertFalse( i.hasNext() ); + } + }