package scotch.compiler.syntax.definition;
import java.util.List;
import scotch.symbol.Symbol;
import scotch.symbol.Value.Fixity;
import scotch.compiler.syntax.type.Type;
import scotch.compiler.syntax.Scoped;
import scotch.compiler.syntax.reference.DefinitionReference;
import scotch.compiler.syntax.pattern.PatternMatch;
import scotch.compiler.syntax.value.Value;
import scotch.compiler.text.SourceLocation;
public class Definitions {
public static ClassDefinition classDef(SourceLocation sourceLocation, Symbol symbol, List<Type> arguments, List<DefinitionReference> members) {
return new ClassDefinition(sourceLocation, symbol, arguments, members);
}
public static ModuleDefinition module(SourceLocation sourceLocation, String symbol, List<DefinitionReference> importScopes) {
return new ModuleDefinition(sourceLocation, symbol, importScopes);
}
public static OperatorDefinition operatorDef(SourceLocation sourceLocation, Symbol symbol, Fixity fixity, int precedence) {
return new OperatorDefinition(sourceLocation, symbol, fixity, precedence);
}
public static RootDefinition root(SourceLocation sourceLocation, List<DefinitionReference> definitions) {
return new RootDefinition(sourceLocation, definitions);
}
public static ScopeDefinition scopeDef(SourceLocation sourceLocation, Symbol symbol) {
return new ScopeDefinition(sourceLocation, symbol);
}
public static Definition scopeDef(Scoped scoped) {
return scoped.getDefinition();
}
public static ValueSignature signature(SourceLocation sourceLocation, Symbol symbol, Type type) {
return new ValueSignature(sourceLocation, symbol, type);
}
public static UnshuffledDefinition unshuffled(SourceLocation sourceLocation, Symbol symbol, List<PatternMatch> matches, Value body) {
return new UnshuffledDefinition(sourceLocation, symbol, matches, body);
}
public static ValueDefinition value(SourceLocation sourceLocation, Symbol symbol, Value value) {
return new ValueDefinition(sourceLocation, symbol, value);
}
private Definitions() {
// intentionally empty
}
}