Current section
Files
Jump to
Current section
Files
priv/elixir/Elixir.ElixirScript.Agent.js
import Elixir from '../elixir/Elixir';import Elixir$ElixirScript$Kernel from '../elixir/Elixir.ElixirScript.Kernel';import Elixir$ElixirScript$Process from '../elixir/Elixir.ElixirScript.Process';import Elixir$ElixirScript$Keyword from '../elixir/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$ElixirScript$Kernel.spawn(Elixir.Core.Patterns.defmatch(Elixir.Core.Patterns.clause([],function(){return Elixir$ElixirScript$Process.sleep(Symbol.for('infinity'));}))));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$ElixirScript$Kernel.spawn_link(Elixir.Core.Patterns.defmatch(Elixir.Core.Patterns.clause([],function(){return Elixir$ElixirScript$Process.sleep(Symbol.for('infinity'));}))));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};