Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[cdt-patch] Parser Patch - template declarations, bugfixes, a new beginning

CORE
	Fixed defects 36019, 36020, 36045.  
	Finished template declarations and their callbacks for the DOM (not
the Code Model).  

TESTS
	Updated ScannerTest::testSimpleIfdef() for bug36019.  
	Updated ScannerTest::testNumerics() for bug36020.  
	Added ScannerTest::testBug36045().  
	Updated DOMTests::testTemplateDeclaration() for template grammar
updates.  

JohnC

Index: dom/org/eclipse/cdt/internal/core/dom/DOMBuilder.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/dom/org/eclipse/cdt/internal/core/dom/DOMBuilder.java,v
retrieving revision 1.12
diff -u -r1.12 DOMBuilder.java
--- dom/org/eclipse/cdt/internal/core/dom/DOMBuilder.java	1 Apr 2003 18:52:03 -0000	1.12
+++ dom/org/eclipse/cdt/internal/core/dom/DOMBuilder.java	3 Apr 2003 23:52:56 -0000
@@ -254,7 +254,7 @@
 	
 	public Object parameterDeclarationBegin( Object container )
 	{
-		ParameterDeclarationClause clause = (ParameterDeclarationClause)container; 
+		IScope clause = (IScope)container; 
 		ParameterDeclaration pd = new ParameterDeclaration();
 		clause.addDeclaration( pd ); 
 		return pd;
@@ -790,7 +790,7 @@
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#templateTypeParameterBegin(java.lang.Object, org.eclipse.cdt.internal.core.parser.Token)
 	 */
 	public Object templateTypeParameterBegin(Object templDecl, Token kind) {
-		TemplateParameter.ITemplateParameterList list = (TemplateParameter.ITemplateParameterList)templDecl;
+		TemplateParameterList list = (TemplateParameterList)templDecl;
 		int k; 
 		switch( kind.getType() )
 		{
@@ -800,10 +800,15 @@
 			case Token.t_typename:
 				k= TemplateParameter.k_typename;
 				break;
+			case Token.t_template:
+				k= TemplateParameter.k_template;
+				break;
 			default:
 				k = 0;  
 		}
-		return new TemplateParameter( list, k );
+		TemplateParameter p = new TemplateParameter( k );
+		list.addDeclaration(p);
+		return p;
 	}
 
 	/* (non-Javadoc)
@@ -824,8 +829,6 @@
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#templateTypeParameterEnd(java.lang.Object)
 	 */
 	public void templateTypeParameterEnd(Object typeParm) {
-		TemplateParameter parm = ((TemplateParameter)typeParm);
-		parm.getContainer().addTemplateParameter(parm);
 	}
 
 	/* (non-Javadoc)
@@ -840,5 +843,21 @@
 	 */
 	public void pointerOperatorAbort(Object ptrOperator) {
 		ptrOperator = null;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#templateParameterListBegin(java.lang.Object)
+	 */
+	public Object templateParameterListBegin(Object declaration) {
+		ITemplateParameterListOwner d = (ITemplateParameterListOwner)declaration;
+		TemplateParameterList list = new TemplateParameterList(); 
+		d.setTemplateParms(list);
+		return list;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#templateParameterListEnd(java.lang.Object)
+	 */
+	public void templateParameterListEnd(Object parameterList) {
 	}
 }
Index: dom/org/eclipse/cdt/internal/core/dom/Declarator.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/dom/org/eclipse/cdt/internal/core/dom/Declarator.java,v
retrieving revision 1.8
diff -u -r1.8 Declarator.java
--- dom/org/eclipse/cdt/internal/core/dom/Declarator.java	31 Mar 2003 21:04:30 -0000	1.8
+++ dom/org/eclipse/cdt/internal/core/dom/Declarator.java	3 Apr 2003 23:52:56 -0000
@@ -4,7 +4,6 @@
 import java.util.Collections;
 import java.util.List;
 
-import org.eclipse.cdt.internal.core.parser.util.*;
 import org.eclipse.cdt.internal.core.parser.util.DeclSpecifier;
 import org.eclipse.cdt.internal.core.parser.util.Name;
 
Index: dom/org/eclipse/cdt/internal/core/dom/ITemplateParameterListOwner.java
===================================================================
RCS file: dom/org/eclipse/cdt/internal/core/dom/ITemplateParameterListOwner.java
diff -N dom/org/eclipse/cdt/internal/core/dom/ITemplateParameterListOwner.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ dom/org/eclipse/cdt/internal/core/dom/ITemplateParameterListOwner.java	3 Apr 2003 23:52:56 -0000
@@ -0,0 +1,25 @@
+/**********************************************************************
+ * Created on Mar 29, 2003
+ *
+ * Copyright (c) 2002,2003 IBM/Rational Software Corporation and others.
+ * All rights reserved.   This program and the accompanying materials
+ * are made available under the terms of the Common Public License v0.5
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v05.html
+ * 
+ * Contributors: 
+ * IBM Ltd. - Rational Software - Initial API and implementation
+***********************************************************************/
+
+package org.eclipse.cdt.internal.core.dom;
+
+/**
+ * @author jcamelon
+ *
+ */
+public interface ITemplateParameterListOwner
+{
+	public TemplateParameterList getTemplateParms();
+	public void setTemplateParms(TemplateParameterList list);
+}
+	
\ No newline at end of file
Index: dom/org/eclipse/cdt/internal/core/dom/TemplateDeclaration.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/dom/org/eclipse/cdt/internal/core/dom/TemplateDeclaration.java,v
retrieving revision 1.1
diff -u -r1.1 TemplateDeclaration.java
--- dom/org/eclipse/cdt/internal/core/dom/TemplateDeclaration.java	31 Mar 2003 16:12:41 -0000	1.1
+++ dom/org/eclipse/cdt/internal/core/dom/TemplateDeclaration.java	3 Apr 2003 23:52:56 -0000
@@ -20,11 +20,12 @@
  * @author jcamelon
  *
  */
-public class TemplateDeclaration extends Declaration implements IScope, TemplateParameter.ITemplateParameterList {
+public class TemplateDeclaration extends Declaration implements IScope, ITemplateParameterListOwner {
 
 	private final boolean exported; 
 	private IScope ownerScope;  
 	private List declarations = new ArrayList(); 
+	private TemplateParameterList templateParms = null;                
 
 	public TemplateDeclaration( IScope ownerScope, boolean exported )
 	{
@@ -60,20 +61,18 @@
 		return ownerScope;
 	}
 
-
-	private List templateParameters = new ArrayList(); 
-	/* (non-Javadoc)
-	 * @see org.eclipse.cdt.internal.core.dom.TemplateParameter.ITemplateParameterList#getTemplateParameters()
+	/**
+	 * @return
 	 */
-	public List getTemplateParameters() {
-		return Collections.unmodifiableList(templateParameters);
+	public TemplateParameterList getTemplateParms() {
+		return templateParms;
 	}
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.cdt.internal.core.dom.TemplateParameter.ITemplateParameterList#addTemplateParameter(org.eclipse.cdt.internal.core.dom.TemplateParameter)
+	/**
+	 * @param list
 	 */
-	public void addTemplateParameter(TemplateParameter parm) {
-		templateParameters.add( parm );
+	public void setTemplateParms(TemplateParameterList list) {
+		templateParms = list;
 	}
 
 }
Index: dom/org/eclipse/cdt/internal/core/dom/TemplateParameter.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/dom/org/eclipse/cdt/internal/core/dom/TemplateParameter.java,v
retrieving revision 1.1
diff -u -r1.1 TemplateParameter.java
--- dom/org/eclipse/cdt/internal/core/dom/TemplateParameter.java	31 Mar 2003 16:12:41 -0000	1.1
+++ dom/org/eclipse/cdt/internal/core/dom/TemplateParameter.java	3 Apr 2003 23:52:56 -0000
@@ -12,42 +12,29 @@
 ***********************************************************************/
 package org.eclipse.cdt.internal.core.dom;
 
-import java.util.List;
-
 import org.eclipse.cdt.internal.core.parser.util.Name;
 
 /**
  * @author jcamelon
  *
  */
-public class TemplateParameter {
-
-	public interface ITemplateParameterList {
-		public List getTemplateParameters(); 
-		public void addTemplateParameter( TemplateParameter parm ); 
-	}
+public class TemplateParameter extends Declaration implements ITemplateParameterListOwner {
 
-	private ITemplateParameterList container;
 	private final int kind; 
 	
 	public final static int k_class = 2;
-	public final static int k_typename = 3; 
+	public final static int k_typename = 3;
+	public final static int k_template = 4;
 	
 	
-	public TemplateParameter( ITemplateParameterList container, int kind )
+	public TemplateParameter( int kind )
 	{
-		this.container = container;
 		this.kind = kind; 
 	}
 	
 	private Name name = null; 
 	private Name typeId = null;  
-	/**
-	 * @return ITemplateParameterList
-	 */
-	public ITemplateParameterList getContainer() {
-		return container;
-	}
+
 
 	/**
 	 * @return int
@@ -84,6 +71,22 @@
 	 */
 	public void setTypeId(Name typeId) {
 		this.typeId = typeId;
+	}
+
+	TemplateParameterList list;
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.internal.core.dom.ITemplateParameterListOwner#getTemplateParms()
+	 */
+	public TemplateParameterList getTemplateParms() {
+		return list;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.internal.core.dom.ITemplateParameterListOwner#setTemplateParms(org.eclipse.cdt.internal.core.dom.TemplateParameterList)
+	 */
+	public void setTemplateParms(TemplateParameterList list) {
+		this.list = list;
 	}
 
 }
Index: dom/org/eclipse/cdt/internal/core/dom/TemplateParameterList.java
===================================================================
RCS file: dom/org/eclipse/cdt/internal/core/dom/TemplateParameterList.java
diff -N dom/org/eclipse/cdt/internal/core/dom/TemplateParameterList.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ dom/org/eclipse/cdt/internal/core/dom/TemplateParameterList.java	3 Apr 2003 23:52:57 -0000
@@ -0,0 +1,39 @@
+/**********************************************************************
+ * Created on Mar 29, 2003
+ *
+ * Copyright (c) 2002,2003 IBM/Rational Software Corporation and others.
+ * All rights reserved.   This program and the accompanying materials
+ * are made available under the terms of the Common Public License v0.5
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v05.html
+ * 
+ * Contributors: 
+ * IBM Ltd. - Rational Software - Initial API and implementation
+***********************************************************************/
+package org.eclipse.cdt.internal.core.dom;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * @author jcamelon
+ */
+public class TemplateParameterList implements IScope {
+
+	private List parameters = new ArrayList(); 
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.internal.core.dom.IScope#addDeclaration(org.eclipse.cdt.internal.core.dom.Declaration)
+	 */
+	public void addDeclaration(Declaration declaration) {
+		parameters.add( declaration );
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.internal.core.dom.IScope#getDeclarations()
+	 */
+	public List getDeclarations() {
+		return Collections.unmodifiableList( parameters );
+	}
+}
Index: parser/ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/ChangeLog,v
retrieving revision 1.18
diff -u -r1.18 ChangeLog
--- parser/ChangeLog	3 Apr 2003 02:59:58 -0000	1.18
+++ parser/ChangeLog	3 Apr 2003 23:52:57 -0000
@@ -1,3 +1,7 @@
+2003-04-03 John Camelon
+	Fixed defects 36019, 36020, 36045.  
+	Finished template declarations and their callbacks for the DOM (not the Code Model).  
+
 2003-04-01 John Camelon
 	Updated Scanner to convert control-characters to ' '.  
 	Fixed logic error in SimpleDeclarationWrapper.
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.19
diff -u -r1.19 NewModelBuilder.java
--- parser/org/eclipse/cdt/internal/core/model/NewModelBuilder.java	3 Apr 2003 15:38:47 -0000	1.19
+++ parser/org/eclipse/cdt/internal/core/model/NewModelBuilder.java	3 Apr 2003 23:52:57 -0000
@@ -936,4 +936,20 @@
 		ptrOperator = null; 
 	}
 
+	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#templateParameterListBegin(java.lang.Object)
+	 */
+	public Object templateParameterListBegin(Object declaration) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#templateParameterListEnd(java.lang.Object)
+	 */
+	public void templateParameterListEnd(Object parameterList) {
+		// TODO Auto-generated method stub
+		
+	}
+
 }
Index: parser/org/eclipse/cdt/internal/core/parser/ExpressionEvaluator.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ExpressionEvaluator.java,v
retrieving revision 1.13
diff -u -r1.13 ExpressionEvaluator.java
--- parser/org/eclipse/cdt/internal/core/parser/ExpressionEvaluator.java	1 Apr 2003 18:52:18 -0000	1.13
+++ parser/org/eclipse/cdt/internal/core/parser/ExpressionEvaluator.java	3 Apr 2003 23:52:58 -0000
@@ -710,4 +710,17 @@
 	public void pointerOperatorAbort(Object ptrOperator) {
 	}
 
+	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#templateParameterListBegin(java.lang.Object)
+	 */
+	public Object templateParameterListBegin(Object declaration) {
+		return null;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#templateParameterListEnd(java.lang.Object)
+	 */
+	public void templateParameterListEnd(Object parameterList) {
+	}
+
 }
Index: parser/org/eclipse/cdt/internal/core/parser/IParserCallback.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/IParserCallback.java,v
retrieving revision 1.12
diff -u -r1.12 IParserCallback.java
--- parser/org/eclipse/cdt/internal/core/parser/IParserCallback.java	1 Apr 2003 18:52:18 -0000	1.12
+++ parser/org/eclipse/cdt/internal/core/parser/IParserCallback.java	3 Apr 2003 23:52:58 -0000
@@ -128,6 +128,9 @@
 	public void 	templateDeclarationAbort( Object templateDecl );
 	public void		templateDeclarationEnd( Object templateDecl );	
 	
+	public Object	templateParameterListBegin( Object declaration );
+	public void		templateParameterListEnd( Object parameterList );
+	
 	public Object	templateTypeParameterBegin( Object templDecl, Token kind );
 	public void		templateTypeParameterName( Object typeParm );
 	public void		templateTypeParameterAbort( Object typeParm );
Index: parser/org/eclipse/cdt/internal/core/parser/NullParserCallback.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/NullParserCallback.java,v
retrieving revision 1.12
diff -u -r1.12 NullParserCallback.java
--- parser/org/eclipse/cdt/internal/core/parser/NullParserCallback.java	1 Apr 2003 18:52:18 -0000	1.12
+++ parser/org/eclipse/cdt/internal/core/parser/NullParserCallback.java	3 Apr 2003 23:52:58 -0000
@@ -414,7 +414,6 @@
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumSpecifierBegin(java.lang.Object)
 	 */
 	public Object enumSpecifierBegin(Object container, Token enumKey) {
-		// TODO Auto-generated method stub
 		return null;
 	}
 
@@ -422,31 +421,24 @@
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumSpecifierId(java.lang.Object)
 	 */
 	public void enumSpecifierId(Object enumSpec) {
-		// TODO Auto-generated method stub
-		
 	}
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumSpecifierAbort(java.lang.Object)
 	 */
 	public void enumSpecifierAbort(Object enumSpec) {
-		// TODO Auto-generated method stub
-		
 	}
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumSpecifierEnd(java.lang.Object)
 	 */
 	public void enumSpecifierEnd(Object enumSpec) {
-		// TODO Auto-generated method stub
-		
 	}
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumDefinitionBegin(java.lang.Object)
 	 */
 	public Object enumDefinitionBegin(Object enumSpec) {
-		// TODO Auto-generated method stub
 		return null;
 	}
 
@@ -454,16 +446,12 @@
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumDefinitionId(java.lang.Object)
 	 */
 	public void enumDefinitionId(Object enumDefn) {
-		// TODO Auto-generated method stub
-		
 	}
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumDefinitionEnd(java.lang.Object)
 	 */
 	public void enumDefinitionEnd(Object enumDefn) {
-		
-		
 	}
 
 	/* (non-Javadoc)
@@ -609,6 +597,19 @@
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#pointerOperatorAbort(java.lang.Object)
 	 */
 	public void pointerOperatorAbort(Object ptrOperator) {
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#templateParameterListBegin(java.lang.Object)
+	 */
+	public Object templateParameterListBegin(Object declaration) {
+		return null;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#templateParameterListEnd(java.lang.Object)
+	 */
+	public void templateParameterListEnd(Object parameterList) {
 	}
 
 }
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.20
diff -u -r1.20 Parser.java
--- parser/org/eclipse/cdt/internal/core/parser/Parser.java	3 Apr 2003 02:59:58 -0000	1.20
+++ parser/org/eclipse/cdt/internal/core/parser/Parser.java	3 Apr 2003 23:52:59 -0000
@@ -326,17 +326,22 @@
 	protected void templateParameterList( Object templateDeclaration ) throws EndOfFile, Backtrack {
 		// if we have gotten this far then we have a true template-declaration
 		// iterate through the template parameter list
+		
+		Object templateParameterList = null;
+		
+		try { templateParameterList = callback.templateParameterListBegin( templateDeclaration ); } catch( Exception e ) {}
+		
 		for ( ; ; )
 		{
 			if( LT(1) == Token.tGT ) return; 
-			Object currentTemplateParm = null;
 			if( LT(1) == Token.t_class || LT(1) == Token.t_typename )
 			{
+				Object currentTemplateParm = null;
 				try
 				{
 					try{ 
 						currentTemplateParm = callback.templateTypeParameterBegin( 
-								templateDeclaration, consume() );
+						templateParameterList, consume() );
 					} catch( Exception e ) {} 
 					if( LT(1) == Token.tIDENTIFIER ) // optional identifier
 					{
@@ -359,27 +364,25 @@
 			}
 			else if( LT(1) == Token.t_template )
 			{
-				try
+				Token kind = consume( Token.t_template );
+				consume( Token.tLT );
+				Object newTemplateParm = null;
+				try{ newTemplateParm = callback.templateTypeParameterBegin(templateParameterList,kind ); } catch( Exception e ) {}
+				templateParameterList( newTemplateParm );
+				consume( Token.tGT );						 
+				consume( Token.t_class );
+				if( LT(1) == Token.tIDENTIFIER ) // optional identifier
 				{
-					consume( Token.t_template );
-					consume( Token.tLT );
-					Object newTemplateDeclaration = null;
-					templateParameterList( newTemplateDeclaration ); 
-					consume( Token.tGT ); 
-					consume( Token.t_class );
-					if( LT(1) == Token.tIDENTIFIER ) // optional identifier
+					identifier();
+					try{ callback.templateTypeParameterName( newTemplateParm );} catch( Exception e ) {} 
+					if( LT(1) == Token.tASSIGN ) // optional = type-id
 					{
-						identifier(); 
-						if( LT(1) == Token.tASSIGN ) // optional = type-id
-						{
-							consume( Token.tASSIGN );
-							// id-expression()
-						}
+						consume( Token.tASSIGN );
+						name(); 
+						try{ callback.templateTypeParameterInitialTypeId( newTemplateParm );} catch( Exception e ) {}
 					}
 				}
-				catch( Backtrack bt )
-				{
-				}
+				try{ callback.templateTypeParameterEnd( newTemplateParm );} catch( Exception e ) {}
 			}
 			else if( LT(1) == Token.tCOMMA )
 			{
@@ -388,7 +391,7 @@
 			}
 			else
 			{
-				parameterDeclaration( templateDeclaration );
+				parameterDeclaration( templateParameterList );
 			}
 		}
 	}
@@ -1069,7 +1072,7 @@
 				switch (LT(1)) {
 					case Token.tLPAREN:
 						// temporary fix for initializer/function declaration ambiguity
-						if( LT(2) != Token.tINTEGER )
+						if( LT(2) != Token.tINTEGER && LT(2) != Token.t_false && LT(2) != Token.t_true )
 						{
 							// parameterDeclarationClause
 							Object clause = null; 
@@ -1983,11 +1986,12 @@
 		switch (type) {
 			// TO DO: we need more literals...
 			case Token.tINTEGER:
-				try{ callback.expressionTerminal(expression, consume());} catch( Exception e ) {}
-				return;
 			case Token.tSTRING:
+			case Token.t_false: 
+			case Token.t_true:			
 				try{ callback.expressionTerminal(expression, consume());} catch( Exception e ) {}
 				return;
+			
 			case Token.tIDENTIFIER:
 				try{ callback.expressionTerminal(expression, consume());} catch( Exception e ) {}
 				return;
@@ -2068,7 +2072,7 @@
 			throw e;
 		} catch (ScannerException e) {
 			e.printStackTrace();
-			return null;
+			return fetchToken();  
 		}
 	}
 
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.13
diff -u -r1.13 Scanner.java
--- parser/org/eclipse/cdt/internal/core/parser/Scanner.java	3 Apr 2003 02:59:58 -0000	1.13
+++ parser/org/eclipse/cdt/internal/core/parser/Scanner.java	3 Apr 2003 23:53:00 -0000
@@ -359,7 +359,12 @@
 		callback = c;
 	}
 
-	private int getChar() {
+	private int getChar()
+	{
+		return getChar( false );
+	}
+
+	private int getChar( boolean insideString ) {
 		int c = NOCHAR;
 		if (currentContext == null)
 			// past the end of file
@@ -392,16 +397,18 @@
 			}
 		} while (!done);
 
-		if (c == '\\') {
-			c = getChar();
-			if (c == '\r') {
-				c = getChar();
-				if (c == '\n')
-					c = getChar();
-			} else if (c == '\n')
-				c = getChar();
+		if( ! insideString )
+		{
+			if (c == '\\') {
+				c = getChar(false);
+				if (c == '\r') {
+					c = getChar(false);
+					if (c == '\n')
+						c = getChar(false);
+				} else if (c == '\n')
+					c = getChar(false);
+			}
 		}
-
 		return c;
 	}
 
@@ -448,9 +455,31 @@
 
 		while (c != NOCHAR) {
 			if ( ! passOnToClient ) {
-				while (c != '#') {
+				
+				int state = 0; 
+				
+				while (c != NOCHAR && c != '#' ) 
+				{
 					c = getChar();
+					if( c == '/' )
+					{
+						c = getChar();
+						if( c == '/' )
+						{
+							while (c != '\n' && c != NOCHAR)
+								c = getChar();
+							continue;
+						}
+						else if( c == '*' )
+						{
+							skipOverMultilineComment();
+							c = getChar();
+							continue;
+						}
+					}
 				}
+				
+				if( c == NOCHAR ) continue;
 			}
 
 			if ((c == ' ') || (c == '\r') || (c == '\t') || (c == '\n')) {
@@ -475,12 +504,16 @@
 				} 
 				 
 				// string
-				StringBuffer buff = new StringBuffer();
-				c = getChar();
+				StringBuffer buff = new StringBuffer(); 
+				int previous = c;
+				c = getChar(true);
 
-				while (c != '"' && c != '\n') {
+				for( ; ; )
+				{
+					if( ( c == '"' && previous != '\\' )|| ( c == '\n') )break;  
 					buff.append((char) c);
-					c = getChar();
+					previous = c;
+					c = getChar(true);
 				}
 
 				if (c != '\n') 
@@ -608,7 +641,12 @@
 				if( c == '.' )
 				{
 					buff.append( (char)c);
-					if( floatingPoint || hex ) throw new ScannerException( "Invalid floating point @ offset " + currentContext.getOffset() );
+					if( floatingPoint || hex ) 	{
+						if( buff.toString().equals( "..") && getChar() == '.' ) 
+							return newToken( Token.tELIPSE, "..." ); 
+						throw new ScannerException( "Invalid floating point @ offset " + currentContext.getOffset() );						
+					} 
+					
 					floatingPoint = true;
 					c= getChar(); 
 					while ((c >= '0' && c <= '9') )
@@ -1205,7 +1243,7 @@
 			}
 		}
 
-		if (throwExceptionOnEOFWithoutBalancedEndifs && (getDepth() != 0))
+		if (throwExceptionOnEOFWithoutBalancedEndifs && ( getDepth() != 0))
 			throw new ScannerException("End of file encountered without terminating #endif");
 
 		// we're done
Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.ui.tests/ChangeLog,v
retrieving revision 1.18
diff -u -r1.18 ChangeLog
--- ChangeLog	2 Apr 2003 13:18:54 -0000	1.18
+++ ChangeLog	3 Apr 2003 23:54:07 -0000
@@ -1,8 +1,14 @@
+2003-04-03 John Camelon
+	Updated ScannerTest::testSimpleIfdef() for bug36019.  
+	Updated ScannerTest::testNumerics() for bug36020.  
+	Added ScannerTest::testBug36045().  
+	Updated DOMTests::testTemplateDeclaration() for template grammar updates.  
+
 2003-04-01 Andrew Niefer
 	ParserSymbolTableTest. modifications to using declaration tests to reflect changes in the
 	symbol table.  Also added testUserDefinedConversionSequences()
 
-2003-04-01
+2003-04-01 John Camelon
 	Added testBug35906() to DOMTests.
 
 2003-03-31 John Camelon
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.12
diff -u -r1.12 DOMTests.java
--- parser/org/eclipse/cdt/core/parser/tests/DOMTests.java	2 Apr 2003 13:13:34 -0000	1.12
+++ parser/org/eclipse/cdt/core/parser/tests/DOMTests.java	3 Apr 2003 23:54:08 -0000
@@ -893,26 +893,53 @@
 	}
 	
 	public void testTemplateDeclaration() throws Exception {
-		TranslationUnit tu = parse( "template<class T, typename Tibor = junk, class, typename> class myarray { /* ... */ };");
+		TranslationUnit tu = parse( "template<class T, typename Tibor = junk, class, typename, int x, float y,template <class Y> class, template<class A> class AClass> class myarray { /* ... */ };");
 		assertEquals( tu.getDeclarations().size(), 1 );
 		TemplateDeclaration declaration = (TemplateDeclaration)tu.getDeclarations().get(0);
-		assertEquals( declaration.getTemplateParameters().size(), 4 );
-		TemplateParameter parameter = (TemplateParameter)declaration.getTemplateParameters().get(0);
+		assertEquals( declaration.getTemplateParms().getDeclarations().size(), 8 );
+		TemplateParameter parameter = (TemplateParameter)declaration.getTemplateParms().getDeclarations().get(0);
 		assertEquals( parameter.getKind(), TemplateParameter.k_class);
 		assertEquals( parameter.getName().toString(), "T" ); 
 		assertNull( parameter.getTypeId());
-		parameter = (TemplateParameter)declaration.getTemplateParameters().get(1);
+		parameter = (TemplateParameter)declaration.getTemplateParms().getDeclarations().get(1);
 		assertEquals( parameter.getKind(), TemplateParameter.k_typename);
 		assertEquals( parameter.getName().toString(), "Tibor" );
 		assertEquals( parameter.getTypeId().toString(), "junk");
-		parameter = (TemplateParameter)declaration.getTemplateParameters().get(2);
+		parameter = (TemplateParameter)declaration.getTemplateParms().getDeclarations().get(2);
 		assertEquals( parameter.getKind(), TemplateParameter.k_class);
 		assertNull( parameter.getName() );
 		assertNull( parameter.getTypeId());
-		parameter = (TemplateParameter)declaration.getTemplateParameters().get(3);
+		parameter = (TemplateParameter)declaration.getTemplateParms().getDeclarations().get(3);
 		assertEquals( parameter.getKind(), TemplateParameter.k_typename);
 		assertNull( parameter.getName() );
 		assertNull( parameter.getTypeId());
+		ParameterDeclaration decl = (ParameterDeclaration)declaration.getTemplateParms().getDeclarations().get(4);
+		assertEquals( decl.getDeclSpecifier().getType(), DeclSpecifier.t_int );
+		assertEquals( 1, decl.getDeclarators().size() );
+		assertEquals( "x", ((Declarator)decl.getDeclarators().get(0)).getName().toString() );
+		 
+		decl = (ParameterDeclaration)declaration.getTemplateParms().getDeclarations().get(5);
+		assertEquals( decl.getDeclSpecifier().getType(), DeclSpecifier.t_float );
+		assertEquals( 1, decl.getDeclarators().size() );
+		assertEquals( "y", ((Declarator)decl.getDeclarators().get(0)).getName().toString() );
+		 
+		parameter = (TemplateParameter)declaration.getTemplateParms().getDeclarations().get(6);
+		assertEquals( parameter.getKind(), TemplateParameter.k_template );
+		assertEquals( parameter.getTemplateParms().getDeclarations().size(), 1 );
+		assertNull( parameter.getName() );
+		TemplateParameter subParameter = (TemplateParameter)parameter.getTemplateParms().getDeclarations().get(0);
+		assertEquals( subParameter.getKind(), TemplateParameter.k_class );
+		assertEquals( subParameter.getName().toString(), "Y" );
+		assertNull( subParameter.getTypeId() );
+		
+		parameter = (TemplateParameter)declaration.getTemplateParms().getDeclarations().get(7);
+		assertEquals( parameter.getKind(), TemplateParameter.k_template );
+		assertEquals( parameter.getTemplateParms().getDeclarations().size(), 1 );
+		subParameter = (TemplateParameter)parameter.getTemplateParms().getDeclarations().get(0);
+		assertEquals( subParameter.getKind(), TemplateParameter.k_class );
+		assertEquals( subParameter.getName().toString(), "A" );
+		assertNull( subParameter.getTypeId() );
+		assertEquals( parameter.getName().toString(), "AClass" );
 		assertEquals( declaration.getDeclarations().size(), 1 );
 		SimpleDeclaration myArray = (SimpleDeclaration)declaration.getDeclarations().get(0);
 		ClassSpecifier classSpec = (ClassSpecifier)myArray.getTypeSpecifier();
@@ -920,7 +947,7 @@
 		assertEquals( classSpec.getName().toString(), "myarray");
 		assertEquals( 0, classSpec.getDeclarations().size() );
 	}
-	
+		
 	public void testStruct() throws Exception
 	{
 		StringWriter writer = new StringWriter(); 
Index: parser/org/eclipse/cdt/core/parser/tests/ScannerTestCase.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.ui.tests/parser/org/eclipse/cdt/core/parser/tests/ScannerTestCase.java,v
retrieving revision 1.8
diff -u -r1.8 ScannerTestCase.java
--- parser/org/eclipse/cdt/core/parser/tests/ScannerTestCase.java	1 Apr 2003 18:54:08 -0000	1.8
+++ parser/org/eclipse/cdt/core/parser/tests/ScannerTestCase.java	3 Apr 2003 23:54:09 -0000
@@ -1,6 +1,7 @@
 package org.eclipse.cdt.core.parser.tests;
 
 import java.io.StringReader;
+import java.io.StringWriter;
 import java.util.List;
 
 import junit.framework.Test;
@@ -219,13 +220,14 @@
 	{
 		try
 		{
-			initializeScanner("3.0 0.9 .5 3. 4E5 2.01E-03");
+			initializeScanner("3.0 0.9 .5 3. 4E5 2.01E-03 ...");
 			validateFloatingPointLiteral( "3.0");
 			validateFloatingPointLiteral( "0.9");
 			validateFloatingPointLiteral( ".5");
 			validateFloatingPointLiteral( "3."); 
 			validateFloatingPointLiteral( "4E5");
 			validateFloatingPointLiteral( "2.01E-03" );
+			validateToken( Token.tELIPSE );
 			validateEOF();
 		}
 		catch( ScannerException se )
@@ -510,6 +512,9 @@
 			validateInteger("101");
 			validateToken(Token.tSEMI);
 			validateEOF();
+			
+			initializeScanner( "/* NB: This is #if 0'd out */"); 
+			validateEOF(); 
 
 		}
 		catch (Exception e)
@@ -1066,10 +1071,10 @@
 		try {
 			Token t= scanner.nextToken();
 			if( lString )
-				assertTrue(t.type == Token.tLSTRING);
+				assertTrue(t.getType() == Token.tLSTRING);
 			else
-				assertTrue(t.type == Token.tSTRING);
-			assertTrue(t.image.equals(expectedImage));
+				assertTrue(t.getType() == Token.tSTRING);
+			assertTrue(t.getImage().equals(expectedImage));
 		} catch (Parser.EndOfFile e) {
 			assertTrue(false);
 		}
@@ -1138,7 +1143,7 @@
 		}
 	}
 
-	public void test35892()
+	public void testBug35892()
 	{
 		try
 		{
@@ -1152,11 +1157,15 @@
 		}
 	}
 
-//	public void testStringConcatenation()
+//	public void testBug36047()
 //	{
 //		try
 //		{
-//			initializeScanner("# define MAD_VERSION_STRINGIZE(str)	#str" ); 
+//			StringWriter writer = new StringWriter(); 
+//			writer.write( "# define MAD_VERSION_STRINGIZE(str)	#str\n" ); 
+//			writer.write( "# define MAD_VERSION_STRING(num)	MAD_VERSION_STRINGIZE(num)\n" ); 
+//			writer.write( "# define MAD_VERSION		MAD_VERSION_STRING(MAD_VERSION_MAJOR) \".\"\n" );
+//			initializeScanner( writer.toString() );  
 //			validateEOF(); 
 //		}
 //		catch( ScannerException se )
@@ -1164,6 +1173,17 @@
 //			fail( EXCEPTION_THROWN + se.toString() );
 //		}
 //	}
+
+	public void testBug36045() throws Exception
+	{
+		StringBuffer buffer = new StringBuffer();
+		buffer.append( '"' );
+		buffer.append( '\\');
+		buffer.append( '"'); 
+		buffer.append( '"');
+		initializeScanner( buffer.toString());
+		validateString( "\\\"");
+	}
 
 	public void testConditionalWithBraces()
 	{

Back to the top