Ejemplo n.º 1
0
/* internal functions
*/
  u3_noun _b_dif_join(u3_noun d, u3_noun e)
  {
    if ( u3_nul == d ) {
      return u3k(e);
    } else if (u3_nul == e) {
      return u3k(d);
    } else {
      u3_noun n_d, l_d, r_d;
      u3_noun n_e, l_e, r_e;
      u3_noun p_n_d, q_n_d;
      u3_noun p_n_e, q_n_e;

      if (    c3n == u3r_trel(d, &n_d, &l_d, &r_d)
           || c3n == u3r_trel(e, &n_e, &l_e, &r_e)
           || c3n == u3r_cell(n_d, &p_n_d, &q_n_d)
           || c3n == u3r_cell(n_e, &p_n_e, &q_n_e) ) {
        return u3m_bail(c3__exit);
      } else {
        if ( c3y == u3qc_vor(p_n_d, p_n_e) ) {
          return u3nt(u3k(n_d),
                      u3k(l_d),
                      _b_dif_join(u3k(r_d), u3k(e)));
        } else {
          return u3nt(u3k(n_e),
                      _b_dif_join(u3k(d), u3k(l_e)),
                      u3k(r_e));
        }
      }
    }
  }
Ejemplo n.º 2
0
Archivo: in_uni.c Proyecto: urbit/urbit
static u3_noun
_in_uni(u3_noun a, u3_noun b)
{
  u3_noun n_a, l_a, r_a,
          n_b, l_b, r_b,
          neb, sub, naw, pro;
  if ( u3_nul == a ) {
    return u3k(b);
  }
  else if ( u3_nul == b ) {
    return u3k(a);
  }
  else if ( (c3n == u3r_trel(a, &n_a, &l_a, &r_a))
         || (c3n == u3r_trel(b, &n_b, &l_b, &r_b)) )
  {
    return u3m_bail(c3__exit);
  }
  else if ( c3n == u3qc_mor(n_a, n_b) ) {
    if ( c3y == u3r_sing(n_a, n_b) ) {
      return u3nt(u3k(n_b), _in_uni(l_a, l_b), _in_uni(r_a, r_b));
    }
    else if ( c3y == u3qc_gor(n_a, n_b) ) {
      naw = u3nt(u3k(n_a), u3k(l_a), u3_nul);
      sub = _in_uni(naw, l_b);
      neb = u3nt(u3k(n_b), sub, u3k(r_b));
      pro = _in_uni(r_a, neb);
      u3z(naw); u3z(neb);
      return pro;
    }
    else {
      naw = u3nt(u3k(n_a), u3_nul, u3k(r_a));
      sub = _in_uni(naw, r_b);
      neb = u3nt(u3k(n_b), u3k(l_b),  sub);
      pro = _in_uni(l_a, neb);
      u3z(naw); u3z(neb);
      return pro;
    }
  }
  else if ( c3y == u3r_sing(n_b, n_a) ) {
    return u3nt(u3k(n_b), _in_uni(l_a, l_b), _in_uni(r_a, r_b));
  }
  else if ( c3y == u3qc_gor(n_b, n_a) ) {
    neb = u3nt(u3k(n_b), u3k(l_b), u3_nul);
    sub = _in_uni(l_a, neb);
    naw = u3nt(u3k(n_a), sub, u3k(r_a));
    pro = _in_uni(naw, r_b);
    u3z(neb); u3z(naw);
    return pro;
  }
  else {
    neb = u3nt(u3k(n_b), u3_nul, u3k(r_b));
    sub = _in_uni(r_a, neb);
    naw = u3nt(u3k(n_a), u3k(l_a), sub);
    pro = _in_uni(naw, l_b);
    u3z(neb); u3z(naw);
    return pro;
  }
}
Ejemplo n.º 3
0
Archivo: in_del.c Proyecto: urbit/urbit
/* functions
*/
  static u3_noun
  _rebalance(u3_noun a)
  {
    u3_noun l_a, n_a, r_a;

    if ( c3n == u3r_trel(a, &n_a, &l_a, &r_a) ) {
      return u3m_bail(c3__exit);
    }
    else {
      if ( u3_nul == l_a) {
        return u3k(r_a);
      }
      else if ( u3_nul == r_a) {
        return u3k(l_a);
      }
      else {
        u3_noun n_l_a, l_l_a, r_l_a;
        u3_noun n_r_a, l_r_a, r_r_a;

        if ( (c3n == u3r_trel(l_a, &n_l_a, &l_l_a, &r_l_a) ) ||
             (c3n == u3r_trel(r_a, &n_r_a, &l_r_a, &r_r_a) ) ) {
          return u3m_bail(c3__exit);
        }
        else {
          if ( c3y == u3qc_mor(n_l_a, n_r_a) ) {
            u3_noun new_right = u3nt(u3k(n_a),
                                     u3k(r_l_a),
                                     u3k(r_a));

            u3_noun ret = u3nt(u3k(n_l_a),
                               u3k(l_l_a),
                               _rebalance(new_right));
            u3z(new_right);

            return ret;
          }
          else {
            u3_noun new_left = u3nt(u3k(n_a),
                                    u3k(l_a),
                                    u3k(l_r_a));

            u3_noun ret = u3nt(u3k(n_r_a),
                               _rebalance(new_left),
                               u3k(r_r_a));
            u3z(new_left);

            return ret;
          }
        }
      }
    }
  }
