package org.jerlang.erts.otp_ring0; import org.jerlang.erts.Erlang; import org.jerlang.erts.erlang.ErlangDisplay; import org.jerlang.erts.erlang.Error; import org.jerlang.exception.ThrowException; import org.jerlang.type.Atom; import org.jerlang.type.Integer; import org.jerlang.type.List; import org.jerlang.type.Str; import org.jerlang.type.Term; import org.jerlang.type.Tuple; public class OtpRing0Start { public static Term dispatch(List params) throws ThrowException { switch (params.length()) { case 2: Term env = params.head(); params = params.tail(); Term argv = params.head(); return start_2(env, argv); default: throw Error.badarg; } } public static Term start_2(Term _env, Term argv) throws ThrowException { return run(Atom.of("init"), Atom.of("boot"), argv); } private static Term run(Term m, Term f, Term a) throws ThrowException { if (Erlang.function_exported(m.toAtom(), f.toAtom(), Integer.ONE).isTrue()) { return Erlang.apply(m, f, a); } else { ErlangDisplay.display_1(Tuple.of( Atom.of("fatal"), Atom.of("error"), Atom.of("module"), m, Str.of("does not export"), f, Str.of("/1"))); Erlang.halt(Integer.ONE); return null; } } }