diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/MacroDefinitionParser.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/MacroDefinitionParser.java index 5a6edf47074..3bd677ab9b1 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/MacroDefinitionParser.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/MacroDefinitionParser.java @@ -143,8 +143,8 @@ public class MacroDefinitionParser { /** * Parses a macro definition basically checking for var-args. */ - public PreprocessorMacro parseMacroDefinition(final char[] name, char[][] paramList, final char[] replacement) { - fHasVarArgs= 0; + public static PreprocessorMacro parseMacroDefinition(final char[] name, char[][] paramList, final char[] replacement) { + int hasVarargs= 0; if (paramList != null) { final int length = paramList.length; if (length > 0) { @@ -155,7 +155,7 @@ public class MacroDefinitionParser { break; case 3: if (CharArrayUtils.equals(lastParam, Keywords.cpELLIPSIS)) { - fHasVarArgs= FunctionStyleMacro.VAARGS; + hasVarargs= FunctionStyleMacro.VAARGS; char[][] copy= new char[length][]; System.arraycopy(paramList, 0, copy, 0, length-1); copy[length-1]= Keywords.cVA_ARGS; @@ -164,7 +164,7 @@ public class MacroDefinitionParser { break; default: if (CharArrayUtils.equals(lastParam, lpl-3, 3, Keywords.cpELLIPSIS)) { - fHasVarArgs= FunctionStyleMacro.NAMED_VAARGS; + hasVarargs= FunctionStyleMacro.NAMED_VAARGS; char[][] copy= new char[length][]; System.arraycopy(paramList, 0, copy, 0, length-1); copy[length-1]= CharArrayUtils.subarray(lastParam, 0, lpl-3); @@ -178,7 +178,7 @@ public class MacroDefinitionParser { if (paramList == null) { return new ObjectStyleMacro(name, replacement); } - return new FunctionStyleMacro(name, paramList, fHasVarArgs, replacement); + return new FunctionStyleMacro(name, paramList, hasVarargs, replacement); } private Token parseName(final Lexer lexer) throws OffsetLimitReachedException, InvalidMacroDefinitionException { diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMMacro.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMMacro.java index e3891ca6cb0..6276fee6216 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMMacro.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMMacro.java @@ -21,10 +21,9 @@ import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.dom.ILinkage; import org.eclipse.cdt.core.dom.ast.DOMException; import org.eclipse.cdt.core.dom.ast.IASTFileLocation; -import org.eclipse.cdt.core.dom.ast.IASTFunctionStyleMacroParameter; import org.eclipse.cdt.core.dom.ast.IASTName; -import org.eclipse.cdt.core.dom.ast.IASTPreprocessorFunctionStyleMacroDefinition; import org.eclipse.cdt.core.dom.ast.IASTPreprocessorMacroDefinition; +import org.eclipse.cdt.core.dom.ast.IMacroBinding; import org.eclipse.cdt.core.dom.ast.IScope; import org.eclipse.cdt.core.index.IIndexFile; import org.eclipse.cdt.core.index.IIndexMacro; @@ -77,23 +76,23 @@ public class PDOMMacro implements IIndexMacro, IASTFileLocation { Database db = pdom.getDB(); this.record = db.malloc(RECORD_SIZE); IASTName name = macro.getName(); + IMacroBinding binding= (IMacroBinding) name.getBinding(); + db.putInt(record + NAME, db.newString(name.toCharArray()).getRecord()); db.putInt(record + FILE, file.getRecord()); IASTFileLocation fileloc = name.getFileLocation(); db.putInt(record + NAME_OFFSET, fileloc.getNodeOffset()); db.putShort(record + NAME_LENGTH, (short) fileloc.getNodeLength()); - db.putInt(record + EXPANSION, db.newString(macro.getExpansion()).getRecord()); + db.putInt(record + EXPANSION, db.newString(binding.getExpansionImage()).getRecord()); setNextMacro(0); byte macroStyle= MACROSTYLE_OBJECT; PDOMMacroParameter last = null; - if (macro instanceof IASTPreprocessorFunctionStyleMacroDefinition) { + char[][] params= binding.getParameterList(); + if (params != null) { macroStyle= MACROSTYLE_FUNCTION; - IASTPreprocessorFunctionStyleMacroDefinition func = (IASTPreprocessorFunctionStyleMacroDefinition)macro; - IASTFunctionStyleMacroParameter[] params = func.getParameters(); for (int i = params.length - 1; i >= 0; --i) { - IASTFunctionStyleMacroParameter param = params[i]; - PDOMMacroParameter pdomParam = new PDOMMacroParameter(pdom, param.getParameter()); + PDOMMacroParameter pdomParam = new PDOMMacroParameter(pdom, params[i]); if (last != null) pdomParam.setNextParameter(last); last = pdomParam; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMMacroParameter.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMMacroParameter.java index fd2df21eb6a..db3d43d49b2 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMMacroParameter.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMMacroParameter.java @@ -35,7 +35,7 @@ public class PDOMMacroParameter { this.record = record; } - public PDOMMacroParameter(PDOM pdom, String name) throws CoreException { + public PDOMMacroParameter(PDOM pdom, char[] name) throws CoreException { Database db = pdom.getDB(); this.pdom = pdom;