Ejemplo n.º 4
0
Archivo: by_has.c Proyecto: aulux/urbit
/* functions
*/
  u3_noun
  u3qdb_has(
                       u3_noun a,
                       u3_noun b)
  {
    if ( u3_nul == a ) {
      return c3n;
    }
    else {
      u3_noun l_a, n_a, r_a;
      u3_noun pn_a, qn_a;

      if ( (c3n == u3r_trel(a, &n_a, &l_a, &r_a)) ||
           (c3n == u3r_cell(n_a, &pn_a, &qn_a)) )
      {
        return u3m_bail(c3__exit);
      }
      else {
        if ( (c3y == u3r_sing(b, pn_a)) ) {
          return c3y;
        }
        else {
          if ( c3y == u3qc_gor(b, pn_a) ) {
            return u3qdb_has(l_a, b);
          }
          else return u3qdb_has(r_a, b);
        }
      }
    }
  }
Ejemplo n.º 5
0
  u3_noun u3qdb_dif(u3_noun a, u3_noun b)
  {
    if ( u3_nul == b ) {
      return u3k(a);
    } else {
      u3_noun n_b, l_b, r_b;
      u3_noun c, l_c, r_c;

      if ( c3n == u3r_trel(b, &n_b, &l_b, &r_b) ) {
        return u3m_bail(c3__exit);
      } else {

        c = u3qdb_bif(a, n_b);

        if ( c3n == u3r_cell(c, &l_c, &r_c) ) {
          return u3m_bail(c3__exit);
        } else {
          u3_noun d;
          u3_noun e;

          d = u3qdb_dif(l_c, l_b);
          e = u3qdb_dif(r_c, r_b);
          u3z(c);

          return _b_dif_join(d, e);
        }
      }
    }
  }
Ejemplo n.º 6
0
Archivo: in_del.c Proyecto: urbit/urbit
  u3_noun
  u3qdi_del(u3_noun a,
            u3_noun b)
  {
    if ( u3_nul == a ) {
      return u3_nul;
    }
    else {
      u3_noun l_a, n_a, r_a;

      if ( (c3n == u3r_trel(a, &n_a, &l_a, &r_a)) ) {
        return u3m_bail(c3__exit);
      }
      else if ( c3n == u3r_sing(n_a, b) ) {
        if ( c3y == u3qc_gor(b, n_a) ) {
          return u3nt(u3k(n_a),
                      u3qdi_del(l_a, b),
                      u3k(r_a));
        }
        else {
          return u3nt(u3k(n_a),
                      u3k(l_a),
                      u3qdi_del(r_a, b));
        }
      }
      else {
        return _rebalance(a);
      }
    }
  }
