コード例 #1
0
        public SilverException(SilverInstance obj)
        {
            SilverClass klass = obj.Class;

            bool exceptionFound = false;
            SilverClass _class = obj.Class;
            do {
                if (_class.Name.Equals("Exception")) {
                    exceptionFound = true;
                    break;
                }
                _class = _class.Parent;
            } while (!exceptionFound && _class != null);

            if (exceptionFound) {
                ExceptionClass = klass;
                InnerObject = obj;
            }
            else {
                ExceptionClass = Silver.Box(typeof (SilverException));
                InnerObject = null;
            }
        }
コード例 #2
0
 private static bool HasParent(SilverInstance silverObject, Type type)
 {
     SilverClass @class = silverObject.Class;
     do {
         if (@class is SilverBoxedClass && ((SilverBoxedClass) @class).BoxedType == type) {
             return true;
         }
     } while ((@class = @class.Parent) != null);
     return false;
 }
コード例 #3
0
 // .net -> silver
 internal static void SyncInstanceVariablesTo(SilverInstance silverObject, object obj)
 {
     List<FieldInfo> _fields =
         obj.GetType().GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic).ToList();
     _fields.ForEach(field => silverObject.InstanceVariables[field.Name] = field.GetValue(obj));
 }
コード例 #4
0
 // silver -> .net
 internal static void SyncInstanceVariablesFrom(SilverInstance silverObject, object obj)
 {
     List<FieldInfo> _fields =
         obj.GetType().GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic).ToList();
     silverObject.InstanceVariables.Variables.Keys.ToList().ForEach(key => {
         IEnumerable<FieldInfo> _fq = _fields.Where(field => field.Name == key);
         if (_fq.Any())
         {
             dynamic val = silverObject.InstanceVariables[key];
             if (val is SilverNumber)
             {
                 val = SilverNumber.Convert(val);
             }
             _fq.First().SetValue(obj, val);
         }
     });
 }