ShFraction<T>& ShFraction<T>::operator*=(const ShFraction& other) { m_val = clamp_val(CompType(m_val) * CompType(other.m_val)); return *this; }
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, ®Flags); /* * 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); }