feat: add default implementations of procedures.
This commit is contained in:
parent
55537b9dd5
commit
d74f9a8074
3 changed files with 19 additions and 1 deletions
|
@ -76,6 +76,12 @@ namespace Jellyfin.Plugin.SmartPlaylist.Lisp {
|
|||
}
|
||||
}
|
||||
|
||||
public class DefaultEnvironment: Environment {
|
||||
public DefaultEnvironment() {
|
||||
this["find"] = new Parser("(lambda (item list) (if (= list ()) nil (if (= item (car list)) (car list) (find item (cdr list)))))").parse();
|
||||
}
|
||||
}
|
||||
|
||||
public class SubEnvironment : Dictionary<string, Expression>, IEnvironment<string, Expression> {
|
||||
private IEnvironment<string, Expression> _super;
|
||||
public SubEnvironment(IEnvironment<string, Expression> super) {
|
||||
|
@ -375,6 +381,11 @@ namespace Jellyfin.Plugin.SmartPlaylist.Lisp {
|
|||
_builtins = builtins;
|
||||
_builtinsLater = builtinsLater;
|
||||
}
|
||||
public Executor(IEnvironment<string, Expression> environment) {
|
||||
_environment = environment;
|
||||
_builtins = new Builtins();
|
||||
_builtinsLater = new BuiltinsLater();
|
||||
}
|
||||
public Executor() {
|
||||
_environment = new Environment();
|
||||
_builtins = new Builtins();
|
||||
|
|
|
@ -104,7 +104,7 @@ namespace Jellyfin.Plugin.SmartPlaylist.ScheduledTasks {
|
|||
private IEnumerable<Guid> FilterPlaylistItems(IEnumerable<BaseItem> items, User user, SmartPlaylistDto smartPlaylist) {
|
||||
List<Guid> results = new List<Guid>();
|
||||
Expression expression = new Parser(StringTokenStream.generate(smartPlaylist.Program)).parse();
|
||||
Executor executor = new Executor();
|
||||
Executor executor = new Executor(new DefaultEnvironment());
|
||||
executor.environment.Set("user", new Lisp_Object(user));
|
||||
foreach (var i in items) {
|
||||
executor.environment.Set("item", new Lisp_Object(i));
|
||||
|
|
|
@ -172,5 +172,12 @@ namespace Tests
|
|||
r = e.eval("(begin (define find (lambda (item list) (if (= list ()) nil (if (= item (car list)) (car list) (find item (cdr list)))))) (find 0 (1 2 3 4)))");
|
||||
Assert.Equal(string.Format("{0}", r), "nil");
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public static void DefaultEnvironmentTest() {
|
||||
Executor e = new Executor(new DefaultEnvironment());
|
||||
Assert.Equal("nil", e.eval("(find 0 (1 2 3 4))").ToString());
|
||||
Assert.Equal("3", e.eval("(find 3 (1 2 3 4))").ToString());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue