From 8c4859cd3b4760a369007b89b7c859ad76b42abd Mon Sep 17 00:00:00 2001 From: Markus Schorn Date: Tue, 24 Apr 2007 08:06:02 +0000 Subject: [PATCH] Follow up for 182889, additional information for preprocessor nodes. --- .../cdt/core/parser/util/CharArrayObjectMap.java | 10 +++++++++- .../internal/core/parser/scanner2/DOMScanner.java | 5 +++-- .../parser/scanner2/IScannerPreprocessorLog.java | 2 +- .../internal/core/parser/scanner2/LocationMap.java | 12 ++++++------ 4 files changed, 19 insertions(+), 10 deletions(-) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/util/CharArrayObjectMap.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/util/CharArrayObjectMap.java index 75ff8cbde55..4beef53605e 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/util/CharArrayObjectMap.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/util/CharArrayObjectMap.java @@ -1,5 +1,5 @@ /********************************************************************** - * Copyright (c) 2004, 2005 IBM Corporation and others. + * Copyright (c) 2004, 2007 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -7,9 +7,11 @@ * * Contributors: * IBM Corporation - initial API and implementation + * Markus Schorn (Wind River Systems) *******************************************************************************/ package org.eclipse.cdt.core.parser.util; +import java.lang.reflect.Array; import java.util.Collections; import java.util.Comparator; import java.util.List; @@ -128,4 +130,10 @@ public class CharArrayObjectMap extends CharTable { System.arraycopy( valueTable, 0, values, 0, values.length ); return values; } + + public Object [] valueArray(Class clazz){ + Object[] values= (Object[]) Array.newInstance(clazz, size()); + System.arraycopy( valueTable, 0, values, 0, values.length ); + return values; + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/DOMScanner.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/DOMScanner.java index a85515ffe45..9839663c614 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/DOMScanner.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/DOMScanner.java @@ -37,9 +37,9 @@ import org.eclipse.cdt.core.parser.util.CharArrayUtils; * @author jcamelon */ public class DOMScanner extends BaseScanner { + private static final Class CHAR_ARRAY_CLASS = new char[]{}.getClass(); protected final ICodeReaderFactory codeReaderFactory; - protected int[] bufferDelta = new int[bufferInitialSize]; private static class DOMInclusion { @@ -229,9 +229,10 @@ public class DOMScanner extends BaseScanner { if (d.macro instanceof FunctionStyleMacro && fsmCount == 0) { FunctionMacroData fd = (FunctionMacroData)d; FunctionStyleMacro fsm = (FunctionStyleMacro) d.macro; + char[][] actualArgs= (char[][]) fd.getActualArgs().valueArray(CHAR_ARRAY_CLASS); locationMap.startFunctionStyleExpansion(fsm.attachment, fsm.arglist, getGlobalOffset(d.getStartOffset()), - getGlobalOffset(d.getStartOffset() + d.getLength()),fd.getActualArgs().valueArray() ); + getGlobalOffset(d.getStartOffset() + d.getLength()), actualArgs); bufferDelta[bufferStackPos + 1] = 0; } else if (d.macro instanceof ObjectStyleMacro && fsmCount == 0) { ObjectStyleMacro osm = (ObjectStyleMacro) d.macro; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/IScannerPreprocessorLog.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/IScannerPreprocessorLog.java index d0d5ad74900..efcb4c01baa 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/IScannerPreprocessorLog.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/IScannerPreprocessorLog.java @@ -37,7 +37,7 @@ public interface IScannerPreprocessorLog { public void startFunctionStyleExpansion(IMacroDefinition macro, - char[][] parameters, int startOffset, int endOffset, Object[] objects); + char[][] parameters, int startOffset, int endOffset, char[][] actualArguments); public void endFunctionStyleExpansion(IMacroDefinition macro, int offset); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/LocationMap.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/LocationMap.java index 16098d0b039..76e41acce70 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/LocationMap.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/LocationMap.java @@ -111,7 +111,7 @@ public class LocationMap implements ILocationResolver, IScannerPreprocessorLog { public class FunctionMacroExpansionLocation extends MacroExpansionLocation{ - private Object[] actParams; + private char[][] actParams; /** * @param macroDefinition @@ -119,12 +119,12 @@ public class LocationMap implements ILocationResolver, IScannerPreprocessorLog { * @param offset * @param length */ - public FunctionMacroExpansionLocation(IASTPreprocessorMacroDefinition macroDefinition, IASTNodeLocation[] locations, int offset, int length, Object[] actParameters) { + public FunctionMacroExpansionLocation(IASTPreprocessorMacroDefinition macroDefinition, IASTNodeLocation[] locations, int offset, int length, char[][] actParameters) { super(macroDefinition, locations, offset, length); this.actParams = actParameters; } - public Object[] getActualParameters() { + public char[][] getActualParameters() { return actParams; } @@ -1595,12 +1595,12 @@ public class LocationMap implements ILocationResolver, IScannerPreprocessorLog { protected class _FunctionMacroExpansion extends _MacroExpansion { public final char[][] args; - public final Object[] actArgs; + public final char[][] actArgs; public _FunctionMacroExpansion(_CompositeContext parent, int startOffset, int endOffset, IMacroDefinition definition, - char[][] args, Object[] actParameters) { + char[][] args, char[][] actParameters) { super(parent, startOffset, endOffset, definition); this.args = args; this.actArgs = actParameters; @@ -2228,7 +2228,7 @@ public class LocationMap implements ILocationResolver, IScannerPreprocessorLog { * char[][], char[], int) */ public void startFunctionStyleExpansion(IMacroDefinition macro, - char[][] parameters, int startOffset, int endOffset, Object[] actParameters) { + char[][] parameters, int startOffset, int endOffset, char[][] actParameters) { _FunctionMacroExpansion context = new _FunctionMacroExpansion( currentContext, startOffset, endOffset, macro, parameters, actParameters); currentContext.addSubContext(context);