Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[cdt-patch] Parser update for Hoda

Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.ui.tests/ChangeLog,v
retrieving revision 1.5
diff -u -r1.5 ChangeLog
--- ChangeLog	12 Mar 2003 15:35:36 -0000	1.5
+++ ChangeLog	18 Mar 2003 21:52:45 -0000
@@ -1,3 +1,7 @@
+2003-03-18 John Camelon
+	Updated DOMTests to validate simple case of a function declaration with multiple parameters.  
+	* parser/org/eclipse/cdt/core/parser/tests/DOMTests.java
+
 2003-03-11 John Camelon
 	Updated DOMTests for core.internal.parser change of merging DeclarationSpecifier and DeclSpecifier
 	Organized imports
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.4
diff -u -r1.4 DOMTests.java
--- parser/org/eclipse/cdt/core/parser/tests/DOMTests.java	12 Mar 2003 15:35:35 -0000	1.4
+++ parser/org/eclipse/cdt/core/parser/tests/DOMTests.java	18 Mar 2003 21:52:45 -0000
@@ -243,6 +243,47 @@
 	}
 	
 	/**
+	 * Test code: bool myFunction( int parm1, double parm2 );
+	 * @throws Exception
+	 */
+	public void testFunctionDeclarationWithParameters() throws Exception
+	{
+		// Parse and get the translaton unit
+		Writer code = new StringWriter();
+		code.write("bool myFunction( int parm1, double parm2 );");
+		TranslationUnit translationUnit = parse(code.toString());
+
+		// Get the declaration
+		List declarations = translationUnit.getDeclarations();
+		assertEquals(1, declarations.size());
+		SimpleDeclaration simpleDeclaration = (SimpleDeclaration)declarations.get(0);
+		assertEquals( simpleDeclaration.getDeclSpecifier().getType(), DeclSpecifier.t_bool );
+		List declarators  = simpleDeclaration.getDeclarators(); 
+		assertEquals( 1, declarators.size() ); 
+		Declarator functionDeclarator = (Declarator)declarators.get( 0 ); 
+		assertEquals( functionDeclarator.getName().toString(), "myFunction" );
+		ParameterDeclarationClause pdc = functionDeclarator.getParms(); 
+		assertNotNull( pdc ); 
+		List parameterDecls = pdc.getDeclarations(); 
+		assertEquals( 2, parameterDecls.size() );
+		ParameterDeclaration parm1 = (ParameterDeclaration)parameterDecls.get( 0 );
+		assertEquals( DeclSpecifier.t_int, parm1.getDeclSpecifier().getType() );
+		List parm1Decls = parm1.getDeclarators(); 
+		assertEquals( 1, parm1Decls.size() ); 
+		Declarator parm1Declarator = (Declarator) parm1Decls.get(0); 
+		assertEquals( "parm1", parm1Declarator.getName().toString() );  
+
+		ParameterDeclaration parm2 = (ParameterDeclaration)parameterDecls.get( 1 );
+		assertEquals( DeclSpecifier.t_double, parm2.getDeclSpecifier().getType() );
+		List parm2Decls = parm2.getDeclarators(); 
+		assertEquals( 1, parm2Decls.size() ); 
+		Declarator parm2Declarator = (Declarator) parm2Decls.get(0); 
+		assertEquals( "parm2", parm2Declarator.getName().toString() );  
+		
+	}
+	
+	
+	/**
 	 * Test code:  "class A { int floor( double input ), someInt; };"
 	 */
 	public void testMultipleDeclarators() throws Exception
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.4
diff -u -r1.4 DOMBuilder.java
--- dom/org/eclipse/cdt/internal/core/dom/DOMBuilder.java	17 Mar 2003 15:22:05 -0000	1.4
+++ dom/org/eclipse/cdt/internal/core/dom/DOMBuilder.java	18 Mar 2003 22:07:14 -0000
@@ -126,7 +126,7 @@
 	/**
 	 * @see org.eclipse.cdt.internal.core.newparser.IParserCallback#functionBodyBegin()
 	 */
