From 2474e4f8b66fcc4532bd4d0b7e929e8c7d902751 Mon Sep 17 00:00:00 2001 From: Andrew Niefer Date: Tue, 27 Jul 2004 15:51:46 +0000 Subject: [PATCH] more string to char[] changes. savings of about 10 meg (old scanner) --- .../core/parser/ast/IASTUsingDeclaration.java | 1 + .../core/parser/ExpressionParser.java | 2 +- .../cdt/internal/core/parser/Parser.java | 3 ++- .../internal/core/parser/SelectionParser.java | 4 ++-- .../ast/complete/ASTUsingDeclaration.java | 7 +++++-- .../ast/complete/CompleteParseASTFactory.java | 4 ++-- .../parser/ast/quick/ASTUsingDeclaration.java | 9 ++++++--- .../ast/quick/QuickParseASTFactory.java | 2 +- .../parser/scanner/GCCScannerExtension.java | 2 +- .../internal/core/parser/scanner/Scanner.java | 2 +- .../core/parser/scanner2/Scanner2.java | 8 ++------ .../core/parser/token/ImagedToken.java | 10 +++++----- .../core/parser/token/SimpleToken.java | 2 +- .../internal/core/parser/util/TraceUtil.java | 19 +++++++++++++++++++ 14 files changed, 49 insertions(+), 26 deletions(-) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTUsingDeclaration.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTUsingDeclaration.java index 993757e8ffd..f658085f97d 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTUsingDeclaration.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTUsingDeclaration.java @@ -20,6 +20,7 @@ public interface IASTUsingDeclaration extends IASTDeclaration, IASTOffsetableEle public boolean isTypename(); public String usingTypeName(); + public char[] usingTypeNameCharArray(); public Iterator getUsingTypes() throws ASTNotImplementedException; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ExpressionParser.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ExpressionParser.java index fa483a1c608..3d3dc9eb8a7 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ExpressionParser.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ExpressionParser.java @@ -2704,7 +2704,7 @@ public class ExpressionParser implements IExpressionParser, IParserData { TraceUtil .outputTrace( log, - "ScannerException thrown : ", e.getProblem(), null, null, null); //$NON-NLS-1$ + "ScannerException thrown : ", e.getProblem() ); //$NON-NLS-1$ // log.errorLog("Scanner Exception: " + e.getProblem().getMessage()); //$NON-NLS-1$ return fetchToken(); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Parser.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Parser.java index e294295b369..deaa46fda96 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Parser.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Parser.java @@ -2475,8 +2475,9 @@ public abstract class Parser extends ExpressionParser implements IParser } } // check for optional pure virtual + char[] image = LA(2).getCharImage(); if (LT(1) == IToken.tASSIGN && LT(2) == IToken.tINTEGER - && LA(2).getImage().equals("0")) //$NON-NLS-1$ + && ( image.length == 1 && image[0] == '0' ) ) //$NON-NLS-1$ { consume(IToken.tASSIGN); consume(IToken.tINTEGER); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/SelectionParser.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/SelectionParser.java index d1bac6379a3..9389767fe3d 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/SelectionParser.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/SelectionParser.java @@ -64,13 +64,13 @@ public class SelectionParser extends ContextualParser { boolean change = false; if( value.getOffset() == offsetRange.getFloorOffset() ) { - TraceUtil.outputTrace(log, "Offset Floor Hit w/token \"", null, value.getImage(), "\"", null ); //$NON-NLS-1$ //$NON-NLS-2$ + TraceUtil.outputTrace(log, "Offset Floor Hit w/token \"", null, value.getCharImage(), "\"", null ); //$NON-NLS-1$ //$NON-NLS-2$ firstTokenOfDuple = value; change = true; } if( value.getEndOffset() == offsetRange.getCeilingOffset() ) { - TraceUtil.outputTrace(log, "Offset Ceiling Hit w/token \"", null, value.getImage(), "\"", null ); //$NON-NLS-1$ //$NON-NLS-2$ + TraceUtil.outputTrace(log, "Offset Ceiling Hit w/token \"", null, value.getCharImage(), "\"", null ); //$NON-NLS-1$ //$NON-NLS-2$ change = true; lastTokenOfDuple = value; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTUsingDeclaration.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTUsingDeclaration.java index 29c800c60ca..195ee4c46a2 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTUsingDeclaration.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTUsingDeclaration.java @@ -30,7 +30,7 @@ public class ASTUsingDeclaration extends ASTNode implements IASTUsingDeclaration private final boolean isTypeName; private final List declarations = new ArrayList(); private List references; - private String name; + private char[] name; private final char [] fn; /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename() @@ -43,7 +43,7 @@ public class ASTUsingDeclaration extends ASTNode implements IASTUsingDeclaration * @param filename * */ - public ASTUsingDeclaration( IASTScope ownerScope, String name, List declarations, boolean isTypeName, int startingOffset, int startingLine, int endingOffset, int endingLine, List references, char[] filename ) + public ASTUsingDeclaration( IASTScope ownerScope, char[] name, List declarations, boolean isTypeName, int startingOffset, int startingLine, int endingOffset, int endingLine, List references, char[] filename ) { this.ownerScope = ownerScope; this.isTypeName = isTypeName; @@ -66,6 +66,9 @@ public class ASTUsingDeclaration extends ASTNode implements IASTUsingDeclaration */ public String usingTypeName() { + return String.valueOf(name); + } + public char[] usingTypeNameCharArray(){ return name; } /* (non-Javadoc) 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 a4d7791b1c3..f798f0439a7 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 @@ -595,7 +595,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto addReference( references, createReference( (ISymbol) i.next(), name.getLastToken().getCharImage(), name.getLastToken().getOffset() ) ); } - ASTUsingDeclaration using = new ASTUsingDeclaration( scope, name.getLastToken().getImage(), + ASTUsingDeclaration using = new ASTUsingDeclaration( scope, name.getLastToken().getCharImage(), endResult.getReferencedSymbols(), isTypeName, startingOffset, startingLine, endingOffset, endingLine, references, filename ); attachSymbolExtension( endResult, using ); @@ -884,7 +884,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto IProblem p = problemFactory.createProblem( id, startOffset, endOffset, lineNumber, filename, attribute, !isError, isError ); - TraceUtil.outputTrace(logService, "CompleteParseASTFactory - IProblem : ", p, null, null, null ); //$NON-NLS-1$ + TraceUtil.outputTrace(logService, "CompleteParseASTFactory - IProblem : ", p ); //$NON-NLS-1$ if( shouldThrowException( scope, id, !isError ) ) throw new ASTSemanticException(p); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTUsingDeclaration.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTUsingDeclaration.java index 53ced46655e..1e5e1010f3a 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTUsingDeclaration.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTUsingDeclaration.java @@ -27,7 +27,7 @@ public class ASTUsingDeclaration implements IASTUsingDeclaration { private final boolean isTypename; - private final String mappingName; + private final char [] mappingName; private final char [] fn; /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename() @@ -37,7 +37,7 @@ public class ASTUsingDeclaration } - public ASTUsingDeclaration( IASTScope scope, boolean isTypeName, String mappingName, int startingOffset, int startingLine, int endingOffset, int endingLine, char[] filename ) + public ASTUsingDeclaration( IASTScope scope, boolean isTypeName, char[] mappingName, int startingOffset, int startingLine, int endingOffset, int endingLine, char[] filename ) { super( scope ); isTypename = isTypeName; @@ -57,7 +57,10 @@ public class ASTUsingDeclaration * @see org.eclipse.cdt.core.parser.ast.IASTUsingDeclaration#usingTypeName() */ public String usingTypeName() { - return mappingName; + return String.valueOf(mappingName); + } + public char[] usingTypeNameCharArray(){ + return mappingName; } /* (non-Javadoc) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/QuickParseASTFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/QuickParseASTFactory.java index 9e3d5396cfa..56a5ce3aec8 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/QuickParseASTFactory.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/QuickParseASTFactory.java @@ -120,7 +120,7 @@ public class QuickParseASTFactory extends BaseASTFactory implements IASTFactory * @see org.eclipse.cdt.core.parser.ast.IASTFactory#createUsingDeclaration(org.eclipse.cdt.core.parser.ast.IASTScope, boolean, org.eclipse.cdt.internal.core.parser.TokenDuple) */ public IASTUsingDeclaration createUsingDeclaration(IASTScope scope, boolean isTypeName, ITokenDuple name, int startingOffset, int startingLine, int endingOffset, int endingLine) { - return new ASTUsingDeclaration( scope, isTypeName, name.toString(), startingOffset, startingLine, endingOffset, endingLine, name.getFilename() ); + return new ASTUsingDeclaration( scope, isTypeName, name.toCharArray(), startingOffset, startingLine, endingOffset, endingLine, name.getFilename() ); } /* (non-Javadoc) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/GCCScannerExtension.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/GCCScannerExtension.java index ff885aacc86..c575645f2e4 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/GCCScannerExtension.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/GCCScannerExtension.java @@ -161,7 +161,7 @@ public class GCCScannerExtension implements IScannerExtension { public void handlePreprocessorDirective(IScannerData iscanner, String directive, String restOfLine) { if( directive.equals(POUND_INCLUDE_NEXT) ) { - TraceUtil.outputTrace(iscanner.getLogService(), "GCCScannerExtension handling #include_next directive", null, null, null, null); //$NON-NLS-1$ + TraceUtil.outputTrace(iscanner.getLogService(), "GCCScannerExtension handling #include_next directive" ); //$NON-NLS-1$ // figure out the name of the current file and its path IScannerContext context = iscanner.getContextStack().getCurrentContext(); if( context == null || context.getKind() != IScannerContext.ContextKind.INCLUSION ) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/Scanner.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/Scanner.java index 83ec99cc371..e6c1015fe1e 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/Scanner.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/Scanner.java @@ -130,7 +130,7 @@ public final class Scanner implements IScanner, IScannerData { error ); // trace log - TraceUtil.outputTrace(log, "Scanner problem encountered: ", problem, null, null, null ); //$NON-NLS-1$ + TraceUtil.outputTrace(log, "Scanner problem encountered: ", problem ); //$NON-NLS-1$ if( (! requestor.acceptProblem( problem )) && extra ) throw new ScannerException( problem ); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/Scanner2.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/Scanner2.java index 6a30ac6dd20..f3a68b29f10 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/Scanner2.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/Scanner2.java @@ -311,11 +311,7 @@ public class Scanner2 implements IScanner, IScannerData { nextToken = null; finished = true; } else { - String t1 = lastToken.getImage(); - String t2 = token2.getImage(); - char[] pb = new char[t1.length() + t2.length()]; - t1.getChars(0, t1.length(), pb, 0); - t2.getChars(0, t2.length(), pb, t1.length()); + char[] pb = CharArrayUtils.concat( lastToken.getCharImage(), token2.getCharImage() ); pushContext(pb); lastToken = oldToken; nextToken = null; @@ -327,7 +323,7 @@ public class Scanner2 implements IScanner, IScannerData { int tokenType = IToken.tSTRING; if( lastToken.getType() == IToken.tLSTRING || nextToken.getType() == IToken.tLSTRING ) tokenType = IToken.tLSTRING; - lastToken = new ImagedToken(tokenType, (lastToken.getImage() + nextToken.getImage()).toCharArray(), nextToken.getEndOffset(), getCurrentFilename() ); //TODO Fix this + lastToken = new ImagedToken(tokenType, CharArrayUtils.concat( lastToken.getCharImage(), nextToken.getCharImage() ), nextToken.getEndOffset(), getCurrentFilename() ); if (oldToken != null) oldToken.setNext(lastToken); nextToken = fetchToken(); 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 64014b19333..c3d225e3ec0 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 @@ -66,7 +66,7 @@ public class ImagedToken extends SimpleToken { */ protected void setOffsetAndLength(IScannerContext context) { if( getImage() == null ) return; - offset = context.getOffset() - getImage().length(); + offset = context.getOffset() - getCharImage().length; if( getType() == tSTRING || getType() == tCHAR ) offset--; else if( getType() == tLSTRING || getType() == tLCHAR ) @@ -74,18 +74,18 @@ public class ImagedToken extends SimpleToken { } public int getLength() { - if( getImage() == null ) + if( getCharImage() == null ) return 0; switch( getType() ) { case tSTRING: case tCHAR: - return getImage().length() + 2; // 'c' is 3 characters, not 1 + return getCharImage().length + 2; // 'c' is 3 characters, not 1 case tLSTRING: case tLCHAR: - return getImage().length() + 3; // L"X" if 4 characters, not 1 + return getCharImage().length + 3; // L"X" if 4 characters, not 1 default: - return getImage().length(); + return getCharImage().length; } } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/SimpleToken.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/SimpleToken.java index c2489927f5f..ee9bc587141 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/SimpleToken.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/SimpleToken.java @@ -38,7 +38,7 @@ public class SimpleToken extends AbstractToken implements IToken { } public int getLength() { - return getImage().length(); + return getCharImage().length; } /** diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/util/TraceUtil.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/util/TraceUtil.java index a448a9d6226..30a860e71de 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/util/TraceUtil.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/util/TraceUtil.java @@ -29,6 +29,25 @@ public class TraceUtil { log.traceLog( buffer.toString() ); } } + public static void outputTrace(IParserLogService log, String preface, IProblem problem ) { + if( log.isTracing() ) { + StringBuffer buffer = new StringBuffer(); + if( preface != null ) buffer.append( preface ); + if( problem != null ) buffer.append( problem.getMessage()); + log.traceLog( buffer.toString() ); + } + } + public static void outputTrace(IParserLogService log, String preface, IProblem problem, char[] first, String second, String third ) { + if( log.isTracing() ) { + StringBuffer buffer = new StringBuffer(); + if( preface != null ) buffer.append( preface ); + if( problem != null ) buffer.append( problem.getMessage()); + if( first != null ) buffer.append( first ); + if( second != null ) buffer.append( second ); + if( third != null ) buffer.append( third ); + log.traceLog( buffer.toString() ); + } + } public static void outputTrace(IParserLogService log, String preface, IProblem problem, int first, String second, int third ) { if( log.isTracing() ) { outputTrace(