mirror of
https://github.com/SSCLI/sscli_20021101
synced 2026-06-08 12:28:57 +00:00
9fa3874800
Moved the original file to the archive subfolder.
130 lines
4.1 KiB
C#
130 lines
4.1 KiB
C#
// ==++==
|
|
//
|
|
//
|
|
// Copyright (c) 2002 Microsoft Corporation. All rights reserved.
|
|
//
|
|
// The use and distribution terms for this software are contained in the file
|
|
// named license.txt, which can be found in the root of this distribution.
|
|
// By using this software in any fashion, you are agreeing to be bound by the
|
|
// terms of this license.
|
|
//
|
|
// You must not remove this notice, or any other, from this software.
|
|
//
|
|
//
|
|
// ==--==
|
|
namespace Microsoft.JScript
|
|
{
|
|
|
|
using System;
|
|
using System.Reflection;
|
|
using System.Reflection.Emit;
|
|
|
|
internal sealed class EnumWrapper : IConvertible{
|
|
private String name;
|
|
internal ClassScope type;
|
|
internal Object value;
|
|
|
|
internal EnumWrapper(Object value, String name, ClassScope type){
|
|
this.name = name;
|
|
this.type = type;
|
|
this.value = value;
|
|
}
|
|
|
|
internal void CoerceToBaseType(Type bt, Context errCtx){
|
|
Object val = 0;
|
|
AST pval = ((AST)this.value).PartiallyEvaluate();
|
|
if (pval is ConstantWrapper)
|
|
val = ((ConstantWrapper)pval).Evaluate();
|
|
else
|
|
pval.context.HandleError(JSError.NotConst);
|
|
try{
|
|
this.value = Convert.CoerceT(val, bt);
|
|
}catch(Exception){
|
|
errCtx.HandleError(JSError.TypeMismatch);
|
|
this.value = Convert.CoerceT(0, bt);
|
|
}
|
|
}
|
|
|
|
TypeCode IConvertible.GetTypeCode(){
|
|
return Convert.GetTypeCode(this.value);
|
|
}
|
|
|
|
bool IConvertible.ToBoolean(IFormatProvider provider){
|
|
return ((IConvertible)this.value).ToBoolean(provider);
|
|
}
|
|
|
|
char IConvertible.ToChar(IFormatProvider provider){
|
|
return ((IConvertible)this.value).ToChar(provider);
|
|
}
|
|
|
|
sbyte IConvertible.ToSByte(IFormatProvider provider){
|
|
return ((IConvertible)this.value).ToSByte(provider);
|
|
}
|
|
|
|
byte IConvertible.ToByte(IFormatProvider provider){
|
|
return ((IConvertible)this.value).ToByte(provider);
|
|
}
|
|
|
|
short IConvertible.ToInt16(IFormatProvider provider){
|
|
return ((IConvertible)this.value).ToInt16(provider);
|
|
}
|
|
|
|
ushort IConvertible.ToUInt16(IFormatProvider provider){
|
|
return ((IConvertible)this.value).ToUInt16(provider);
|
|
}
|
|
|
|
int IConvertible.ToInt32(IFormatProvider provider){
|
|
return ((IConvertible)this.value).ToInt32(provider);
|
|
}
|
|
|
|
uint IConvertible.ToUInt32(IFormatProvider provider){
|
|
return ((IConvertible)this.value).ToUInt32(provider);
|
|
}
|
|
|
|
long IConvertible.ToInt64(IFormatProvider provider){
|
|
return ((IConvertible)this.value).ToInt64(provider);
|
|
}
|
|
|
|
ulong IConvertible.ToUInt64(IFormatProvider provider){
|
|
return ((IConvertible)this.value).ToUInt64(provider);
|
|
}
|
|
|
|
float IConvertible.ToSingle(IFormatProvider provider){
|
|
return ((IConvertible)this.value).ToSingle(provider);
|
|
}
|
|
|
|
double IConvertible.ToDouble(IFormatProvider provider){
|
|
return ((IConvertible)this.value).ToDouble(provider);
|
|
}
|
|
|
|
Decimal IConvertible.ToDecimal(IFormatProvider provider){
|
|
return ((IConvertible)this.value).ToDecimal(provider);
|
|
}
|
|
|
|
DateTime IConvertible.ToDateTime(IFormatProvider provider){
|
|
return ((IConvertible)this.value).ToDateTime(provider);
|
|
}
|
|
|
|
String IConvertible.ToString(IFormatProvider provider){
|
|
return ((IConvertible)this.value).ToString(provider);
|
|
}
|
|
|
|
Object IConvertible.ToType(Type conversionType, IFormatProvider provider){
|
|
return ((IConvertible)this.value).ToType(conversionType, provider);
|
|
}
|
|
|
|
internal Object ToNumericValue(){
|
|
return this.value;
|
|
}
|
|
|
|
public override String ToString(){
|
|
if (this.name != null) return this.name;
|
|
FieldInfo[] fields = this.type.GetFields(BindingFlags.Static|BindingFlags.Public);
|
|
foreach (FieldInfo field in fields)
|
|
if (StrictEquality.JScriptStrictEquals(this.value, field.GetValue(null))) return field.Name;
|
|
return Convert.ToString(this.value);
|
|
}
|
|
}
|
|
}
|
|
|