-	public void functionBodyBegin() {
+	public void functionBodyBegin(Object declaration) {
 	}
 
 	/**
@@ -321,6 +321,12 @@
 	 */
 	public void elaboratedTypeSpecifierName(Object elab) {
 		((ElaboratedTypeSpecifier)elab).setName( currName );
+	}
+
+	/**
+	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#simpleDeclSpecifierName(java.lang.Object)
+	 */
+	public void simpleDeclSpecifierName(Object declaration) {
 	}
 
 }
Index: parser/ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/ChangeLog,v
retrieving revision 1.4
diff -u -r1.4 ChangeLog
--- parser/ChangeLog	17 Mar 2003 19:48:46 -0000	1.4
+++ parser/ChangeLog	18 Mar 2003 22:07:15 -0000
@@ -1,3 +1,7 @@
+2003-03-18 John Camelon
+	Updated IParserCallback (and implementations) to add a typeName to DeclSpecifier. 
+	Updated IParserCallback and NewModelBuilder to distinguish between Function declarations and definitions. 
+
 2003-03-17 Doug Schaefer
 	Changed EOF to be a Backtrack exception instead of a token so simplify
 	error handling.
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.6
diff -u -r1.6 NewModelBuilder.java
--- parser/org/eclipse/cdt/internal/core/model/NewModelBuilder.java	17 Mar 2003 15:22:05 -0000	1.6
+++ parser/org/eclipse/cdt/internal/core/model/NewModelBuilder.java	18 Mar 2003 22:07:16 -0000
@@ -102,7 +102,9 @@
 	/**
 	 * @see org.eclipse.cdt.internal.core.newparser.IParserCallback#beginFunctionBody()
 	 */
-	public void functionBodyBegin() {
+	public void functionBodyBegin(Object declaration) {
+		SimpleDeclarationWrapper wrapper = (SimpleDeclarationWrapper)declaration; 
+		wrapper.setFunctionDefinition(true);
 	}
 
 	/**
@@ -344,6 +346,16 @@
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#elaboratedTypeSpecifierName(java.lang.Object)
 	 */
 	public void elaboratedTypeSpecifierName(Object elab) {
+	}
+
+
+
+	/**
+	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#simpleDeclSpecifierName(java.lang.Object)
+	 */
+	public void simpleDeclSpecifierName(Object declaration) {
+		DeclSpecifier declSpecifier = (DeclSpecifier)declaration;  
+		declSpecifier.setName( currName ); 
 	}
 
 }
Index: parser/org/eclipse/cdt/internal/core/model/SimpleDeclarationWrapper.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/model/SimpleDeclarationWrapper.java,v
retrieving revision 1.7
diff -u -r1.7 SimpleDeclarationWrapper.java
--- parser/org/eclipse/cdt/internal/core/model/SimpleDeclarationWrapper.java	17 Mar 2003 15:22:05 -0000	1.7
+++ parser/org/eclipse/cdt/internal/core/model/SimpleDeclarationWrapper.java	18 Mar 2003 22:07:16 -0000
@@ -22,6 +22,7 @@
 	private CElement parent = null; 
 	int kind; 
 	private Name name = null;
+	private boolean functionDefinition = false; 
 
 	public SimpleDeclarationWrapper( CElement item )
 	{
@@ -195,6 +196,22 @@
 	 */
 	public void setKind(int kind) {
 		this.kind = kind;
+	}
+
+	/**
+	 * Returns the functionDefinition.
+	 * @return boolean
+	 */
+	public boolean isFunctionDefinition() {
+		return functionDefinition;
+	}
+
+	/**
+	 * Sets the functionDefinition.
+	 * @param functionDefinition The functionDefinition to set
+	 */
+	public void setFunctionDefinition(boolean functionDefinition) {
+		this.functionDefinition = functionDefinition;
 	}
 
 }
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.5
diff -u -r1.5 ExpressionEvaluator.java
--- parser/org/eclipse/cdt/internal/core/parser/ExpressionEvaluator.java	17 Mar 2003 15:22:05 -0000	1.5
+++ parser/org/eclipse/cdt/internal/core/parser/ExpressionEvaluator.java	18 Mar 2003 22:07:16 -0000
@@ -206,7 +206,7 @@
 	/**
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#functionBodyBegin()
 	 */
