mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
fix bug 93980 for C++
This commit is contained in:
parent
238118db0b
commit
9ae1ab54c8
1 changed files with 18 additions and 2 deletions
|
@ -31,6 +31,7 @@ import org.eclipse.cdt.core.dom.ast.IASTElaboratedTypeSpecifier;
|
|||
import org.eclipse.cdt.core.dom.ast.IASTEnumerationSpecifier;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTExpression;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTExpressionList;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTExpressionStatement;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTFieldReference;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTForStatement;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTFunctionCallExpression;
|
||||
|
@ -125,6 +126,7 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateParameter;
|
|||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateScope;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPUsingDeclaration;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCompositeTypeSpecifier.ICPPASTBaseSpecifier;
|
||||
import org.eclipse.cdt.core.dom.ast.gnu.IGNUASTCompoundStatementExpression;
|
||||
import org.eclipse.cdt.core.dom.ast.gnu.cpp.IGPPASTPointer;
|
||||
import org.eclipse.cdt.core.dom.ast.gnu.cpp.IGPPASTPointerToMember;
|
||||
import org.eclipse.cdt.core.dom.ast.gnu.cpp.IGPPASTSimpleDeclSpecifier;
|
||||
|
@ -817,6 +819,8 @@ public class CPPVisitor {
|
|||
return ((ICPPASTFunctionDeclarator)fdef.getDeclarator()).getFunctionScope();
|
||||
}
|
||||
|
||||
if( scope == null )
|
||||
return getContainingScope( parent );
|
||||
return scope;
|
||||
}
|
||||
|
||||
|
@ -1527,8 +1531,12 @@ public class CPPVisitor {
|
|||
( spec.isUnsigned() ? CPPBasicType.IS_SHORT : 0 );
|
||||
if( spec instanceof IGPPASTSimpleDeclSpecifier ){
|
||||
IGPPASTSimpleDeclSpecifier gspec = (IGPPASTSimpleDeclSpecifier) spec;
|
||||
if( gspec.getTypeofExpression() != null ){
|
||||
type = getExpressionType( gspec.getTypeofExpression() );
|
||||
} else {
|
||||
bits |= ( gspec.isLongLong() ? GPPBasicType.IS_LONGLONG : 0 );
|
||||
type = new GPPBasicType( spec.getType(), bits, getExpressionType(gspec.getTypeofExpression()) );
|
||||
}
|
||||
} else {
|
||||
type = new CPPBasicType( spec.getType(), bits );
|
||||
}
|
||||
|
@ -1777,6 +1785,14 @@ public class CPPVisitor {
|
|||
return ((IArrayType)t).getType();
|
||||
} catch( DOMException e ){
|
||||
}
|
||||
} else if( expression instanceof IGNUASTCompoundStatementExpression ){
|
||||
IASTCompoundStatement compound = ((IGNUASTCompoundStatementExpression)expression).getCompoundStatement();
|
||||
IASTStatement [] statements = compound.getStatements();
|
||||
if( statements.length > 0 ){
|
||||
IASTStatement st = statements[ statements.length - 1 ];
|
||||
if( st instanceof IASTExpressionStatement )
|
||||
return getExpressionType( ((IASTExpressionStatement)st).getExpression() );
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue