use of org.spoofax.interpreter.core.InterpreterException in project spoofax by metaborg.
the class CheckSdf2TablePrimitive method call.
@Override
public boolean call(IContext env, Strategy[] svars, IStrategoTerm[] tvars) throws InterpreterException {
org.metaborg.core.context.IContext context = (org.metaborg.core.context.IContext) env.contextObject();
final FileObject location = context.location();
final IProject project = projectService.get(location);
if (project == null) {
return false;
}
if (languageSpecServiceProvider == null) {
// Indicates that meta-Spoofax is not available (ISpoofaxLanguageSpecService cannot be injected), but this
// should never happen because this primitive is inside meta-Spoofax. Check for null just in case.
logger.error("Language specification service is not available; static injection failed");
return false;
}
final ISpoofaxLanguageSpecService languageSpecService = languageSpecServiceProvider.get();
if (!languageSpecService.available(project)) {
return false;
}
final ISpoofaxLanguageSpec languageSpec;
try {
languageSpec = languageSpecService.get(project);
} catch (ConfigException e) {
throw new InterpreterException("Unable to get language specification name for " + location, e);
}
if (languageSpec == null) {
return false;
}
if (!languageSpec.config().sdfEnabled()) {
env.setCurrent(env.getFactory().makeString("disabled"));
return true;
}
env.setCurrent(env.getFactory().makeString(languageSpec.config().sdf2tableVersion().toString()));
return true;
}
use of org.spoofax.interpreter.core.InterpreterException in project spoofax by metaborg.
the class PlaceholderCharsPrimitive method call.
@Override
public boolean call(IContext env, Strategy[] svars, IStrategoTerm[] tvars) throws InterpreterException {
org.metaborg.core.context.IContext context = (org.metaborg.core.context.IContext) env.contextObject();
final FileObject location = context.location();
final IProject project = projectService.get(location);
if (project == null) {
return false;
}
if (languageSpecServiceProvider == null) {
// Indicates that meta-Spoofax is not available (ISpoofaxLanguageSpecService cannot be injected), but this
// should never happen because this primitive is inside meta-Spoofax. Check for null just in case.
logger.error("Language specification service is not available; static injection failed");
return false;
}
final ISpoofaxLanguageSpecService languageSpecService = languageSpecServiceProvider.get();
if (!languageSpecService.available(project)) {
return false;
}
final ISpoofaxLanguageSpec languageSpec;
try {
languageSpec = languageSpecService.get(project);
} catch (ConfigException e) {
throw new InterpreterException("Unable to get language specification name for " + location, e);
}
if (languageSpec == null) {
return false;
}
PlaceholderCharacters placeholderChars = languageSpec.config().placeholderChars();
IStrategoString prefix = env.getFactory().makeString(placeholderChars.prefix);
IStrategoString suffix = null;
if (placeholderChars.suffix != null) {
suffix = env.getFactory().makeString(placeholderChars.suffix);
} else {
suffix = env.getFactory().makeString("");
}
env.setCurrent(env.getFactory().makeTuple(prefix, suffix));
return true;
}
use of org.spoofax.interpreter.core.InterpreterException in project nabl by metaborg.
the class AnalysisPrimitive method call.
@Override
public Optional<? extends IStrategoTerm> call(IScopeGraphContext<?> context, IStrategoTerm sterm, List<IStrategoTerm> sterms, ITermFactory factory) throws InterpreterException {
if (sterms.size() < 1) {
throw new IllegalArgumentException("Expected as first term argument: analysis");
}
final IStrategoTerm analysisTerm = sterms.get(0);
final IScopeGraphUnit analysis;
final Optional<IScopeGraphUnit> maybeAnalysis = StrategoBlob.match(analysisTerm, IScopeGraphUnit.class);
if (maybeAnalysis.isPresent()) {
analysis = maybeAnalysis.get();
} else if (Tools.isTermAppl(analysisTerm) && Tools.hasConstructor((IStrategoAppl) analysisTerm, "AnalysisToken", 0)) {
// TODO Remove legacy case after bootstrapping
analysis = StrategoTermIndices.get(analysisTerm).map(idx -> context.unit(idx.getResource())).orElseThrow(() -> new IllegalArgumentException("Not a valid analysis term."));
} else {
throw new IllegalArgumentException("Not a valid analysis term.");
}
return call(analysis, sterm, sterms, factory);
}
use of org.spoofax.interpreter.core.InterpreterException in project spoofax by metaborg.
the class StrategoRuntimeService method loadCtrees.
private static void loadCtrees(HybridInterpreter runtime, Iterable<FileObject> ctrees) throws MetaborgException {
try {
for (FileObject file : ctrees) {
logger.trace("Loading ctree {}", file.getName());
runtime.load(new BufferedInputStream(file.getContent().getInputStream()));
}
} catch (IOException | InterpreterException e) {
throw new MetaborgException("Failed to load ctree", e);
}
}
use of org.spoofax.interpreter.core.InterpreterException in project spoofax by metaborg.
the class ASpoofaxPrimitive method call.
@Override
public boolean call(IContext context, Strategy[] svars, IStrategoTerm[] tvars) throws InterpreterException {
final IStrategoTerm current = context.current();
final ITermFactory factory = context.getFactory();
try {
final IStrategoTerm newCurrent = call(current, svars, tvars, factory, context);
if (newCurrent != null) {
context.setCurrent(newCurrent);
return true;
}
} catch (MetaborgException | IOException e) {
throw new InterpreterException("Executing primitive " + name + " failed unexpectedly", e);
}
return false;
}
Aggregations