Ejemplo n.º 7
0
Archivo: by_bif.c Proyecto: Gunga/urbit
/* internal functions
*/
  u3_noun _b_bif_putroot(u3_noun a,
                         u3_noun b)
  {
    if ( u3_nul == a) {
      return u3nt(u3k(b), u3_nul, u3_nul);
    }
    else {
      u3_noun n_a, l_a, r_a;
      u3_noun p_n_a, q_n_a;
      u3_noun p_b, q_b;

      if (    (c3n == u3r_trel(a, &n_a, &l_a, &r_a))
           || (c3n == u3r_cell(b, &p_b, &q_b))
           || (c3n == u3r_cell(n_a, &p_n_a, &q_n_a)) ) {
        return u3m_bail(c3__exit);
      }
      else if ( c3y == u3r_sing(p_b, p_n_a) ) {
        return u3nt(u3k(b), u3k(l_a), u3k(r_a));
      }
      else {
        u3_noun c, n_c, l_c, r_c;
        u3_noun d;

        if ( c3y == u3qc_gor(p_b, p_n_a) ) {
          c = _b_bif_putroot(l_a, b);
          u3r_trel(c, &n_c, &l_c, &r_c);
          d = u3nt(u3k(n_c),
                   u3k(l_c),
                   u3nt(u3k(n_a), u3k(r_c), u3k(r_a))
                  );
          u3z(c);
          return d;
        } else {
          c = _b_bif_putroot(r_a, b);
          u3r_trel(c, &n_c, &l_c, &r_c);
          d = u3nt(u3k(n_c), 
                   u3nt(u3k(n_a), u3k(l_a), u3k(l_c)),
                   u3k(r_c)
                  );
          u3z(c);
          return d;
        }
      }
    }
  }
Ejemplo n.º 8
0
  u3_noun u3qdb_bif(u3_noun a, u3_noun b)
  {
    u3_noun c, n_c, l_c, r_c;
    u3_noun d;

    c = _b_bif_putroot(a, b);
    u3r_trel(c, &n_c, &l_c, &r_c);
    d = u3nc(u3k(l_c), u3k(r_c));
    u3z(c);
    return d;
  }
Ejemplo n.º 9
0
  static u3_noun
  _mint_bake(
             u3_noun van,
             u3_noun sut,
             u3_noun dab)
  {
    if ( (u3_nul == dab) ) {
      return 0;
    }
    else {
      u3_noun n_dab, l_dab, r_dab;

      u3r_trel(dab, &n_dab, &l_dab, &r_dab);
      if ( c3n == u3du(n_dab) ) {
        return u3m_bail(c3__fail);
      }
      else {
        u3_noun qn_dab = u3t(n_dab);
        u3_noun vad;

        switch ( u3h(qn_dab) ) {
          default: return u3m_bail(c3__exit);
          case c3__ash: {
            vad = _mint_brew(van, sut, c3y, u3t(qn_dab));
            break;
          }
          case c3__elm: {
            vad = _mint_brew(van, sut, c3n, u3t(qn_dab));
            break;
          }
        }

        if ( (u3_nul == l_dab) && (u3_nul == r_dab) ) {
          return vad;
        }
        else if ( (u3_nul == l_dab) ) {
          return u3nc
            (vad, _mint_bake(van, sut, r_dab));
        }
        else if ( (u3_nul == r_dab) ) {
          return u3nc
            (vad, _mint_bake(van, sut, l_dab));
        }
        else {
          return u3nt
            (vad,
                    _mint_bake(van, sut, l_dab),
                    _mint_bake(van, sut, r_dab));
        }
      }
    }
  }
