From d134c5e5d3630603b9f6d908c29f473e12df0474 Mon Sep 17 00:00:00 2001 From: John Camelon Date: Thu, 29 Jul 2004 14:31:21 +0000 Subject: [PATCH] Further Scanner2 work and improvements. --- .../tests/CompleteParseASTExpressionTest.java | 8 ++++++-- .../eclipse/cdt/core/parser/ast/ASTUtil.java | 20 ++++++++++++++----- .../ast/complete/CompleteParseASTFactory.java | 2 +- .../core/parser/token/ImagedToken.java | 3 +++ 4 files changed, 25 insertions(+), 8 deletions(-) diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTExpressionTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTExpressionTest.java index 58ad016501c..db403d1a059 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTExpressionTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTExpressionTest.java @@ -12,6 +12,7 @@ package org.eclipse.cdt.core.parser.tests; import java.util.Iterator; +import org.eclipse.cdt.core.parser.ParserFactory; import org.eclipse.cdt.core.parser.ast.IASTAbstractTypeSpecifierDeclaration; import org.eclipse.cdt.core.parser.ast.IASTClassSpecifier; import org.eclipse.cdt.core.parser.ast.IASTExpression; @@ -247,8 +248,11 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{ i = getDeclarations( test ); IASTVariable someInt = (IASTVariable) i.next(); - IASTExpression exp = someInt.getInitializerClause().getAssigmentExpression(); - assertEquals( exp.toString(), "foo(int(3), short(4), double(3.0), float(4.0), char('a'), wchar_t('a'), signed(2), unsigned(3), bool(false), long(3))" ); //$NON-NLS-1$ + IASTExpression exp = someInt.getInitializerClause().getAssigmentExpression(); + if( ParserFactory.USE_NEW_SCANNER ) + assertEquals( exp.toString(), "foo(int(3), short(4), double(3.0), float(4.0), char('a'), wchar_t('a'), signed(2), unsigned(3), bool(false), long(3L))" ); //$NON-NLS-1$ + else + assertEquals( exp.toString(), "foo(int(3), short(4), double(3.0), float(4.0), char('a'), wchar_t('a'), signed(2), unsigned(3), bool(false), long(3))" ); //$NON-NLS-1$ } // Kind POSTFIX_TYPENAME_IDENTIFIER diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/ASTUtil.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/ASTUtil.java index 74d7a906d71..54098ff8e2a 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/ASTUtil.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/ASTUtil.java @@ -337,14 +337,24 @@ public class ASTUtil { return expression.getLiteralString(); StringBuffer buffer = new StringBuffer(); + boolean quoted = false; + String literalString = expression.getLiteralString(); if( kind == Kind.PRIMARY_CHAR_LITERAL ){ - buffer.append( '\'' ); - buffer.append( expression.getLiteralString() ); - buffer.append( '\'' ); + quoted = ( literalString.charAt(0) == literalString.charAt(literalString.length() - 1 ) && + literalString.charAt(0) == '\'' ); + if( !quoted ) + buffer.append( '\'' ); + buffer.append( literalString ); + if( !quoted ) + buffer.append( '\'' ); } else if( kind == Kind.PRIMARY_STRING_LITERAL ) { - buffer.append( '"' ); + quoted = ( literalString.charAt(0) == literalString.charAt(literalString.length() - 1 ) && + literalString.charAt(0) == '\"' ); + if( !quoted ) + buffer.append( '"' ); buffer.append( expression.getLiteralString() ); - buffer.append( '"' ); + if( !quoted ) + buffer.append( '"' ); } return buffer.toString(); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java index cc85f3cddc9..20873aa4f21 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java @@ -1320,7 +1320,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto parameters = expResultList.getResultList(); }else { - parameters = new ArrayList(); + parameters = new ArrayList(1); parameters.add(expResult.getResult()); } if( functionScope.equals( startingScope ) ) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/ImagedToken.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/ImagedToken.java index c3d225e3ec0..bac46c6f1f0 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/ImagedToken.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/ImagedToken.java @@ -10,6 +10,7 @@ ***********************************************************************/ package org.eclipse.cdt.internal.core.parser.token; +import org.eclipse.cdt.core.parser.ParserFactory; import org.eclipse.cdt.internal.core.parser.scanner.ContextStack; import org.eclipse.cdt.internal.core.parser.scanner.IScannerContext; @@ -76,6 +77,8 @@ public class ImagedToken extends SimpleToken { public int getLength() { if( getCharImage() == null ) return 0; + if( ParserFactory.USE_NEW_SCANNER ) + return getCharImage().length; switch( getType() ) { case tSTRING: