| author | David Salinas | 2012-05-14 17:58:47 (EDT) |
|---|---|---|
| committer | Chris Recoskie | 2012-05-14 17:58:47 (EDT) |
| commit | 091df21721303c8763ef7c44c08023afeec31577 (patch) (side-by-side diff) | |
| tree | b70caac6bf2d14b43991c461c95bcf8e24a6b02e | |
| parent | ebb769c74ce027a4dd2fbc3301f99c8c4beeba02 (diff) | |
| download | org.eclipse.cdt-091df21721303c8763ef7c44c08023afeec31577.zip org.eclipse.cdt-091df21721303c8763ef7c44c08023afeec31577.tar.gz org.eclipse.cdt-091df21721303c8763ef7c44c08023afeec31577.tar.bz2 | |
Bug 379474 - remote C/C++ project with XL toolchain generates a
parse error in stdio.h, preventing proper AST gen and Indexing.
2 files changed, 49 insertions, 4 deletions
diff --git a/xlc/org.eclipse.cdt.make.xlc.core/src/org/eclipse/cdt/make/xlc/core/scannerconfig/PerFileXLCScannerInfoCollector.java b/xlc/org.eclipse.cdt.make.xlc.core/src/org/eclipse/cdt/make/xlc/core/scannerconfig/PerFileXLCScannerInfoCollector.java index fcd524e..97a52ad 100644 --- a/xlc/org.eclipse.cdt.make.xlc.core/src/org/eclipse/cdt/make/xlc/core/scannerconfig/PerFileXLCScannerInfoCollector.java +++ b/xlc/org.eclipse.cdt.make.xlc.core/src/org/eclipse/cdt/make/xlc/core/scannerconfig/PerFileXLCScannerInfoCollector.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2007, 2010 IBM Corporation and others. + * Copyright (c) 2007, 2012 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 @@ -1376,7 +1376,10 @@ public class PerFileXLCScannerInfoCollector implements IScannerInfoCollector3, I if (projectSymbols != null) { for (String symbol : projectSymbols) { - symbols.put(symbol, "1"); //$NON-NLS-1$ + if (symbol.matches("_Builtin")) //$NON-NLS-1$ + symbols.put(symbol,""); //$NON-NLS-1$ + else + symbols.put(symbol, "1"); //$NON-NLS-1$ } } } diff --git a/xlc/org.eclipse.cdt.make.xlc.core/src/org/eclipse/cdt/make/xlc/core/scannerconfig/XlCSpecsConsoleParser.java b/xlc/org.eclipse.cdt.make.xlc.core/src/org/eclipse/cdt/make/xlc/core/scannerconfig/XlCSpecsConsoleParser.java index d4fbeb0..3f467bd 100644 --- a/xlc/org.eclipse.cdt.make.xlc.core/src/org/eclipse/cdt/make/xlc/core/scannerconfig/XlCSpecsConsoleParser.java +++ b/xlc/org.eclipse.cdt.make.xlc.core/src/org/eclipse/cdt/make/xlc/core/scannerconfig/XlCSpecsConsoleParser.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2006, 2011 IBM Corporation and others. + * Copyright (c) 2006, 2012 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 @@ -23,9 +23,12 @@ import org.eclipse.cdt.make.core.scannerconfig.IScannerInfoCollector; import org.eclipse.cdt.make.core.scannerconfig.ScannerInfoTypes; import org.eclipse.cdt.make.internal.core.scannerconfig.util.TraceUtil; import org.eclipse.cdt.make.xlc.core.activator.Activator; +import org.eclipse.cdt.managedbuilder.scannerconfig.IManagedScannerInfoCollector; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; +import org.eclipse.cdt.core.CCProjectNature; +import org.eclipse.cdt.core.CProjectNature; import org.eclipse.cdt.core.IMarkerGenerator; /** @@ -47,8 +50,12 @@ public class XlCSpecsConsoleParser implements IScannerInfoConsoleParser { final Pattern includePattern = Pattern .compile("-(?:qgcc_c_stdinc|qc_stdinc|qgcc_cpp_stdinc|qcpp_stdinc)=(.*)"); //$NON-NLS-1$ + final Pattern C_includePattern = Pattern.compile("-(?:qgcc_c_stdinc|qc_stdinc)=(.*)"); //$NON-NLS-1$ + final Pattern CXX_includePattern = Pattern.compile("-(?:qgcc_cpp_stdinc|qcpp_stdinc)=(.*)"); //$NON-NLS-1$ + // xlC compiler constants protected final static String [] compilerConstants = { + "_Builtin", //$NON-NLS-1$ "__IBMCPP__", //$NON-NLS-1$ "__xlC__", //$NON-NLS-1$ "__IBMC__", //$NON-NLS-1$ @@ -62,6 +69,22 @@ public class XlCSpecsConsoleParser implements IScannerInfoConsoleParser { protected List<String> symbols = new ArrayList<String>(); protected List<String> includes = new ArrayList<String>(); + + protected List<String> c_includes = new ArrayList<String>(); + protected List<String> cpp_includes = new ArrayList<String>(); + + boolean c_lang; // if language is C only search for the C include paths from the XL Compiler, otherwise get the C++ ones. + public boolean isC_lang() { + return c_lang; + } + + public void setC_lang(boolean c_lang) { + this.c_lang = c_lang; + } + +// protected List<String> c_includes = new ArrayList<String>(); +// protected List<String> cxx_includes = new ArrayList<String>(); +// /* * (non-Javadoc) @@ -76,6 +99,23 @@ public class XlCSpecsConsoleParser implements IScannerInfoConsoleParser { IScannerInfoCollector collector, IMarkerGenerator markerGenerator) { this.fProject = project; this.fCollector = collector; + + try { + if (project.hasNature(CCProjectNature.CC_NATURE_ID)) { + // use C++ pattern + c_lang = false; + } + else { + // use C pattern + c_lang = true; + } + + + + } catch (CoreException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } } /* @@ -112,7 +152,9 @@ public class XlCSpecsConsoleParser implements IScannerInfoConsoleParser { } else { // if it is not a symbol, check to see if it is an // include - Matcher includeMatcher = includePattern.matcher(args[i]); + + // ok parse the C include paths ... and then the cpp include paths. + Matcher includeMatcher = c_lang ? C_includePattern.matcher(args[i]) : CXX_includePattern.matcher(args[i]); if (includeMatcher.matches()) { // if it is a set of include paths, split it String[] includePaths = includeMatcher.group(1).split( |

