Beispiel #1
0
  static u2_noun
  _heal_by(u2_wire wir_r,
           u2_noun van,
           u2_noun sut,
           u2_noun qog, 
           u2_noun ref)
  {
    u2_noun p_sut, q_sut;

    if ( u2_no == u2_dust(sut) ) {
      return u2_bl_error(wir_r, "heal-name");
    }
    else switch ( u2_h(sut) ) {
      default: return u2_bl_error(wir_r, "heal-name");

      case c3__core:
      {
        return u2_rx(wir_r, ref);
      }
      case c3__face: u2_bi_cell(wir_r, u2_t(sut), &p_sut, &q_sut);
      {
        if ( u2_yes == u2_sing(p_sut, u2_t(qog)) ) {
          return j2_mby(Pt6, face)(wir_r, p_sut, ref);
        }
        else return u2_bl_error(wir_r, "heal-name");
      }
      case c3__fine: 
      case c3__hold: {
        u2_noun rep = j2_mcy(Pt6, ut, repo)(wir_r, van, sut);
        u2_noun ret = _heal_by(wir_r, van, rep, qog, ref);

        u2_rz(wir_r, rep);
        return ret;
      }
      case c3__fork: u2_bi_cell(wir_r, u2_t(sut), &p_sut, &q_sut);
      {
        u2_noun dis = _heal_by(wir_r, van, p_sut, qog, ref);
        u2_noun dat = _heal_by(wir_r, van, q_sut, qog, ref);
        u2_noun ret = j2_mby(Pt6, fork)(wir_r, dis, dat);

        u2_rl_lose(wir_r, dis);
        u2_rl_lose(wir_r, dat);
        return ret;
      }
    }
  }
Beispiel #2
0
  static u3_noun
  _heal_as(
           u3_noun van,
           u3_noun sut,
           u3_noun qog,
           u3_atom axe,
           u3_noun ref)
  {
    if ( 1 == axe ) {
      if ( u3_nul == qog ) {
        return u3k(ref);
      } else return _heal_by(van, sut, qog, ref);
    }
    else {
      u3_atom now = u3qc_cap(axe);
      u3_atom lat = u3qc_mas(axe);
      u3_noun ret = _heal_to(van, sut, u3_nul, qog, ref, now, lat);

      u3z(lat);
      return ret;
    }
  }
Beispiel #3
0
  static u2_noun
  _heal_as(u2_wire wir_r,
           u2_noun van,
           u2_noun sut,
           u2_noun qog,
           u2_atom axe,
           u2_noun ref)
  {
    if ( _1 == axe ) {
      if ( u2_nul == qog ) {
        return u2_rx(wir_r, ref);
      } else return _heal_by(wir_r, van, sut, qog, ref);
    }
    else {
      u2_atom now = j2_mbc(Pt3, cap)(wir_r, axe);
      u2_atom lat = j2_mbc(Pt3, mas)(wir_r, axe);
      u2_noun ret = _heal_to(wir_r, van, sut, u2_nul, qog, ref, now, lat);

      u2_rz(wir_r, lat);
      return ret;
    }
  }
Beispiel #4
0
  static u3_noun
  _heal_by(
           u3_noun van,
           u3_noun sut,
           u3_noun qog,
           u3_noun ref)
  {
    u3_noun p_sut, q_sut;

    if ( c3n == u3du(sut) ) {
      return u3m_error("heal-name");
    }
    else switch ( u3h(sut) ) {
      default: return u3m_error("heal-name");

      case c3__core:
      {
        return u3k(ref);
      }
      case c3__bull: u3x_cell(u3t(sut), &p_sut, &q_sut);
      {
        if ( c3y == u3r_sing(u3h(p_sut), u3t(qog)) ) {
          return u3k(ref);
        }
        else {
          u3_noun sub = _heal_by(van, q_sut, qog, ref);
          u3_noun ret;

          ret = u3qfu_busk
            (van, sub, u3h(p_sut), u3h(u3t(p_sut)));

          u3z(sub);
          return ret;
        }
      }
      case c3__face: u3x_cell(u3t(sut), &p_sut, &q_sut);
      {
        if ( c3y == u3r_sing(p_sut, u3t(qog)) ) {
          return u3qf_face(p_sut, ref);
        }
        else return u3m_error("heal-name");
      }
      case c3__hold: {
        u3_noun rep = u3qfu_repo(van, sut);
        u3_noun ret = _heal_by(van, rep, qog, ref);

        u3z(rep);
        return ret;
      }
      case c3__fork: u3x_cell(u3t(sut), &p_sut, &q_sut);
      {
        u3_noun dis = _heal_by(van, p_sut, qog, ref);
        u3_noun dat = _heal_by(van, q_sut, qog, ref);
        u3_noun ret = u3qf_fork(dis, dat);

        u3z(dis);
        u3z(dat);
        return ret;
      }
    }
  }