Ejemplo n.º 10
0
/* _http_new_response(): create http response structure.
*/
static u3_hrep*
_http_new_response(c3_l sev_l, c3_l coq_l, c3_l seq_l, u3_noun rep)
{
  u3_noun p_rep, q_rep, r_rep;

  if ( c3n == u3r_trel(rep, &p_rep, &q_rep, &r_rep) ) {
    uL(fprintf(uH, "strange response\n"));
    return 0;
  }
  else {
    u3_hrep* rep_u = c3_malloc(sizeof(u3_hrep));

    rep_u->sev_l = sev_l;
    rep_u->coq_l = coq_l;
    rep_u->seq_l = seq_l;

    rep_u->sas_w = p_rep;
    rep_u->hed_u = _http_list_to_heds(u3k(q_rep));
    rep_u->bod_u = (u3_nul == r_rep) ? 0 : _http_octs_to_bod(u3k(u3t(r_rep)));

    u3z(rep); return rep_u;
  }
}
Ejemplo n.º 11
0
  static u3_noun
  _peek_in(u3_noun van,
           u3_noun sut,
           u3_noun way,
           u3_atom axe,
           u3_noun gil)
  {
    u3_noun p_sut, q_sut;
    u3_noun pro;

    if ( (c3n == u3du(sut)) ) switch ( sut ) {
      default: return u3m_bail(c3__fail);

      case c3__noun: {
        return c3__noun;
      }
      case c3__void: {
        return c3__void;
      }
    }
    else switch ( u3h(sut) ) {
      default: return u3m_bail(c3__fail);

      case c3__atom: {
        return c3__void;
      }
      case c3__bull: {
        if ( (c3n == u3r_trel(sut, 0, &p_sut, &q_sut)) ) {
          return u3m_bail(c3__fail);
        } else {
          return _peek_in(van, q_sut, way, axe, gil);
        }
      }
      case c3__cell: {
        if ( (c3n == u3r_trel(sut, 0, &p_sut, &q_sut)) ) {
          return u3m_bail(c3__fail);
        } else {
          u3_atom tip = u3qc_cap(axe);
          u3_atom tap = u3qc_mas(axe);

          if ( 2 == tip ) {
            pro = _cqfu_peek(van, p_sut, way, tap);
          }
          else {
            pro = _cqfu_peek(van, q_sut, way, tap);
          }
          u3z(tap);
          u3z(tip);

          return pro;
        }
      }
      case c3__core: {
        u3_noun pq_sut, qq_sut, rq_sut;
        u3_noun prq_sut, qrq_sut;

        if ( (c3n == u3r_trel(sut, 0, &p_sut, &q_sut)) ||
             (c3n == u3r_trel(q_sut, &pq_sut, &qq_sut, &rq_sut)) ||
             (c3n == u3r_cell(rq_sut, &prq_sut, &qrq_sut)) )
        {
          return u3m_bail(c3__fail);
        } else {
          u3_atom tip = u3qc_cap(axe);
          u3_atom tap = u3qc_mas(axe);

          if ( 3 == tip ) {
            if ( c3n == u3qfu_park(van, sut, way, tap) )
            {
              // u3_noun dun = u3qfu_dunq(van, "type", sut);
              u3_noun waz = u3qfu_shep
                (van, "axis", 'd', u3k(axe));

              // u3t_push(u3nc(c3__mean, dun));
              u3t_push(u3nc(c3__mean, waz));

              return u3m_error("peek-park");
            }
            else pro = _cqfu_peek(van, p_sut, way, tap);
          }
          else {
            pro = c3__noun;
          }
          u3z(tap);
          u3z(tip);

          return pro;
        }
      }
      case c3__cube: {
        if ( (c3n == u3r_trel(sut, 0, &p_sut, &q_sut)) ) {
          return u3m_bail(c3__fail);
        } else {
          return _peek_in(van, q_sut, way, axe, gil);
        }
      }
      case c3__face: {
        if ( (c3n == u3r_trel(sut, 0, &p_sut, &q_sut)) ) {
          return u3m_bail(c3__fail);
        } else {
          return _peek_in(van, q_sut, way, axe, gil);
        }
      }
      case c3__fork: {
        if ( (c3n == u3r_trel(sut, 0, &p_sut, &q_sut)) ) {
          return u3m_bail(c3__fail);
        } else {
          u3_noun hed = _peek_in(van, p_sut, way, axe, gil);
          u3_noun tal = _peek_in(van, q_sut, way, axe, gil);

          pro = u3qf_fork(hed, tal);

          u3z(hed);
          u3z(tal);

          return pro;
        }
      }
      case c3__hold: {
        p_sut = u3t(sut);
        if ( (c3y == u3qdi_has(gil, sut)) ) {
          return c3__void;
        }
        else {
          u3_noun zoc = u3qdi_put(gil, sut);
          u3_noun fop = u3qfu_repo(van, sut);
          u3_noun pro = _peek_in(van, fop, way, axe, zoc);

          u3z(fop);
          u3z(zoc);

          return pro;
        }
      }
    }
  }
Ejemplo n.º 12
0
Archivo: by_put.c Proyecto: Gunga/urbit
/* functions
*/
  u3_noun
  u3qdb_put(u3_noun a,
            u3_noun b,
            u3_noun c)
  {
    if ( u3_nul == a ) {
      return u3nt(
                   u3nc(u3k(b),
                                u3k(c)),
                   u3_nul,
                   u3_nul);
    }
    else {
      u3_noun l_a, n_a, r_a, pn_a, qn_a;
      u3_noun d, l_d, n_d, r_d;

      if ( (c3n == u3r_trel(a, &n_a, &l_a, &r_a)) ||
           (c3n == u3r_cell(n_a, &pn_a, &qn_a)) )
      {
        return u3m_bail(c3__exit);
      }
      else if ( c3y == u3r_sing(pn_a, b) ) {
        if ( c3y == u3r_sing(qn_a, c) ) {
          return u3k(a);
        } else {
          return u3nt
            (u3nc(u3k(b), u3k(c)),
                    u3k(l_a),
                    u3k(r_a));
        }
      }
      else {
        if ( c3y == u3qc_gor(b, pn_a) ) {
          d = u3qdb_put(l_a, b, c);

          if ( c3y == u3qc_vor(pn_a, u3h(u3h(d))) ) {
            return u3nt(u3k(n_a),
                                d,
                                u3k(r_a));
          }
          else {
            u3r_trel(d, &n_d, &l_d, &r_d);
            {
              u3_noun e = u3nt
                (u3k(n_d),
                 u3k(l_d),
                 u3nt(u3k(n_a),
                      u3k(r_d),
                      u3k(r_a)));

              u3z(d);
              return e;
            }
          }
        }
        else {
          d = u3qdb_put(r_a, b, c);

          if ( c3y == u3qc_vor(pn_a, u3h(u3h(d))) ) {
            return u3nt(u3k(n_a),
                        u3k(l_a),
                        d);
          }
          else {
            u3r_trel(d, &n_d, &l_d, &r_d);
            {
              u3_noun e = u3nt
                (u3k(n_d),
                 u3nt(u3k(n_a),
                      u3k(l_a),
                      u3k(l_d)),
                      u3k(r_d));

              u3z(d);
              return e;
            }
          }
        }
      }
    }
  }
Ejemplo n.º 13
0
  static u3_noun
  _nest_sint(
             u3_noun van,
             u3_noun sut,
             u3_noun tel,
             u3_noun ref,
             u3_noun gil)
  {
    u3_noun p_ref, q_ref;

    if ( (c3n == u3du(ref)) ) {
      switch ( ref ) {
        default: return u3m_bail(c3__fail);

        case c3__noun: return c3n;
        case c3__void: return c3y;
      }
    }
    else {
      switch ( u3h(ref) ) {
        default: {
          return u3m_bail(c3__fail);
        }
        case c3__atom: return c3n;
        case c3__bull: {
          if ( c3n == u3r_trel(ref, 0, &p_ref, &q_ref) ) {
            return u3m_bail(c3__fail);
          } else {
            return _nest_dext(van, sut, tel, q_ref, gil);
          }
        }
        case c3__cell: return c3n;
        case c3__core: {
          u3_noun gam = u3qfu_repo(van, ref);
          u3_noun hiv = _nest_dext(van, sut, tel, gam, gil);

          u3z(gam);
          return hiv;
        }
        case c3__cube: {
          if ( c3n == u3r_trel(ref, 0, &p_ref, &q_ref) ) {
            return u3m_bail(c3__fail);
          } else {
            return _nest_dext(van, sut, tel, q_ref, gil);
          }
        }
        case c3__face: {
          if ( c3n == u3r_trel(ref, 0, &p_ref, &q_ref) ) {
            return u3m_bail(c3__fail);
          } else {
            return _nest_dext(van, sut, tel, q_ref, gil);
          }
        }
        case c3__fork: {
          if ( (c3y == u3r_mean(ref, 6, &p_ref, 7, &q_ref, 0)) ) {
            return c3a(_nest_dext(van, sut, c3n, p_ref, gil),
                          _nest_dext(van, sut, c3n, q_ref, gil));
          }
          else return u3m_bail(c3__fail);
        }
        case c3__hold: {
          p_ref = u3t(ref);
          {
            u3_noun hud = u3nc(u3k(sut),
                                       u3k(ref));

            if ( (c3y == u3qdi_has(gil, hud)) ) {
              u3z(hud);

              return c3y;
            } else {
              u3_noun zoc = u3qdi_put(gil, hud);
              u3_noun gam = u3qfu_repo(van, ref);

              {
                u3_noun hiv = _nest_dext(van, sut, tel, gam, zoc);

                u3z(hud);
                u3z(gam);
                u3z(zoc);

                return hiv;
              }
            }
          }
        }
      }
    }
  }
