# 2.11BSD#431 - /usr/src/ucb/PORT/pascal/src/sconv.c

##### Functions

    sconv             X
    tuac              X

       1: /*
       2:  * Copyright (c) 1980 Regents of the University of California.
       3:  * All rights reserved.  The Berkeley software License Agreement
       4:  * specifies the terms and conditions for redistribution.
       5:  */
       6:
       7: #ifndef lint
       8: static char sccsid[] = "@(#)sconv.c	5.1 (Berkeley) 6/5/85";
       9: #endif not lint
      10:
      11:     /*
      12:      *	functions to help pi put out
      13:      *	polish postfix binary portable c compiler intermediate code
      14:      *	thereby becoming the portable pascal compiler
      15:      */
      16:
      17: #include    "whoami.h"
      18: #ifdef PC
      19: #include    "0.h"
      20: #include    <pcc.h>
      21:
      22:     /*
      23:      *	this routine enforces ``the usual arithmetic conversions''
      24:      *	all integral operands are converted to ints.
      25:      *	if either operand is a double, both are made to be double.
      26:      *	this routine takes struct nl *'s for the types,
      27:      *	and returns both the struct nl * and the p2type for the result.
      28:      */
      29: tuac(thistype, thattype, resulttypep, resultp2typep)
      30:     struct nl   *thistype;
      31:     struct nl   *thattype;
      32:     struct nl   **resulttypep;
      33:     int     *resultp2typep;
      34: {
      35:     int     thisp2type = p2type(thistype);
      36:     int     thatp2type = p2type(thattype);
      37:
      38:     *resulttypep = thistype;
      39:     *resultp2typep = thisp2type;
      40:     /*
      41: 	 *	should only be passed scalars
      42: 	 */
      43:     if (isnta(thistype,"sbcid") || isnta(thattype,"sbcid")) {
      44:     return;
      45:     }
      46:     if (thisp2type == PCCT_CHAR || thisp2type == PCCT_SHORT) {
      47:     *resultp2typep = PCCT_INT;
      48:     *resulttypep = nl + T4INT;
      49:     }
      50:     if (*resultp2typep == PCCT_INT && thatp2type == PCCT_DOUBLE) {
      51:     *resultp2typep = PCCT_DOUBLE;
      52:     *resulttypep = nl + TDOUBLE;
      53:     }
      54:     sconv(thisp2type, *resultp2typep);
      55: }
      56:
      57:     /*
      58:      *	this routine will emit sconv operators when it thinks they are needed.
      59:      *	this is code generator specific, rather than machine-specific.
      60:      *	this routine takes p2types for arguments, not struct nl *'s.
      61:      */
      62: #ifdef vax
      63:     /*
      64:      *	the vax code genrator is very good, this routine is extremely boring.
      65:      */
      66: sconv(fromp2type, top2type)
      67:     int fromp2type;
      68:     int top2type;
      69: {
      70:
      71:     switch (top2type) {
      72:     case PCCT_CHAR:
      73:     case PCCT_SHORT:
      74:     case PCCT_INT:
      75:         switch (fromp2type) {
      76:         case PCCT_CHAR:
      77:         case PCCT_SHORT:
      78:         case PCCT_INT:
      79:         case PCCT_DOUBLE:
      80:             return; /* pass1 knows how to do these */
      81:         default:
      82:             return;
      83:         }
      84:     case PCCT_DOUBLE:
      85:         switch (fromp2type) {
      86:         case PCCT_CHAR:
      87:         case PCCT_SHORT:
      88:         case PCCT_INT:
      89:             putop(PCC_SCONV, PCCT_DOUBLE);
      90:             return;
      91:         case PCCT_DOUBLE:
      92:             return;
      93:         default:
      94:             return;
      95:         }
      96:     default:
      97:         return;
      98:     }
      99: }
     100: #endif vax
     101: #ifdef mc68000
     102:     /*
     103:      *	i don't know how much to trust the mc68000 compiler,
     104:      *	so this routine is full.
     105:      */
     106: sconv(fromp2type, top2type)
     107:     int fromp2type;
     108:     int top2type;
     109: {
     110:
     111:     switch (top2type) {
     112:     case PCCT_CHAR:
     113:         switch (fromp2type) {
     114:         case PCCT_CHAR:
     115:             return;
     116:         case PCCT_SHORT:
     117:         case PCCT_INT:
     118:         case PCCT_DOUBLE:
     119:             putop(PCC_SCONV, PCCT_CHAR);
     120:             return;
     121:         default:
     122:             return;
     123:         }
     124:     case PCCT_SHORT:
     125:         switch (fromp2type) {
     126:         case PCCT_SHORT:
     127:             return;
     128:         case PCCT_CHAR:
     129:         case PCCT_INT:
     130:         case PCCT_DOUBLE:
     131:             putop(PCC_SCONV, PCCT_SHORT);
     132:             return;
     133:         default:
     134:             return;
     135:         }
     136:     case PCCT_INT:
     137:         switch (fromp2type) {
     138:         case PCCT_INT:
     139:             return;
     140:         case PCCT_CHAR:
     141:         case PCCT_SHORT:
     142:         case PCCT_DOUBLE:
     143:             putop(PCC_SCONV, PCCT_INT);
     144:             return;
     145:         default:
     146:             return;
     147:         }
     148:     case PCCT_DOUBLE:
     149:         switch (fromp2type) {
     150:         case PCCT_DOUBLE:
     151:             return;
     152:         case PCCT_CHAR:
     153:         case PCCT_SHORT:
     154:         case PCCT_INT:
     155:             putop(PCC_SCONV, PCCT_DOUBLE);
     156:             return;
     157:         default:
     158:             return;
     159:         }
     160:     default:
     161:         return;
     162:     }
     163: }
     164: #endif mc68000
     165: #endif PC

#### Defined functions

sconv defined in line 106; used 46 times

- in line 54
- in /usr/src/ucb/PORT/pascal/src/call.c line 362
- in /usr/src/ucb/PORT/pascal/src/conv.c line 304, 314-318(2), 328
- in /usr/src/ucb/PORT/pascal/src/forop.c line 207, 233, 276, 379, 398-401(2)
- in /usr/src/ucb/PORT/pascal/src/lval.c line 411
- in /usr/src/ucb/PORT/pascal/src/pccaseop.c line 122
- in /usr/src/ucb/PORT/pascal/src/pcfunc.c line 192, 203, 271, 315-320(2), 338, 352, 376, 387
- in /usr/src/ucb/PORT/pascal/src/pcproc.c line 408, 780, 1037, 1124
- in /usr/src/ucb/PORT/pascal/src/rval.c line 421, 443-445(2), 453-457(2), 478, 492-494(2), 651-655(2), 805, 979
- in /usr/src/ucb/PORT/pascal/src/stat.c line 485, 494
- in /usr/src/ucb/PORT/pascal/src/stkrval.c line 99, 141, 235, 274, 315

tuac defined in line 29; used 4 times

- in /usr/src/ucb/PORT/pascal/src/rval.c line 579-581(2), 798-803(2)

#### Defined variables

sccsid defined in line 8; never used

Last modified: 1985-06-05 Generated: 2016-12-26 | Generated by src2html V0.67 page hit count: 617 |