--- /opt/cvs/dotgnu/pnet/cscc/csharp/cs_attrs.c Sat Feb 15 12:02:10 2003 +++ cscc/csharp/cs_attrs.c Mon Feb 17 00:12:15 2003 @@ -242,6 +242,8 @@ ILNode *nameNode; int retry; + ILType *argType; + /* Try the attribute name without "Attribute" first */ nameNode = attr->name; retry = 1; @@ -571,9 +573,10 @@ for(argNum = 0; argNum < numArgs; ++argNum) { paramType = ILTypeGetParam(signature, argNum + 1); - if(!ILGenCastConst(info, &(evalValues[argNum]), - evalValues[argNum].valueType, - ILTypeToMachineType(paramType))) + argType = evalArgs[argNum].type; + if((!ILGenCastConst(info, &(evalValues[argNum]), + evalValues[argNum].valueType, ILTypeToMachineType(paramType))) && + (!ILCanCastKind(info, argType,paramType,IL_CONVERT_STANDARD,0))) { CCErrorOnLine(yygetfilename(evalArgs[argNum].node), yygetlinenum(evalArgs[argNum].node), @@ -581,7 +584,7 @@ argNum + 1); haveErrors = 1; } - else if(ILSerializeGetType(paramType) == -1) + else if(ILSerializeGetType(argType) == -1) { CCErrorOnLine(yygetfilename(evalArgs[argNum].node), yygetlinenum(evalArgs[argNum].node), @@ -604,7 +607,8 @@ for(argNum = 0; argNum < numArgs; ++argNum) { paramType = ILTypeGetParam(signature, argNum + 1); - serialType = ILSerializeGetType(paramType); + argType = evalArgs[argNum].type; + serialType = ILSerializeGetType(argType); argValue = &(evalValues[argNum]); switch(serialType) { @@ -650,7 +654,7 @@ default: { - /* TODO: types and arrays */ + /* TODO: types , boxed objects and arrays */ } break; }