Ejemplo n.º 14
0
  static u3_noun
  _nest_dext_in(
                u3_noun van,
                u3_noun sut,
                u3_noun tel,
                u3_noun ref,
                u3_noun gil)
  {
    u3_noun p_sut, q_sut, p_ref, q_ref;

    if ( (c3n == u3du(sut)) ) switch ( sut ) {
      default: return u3m_bail(c3__fail);

      case c3__noun: {
        return c3y;
      }
      case c3__void: {
        return _nest_sint(van, sut, tel, ref, gil);
      }
    }
    else switch ( u3h(sut) ) {
      default: return u3m_bail(c3__fail);

      case c3__atom: {
        if ( (c3y == u3du(ref)) && (c3__atom == u3h(ref)) ) {
          if ( c3n == u3qf_fitz(u3t(sut), u3t(ref)) ) {
            // u3_err("fitz: need", u3t(sut));
            // u3_err("fitz: have", u3t(ref));
            return c3n;
          }
          return c3y;
        }
        else return _nest_sint(van, sut, tel, ref, gil);
      }
      case c3__bull: {
        if ( (c3n == u3r_trel(sut, 0, &p_sut, &q_sut)) ) {
          return u3m_bail(c3__fail);
        } else {
          return _nest_dext(van, q_sut, tel, ref, gil);
        }
      }
      case c3__cell: {
        if ( (c3n == u3r_trel(sut, 0, &p_sut, &q_sut)) ) {
          return u3m_bail(c3__fail);
        } else {
          if ( c3y == u3r_pq(ref, c3__cell, &p_ref, &q_ref) ) {
            return c3a(_nest_dext(van, p_sut, tel, p_ref, gil),
                          _nest_dext(van, q_sut, tel, q_ref, gil));
          }
          else return _nest_sint(van, sut, tel, ref, gil);
        }
      }
      case c3__core: {
        if ( c3n == u3r_trel(sut, 0, &p_sut, &q_sut) ) {
          return u3m_bail(c3__fail);
        } else {
          if ( (c3y == u3r_pq(ref, c3__core, &p_ref, &q_ref)) ) {
            return _nest_cong(van, sut, tel, ref, gil);
          }
          else return _nest_sint(van, sut, tel, ref, gil);
        }
      }
      case c3__cube: {
        if ( c3n == u3r_trel(sut, 0, &p_sut, &q_sut) ) {
          return u3m_bail(c3__fail);
        } else {
          if ( c3y == u3r_pq(ref, c3__cube, &p_ref, &q_ref) ) {
            return u3r_sing(p_sut, p_ref);
          }
          else return _nest_sint(van, sut, tel, ref, gil);
        }
      }
      case c3__face: {
        if ( (c3n == u3r_trel(sut, 0, &p_sut, &q_sut)) ) {
          return u3m_bail(c3__fail);
        } else {
          return _nest_dext(van, q_sut, tel, ref, gil);
        }
      }
      case c3__fork: {
        if ( (c3n == u3r_trel(sut, 0, &p_sut, &q_sut)) ) {
          return u3m_bail(c3__fail);
        }
        else {
          if ( c3n == u3du(ref) ) switch ( ref ) {
            default: return _nest_sint(van, sut, tel, ref, gil);

            case c3__noun:
              break;
          }
          else switch ( u3h(ref) ) {
            default: return _nest_sint(van, sut, tel, ref, gil);

            case c3__atom:
            case c3__cell:
            case c3__cube:
            case c3__core:
              break;
          }

          return c3o(_nest_dext(van, p_sut, c3n, ref, gil),
                       _nest_dext(van, q_sut, c3n, ref, gil));
        }
      }
      case c3__hold: p_sut = u3t(sut);
      {
        u3_noun hud = u3nc(u3k(sut), u3k(ref));

        if ( (c3y == u3qdi_has(gil, hud)) ) {
          u3z(hud);

          return c3y;
        } else {
          u3_noun zoc = u3qdi_put(gil, hud);
          u3_noun fop = u3qfu_rest(van, sut, p_sut);
          u3_noun hiv = _nest_dext(van, fop, tel, ref, zoc);

          u3z(hud);
          u3z(fop);
          u3z(zoc);

          return hiv;
        }
      }
    }
  }
