1: /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1984. */
   2: /* $Header: b2tar.c,v 1.1 84/06/28 00:49:23 timo Exp $ */
   3: 
   4: /* B target locating */
   5: #include "b.h"
   6: #include "b1obj.h"
   7: #include "b2env.h"
   8: #include "b2syn.h"
   9: #include "b2sem.h"
  10: 
  11: Visible loc statrimloc(l, v) loc l; value v; {
  12:     /* temporary, while no static type check */
  13:     return (loc) mk_elt();
  14: }
  15: 
  16: Visible loc statbseloc(l, k) loc l; value k; {
  17:     /* temporary, while no static type check */
  18:     return (loc) mk_elt();
  19: }
  20: 
  21: Visible loc targ(q) txptr q; {
  22:     value c; loc l; txptr i, j; intlet len, k;
  23:     if ((len= 1+count(",", q)) == 1) return bastarg(q);
  24:     c= mk_compound(len);
  25:     k_Overfields {
  26:         if (!Lastfield(k)) req(",", q, &i, &j);
  27:         else i= q;
  28:         l= bastarg(i);
  29:         put_in_field(l, &c, k);
  30:         if (!Lastfield(k)) tx= j;
  31:     }
  32:     return (loc) c;
  33: }
  34: 
  35: Visible loc bastarg(q) txptr q; {
  36:     loc l; txptr i, j; value k;
  37:     Skipsp(tx);
  38:     nothing(q, "target");
  39:     if (Char(tx) == '(') {
  40:         tx++; req(")", q, &i, &j);
  41:         l= targ(i); tx= j;
  42:     } else if (Letter(Char(tx))) {
  43:         value t= tag(), *aa;
  44:         aa= lookup(t);
  45:         if (aa == Pnil) l= local_loc(t);
  46:         else if (Is_refinement(*aa))
  47:             pprerr("refined targets are not allowed", "");
  48:         else if (Is_formal(*aa)) {
  49:             l= loc_formal(*aa);
  50:         } else if (Is_shared(*aa))
  51:             l= global_loc(t);
  52:         else l= local_loc(t);
  53:         release(t);
  54:     } else parerr("no target where expected", "");
  55:     Skipsp(tx);
  56:     while (tx < q && Char(tx) == '[') {
  57:         if (xeq) check_location(l);
  58:         tx++; req("]", q, &i, &j);
  59:         k= expr(i); tx= j;
  60:         if (xeq) {
  61:             loc ll= l;
  62:             l= tbsel_loc(l, k);
  63:             release(k); release(ll);
  64:         } else l= statbseloc(l, k);
  65:         Skipsp(tx);
  66:     }
  67:     if (tx < q && (Char(tx) == '@' || Char(tx) == '|')) {
  68:         value v= xeq ? content(l) : Vnil; intlet B, C;
  69:         if (xeq && !Is_text(v))
  70:           error("in the target t@p or t|p, t does not contain a text");
  71:         trimbc(q, xeq ? length(v) : 0, &B, &C);
  72:         release(v);
  73:         if (xeq) l= trim_loc(l, B, C);
  74:         else l= statrimloc(l, k);
  75:         Skipsp(tx);
  76:     }
  77:     if (tx < q) parerr(Char(tx) == ',' ? "comma not allowed here" :
  78:                     "garbage following target", "");
  79:     return l;
  80: }

Defined functions

bastarg defined in line 35; used 4 times
statbseloc defined in line 16; used 1 times
  • in line 64
statrimloc defined in line 11; used 1 times
  • in line 74
Last modified: 1985-08-27
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 1221
Valid CSS Valid XHTML 1.0 Strict