package scotch.compiler.syntax.pattern;
import java.util.List;
import java.util.Optional;
import scotch.symbol.Symbol;
import scotch.compiler.syntax.type.Type;
import scotch.compiler.syntax.value.Value;
import scotch.compiler.text.SourceLocation;
public final class Patterns {
public static CaptureMatch capture(SourceLocation sourceLocation, Optional<Value> argument, Symbol symbol, Type type) {
return new CaptureMatch(sourceLocation, argument, symbol, type);
}
public static EqualMatch equal(SourceLocation sourceLocation, Optional<Value> argument, Value value) {
return new EqualMatch(sourceLocation, argument, value);
}
public static IgnorePattern ignore(SourceLocation sourceLocation, Type type) {
return new IgnorePattern(sourceLocation, type);
}
public static StructField field(SourceLocation sourceLocation, String field, Type type, PatternMatch patternMatch) {
return new StructField(sourceLocation, field, type, patternMatch);
}
public static PatternCase pattern(SourceLocation sourceLocation, Symbol symbol, List<PatternMatch> patternMatches, Value body) {
return new PatternCase(sourceLocation, symbol, patternMatches, body);
}
public static StructMatch struct(SourceLocation sourceLocation, Optional<Value> argument, Symbol dataType, Type type, List<StructField> fields) {
return new StructMatch(sourceLocation, argument, dataType, type, fields);
}
public static UnshuffledStructMatch unshuffledMatch(SourceLocation sourceLocation, Type type, List<PatternMatch> patternMatches) {
return new UnshuffledStructMatch(sourceLocation, type, patternMatches);
}
private Patterns() {
// intentionally empty
}
}