Ejemplo n.º 15
0
  static u3_noun
  _fish_in(u3_noun van,
           u3_noun sut,
           u3_atom axe,
           u3_noun vit)
  {
    u3_noun p_sut, q_sut;

    if ( c3y == u3ud(sut) ) switch ( sut ) {
      default: return u3m_bail(c3__fail);

      case c3__noun: {
        return u3nc(1, 0);
      }
      case c3__void: {
        return u3nc(1, 1);
      }
    }
    else switch ( u3h(sut) ) {
      default: return u3m_bail(c3__fail);

      case c3__atom: {
        if ( (c3n == u3r_trel(sut, 0, &p_sut, &q_sut)) ) {
          return u3m_bail(c3__fail);
        } else {
          if ( c3n == u3du(q_sut) ) {
            u3_noun ton = u3nt(3, 0, u3k(axe));
            u3_noun pro = u3qf_flip(ton);

            u3z(ton);
            return pro;
          } else {
            return u3nt(5,
                        u3nc(1, u3k(u3t(q_sut))),
                        u3nc(0, u3k(axe)));
          }
        }
      }
      case c3__cell: {
        if ( (c3n == u3r_trel(sut, 0, &p_sut, &q_sut)) ) {
          return u3m_bail(c3__fail);
        } else {
          u3_noun hut = u3nt(3, 0, u3k(axe));
          u3_noun lef = u3qc_peg(axe, 2);
          u3_noun rit = u3qc_peg(axe, 3);
          u3_noun hed = _fish_in(van, p_sut, lef, vit);
          u3_noun tal = _fish_in(van, q_sut, rit, vit);
          u3_noun hob = u3qf_flan(hed, tal);
          u3_noun vug = u3qf_flan(hut, hob);

          u3z(hob);
          u3z(tal);
          u3z(hed);
          u3z(rit);
          u3z(lef);
          u3z(hut);

          return vug;
        }
      }
      case c3__core: {
        return u3nc(0, 0);
      }
      case c3__face: {
        if ( (c3n == u3r_trel(sut, 0, &p_sut, &q_sut)) ) {
          return u3m_bail(c3__fail);
        } else {
          return _fish_in(van, q_sut, axe, vit);
        }
      }
      case c3__fork: p_sut = u3t(sut);
      {
        u3_noun yed = u3qdi_tap(p_sut, u3_nul);
        u3_noun ret = _fish_fork(van, yed, axe, vit);

        u3z(yed);
        return ret;
      }
      case c3__hold: {
        p_sut = u3t(sut);
        {
          if ( (c3y == u3qdi_has(vit, sut)) ) {
            //  u3_noun dun = u3qfu_dunq(van, "type", sut);
            u3_noun niz = u3qfu_shep
              (van, "axis", 'd', u3k(axe));

            //  u3t_push(u3nc(c3__mean, dun));
            u3t_push(u3nc(c3__mean, niz));

            return u3m_error("fish-loop");
          } else {
            u3_noun zoc = u3qdi_put(vit, sut);
            u3_noun fop = u3qfu_repo(van, sut);
            u3_noun pro = _fish_in(van, fop, axe, zoc);

            u3z(fop);
            u3z(zoc);

            return pro;
          }
        }
      }
    }
  }
Ejemplo n.º 16
0
  static u3_noun
  _fire_each(u3_noun van,
             u3_noun vet,
             u3_noun typ,
             u3_noun gat)
  {
    u3_noun p_typ, q_typ, pq_typ, qq_typ, rq_typ;
    u3_noun h_gat, t_gat;

    if ( (c3n == u3du(typ)) || (c3__core != u3h(typ)) ) {
      return u3m_error("fire-core");
    } else if
         ( (c3n == u3r_cell(u3t(typ), &p_typ, &q_typ)) ||
           (c3n == u3r_trel(q_typ, &pq_typ, &qq_typ, &rq_typ)) ||
           (c3n == u3r_cell(gat, &h_gat, &t_gat)) )
    {
      return u3m_bail(c3__fail);
    } else {
      u3_noun dox = u3nt
        (c3__core, u3k(qq_typ), u3k(q_typ));

      if ( c3__ash == u3h(gat) ) {
        if ( (c3y == vet) &&
             (c3n == u3qfu_nest(van, qq_typ, c3y, p_typ)) )
        {
#if 0
          u3_noun dun = u3qfu_dunq(van, "need", qq_typ);
          u3_noun niz = u3qfu_dunq(van, "have", p_typ);

          u3t_push(u3nc(c3__mean, niz));
          u3t_push(u3nc(c3__mean, dun));
#endif
          return u3m_error("fire-dry");
        }
        else {
          return u3nc(dox, u3k(t_gat));
        }
      }
      else {
        c3_assert(c3__elm == u3h(gat));
#if 0
        u3_noun dun = u3qfu_dunq(van, "wild", typ);
        u3_noun niz = u3qfu_dunq(van, "tame", dox);

        u3t_push(u3nc(c3__mean, dun));
        u3t_push(u3nc(c3__mean, niz));
#endif
        if ( (c3y == vet) &&
             (c3n == _fire_mull(van, typ, dox, t_gat)) )
        {
          return u3m_error("fire-wet");
        }
        else {
          u3z(dox);
#if 0
          u3t_drop();
          u3t_drop();
#endif
          return u3nc(u3k(typ), u3k(t_gat));
        }
      }
    }
  }
