1: /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
   2: 
   3: /*
   4:   $Header: b1com.c,v 1.4 85/08/22 16:48:13 timo Exp $
   5: */
   6: 
   7: /************************************************************************/
   8: /* B compounds                                                          */
   9: /* plus Hows Funs and other odd types that don't fit anywhere else      */
  10: /*                                                                      */
  11: /* A compound is modelled as a sequence of len values, its fields.      */
  12: /*                                                                      */
  13: /************************************************************************/
  14: 
  15: #include "b.h"
  16: #include "b1obj.h"
  17: #include "b2nod.h"
  18: 
  19: /* NODES */
  20: 
  21: Visible typenode nodetype(v) parsetree v; {
  22:     return Is_parsetree(v) ? Nodetype(v) : Nonode;
  23: }
  24: 
  25: Hidden value
  26: mk_ptn(type, len) /* make parsetree node */
  27:     typenode type;
  28:     intlet len;
  29: {
  30:     parsetree v= (parsetree) grab_ptn((len<<8) | type);
  31:     *Branch(v, len)= *Branch(v, len+1)= NilTree;
  32:     return v;
  33: }
  34: 
  35: Visible parsetree
  36: node1(type)
  37:     typenode type;
  38: {
  39:     return mk_ptn(type, 0);
  40: }
  41: 
  42: Visible parsetree
  43: node2(type, a1)
  44:     typenode type; value a1;
  45: {
  46:     parsetree v= mk_ptn(type, 1); value *p= Ats(v);
  47:     *p++= a1;
  48:     return v;
  49: }
  50: 
  51: Visible parsetree
  52: node3(type, a1, a2)
  53:     typenode type; value a1, a2;
  54: {
  55:     parsetree v= mk_ptn(type, 2); value *p= Ats(v);
  56:     *p++= a1; *p++= a2;
  57:     return v;
  58: }
  59: 
  60: Visible parsetree
  61: node4(type, a1, a2, a3)
  62:     typenode type; value a1, a2, a3;
  63: {
  64:     parsetree v= mk_ptn(type, 3); value *p= Ats(v);
  65:     *p++= a1; *p++= a2; *p++= a3;
  66:     return v;
  67: }
  68: 
  69: Visible parsetree
  70: node5(type, a1, a2, a3, a4)
  71:     typenode type; value a1, a2, a3, a4;
  72: {
  73:     parsetree v= mk_ptn(type, 4); value *p= Ats(v);
  74:     *p++= a1; *p++= a2; *p++= a3; *p++= a4;
  75:     return v;
  76: }
  77: 
  78: Visible parsetree
  79: node6(type, a1, a2, a3, a4,a5)
  80:     typenode type; value a1, a2, a3, a4, a5;
  81: {
  82:     parsetree v= mk_ptn(type, 5); value *p= Ats(v);
  83:     *p++= a1; *p++= a2; *p++= a3; *p++= a4; *p++= a5;
  84:     return v;
  85: }
  86: 
  87: Visible parsetree
  88: node8(type, a1, a2, a3, a4, a5, a6, a7)
  89:     typenode type; value a1, a2, a3, a4, a5, a6, a7;
  90: {
  91:     parsetree v= mk_ptn(type, 7); value *p= Ats(v);
  92:     *p++= a1; *p++= a2; *p++= a3; *p++= a4; *p++= a5; *p++= a6; *p++= a7;
  93:     return v;
  94: }
  95: 
  96: Visible parsetree
  97: node9(type, a1, a2, a3, a4, a5, a6, a7, a8)
  98:     typenode type; value a1, a2, a3, a4, a5, a6, a7, a8;
  99: {
 100:     parsetree v= mk_ptn(type, 8); value *p= Ats(v);
 101:     *p++= a1; *p++= a2; *p++= a3; *p++= a4; *p++= a5; *p++= a6;
 102:     *p++= a7; *p++= a8;
 103:     return v;
 104: }
 105: 
 106: /* OTHER TYPES */
 107: 
 108: Visible loc
 109: mk_simploc(id, en)
 110:     basidf id; env en;
 111: {
 112:     loc l= grab_sim();
 113:     (*Ats(l))= copy(id); (*(Ats(l)+1))= (value) en;
 114:     return l;
 115: }
 116: 
 117: Visible loc
 118: mk_trimloc(R, B, C)
 119:     loc R; value B, C;
 120: {
 121:     loc l= grab_tri(); trimloc *ll= (trimloc *)Ats(l);
 122:     ll->R= copy(R); ll->B= copy(B); ll->C= copy(C);
 123:     return l;
 124: }
 125: 
 126: Visible loc
 127: mk_tbseloc(R, K)
 128:     loc R; value K;
 129: {
 130:     loc l= grab_tse(); tbseloc *ll= (tbseloc *)Ats(l);
 131:     ll->R= copy(R); ll->K= copy(K);
 132:     return l;
 133: }
 134: 
 135: Visible fun
 136: mk_fun(adic, pre, unit, filed)
 137:     literal adic; intlet pre; parsetree unit; bool filed;
 138: {
 139:     fun f= grab_fun(); funprd *ff= (funprd *)Ats(f);
 140:     ff->adic= adic; ff->pre= pre; ff->unit= unit;
 141:     ff->unparsed= Yes; ff->filed= filed;
 142:     ff->code= NilTree;
 143:     return f;
 144: }
 145: 
 146: Visible prd
 147: mk_prd(adic, pre, unit, filed)
 148:     literal adic; intlet pre; parsetree unit; bool filed;
 149: {
 150:     prd p= grab_prd(); funprd *pp= (funprd *)Ats(p);
 151:     pp->adic= adic; pp->pre= pre; pp->unit= unit;
 152:     pp->unparsed= Yes; pp->filed= filed;
 153:     pp->code= NilTree;
 154:     return p;
 155: }
 156: 
 157: Visible value
 158: mk_how(unit, filed)
 159:     parsetree unit; bool filed;
 160: {
 161:     value h= grab_how(); how *hh= (how *)Ats(h);
 162:     hh->unit= unit; hh->unparsed= Yes; hh->filed= filed;
 163:     hh->code= NilTree;
 164:     return h;
 165: }
 166: 
 167: Visible value
 168: mk_ref(rp)
 169:     parsetree rp;
 170: {
 171:     value r= grab_ref();
 172:     *Ats(r)= copy(rp);
 173:     return r;
 174: }
 175: 
 176: Visible value
 177: mk_per(v)
 178:     value v;
 179: {
 180:     value p= grab_per();
 181:     *Ats(p)= copy(v);
 182:     return p;
 183: }

Defined functions

mk_ptn defined in line 25; used 8 times
Last modified: 1985-08-27
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 1039
Valid CSS Valid XHTML 1.0 Strict