ShFraction<T>& ShFraction<T>::operator*=(const ShFraction& other)
{
  m_val = clamp_val(CompType(m_val) * CompType(other.m_val));
  return *this;
}
Ejemplo n.º 2
0
short
CompDecl(short t, Var **pvar, long absorbSemi)
{
    short typeDef = 0;		/*  preceeded by typedef    */
    Var *var = NULL;
    Type *baseType;
    long  baseFlags;
    long  regFlags;
    long li = LFBase->lf_Index;

    if (t == TokTypeDef) {	/*  opt typedef 	*/
	t = GetToken();
	typeDef = 1;
    }

    /*
     *	type spec
     */

    t = CompType(t, &baseType, &baseFlags, &regFlags);

    /*
     *	list of type-qualfied variables (i.e. char *foo, the '*foo').  CompVar()
     *	also parses entire subroutines and returns a pseudo ';' for them.
     *
     *	The variables are semantically added
     */

    if (typeDef) {
	t = CompVar(t, baseType, baseFlags, regFlags, NULL);
	while (t == TokComma) {
	    t = GetToken();
	    t = CompVar(t, baseType, baseFlags, regFlags, NULL);
	}
    } else if (t != TokSemi) {
	Var *vlast;
	Var *v;

	t = CompVar(t, baseType, baseFlags, regFlags, &var);
	vlast = var;

	/*
	 * Handle case where we compiled a procedure, the lexical index
	 * must indicate the beginning of the procedure so debugging
	 * info is aligned properly
	 */

	if (var->Type->Id == TID_PROC)
	    var->LexIdx = li;

	/*
	 * Handle list of vars
	 */

	while (t == TokComma) {
	    t = GetToken();
	    t = CompVar(t, baseType, baseFlags, regFlags, &v);

	    vlast->Next = v;
	    vlast = v;
	}
	vlast->Next = NULL;
    }
    if (t != TokSemi) {
	zerror(EWARN_EXPECTED_SEMICOLON);
	if (LFBase->lf_Index == li)
	    t = GetToken();
    }

    if (absorbSemi)
	t = GetToken();

    *pvar = var;
    return(t);
}