Ejemplo n.º 17
0
  static u3_noun
  _peek_in(u3_noun van,
           u3_noun sut,
           u3_noun way,
           u3_atom axe,
           u3_noun gil)
  {
    u3_noun p_sut, q_sut;
    u3_noun pro;

    if ( (c3n == u3du(sut)) ) switch ( sut ) {
      default: return u3m_bail(c3__fail);

      case c3__noun: {
        return c3__noun;
      }
      case c3__void: {
        return c3__void;
      }
    }
    else switch ( u3h(sut) ) {
      default: return u3m_bail(c3__fail);

      case c3__atom: {
        return c3__void;
      }
      case c3__cell: {
        if ( (c3n == u3r_trel(sut, 0, &p_sut, &q_sut)) ) {
          return u3m_bail(c3__fail);
        } else {
          u3_atom tip = u3qc_cap(axe);
          u3_atom tap = u3qc_mas(axe);

          if ( 2 == tip ) {
            pro = _cqfu_peek(van, p_sut, way, tap);
          }
          else {
            pro = _cqfu_peek(van, q_sut, way, tap);
          }
          u3z(tap);
          u3z(tip);

          return pro;
        }
      }
      case c3__core: {
        u3_noun pq_sut, qq_sut, rq_sut;
        u3_noun prq_sut, qrq_sut;

        if ( (c3n == u3r_trel(sut, 0, &p_sut, &q_sut)) ||
             (c3n == u3r_trel(q_sut, &pq_sut, &qq_sut, &rq_sut)) ||
             (c3n == u3r_cell(rq_sut, &prq_sut, &qrq_sut)) )
        {
          return u3m_bail(c3__fail);
        } else {
          u3_atom now = u3qc_cap(axe);
          u3_atom lat = u3qc_mas(axe);

          if ( 3 == now ) {
            u3_noun pec = u3qfu_perk(van, sut, way, pq_sut);
            u3_noun sam = u3h(pec);
            u3_noun con = u3t(pec);

            if ( c3y == c3a(sam, con) ) {
              pro = _cqfu_peek(van, p_sut, way, lat);
            }
            else {
              u3_noun typ;

              {
                u3_noun hed, tal;

                if ( c3n == sam ) {
                  hed = c3__noun;
                } else {
                  hed = _cqfu_peek(van, p_sut, way, 2);
                }

                if ( c3n == con ) {
                  tal = c3__noun;
                } else {
                  tal = _cqfu_peek(van, p_sut, way, 3);
                }

                typ = u3qf_cell(hed, tal);
                u3z(hed);
                u3z(tal);
              }

              pro = _cqfu_peek(van, typ, way, lat);
              u3z(typ);
            }

            u3z(pec);
          }
          else {
            pro = c3__noun;
          }
          u3z(lat);
          u3z(now);

          return pro;
        }
      }
      case c3__face: {
        if ( (c3n == u3r_trel(sut, 0, &p_sut, &q_sut)) ) {
          return u3m_bail(c3__fail);
        } else {
          return _peek_in(van, q_sut, way, axe, gil);
        }
      }
      case c3__fork: p_sut = u3t(sut);
      {
        u3_noun yed = u3qdi_tap(p_sut, u3_nul);
        u3_noun ret = u3kf_fork(_peek_fork(van, yed, way, axe, gil));

        u3z(yed);
        return ret;
      }
      case c3__hold: {
        if ( (c3y == u3qdi_has(gil, sut)) ) {
          return c3__void;
        }
        else {
          u3_noun zoc = u3qdi_put(gil, sut);
          u3_noun fop = u3qfu_repo(van, sut);
          u3_noun pro = _peek_in(van, fop, way, axe, zoc);

          u3z(fop);
          u3z(zoc);

          return pro;
        }
      }
    }
  }