-	public void functionBodyBegin() {
+	public void functionBodyBegin(Object declaration) {
 	}
 	/**
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#functionBodyEnd()
@@ -298,6 +298,12 @@
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#elaboratedTypeSpecifierName(java.lang.Object)
 	 */
 	public void elaboratedTypeSpecifierName(Object container) {
+	}
+
+	/**
+	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#simpleDeclSpecifierName(java.lang.Object)
+	 */
+	public void simpleDeclSpecifierName(Object declaration) {
 	}
 
 }
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.4
diff -u -r1.4 IParserCallback.java
--- parser/org/eclipse/cdt/internal/core/parser/IParserCallback.java	17 Mar 2003 15:22:05 -0000	1.4
+++ parser/org/eclipse/cdt/internal/core/parser/IParserCallback.java	18 Mar 2003 22:07:16 -0000
@@ -20,13 +20,13 @@
 	public void macro(String macroName, int offset);
 	
 	public Object simpleDeclarationBegin(Object Container);
+	public void simpleDeclSpecifier(Object Container, Token specifier);
+	public void simpleDeclSpecifierName( Object declaration );
 	public void simpleDeclarationEnd(Object declaration);
-	
+
 	public Object parameterDeclarationBegin( Object Container ); 
 	public void  parameterDeclarationEnd( Object declaration ); 
 	
-	public void simpleDeclSpecifier(Object Container, Token specifier);
-	
 	public void nameBegin(Token firstToken);
 	public void nameEnd(Token lastToken);
 	
@@ -38,7 +38,7 @@
 	public Object argumentsBegin( Object declarator );
 	public void argumentsEnd(Object parameterDeclarationClause);
 	
-	public void functionBodyBegin();
+	public void functionBodyBegin(Object declaration);
 	public void functionBodyEnd();
 	
 	public Object classSpecifierBegin(Object container, Token classKey);
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.4
diff -u -r1.4 NullParserCallback.java
--- parser/org/eclipse/cdt/internal/core/parser/NullParserCallback.java	17 Mar 2003 15:22:05 -0000	1.4
+++ parser/org/eclipse/cdt/internal/core/parser/NullParserCallback.java	18 Mar 2003 22:07:16 -0000
@@ -25,7 +25,7 @@
 	/**
 	 * @see org.eclipse.cdt.internal.core.newparser.IParserCallback#beginFunctionBody()
 	 */
