Пример #1
0
dim_finish(Namep v)
#endif
{
	register struct Dimblock *p;
	register expptr q;
	register int i, nd;

	p = v->vdim;
	v->vdimfinish = 0;
	nd = p->ndim;
	doin_setbound = 1;
	for(i = 0; i < nd; i++)
		if (q = p->dims[i].dimexpr) {
			q = p->dims[i].dimexpr = make_int_expr(putx(fixtype(q)));
			if (!ONEOF(q->headblock.vtype, MSKINT|MSKREAL))
				bad_dimtype(v);
			}
	if (q = p->basexpr)
		p->basexpr = make_int_expr(putx(fixtype(q)));
	doin_setbound = 0;
	}
Пример #2
0
make_int_expr(expptr e)
#endif
{
    chainp listp;
    Addrp ap;
    expptr e1;

    if (e != ENULL)
	switch (e -> tag) {
	    case TADDR:
		if (e->addrblock.isarray) {
			if (e1 = e->addrblock.memoffset)
				e->addrblock.memoffset = make_int_expr(e1);
			}
		else if (e->addrblock.vstg == STGARG
			|| e->addrblock.vstg == STGCOMMON
				&& e->addrblock.uname_tag == UNAM_NAME
				&& e->addrblock.user.name->vcommequiv)
			e = mkexpr(OPWHATSIN, e, ENULL);
	        break;
	    case TEXPR:
	        e -> exprblock.leftp = make_int_expr (e -> exprblock.leftp);
	        e -> exprblock.rightp = make_int_expr (e -> exprblock.rightp);
	        break;
	    case TLIST:
		for(listp = e->listblock.listp; listp; listp = listp->nextp)
			if ((ap = (Addrp)listp->datap)
			 && ap->tag == TADDR
			 && ap->uname_tag == UNAM_CONST)
				addrlit(ap);
		break;
	    default:
	        break;
	} /* switch */

    return e;
} /* make_int_expr */
Пример #3
0
/// Returns the integer literal `n` with type t.
///
/// The type of the expression shall be an integral type.
inline 
int_expr& builder::make_int_expr(type& t, int n) 
{
  return make_int_expr(t, value(n)); 
}