Current section

Files

Jump to
elixir_script priv Elixir.ElixirScript.Agent.js
Raw

priv/Elixir.ElixirScript.Agent.js

import Elixir from './Elixir';
import Elixir$ElixirScript$Kernel from './Elixir.ElixirScript.Kernel';
import Elixir$ElixirScript$Process from './Elixir.ElixirScript.Process';
import Elixir$ElixirScript$Keyword from './Elixir.ElixirScript.Keyword';
const update = Elixir.Core.Patterns.defmatch(Elixir.Core.Patterns.clause([Elixir.Core.Patterns.variable(), Elixir.Core.Patterns.variable()],function(agent,fun) {
let [pid] = Elixir.Core.Patterns.match(Elixir.Core.Patterns.variable(),Elixir.Core.Functions.call_property(Elixir.Core,'processes').pidof(agent));
let [current_state] = Elixir.Core.Patterns.match(Elixir.Core.Patterns.variable(),Elixir.Core.Store.read(pid));
Elixir.Core.Store.update(pid,fun(current_state));
return Symbol.for('ok');
}));
const get_and_update = Elixir.Core.Patterns.defmatch(Elixir.Core.Patterns.clause([Elixir.Core.Patterns.variable(), Elixir.Core.Patterns.variable()],function(agent,fun) {
let [pid] = Elixir.Core.Patterns.match(Elixir.Core.Patterns.variable(),Elixir.Core.Functions.call_property(Elixir.Core,'processes').pidof(agent));
let [current_state] = Elixir.Core.Patterns.match(Elixir.Core.Patterns.variable(),Elixir.Core.Store.read(pid));
let [val,new_state] = Elixir.Core.Patterns.match(Elixir.Core.Patterns.type(Elixir.Core.Tuple,{
values: [Elixir.Core.Patterns.variable(), Elixir.Core.Patterns.variable()]
}),fun(current_state));
let _ref = new Elixir.Core.Tuple(val,new_state);
Elixir.Core.Store.update(pid,new_state);
return val;
}));
const start = Elixir.Core.Patterns.defmatch(Elixir.Core.Patterns.clause([Elixir.Core.Patterns.variable(), Elixir.Core.Patterns.variable(Object.freeze([]))],function(fun,options) {
let [pid] = Elixir.Core.Patterns.match(Elixir.Core.Patterns.variable(),Elixir.Core.processes.spawn(function*() {
return yield* Elixir.Core.Functions.run(Elixir$ElixirScript$Process['sleep'],[Symbol.for('infinity')],Elixir$ElixirScript$Process);
}));
Elixir.Core.Patterns.defmatch(Elixir.Core.Patterns.clause([Elixir.Core.Patterns.variable()],function(x) {
return null;
},function(x) {
return (x === null) || (x === false);
}),Elixir.Core.Patterns.clause([Elixir.Core.Patterns.wildcard()],function() {
return Elixir$ElixirScript$Process.register(pid,Elixir$ElixirScript$Keyword.get(options,Symbol.for('name')));
})).call(this,Elixir$ElixirScript$Keyword.has_key__qmark__(options,Symbol.for('name')));
Elixir.Core.Store.create(pid,fun());
return new Elixir.Core.Tuple(Symbol.for('ok'),pid);
}));
const get = Elixir.Core.Patterns.defmatch(Elixir.Core.Patterns.clause([Elixir.Core.Patterns.variable(), Elixir.Core.Patterns.variable()],function(agent,fun) {
let [pid] = Elixir.Core.Patterns.match(Elixir.Core.Patterns.variable(),Elixir.Core.Functions.call_property(Elixir.Core,'processes').pidof(agent));
let [current_state] = Elixir.Core.Patterns.match(Elixir.Core.Patterns.variable(),Elixir.Core.Store.read(pid));
return fun(current_state);
}));
const start_link = Elixir.Core.Patterns.defmatch(Elixir.Core.Patterns.clause([Elixir.Core.Patterns.variable(), Elixir.Core.Patterns.variable(Object.freeze([]))],function(fun,options) {
let [pid] = Elixir.Core.Patterns.match(Elixir.Core.Patterns.variable(),Elixir.Core.processes.spawn_link(function*() {
return yield* Elixir.Core.Functions.run(Elixir$ElixirScript$Process['sleep'],[Symbol.for('infinity')],Elixir$ElixirScript$Process);
}));
Elixir.Core.Patterns.defmatch(Elixir.Core.Patterns.clause([Elixir.Core.Patterns.variable()],function(x) {
return null;
},function(x) {
return (x === null) || (x === false);
}),Elixir.Core.Patterns.clause([Elixir.Core.Patterns.wildcard()],function() {
return Elixir$ElixirScript$Process.register(pid,Elixir$ElixirScript$Keyword.get(options,Symbol.for('name')));
})).call(this,Elixir$ElixirScript$Keyword.has_key__qmark__(options,Symbol.for('name')));
Elixir.Core.Store.create(pid,fun());
return new Elixir.Core.Tuple(Symbol.for('ok'),pid);
}));
const stop = Elixir.Core.Patterns.defmatch(Elixir.Core.Patterns.clause([Elixir.Core.Patterns.variable()],function(agent) {
Elixir$ElixirScript$Process.exit(agent);
return Symbol.for('ok');
}));
export default {
update, get_and_update, start, get, start_link, stop
};