-	public void functionBodyBegin() {
+	public void functionBodyBegin(Object declaration) {
 	}
 
 	/**
@@ -214,6 +214,12 @@
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#elaboratedTypeSpecifierName(java.lang.Object)
 	 */
 	public void elaboratedTypeSpecifierName(Object elab) {
+	}
+
+	/**
+	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#simpleDeclSpecifierName(java.lang.Object)
+	 */
+	public void simpleDeclSpecifierName(Object declaration) {
 	}
 
 }
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.10
diff -u -r1.10 Parser.java
--- parser/org/eclipse/cdt/internal/core/parser/Parser.java	17 Mar 2003 19:48:46 -0000	1.10
+++ parser/org/eclipse/cdt/internal/core/parser/Parser.java	18 Mar 2003 22:07:16 -0000
@@ -178,7 +178,7 @@
 	 */
 	public void simpleDeclaration( Object container ) throws Exception {
 		Object simpleDecl = callback.simpleDeclarationBegin( container);
-		declSpecifierSeq(simpleDecl);
+		declSpecifierSeq(simpleDecl, false);
 
 		if (LT(1) != Token.tSEMI)
 			try {
@@ -210,7 +210,7 @@
 				}
 				// Falling through on purpose
 			case Token.tLBRACE:
-				callback.functionBodyBegin();
+				callback.functionBodyBegin(simpleDecl );
 				if (quickParse) {
 					// speed up the parser by skiping the body
 					// simply look for matching brace and return
@@ -242,7 +242,7 @@
 	public void parameterDeclaration( Object containerObject ) throws Exception
 	{
 		Object parameterDecl = callback.parameterDeclarationBegin( containerObject );
-		declSpecifierSeq( parameterDecl );
+		declSpecifierSeq( parameterDecl, true );
 		
 		if (LT(1) != Token.tSEMI)
 			try {
@@ -273,7 +273,7 @@
 	 * - folded elaboratedTypeSpecifier into classSpecifier and enumSpecifier
 	 * - find template names in name
 	 */
-	public void declSpecifierSeq( Object decl ) throws Exception {
+	public void declSpecifierSeq( Object decl, boolean parm ) throws Exception {
 		boolean encounteredTypename = false;
 		boolean encounteredRawType = false;
 		declSpecifiers:		
@@ -291,16 +291,16 @@
 				case Token.t_friend:
 				case Token.t_const:
 				case Token.t_volatile:
+				case Token.t_signed:
+				case Token.t_unsigned:
+				case Token.t_short:
 					callback.simpleDeclSpecifier(decl, consume());
 					break;
 				case Token.t_char:
 				case Token.t_wchar_t:
 				case Token.t_bool:
-				case Token.t_short:
 				case Token.t_int:
 				case Token.t_long:
-				case Token.t_signed:
-				case Token.t_unsigned:
 				case Token.t_float:
 				case Token.t_double:
 				case Token.t_void:
@@ -316,21 +316,19 @@
 					// handle nested later:
 				case Token.tIDENTIFIER:
 					// TODO - Kludgy way to handle constructors/destructors
-					if (!encounteredRawType && LT(2) != Token.tCOLONCOLON && LT(2) != Token.tLPAREN)
+					// handle nested later:
+					if ((parm && !encounteredRawType) || (!encounteredRawType && LT(2) != Token.tCOLONCOLON && LT(2) != Token.tLPAREN))
 					{
-						// handle nested later:
 						if( ! encounteredTypename )
 						{
-							callback.simpleDeclSpecifier(decl,consume());
+							callback.simpleDeclSpecifier(decl,LA(1));
+							name(); 
+							callback.simpleDeclSpecifierName( decl );
 							encounteredTypename = true; 
 							break;
 						}
-						else
-							return;
 					}
-					else
-						return;
-					
+					return;
 				case Token.t_class:
 				case Token.t_struct:
 				case Token.t_union:
Index: parser/org/eclipse/cdt/internal/core/parser/util/DeclSpecifier.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/util/DeclSpecifier.java,v
retrieving revision 1.3
diff -u -r1.3 DeclSpecifier.java
--- parser/org/eclipse/cdt/internal/core/parser/util/DeclSpecifier.java	12 Mar 2003 15:35:41 -0000	1.3
+++ parser/org/eclipse/cdt/internal/core/parser/util/DeclSpecifier.java	18 Mar 2003 22:07:16 -0000
@@ -45,7 +45,8 @@
 	}
 	
 	private boolean checkBit(int mask) {
-		return (declSpecifierSeq & mask) == 1;
+		int masked =(declSpecifierSeq & mask); 
+		return  (masked == 1);
 	}
 	
 	public void setAuto(boolean b) { setBit(b, isAuto); }
@@ -201,5 +202,23 @@
 		public List getDeclarators();
 
 	};
+	
+	Name name = null; 
+	
+	/**
+	 * Returns the name.
+	 * @return Name
+	 */
+	public Name getName() {
+		return name;
+	}
+
+	/**
+	 * Sets the name.
+	 * @param name The name to set
+	 */
+	public void setName(Name name) {
+		this.name = name;
+	}
 
 }

Back to the top