mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-08-22 15:53:58 +02:00
added support for IBuiltinBindingsProvider to LR parsers
This commit is contained in:
parent
018af1b16c
commit
897c5adf97
8 changed files with 119 additions and 4 deletions
|
@ -23,3 +23,5 @@ Export-Package: org.eclipse.cdt.core.dom.lrparser,
|
|||
Bundle-Localization: plugin
|
||||
Bundle-Vendor: %Bundle-Vendor.0
|
||||
Bundle-RequiredExecutionEnvironment: J2SE-1.5
|
||||
Bundle-ActivationPolicy: lazy
|
||||
Bundle-Activator: org.eclipse.cdt.core.dom.lrparser.LRParserPlugin
|
||||
|
|
|
@ -15,13 +15,17 @@ import java.util.HashSet;
|
|||
import java.util.Set;
|
||||
|
||||
import org.eclipse.cdt.core.dom.ICodeReaderFactory;
|
||||
import org.eclipse.cdt.core.dom.ast.DOMException;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTCompletionNode;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTName;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTNode;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
|
||||
import org.eclipse.cdt.core.dom.ast.IBinding;
|
||||
import org.eclipse.cdt.core.dom.ast.IScope;
|
||||
import org.eclipse.cdt.core.dom.ast.gnu.c.GCCLanguage;
|
||||
import org.eclipse.cdt.core.dom.ast.gnu.cpp.GPPLanguage;
|
||||
import org.eclipse.cdt.core.dom.parser.CLanguageKeywords;
|
||||
import org.eclipse.cdt.core.dom.parser.IBuiltinBindingsProvider;
|
||||
import org.eclipse.cdt.core.dom.parser.IScannerExtensionConfiguration;
|
||||
import org.eclipse.cdt.core.index.IIndex;
|
||||
import org.eclipse.cdt.core.model.AbstractLanguage;
|
||||
|
@ -34,6 +38,7 @@ import org.eclipse.cdt.core.parser.IScannerInfo;
|
|||
import org.eclipse.cdt.core.parser.ParserLanguage;
|
||||
import org.eclipse.cdt.core.parser.util.ASTPrinter;
|
||||
import org.eclipse.cdt.core.parser.util.DebugUtil;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.ASTInternal;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.ASTNode;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.ASTTranslationUnit;
|
||||
import org.eclipse.cdt.internal.core.parser.scanner.CPreprocessor;
|
||||
|
@ -41,6 +46,7 @@ import org.eclipse.cdt.internal.core.pdom.dom.IPDOMLinkageFactory;
|
|||
import org.eclipse.cdt.internal.core.pdom.dom.c.PDOMCLinkageFactory;
|
||||
import org.eclipse.cdt.internal.core.pdom.dom.cpp.PDOMCPPLinkageFactory;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
import org.eclipse.core.runtime.Status;
|
||||
|
||||
|
||||
/**
|
||||
|
@ -87,6 +93,11 @@ public abstract class BaseExtensibleLanguage extends AbstractLanguage {
|
|||
protected abstract IScannerExtensionConfiguration getScannerExtensionConfiguration();
|
||||
|
||||
|
||||
/**
|
||||
* Returns a bindings provider that will provide additional bindings based on the language extension.
|
||||
*/
|
||||
protected abstract IBuiltinBindingsProvider getBuiltinBindingsProvider();
|
||||
|
||||
|
||||
@SuppressWarnings("nls")
|
||||
@Override
|
||||
|
@ -143,8 +154,23 @@ public abstract class BaseExtensibleLanguage extends AbstractLanguage {
|
|||
|
||||
|
||||
|
||||
private static void setUpTranslationUnit(IASTTranslationUnit tu, IScanner preprocessor, IIndex index) {
|
||||
private void setUpTranslationUnit(IASTTranslationUnit tu, IScanner preprocessor, IIndex index) throws CoreException {
|
||||
tu.setIndex(index);
|
||||
|
||||
// add built-in names to the scope
|
||||
IBuiltinBindingsProvider builtinBindingsProvider = getBuiltinBindingsProvider();
|
||||
if (builtinBindingsProvider != null) {
|
||||
IScope tuScope = tu.getScope();
|
||||
IBinding[] bindings = builtinBindingsProvider.getBuiltinBindings(tuScope);
|
||||
try {
|
||||
for (IBinding binding : bindings) {
|
||||
ASTInternal.addBinding(tuScope, binding);
|
||||
}
|
||||
} catch (DOMException e) {
|
||||
throw new CoreException(LRParserPlugin.createStatus(e));
|
||||
}
|
||||
}
|
||||
|
||||
if(tu instanceof ASTTranslationUnit) {
|
||||
((ASTTranslationUnit)tu).setLocationResolver(preprocessor.getLocationResolver());
|
||||
}
|
||||
|
|
|
@ -0,0 +1,59 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2009 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
|
||||
* http://www.eclipse.org/legal/epl-v10.html
|
||||
*
|
||||
* Contributors:
|
||||
* IBM Corporation - initial API and implementation
|
||||
*******************************************************************************/
|
||||
package org.eclipse.cdt.core.dom.lrparser;
|
||||
|
||||
import org.eclipse.core.runtime.IStatus;
|
||||
import org.eclipse.core.runtime.Plugin;
|
||||
import org.eclipse.core.runtime.Status;
|
||||
import org.osgi.framework.BundleContext;
|
||||
|
||||
|
||||
public class LRParserPlugin extends Plugin {
|
||||
|
||||
public static final String PLUGIN_ID = "org.eclipse.cdt.core.lrparser"; //$NON-NLS-1$
|
||||
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
private static LRParserPlugin plugin;
|
||||
|
||||
|
||||
@Override
|
||||
public void start(BundleContext context) throws Exception {
|
||||
super.start(context);
|
||||
plugin = this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void stop(BundleContext context) throws Exception {
|
||||
try {
|
||||
// shutdown code goes here
|
||||
plugin = null;
|
||||
}
|
||||
finally {
|
||||
super.stop(context);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @noreference This method is not intended to be referenced by clients.
|
||||
*/
|
||||
public static IStatus createStatus(String msg, Throwable e) {
|
||||
return new Status(IStatus.ERROR, PLUGIN_ID, IStatus.ERROR, msg, e);
|
||||
}
|
||||
|
||||
/**
|
||||
* @noreference This method is not intended to be referenced by clients.
|
||||
*/
|
||||
public static IStatus createStatus(Throwable e) {
|
||||
return createStatus(e.getMessage(), e);
|
||||
}
|
||||
|
||||
}
|
|
@ -16,7 +16,9 @@ import org.eclipse.cdt.core.dom.lrparser.BaseExtensibleLanguage;
|
|||
import org.eclipse.cdt.core.dom.lrparser.IDOMTokenMap;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IParser;
|
||||
import org.eclipse.cdt.core.dom.lrparser.ScannerExtensionConfiguration;
|
||||
import org.eclipse.cdt.core.dom.parser.IBuiltinBindingsProvider;
|
||||
import org.eclipse.cdt.core.dom.parser.IScannerExtensionConfiguration;
|
||||
import org.eclipse.cdt.core.dom.parser.c.ANSICParserExtensionConfiguration;
|
||||
import org.eclipse.cdt.core.model.IContributedModelBuilder;
|
||||
import org.eclipse.cdt.core.model.ITranslationUnit;
|
||||
import org.eclipse.cdt.core.parser.ParserLanguage;
|
||||
|
@ -70,4 +72,9 @@ public class C99Language extends BaseExtensibleLanguage {
|
|||
return ParserLanguage.C;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected IBuiltinBindingsProvider getBuiltinBindingsProvider() {
|
||||
return new ANSICParserExtensionConfiguration().getBuiltinBindingsProvider();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -16,7 +16,9 @@ import org.eclipse.cdt.core.dom.lrparser.BaseExtensibleLanguage;
|
|||
import org.eclipse.cdt.core.dom.lrparser.IDOMTokenMap;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IParser;
|
||||
import org.eclipse.cdt.core.dom.lrparser.ScannerExtensionConfiguration;
|
||||
import org.eclipse.cdt.core.dom.parser.IBuiltinBindingsProvider;
|
||||
import org.eclipse.cdt.core.dom.parser.IScannerExtensionConfiguration;
|
||||
import org.eclipse.cdt.core.dom.parser.cpp.ANSICPPParserExtensionConfiguration;
|
||||
import org.eclipse.cdt.core.model.IContributedModelBuilder;
|
||||
import org.eclipse.cdt.core.model.ITranslationUnit;
|
||||
import org.eclipse.cdt.core.parser.ParserLanguage;
|
||||
|
@ -69,5 +71,8 @@ public class ISOCPPLanguage extends BaseExtensibleLanguage {
|
|||
return ParserLanguage.CPP;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected IBuiltinBindingsProvider getBuiltinBindingsProvider() {
|
||||
return new ANSICPPParserExtensionConfiguration().getBuiltinBindingsProvider();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,7 +15,9 @@ import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
|
|||
import org.eclipse.cdt.core.dom.lrparser.BaseExtensibleLanguage;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IDOMTokenMap;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IParser;
|
||||
import org.eclipse.cdt.core.dom.parser.IBuiltinBindingsProvider;
|
||||
import org.eclipse.cdt.core.dom.parser.IScannerExtensionConfiguration;
|
||||
import org.eclipse.cdt.core.dom.parser.c.GCCParserExtensionConfiguration;
|
||||
import org.eclipse.cdt.core.dom.parser.c.GCCScannerExtensionConfiguration;
|
||||
import org.eclipse.cdt.core.model.IContributedModelBuilder;
|
||||
import org.eclipse.cdt.core.model.ITranslationUnit;
|
||||
|
@ -69,4 +71,8 @@ public class GCCLanguage extends BaseExtensibleLanguage {
|
|||
return ParserLanguage.C;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected IBuiltinBindingsProvider getBuiltinBindingsProvider() {
|
||||
return new GCCParserExtensionConfiguration().getBuiltinBindingsProvider();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,7 +15,9 @@ import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
|
|||
import org.eclipse.cdt.core.dom.lrparser.BaseExtensibleLanguage;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IDOMTokenMap;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IParser;
|
||||
import org.eclipse.cdt.core.dom.parser.IBuiltinBindingsProvider;
|
||||
import org.eclipse.cdt.core.dom.parser.IScannerExtensionConfiguration;
|
||||
import org.eclipse.cdt.core.dom.parser.cpp.GPPParserExtensionConfiguration;
|
||||
import org.eclipse.cdt.core.dom.parser.cpp.GPPScannerExtensionConfiguration;
|
||||
import org.eclipse.cdt.core.model.IContributedModelBuilder;
|
||||
import org.eclipse.cdt.core.model.ITranslationUnit;
|
||||
|
@ -69,4 +71,8 @@ public class GPPLanguage extends BaseExtensibleLanguage {
|
|||
return ParserLanguage.CPP;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected IBuiltinBindingsProvider getBuiltinBindingsProvider() {
|
||||
return new GPPParserExtensionConfiguration().getBuiltinBindingsProvider();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -16,14 +16,15 @@ import org.eclipse.cdt.core.dom.lrparser.BaseExtensibleLanguage;
|
|||
import org.eclipse.cdt.core.dom.lrparser.IDOMTokenMap;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IParser;
|
||||
import org.eclipse.cdt.core.dom.lrparser.ScannerExtensionConfiguration;
|
||||
import org.eclipse.cdt.core.dom.parser.IBuiltinBindingsProvider;
|
||||
import org.eclipse.cdt.core.dom.parser.IScannerExtensionConfiguration;
|
||||
import org.eclipse.cdt.core.dom.parser.c.ANSICParserExtensionConfiguration;
|
||||
import org.eclipse.cdt.core.dom.parser.upc.DOMToUPCTokenMap;
|
||||
import org.eclipse.cdt.core.dom.parser.upc.UPCLanguageKeywords;
|
||||
import org.eclipse.cdt.core.model.ICLanguageKeywords;
|
||||
import org.eclipse.cdt.core.model.IContributedModelBuilder;
|
||||
import org.eclipse.cdt.core.model.ITranslationUnit;
|
||||
import org.eclipse.cdt.core.parser.ParserLanguage;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.c.CNodeFactory;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.upc.UPCParser;
|
||||
|
||||
|
||||
|
@ -32,7 +33,6 @@ import org.eclipse.cdt.internal.core.dom.parser.upc.UPCParser;
|
|||
*
|
||||
* @author Mike Kucera
|
||||
*/
|
||||
@SuppressWarnings("restriction")
|
||||
public class UPCLanguage extends BaseExtensibleLanguage {
|
||||
|
||||
public static final String ID = "org.eclipse.cdt.core.parser.upc.upc"; //$NON-NLS-1$
|
||||
|
@ -90,4 +90,8 @@ public class UPCLanguage extends BaseExtensibleLanguage {
|
|||
return ScannerExtensionConfiguration.createC();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected IBuiltinBindingsProvider getBuiltinBindingsProvider() {
|
||||
return new ANSICParserExtensionConfiguration().getBuiltinBindingsProvider();
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue