1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-06-07 17:56:01 +02:00

Fixed 84133 - "typdef" seems the same as "typedef" to AST DOM

This commit is contained in:
John Camelon 2005-02-01 15:55:07 +00:00
parent 6d063588c2
commit bcedb9a5c1
3 changed files with 2415 additions and 2408 deletions

View file

@ -1930,4 +1930,11 @@ public abstract class AbstractGNUSourceCodeParser implements ISourceCodeParser {
return calculateEndOffset(declarator);
}
/**
* @param token
*/
protected void throwBacktrack(IToken token) throws BacktrackException {
throwBacktrack( token.getOffset(), token.getLength() );
}
}

View file

@ -174,11 +174,9 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser {
((CASTNode) newDesignators.get(0)).getOffset(),
((CASTNode) newDesignators.get(0)).getLength());
for (int i = 0; i < newDesignators.size(); ++i) {
ICASTDesignator d = (ICASTDesignator) newDesignators
.get(i);
ICASTDesignator d = (ICASTDesignator) newDesignators.get(i);
d.setParent(desigInitializer);
d
.setPropertyInParent(ICASTDesignatedInitializer.DESIGNATOR);
d.setPropertyInParent(ICASTDesignatedInitializer.DESIGNATOR);
desigInitializer.addDesignator(d);
}
desigInitializer.setOperandInitializer(initializer);
@ -219,9 +217,8 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser {
IASTExpression assignmentExpression = assignmentExpression();
IASTInitializerExpression result = createInitializerExpression();
result.setExpression(assignmentExpression);
((ASTNode) result).setOffsetAndLength(
((ASTNode) assignmentExpression).getOffset(),
((ASTNode) assignmentExpression).getLength());
((ASTNode) result).setOffsetAndLength(((ASTNode) assignmentExpression)
.getOffset(), ((ASTNode) assignmentExpression).getLength());
assignmentExpression.setParent(result);
assignmentExpression
.setPropertyInParent(IASTInitializerExpression.INITIALIZER_EXPRESSION);
@ -272,19 +269,17 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser {
n.setParent(designator);
n.setPropertyInParent(ICASTFieldDesignator.FIELD_NAME);
if (designatorList == Collections.EMPTY_LIST)
designatorList = new ArrayList(
DEFAULT_DESIGNATOR_LIST_SIZE);
designatorList = new ArrayList(DEFAULT_DESIGNATOR_LIST_SIZE);
designatorList.add(designator);
} else if (LT(1) == IToken.tLBRACKET) {
IToken mark = consume(IToken.tLBRACKET);
int offset = mark.getOffset();
IASTExpression constantExpression = expression();
if (LT(1) == IToken.tRBRACKET) {
int lastOffset = consume(IToken.tRBRACKET)
.getEndOffset();
int lastOffset = consume(IToken.tRBRACKET).getEndOffset();
ICASTArrayDesignator designator = createArrayDesignator();
((ASTNode) designator).setOffsetAndLength(offset,
lastOffset - offset);
((ASTNode) designator).setOffsetAndLength(offset, lastOffset
- offset);
designator.setSubscriptExpression(constantExpression);
constantExpression.setParent(designator);
constantExpression
@ -301,8 +296,7 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser {
IASTExpression constantExpression1 = expression();
consume(IToken.tELLIPSIS);
IASTExpression constantExpression2 = expression();
int lastOffset = consume(IToken.tRBRACKET)
.getEndOffset();
int lastOffset = consume(IToken.tRBRACKET).getEndOffset();
IGCCASTArrayRangeDesignator designator = createArrayRangeDesignator();
((ASTNode) designator).setOffsetAndLength(startOffset,
lastOffset - startOffset);
@ -324,15 +318,15 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser {
IToken identifier = identifier();
int lastOffset = consume(IToken.tCOLON).getEndOffset();
ICASTFieldDesignator designator = createFieldDesignator();
((ASTNode) designator).setOffsetAndLength(identifier
.getOffset(), lastOffset - identifier.getOffset());
((ASTNode) designator).setOffsetAndLength(
identifier.getOffset(), lastOffset
- identifier.getOffset());
IASTName n = createName(identifier);
designator.setName(n);
n.setParent(designator);
n.setPropertyInParent(ICASTFieldDesignator.FIELD_NAME);
if (designatorList == Collections.EMPTY_LIST)
designatorList = new ArrayList(
DEFAULT_DESIGNATOR_LIST_SIZE);
designatorList = new ArrayList(DEFAULT_DESIGNATOR_LIST_SIZE);
designatorList.add(designator);
}
}
@ -344,15 +338,15 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser {
IToken identifier = identifier();
int lastOffset = consume(IToken.tCOLON).getEndOffset();
ICASTFieldDesignator designator = createFieldDesignator();
((ASTNode) designator).setOffsetAndLength(identifier
.getOffset(), lastOffset - identifier.getOffset());
((ASTNode) designator).setOffsetAndLength(
identifier.getOffset(), lastOffset
- identifier.getOffset());
IASTName n = createName(identifier);
designator.setName(n);
n.setParent(designator);
n.setPropertyInParent(ICASTFieldDesignator.FIELD_NAME);
if (designatorList == Collections.EMPTY_LIST)
designatorList = new ArrayList(
DEFAULT_DESIGNATOR_LIST_SIZE);
designatorList = new ArrayList(DEFAULT_DESIGNATOR_LIST_SIZE);
designatorList.add(designator);
} else if (LT(1) == IToken.tLBRACKET) {
int startOffset = consume(IToken.tLBRACKET).getOffset();
@ -372,8 +366,7 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser {
constantExpression2
.setPropertyInParent(IGCCASTArrayRangeDesignator.SUBSCRIPT_CEILING_EXPRESSION);
if (designatorList == Collections.EMPTY_LIST)
designatorList = new ArrayList(
DEFAULT_DESIGNATOR_LIST_SIZE);
designatorList = new ArrayList(DEFAULT_DESIGNATOR_LIST_SIZE);
designatorList.add(designator);
}
}
@ -582,17 +575,15 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser {
IASTProblem p = failParse(b);
IASTProblemDeclaration pd = createProblemDeclaration();
pd.setProblem(p);
((CASTNode) pd).setOffsetAndLength(((CASTNode) p)
.getOffset(), ((CASTNode) p).getLength());
((CASTNode) pd).setOffsetAndLength(((CASTNode) p).getOffset(),
((CASTNode) p).getLength());
p.setParent(pd);
p.setPropertyInParent(IASTProblemHolder.PROBLEM);
pd.setParent(translationUnit);
pd
.setPropertyInParent(IASTTranslationUnit.OWNED_DECLARATION);
pd.setPropertyInParent(IASTTranslationUnit.OWNED_DECLARATION);
translationUnit.addDeclaration(pd);
errorHandling();
if (lastBacktrack != -1
&& lastBacktrack == LA(1).hashCode()) {
if (lastBacktrack != -1 && lastBacktrack == LA(1).hashCode()) {
// we haven't progressed from the
// last backtrack
// try and find tne next definition
@ -652,8 +643,7 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser {
conditionalExpression);
case IToken.tSTARASSIGN:
return assignmentOperatorExpression(
IASTBinaryExpression.op_multiplyAssign,
conditionalExpression);
IASTBinaryExpression.op_multiplyAssign, conditionalExpression);
case IToken.tDIVASSIGN:
return assignmentOperatorExpression(
IASTBinaryExpression.op_divideAssign, conditionalExpression);
@ -684,8 +674,7 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser {
conditionalExpression);
case IToken.tBITORASSIGN:
return assignmentOperatorExpression(
IASTBinaryExpression.op_binaryOrAssign,
conditionalExpression);
IASTBinaryExpression.op_binaryOrAssign, conditionalExpression);
}
return conditionalExpression;
}
@ -910,8 +899,8 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser {
IASTTypeId t = typeId(false);
int lastOffset = consume(IToken.tRPAREN).getEndOffset();
IASTInitializer i = cInitializerClause(Collections.EMPTY_LIST);
firstExpression = buildTypeIdInitializerExpression(t, i,
offset, lastOffset);
firstExpression = buildTypeIdInitializerExpression(t, i, offset,
lastOffset);
break;
} catch (BacktrackException bt) {
backup(m);
@ -1125,7 +1114,9 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser {
//TODO - do we need to return a wrapper?
IASTExpression lhs = expression();
int finalOffset = consume(IToken.tRPAREN).getEndOffset();
return buildUnaryExpression( IASTUnaryExpression.op_bracketedPrimary, lhs, t.getOffset(), finalOffset );
return buildUnaryExpression(
IASTUnaryExpression.op_bracketedPrimary, lhs, t.getOffset(),
finalOffset);
case IToken.tIDENTIFIER:
int startingOffset = LA(1).getOffset();
@ -1184,7 +1175,8 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser {
IASTTypeId result = createTypeId();
((ASTNode) result).setOffsetAndLength(startingOffset, figureEndOffset(
declSpecifier, declarator) - startingOffset);
declSpecifier, declarator)
- startingOffset);
result.setDeclSpecifier(declSpecifier);
declSpecifier.setParent(result);
@ -1423,6 +1415,8 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser {
break;
case IToken.t_struct:
case IToken.t_union:
if (flags.haveEncounteredTypename())
throwBacktrack(LA(1));
try {
structSpec = structOrUnionSpecifier();
flags.setEncounteredTypename(true);
@ -1433,6 +1427,8 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser {
break;
}
case IToken.t_enum:
if (flags.haveEncounteredTypename())
throwBacktrack(LA(1));
try {
enumSpec = enumSpecifier();
flags.setEncounteredTypename(true);
@ -1544,8 +1540,8 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser {
* "}"
*
* @param owner
* IParserCallback object that represents the declaration that
* owns this classSpecifier
* IParserCallback object that represents the declaration that owns
* this classSpecifier
*
* @return TODO
* @throws BacktrackException
@ -1672,7 +1668,8 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser {
name.setParent(result);
name.setPropertyInParent(IASTElaboratedTypeSpecifier.TYPE_NAME);
result.setKind(eck);
((ASTNode)result).setOffsetAndLength( t.getOffset(), calculateEndOffset(name) - t.getOffset() );
((ASTNode) result).setOffsetAndLength(t.getOffset(),
calculateEndOffset(name) - t.getOffset());
return result;
}
@ -1694,7 +1691,8 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser {
d.setInitializer(i);
i.setParent(d);
i.setPropertyInParent(IASTDeclarator.INITIALIZER);
((ASTNode)d).setLength( calculateEndOffset( i ) - ((ASTNode)d).getOffset() );
((ASTNode) d).setLength(calculateEndOffset(i)
- ((ASTNode) d).getOffset());
}
return d;
} finally {
@ -1801,15 +1799,14 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser {
if (decl instanceof IASTSimpleDeclaration) {
declaration = ((IASTSimpleDeclaration) decl);
IASTDeclarator[] decltors = declaration.getDeclarators();
IASTDeclarator[] decltors = declaration
.getDeclarators();
for (int k = 0; k < decltors.length; k++) {
boolean decltorOk = false;
for (int j = 0; j < parmNames.length; j++) {
if (CharArrayUtils.equals(
decltors[k].getName()
.toCharArray(),
parmNames[j]
.toCharArray())) {
if (CharArrayUtils.equals(decltors[k]
.getName().toCharArray(),
parmNames[j].toCharArray())) {
decltorOk = true;
break;
}
@ -1829,8 +1826,8 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser {
((ASTNode) declaration).getOffset());
}
} catch (BacktrackException b) {
parmDeclarations[i] = createKnRCProblemDeclaration(
b.getLength(), b.getOffset());
parmDeclarations[i] = createKnRCProblemDeclaration(b
.getLength(), b.getOffset());
}
}
@ -1908,8 +1905,7 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser {
if (declaratorName != null) {
functionDecltor.setName(declaratorName);
declaratorName.setParent(functionDecltor);
declaratorName
.setPropertyInParent(IASTDeclarator.DECLARATOR_NAME);
declaratorName.setPropertyInParent(IASTDeclarator.DECLARATOR_NAME);
}
for (int i = 0; i < parmNames.length; ++i) {

View file

@ -3095,6 +3095,8 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
case IToken.t_class:
case IToken.t_struct:
case IToken.t_union:
if (flags.haveEncounteredTypename())
throwBacktrack(LA(1));
try {
classSpec = classSpecifier();
flags.setEncounteredTypename(true);
@ -3105,6 +3107,8 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
break;
}
case IToken.t_enum:
if (flags.haveEncounteredTypename())
throwBacktrack(LA(1));
try {
enumSpec = enumSpecifier();
flags.setEncounteredTypename(true);