package org.jerlang.erts.erlang; import org.jerlang.type.Atom; import org.jerlang.type.Fun; import org.jerlang.type.List; import org.jerlang.type.PID; import org.jerlang.type.Term; import org.jerlang.vm.VirtualMachine; public class ErlangSpawn { private ErlangSpawn() { } public static Term dispatch(List params) { switch (params.length()) { case 1: return spawn_1(params.head().toFun()); case 3: Atom m = params.head().toAtom(); params = params.tail(); Atom f = params.head().toAtom(); params = params.tail(); List a = params.head().toList(); return spawn_3(m, f, a); default: throw Error.badarg; } } /** * Returns the pid of a new process started by the application of * Fun to the empty list []. Otherwise works like spawn/3. * * http://www.erlang.org/doc/man/erlang.html#spawn-1 */ public static PID spawn_1(Fun fun) { return VirtualMachine.instance().spawn(fun).pid(); } public static PID spawn_3(Atom module, Atom fun, List args) { return VirtualMachine.instance().spawn(module, fun, args).pid(); } }