Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
vvergu committed Dec 2, 2013
1 parent fc08db2 commit 1541413
Show file tree
Hide file tree
Showing 5 changed files with 23 additions and 17 deletions.
Expand Up @@ -3,7 +3,6 @@
*/
package org.metaborg.sunshine;

import java.io.FileNotFoundException;
import java.io.IOException;

import org.metaborg.sunshine.services.language.ALanguage;
Expand All @@ -15,22 +14,18 @@
*/
public class SunshineIOAgent extends LoggingIOAgent {

private ALanguage language;
private final ALanguage language;

public SunshineIOAgent() {
public SunshineIOAgent(ALanguage language) {
this.language = language;
try {
this.setWorkingDir(Environment.INSTANCE().projectDir.getAbsolutePath());
} catch (FileNotFoundException e) {
throw new RuntimeException(e);
} catch (IOException e) {
throw new RuntimeException(e);
this.setDefinitionDir(language.getDefinitionPath().toAbsolutePath().toString());
} catch (IOException ioex) {
throw new RuntimeException("Failed to create IOAgent", ioex);
}
}

public void setLanguage(ALanguage language) {
this.language = language;
}

public ALanguage getLanguage() {
return language;
}
Expand Down
Expand Up @@ -102,8 +102,7 @@ private HybridInterpreter createPrototypeRuntime(ALanguage lang) {
interp.addOperatorRegistry(new SunshineLibrary());
assert interp.getContext().getOperatorRegistry(SunshineLibrary.REGISTRY_NAME) instanceof SunshineLibrary;

final SunshineIOAgent agent = new SunshineIOAgent();
agent.setLanguage(lang);
final SunshineIOAgent agent = new SunshineIOAgent(lang);
interp.setIOAgent(agent);
loadCompilerFiles(interp, lang);

Expand Down
Expand Up @@ -41,6 +41,8 @@ public String getName() {
public abstract void registerBuilder(String name, String strategyName,
boolean onSource, boolean meta);

public abstract Path getDefinitionPath();

@Override
public boolean equals(Object obj) {
if (obj instanceof ALanguage) {
Expand Down
Expand Up @@ -30,9 +30,10 @@ public class Language extends ALanguage {
private final String analysisFunction;
private final Path[] compilerFiles;
private final Map<String, IBuilder> builders = new HashMap<>();
private Path definitionDir;

public Language(String name, String[] extens, String startSymbol, Path parseTable,
String analysisFunction, Path[] compilerFiles) {
String analysisFunction, Path[] compilerFiles, Path definitionDir) {
super(name);

assert name != null && name.length() > 0;
Expand All @@ -42,12 +43,14 @@ public Language(String name, String[] extens, String startSymbol, Path parseTabl
assert analysisFunction != null && analysisFunction.length() > 0;
assert compilerFiles != null && compilerFiles.length > 0;
assert builders != null;
assert definitionDir != null && definitionDir.toFile().exists();

this.extens = extens;
this.startSymbol = startSymbol;
this.parseTableProvider = new PathBasedParseTableProvider(parseTable);
this.analysisFunction = analysisFunction;
this.compilerFiles = compilerFiles;
this.definitionDir = definitionDir;
}

@Override
Expand Down Expand Up @@ -90,6 +93,11 @@ public IBuilder getBuilder(String name) {
return builders.get(name);
}

@Override
public Path getDefinitionPath() {
return definitionDir;
}

@Override
public String toString() {
String s = super.toString();
Expand All @@ -100,4 +108,5 @@ public String toString() {
return s;
}


}
Expand Up @@ -36,6 +36,8 @@
import org.spoofax.terms.TermFactory;
import org.spoofax.terms.io.binary.TermReader;

import com.google.common.io.Files;

/**
*
* Singleton service for automatic discovery and registration of {@link ALanguage}. Given a location
Expand Down Expand Up @@ -169,8 +171,7 @@ public ALanguage languageFromArguments(SunshineLanguageArguments args) {
}
SunshineMainArguments mainArgs = Environment.INSTANCE().getMainArguments();
ALanguage language = new Language(args.lang, extens, args.ssymb, FileSystems.getDefault()
.getPath(args.tbl),
args.observer, compilerFiles);
.getPath(args.tbl), args.observer, compilerFiles, Files.createTempDir().toPath());
language.registerBuilder(mainArgs.builder, mainArgs.builder, mainArgs.buildonsource, false);
return language;
}
Expand All @@ -196,7 +197,7 @@ public ALanguage languageFromEsv(IStrategoAppl document, Path basepath) {
Collection<IStrategoAppl> builders = builders(document);

ALanguage language = new Language(name, extens, startsymb, parsetbl, observer,
codefiles.toArray(new Path[codefiles.size()]));
codefiles.toArray(new Path[codefiles.size()]), basepath);

for (IStrategoAppl action : builders) {
language.registerBuilder(builderName(action), builderTarget(action),
Expand Down

0 comments on commit 1541413

Please sign in to comment.