[
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;
+ }
}