[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
Applied: [cdt-patch] Parser - NewModelBuilder adjustments, Scanne r fix for Alain
|
-----Original Message-----
From: Camelon, John
Sent: Monday, March 31, 2003 3:56 PM
To: Schaefer, Doug
Subject: RE: [cdt-patch] Parser - NewModelBuilder adjustments, Scanner fix
for Alain
Again.
> -----Original Message-----
> From: Schaefer, Doug [mailto:dschaefer@xxxxxxxxxxxx]
> Sent: Monday, March 31, 2003 3:48 PM
> To: 'cdt-patch@xxxxxxxxxxx'
> Subject: RE: [cdt-patch] Parser - NewModelBuilder adjustments, Scanner
> fix for Alain
>
>
> Please update and resend. Too many people changing the
> ChangeLog at the
> same time ;-(
>
> Thanks.
> Doug
>
> -----Original Message-----
> From: Camelon, John [mailto:jcamelon@xxxxxxxxxxxx]
> Sent: Monday, March 31, 2003 3:22 PM
> To: Cdt-Patch (E-mail)
> Subject: [cdt-patch] Parser - NewModelBuilder adjustments,
> Scanner fix for
> Alain
>
> CORE
> - Updated NewModelBuilder to work for ElaboratedTypeSpecifiers,
> PointerOperators, Const Methods.
> - Fixed bug35878.
>
> JohnC
>
> _______________________________________________
> cdt-patch mailing list
> cdt-patch@xxxxxxxxxxx
> http://dev.eclipse.org/mailman/listinfo/cdt-patch
>
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.10
diff -u -r1.10 DOMBuilder.java
--- dom/org/eclipse/cdt/internal/core/dom/DOMBuilder.java 31 Mar 2003 16:12:41 -0000 1.10
+++ dom/org/eclipse/cdt/internal/core/dom/DOMBuilder.java 31 Mar 2003 20:59:22 -0000
@@ -834,4 +834,11 @@
public void templateTypeParameterAbort(Object typeParm) {
typeParm = null;
}
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.internal.core.parser.IParserCallback#pointerOperatorAbort(java.lang.Object)
+ */
+ public void pointerOperatorAbort(Object ptrOperator) {
+ ptrOperator = null;
+ }
}
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.7
diff -u -r1.7 Declarator.java
--- dom/org/eclipse/cdt/internal/core/dom/Declarator.java 31 Mar 2003 16:12:41 -0000 1.7
+++ dom/org/eclipse/cdt/internal/core/dom/Declarator.java 31 Mar 2003 20:59:22 -0000
@@ -4,6 +4,7 @@
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/EnumerationSpecifier.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/dom/org/eclipse/cdt/internal/core/dom/EnumerationSpecifier.java,v
retrieving revision 1.2
diff -u -r1.2 EnumerationSpecifier.java
--- dom/org/eclipse/cdt/internal/core/dom/EnumerationSpecifier.java 29 Mar 2003 05:35:47 -0000 1.2
+++ dom/org/eclipse/cdt/internal/core/dom/EnumerationSpecifier.java 31 Mar 2003 20:59:22 -0000
@@ -12,8 +12,8 @@
***********************************************************************/
package org.eclipse.cdt.internal.core.dom;
+import java.util.ArrayList;
import java.util.Collections;
-import java.util.LinkedList;
import java.util.List;
import org.eclipse.cdt.internal.core.parser.util.Name;
@@ -29,7 +29,7 @@
}
private Name name = null;
- private List enumeratorDefinitions = new LinkedList();
+ private List enumeratorDefinitions = new ArrayList();
public void addEnumeratorDefinition( EnumeratorDefinition def )
{
Index: parser/ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/ChangeLog,v
retrieving revision 1.13
diff -u -r1.13 ChangeLog
--- parser/ChangeLog 31 Mar 2003 20:43:07 -0000 1.13
+++ parser/ChangeLog 31 Mar 2003 20:59:23 -0000
@@ -3,6 +3,10 @@
references as parameters. Also support for typedefs as function parameters
2003-03-31 John Camelon
+ Updated NewModelBuilder to work for ElaboratedTypeSpecifiers, PointerOperators, Const Methods.
+ Fixed bug35878.
+
+2003-03-31 John Camelon
Updated Scanner to work for Strings literals like L"this string"
Updated Scanner to work for floating points literals.
Updated Scanner to be more forgiving on errors in QuickScan mode.
Index: parser/org/eclipse/cdt/internal/core/model/Declarator.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/model/Declarator.java,v
retrieving revision 1.2
diff -u -r1.2 Declarator.java
--- parser/org/eclipse/cdt/internal/core/model/Declarator.java 4 Mar 2003 18:25:40 -0000 1.2
+++ parser/org/eclipse/cdt/internal/core/model/Declarator.java 31 Mar 2003 20:59:23 -0000
@@ -1,5 +1,6 @@
package org.eclipse.cdt.internal.core.model;
+import java.util.ArrayList;
import java.util.List;
import org.eclipse.cdt.internal.core.parser.util.Name;
@@ -15,7 +16,8 @@
public class Declarator {
private Name name;
-
+ private boolean isConst = false;
+ private boolean isVolatile = false;
/**
* Returns the name.
* @return Name
@@ -49,4 +51,49 @@
public void setParameterDeclarationClause(List parameterDeclarationClause) {
this.parameterDeclarationClause = parameterDeclarationClause;
}
+
+ private List pointerOperators = new ArrayList();
+
+ /**
+ * @return List
+ */
+ public List getPointerOperators() {
+ return pointerOperators;
+ }
+
+ public void addPointerOperator( PointerOperator po )
+ {
+ pointerOperators.add( po );
+ }
+
+ /**
+ * @return boolean
+ */
+ public boolean isConst() {
+ return isConst;
+ }
+
+ /**
+ * Sets the isConst.
+ * @param isConst The isConst to set
+ */
+ public void setConst(boolean isConst) {
+ this.isConst = isConst;
+ }
+
+ /**
+ * @return boolean
+ */
+ public boolean isVolatile() {
+ return isVolatile;
+ }
+
+ /**
+ * Sets the isVolatile.
+ * @param isVolatile The isVolatile to set
+ */
+ public void setVolatile(boolean isVolatile) {
+ this.isVolatile = isVolatile;
+ }
+
}
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.13
diff -u -r1.13 NewModelBuilder.java
--- parser/org/eclipse/cdt/internal/core/model/NewModelBuilder.java 31 Mar 2003 16:12:41 -0000 1.13
+++ parser/org/eclipse/cdt/internal/core/model/NewModelBuilder.java 31 Mar 2003 20:59:23 -0000
@@ -334,16 +334,39 @@
Structure elem = new Structure( wrapper.getParent(), wrapper.getKind(), null );
wrapper.setElement( elem );
wrapper.getParent().addChild(elem);
- String name = currName.toString();
+ String name = wrapper.getName().toString();
elem.setElementName( name );
- elem.setIdPos(currName.getStartOffset(), name.length());
- elem.setPos(currName.getStartOffset(), name.length());
+ elem.setIdPos(wrapper.getName().getStartOffset(), name.length());
+ elem.setPos(wrapper.getName().getStartOffset(), name.length());
}
/**
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#elaboratedTypeSpecifierBegin(java.lang.Object)
*/
public Object elaboratedTypeSpecifierBegin(Object container, Token classKey) {
- return null;
+ if( container instanceof SimpleDeclarationWrapper )
+ {
+ SimpleDeclarationWrapper c = (SimpleDeclarationWrapper)container;
+
+ int kind;
+ switch (classKey.getType()) {
+ case Token.t_class:
+ kind = ICElement.C_CLASS;
+ break;
+ case Token.t_struct:
+ kind = ICElement.C_STRUCT;
+ break;
+ default:
+ kind = ICElement.C_UNION;
+ }
+
+ SimpleDeclarationWrapper wrapper = new SimpleDeclarationWrapper();
+ wrapper.setKind( kind );
+ wrapper.setParent( c.getParent() );
+
+ return wrapper;
+ }
+ else
+ return null;
}
/**
@@ -356,6 +379,11 @@
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#elaboratedTypeSpecifierName(java.lang.Object)
*/
public void elaboratedTypeSpecifierName(Object elab) {
+ if( elab instanceof SimpleDeclarationWrapper )
+ {
+ SimpleDeclarationWrapper wrapper = (SimpleDeclarationWrapper)elab;
+ wrapper.setName( currName );
+ }
}
@@ -399,8 +427,9 @@
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#pointerOperatorBegin(java.lang.Object, org.eclipse.cdt.internal.core.parser.Token)
*/
public Object pointerOperatorBegin(Object container) {
- // TODO Auto-generated method stub
- return null;
+ Declarator d = (Declarator)container;
+ PointerOperator po = new PointerOperator(d);
+ return po;
}
@@ -408,7 +437,8 @@
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#pointerOperatorEnd(java.lang.Object)
*/
public void pointerOperatorEnd(Object ptrOperator) {
- // TODO Auto-generated method stub
+ PointerOperator po = (PointerOperator)ptrOperator;
+ po.getOwnerDeclarator().addPointerOperator( po );
}
@@ -417,31 +447,57 @@
*/
public void pointerOperatorName(Object ptrOperator) {
// TODO Auto-generated method stub
-
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#pointerOperatorType(java.lang.Object, org.eclipse.cdt.internal.core.parser.Token)
*/
public void pointerOperatorType(Object ptrOperator, Token type) {
- // TODO Auto-generated method stub
-
- }
+ PointerOperator po=(PointerOperator)ptrOperator;
+ switch( type.getType() )
+ {
+ case Token.tSTAR:
+ po.setKind( PointerOperator.k_pointer );
+ break;
+ case Token.tAMPER:
+ po.setKind( PointerOperator.k_reference );
+ break;
+ default:
+ } }
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#pointerOperatorCVModifier(java.lang.Object, org.eclipse.cdt.internal.core.parser.Token)
*/
public void pointerOperatorCVModifier(Object ptrOperator, Token modifier) {
- // TODO Auto-generated method stub
-
+ PointerOperator po=(PointerOperator)ptrOperator;
+ switch( modifier.getType() )
+ {
+ case Token.t_const:
+ po.setConst( true );
+ break;
+ case Token.t_volatile:
+ po.setVolatile( true );
+ break;
+ default:
+ }
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#declaratorCVModifier(java.lang.Object, org.eclipse.cdt.internal.core.parser.Token)
*/
public void declaratorCVModifier(Object declarator, Token modifier) {
- // TODO Auto-generated method stub
-
+ Declarator d = (Declarator)declarator;
+ switch( modifier.getType() )
+ {
+ case Token.t_const:
+ d.setConst( true );
+ break;
+ case Token.t_volatile:
+ d.setVolatile(true);
+ break;
+ default:
+ break;
+ }
}
/* (non-Javadoc)
@@ -585,39 +641,32 @@
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumSpecifierBegin(java.lang.Object)
*/
public Object enumSpecifierBegin(Object container) {
- // TODO Auto-generated method stub
- return null;
+ return null;
}
/* (non-Javadoc)
* @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
-
+ enumSpec = null;
}
/* (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;
}
@@ -625,16 +674,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) {
- // TODO Auto-generated method stub
-
}
/* (non-Javadoc)
@@ -713,32 +758,28 @@
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#explicitInstantiationBegin(java.lang.Object)
*/
public Object explicitInstantiationBegin(Object container) {
- // TODO Auto-generated method stub
- return null;
+ // until explicit-instantiations are part of the code model just return the container object
+ return container;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#explicitInstantiationEnd(java.lang.Object)
*/
public void explicitInstantiationEnd(Object instantiation) {
- // TODO Auto-generated method stub
-
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#explicitSpecializationBegin(java.lang.Object)
*/
public Object explicitSpecializationBegin(Object container) {
- // TODO Auto-generated method stub
- return null;
+ // until explicit-specializations are part of the code model just return the container object
+ return container;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#explicitSpecializationEnd(java.lang.Object)
*/
public void explicitSpecializationEnd(Object instantiation) {
- // TODO Auto-generated method stub
-
}
/* (non-Javadoc)
@@ -753,8 +794,8 @@
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#templateDeclarationBegin(java.lang.Object, boolean)
*/
public Object templateDeclarationBegin(Object container, boolean exported) {
- // TODO Auto-generated method stub
- return null;
+ // until linkageSpecs are part of the code model just return the container object
+ return container;
}
/* (non-Javadoc)
@@ -810,7 +851,13 @@
*/
public void templateTypeParameterAbort(Object typeParm) {
// TODO Auto-generated method stub
-
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.internal.core.parser.IParserCallback#pointerOperatorAbort(java.lang.Object)
+ */
+ public void pointerOperatorAbort(Object ptrOperator) {
+ ptrOperator = null;
}
}
Index: parser/org/eclipse/cdt/internal/core/model/PointerOperator.java
===================================================================
RCS file: parser/org/eclipse/cdt/internal/core/model/PointerOperator.java
diff -N parser/org/eclipse/cdt/internal/core/model/PointerOperator.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ parser/org/eclipse/cdt/internal/core/model/PointerOperator.java 31 Mar 2003 20:59:24 -0000
@@ -0,0 +1,86 @@
+/**********************************************************************
+ * Created on Mar 31, 2003
+ *
+ * Copyright (c) 2002,2003 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:
+ * Rational Software - Initial API and implementation
+***********************************************************************/
+package org.eclipse.cdt.internal.core.model;
+
+/**
+ * @author jcamelon
+ *
+ */
+public class PointerOperator {
+
+ private final Declarator ownerDeclarator;
+
+ public PointerOperator( Declarator decl )
+ {
+ ownerDeclarator = decl;
+ }
+
+ /**
+ * @return Declarator
+ */
+ public Declarator getOwnerDeclarator() {
+ return ownerDeclarator;
+ }
+ public static final int k_pointer = 1;
+ public static final int k_reference = 2;
+
+ private boolean isConst = false;
+ private boolean isVolatile = false;
+ private int kind;
+
+ /**
+ * @return boolean
+ */
+ public boolean isConst() {
+ return isConst;
+ }
+
+ /**
+ * @return boolean
+ */
+ public boolean isVolatile() {
+ return isVolatile;
+ }
+
+ /**
+ * @return int
+ */
+ public int getKind() {
+ return kind;
+ }
+
+ /**
+ * Sets the isConst.
+ * @param isConst The isConst to set
+ */
+ public void setConst(boolean isConst) {
+ this.isConst = isConst;
+ }
+
+ /**
+ * Sets the isVolatile.
+ * @param isVolatile The isVolatile to set
+ */
+ public void setVolatile(boolean isVolatile) {
+ this.isVolatile = isVolatile;
+ }
+
+ /**
+ * Sets the kind.
+ * @param kind The kind to set
+ */
+ public void setKind(int kind) {
+ this.kind = kind;
+ }
+
+}
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.11
diff -u -r1.11 ExpressionEvaluator.java
--- parser/org/eclipse/cdt/internal/core/parser/ExpressionEvaluator.java 31 Mar 2003 16:12:41 -0000 1.11
+++ parser/org/eclipse/cdt/internal/core/parser/ExpressionEvaluator.java 31 Mar 2003 20:59:24 -0000
@@ -704,4 +704,10 @@
public void templateTypeParameterAbort(Object typeParm) {
}
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.internal.core.parser.IParserCallback#pointerOperatorAbort(java.lang.Object)
+ */
+ public void pointerOperatorAbort(Object ptrOperator) {
+ }
+
}
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.10
diff -u -r1.10 IParserCallback.java
--- parser/org/eclipse/cdt/internal/core/parser/IParserCallback.java 31 Mar 2003 16:12:41 -0000 1.10
+++ parser/org/eclipse/cdt/internal/core/parser/IParserCallback.java 31 Mar 2003 20:59:24 -0000
@@ -46,6 +46,7 @@
public void pointerOperatorType( Object ptrOperator, Token type );
public void pointerOperatorName( Object ptrOperator );
public void pointerOperatorCVModifier( Object ptrOperator, Token modifier );
+ public void pointerOperatorAbort( Object ptrOperator );
public void pointerOperatorEnd( Object ptrOperator );
public Object argumentsBegin( Object declarator );
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.10
diff -u -r1.10 NullParserCallback.java
--- parser/org/eclipse/cdt/internal/core/parser/NullParserCallback.java 31 Mar 2003 16:12:41 -0000 1.10
+++ parser/org/eclipse/cdt/internal/core/parser/NullParserCallback.java 31 Mar 2003 20:59:24 -0000
@@ -605,4 +605,10 @@
public void templateTypeParameterAbort(Object typeParm) {
}
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.internal.core.parser.IParserCallback#pointerOperatorAbort(java.lang.Object)
+ */
+ public void pointerOperatorAbort(Object ptrOperator) {
+ }
+
}
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.16
diff -u -r1.16 Parser.java
--- parser/org/eclipse/cdt/internal/core/parser/Parser.java 31 Mar 2003 16:12:41 -0000 1.16
+++ parser/org/eclipse/cdt/internal/core/parser/Parser.java 31 Mar 2003 20:59:25 -0000
@@ -1105,7 +1105,7 @@
try{ ptrOp = callback.pointerOperatorBegin( owner );} catch( Exception e ) {}
if (t == Token.tAMPER) {
- try{ callback.pointerOperatorType( ptrOp, consume() ); } catch( Exception e ) {}
+ try{ callback.pointerOperatorType( ptrOp, consume(Token.tAMPER) ); } catch( Exception e ) {}
try{ callback.pointerOperatorEnd( ptrOp );} catch( Exception e ) {}
return;
}
@@ -1139,6 +1139,7 @@
}
backup(mark);
+ try{ callback.pointerOperatorAbort( ptrOp ); } catch( Exception e ) { }
throw backtrack;
}
@@ -1977,7 +1978,8 @@
return scanner.nextToken();
} catch (EndOfFile e) {
throw e;
- } catch (Exception e) {
+ } catch (ScannerException e) {
+ e.printStackTrace();
return null;
}
}
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.9
diff -u -r1.9 Scanner.java
--- parser/org/eclipse/cdt/internal/core/parser/Scanner.java 31 Mar 2003 16:12:41 -0000 1.9
+++ parser/org/eclipse/cdt/internal/core/parser/Scanner.java 31 Mar 2003 20:59:26 -0000
@@ -586,7 +586,12 @@
c = getChar();
if (c == 'x') {
- if( ! firstCharZero )
+ if( ! firstCharZero && floatingPoint )
+ {
+ ungetChar( c );
+ return newToken( Token.tDOT, ".", currentContext );
+ }
+ else if( ! firstCharZero )
throw new ScannerException( "Invalid Hexidecimal @ offset " + currentContext.getOffset() );
hex = true;
@@ -706,6 +711,7 @@
if (throwExceptionOnBadPreprocessorSyntax)
throw new ScannerException(
BAD_PP + currentContext.getOffset());
+
} else {
int type = ((Integer) directive).intValue();