1
0
Fork 0
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:
Mike Kucera 2009-02-03 22:08:46 +00:00
parent 018af1b16c
commit 897c5adf97
8 changed files with 119 additions and 4 deletions

View file

@ -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

View file

@ -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());
}

View file

@ -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);
}
}

View file

@ -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();
}
}

View file

@ -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();
}
}

View file

@ -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();
}
}

View file

@ -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();
}
}

View file

@ -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();
}
}