[
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()
{