Browse Source

Fixed cyclic constants.

newNRvisualizers
Mike Krüger 13 years ago
parent
commit
24e7b56613
  1. 5
      ICSharpCode.NRefactory.CSharp/Resolver/CSharpConversions.cs
  2. 1
      ICSharpCode.NRefactory.Tests/CSharp/Parser/TypeSystemConvertVisitorTests.cs
  3. 5
      ICSharpCode.NRefactory/TypeSystem/Implementation/DefaultResolvedField.cs

5
ICSharpCode.NRefactory.CSharp/Resolver/CSharpConversions.cs

@ -651,7 +651,10 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
long val = (long)rr.ConstantValue; long val = (long)rr.ConstantValue;
return val >= 0 && toTypeCode == TypeCode.UInt64; return val >= 0 && toTypeCode == TypeCode.UInt64;
} else if (fromTypeCode == TypeCode.Int32) { } else if (fromTypeCode == TypeCode.Int32) {
int val = (int)rr.ConstantValue; object cv = rr.ConstantValue;
if (cv == null)
return false;
int val = (int)cv;
switch (toTypeCode) { switch (toTypeCode) {
case TypeCode.SByte: case TypeCode.SByte:
return val >= SByte.MinValue && val <= SByte.MaxValue; return val >= SByte.MinValue && val <= SByte.MaxValue;

1
ICSharpCode.NRefactory.Tests/CSharp/Parser/TypeSystemConvertVisitorTests.cs

@ -97,6 +97,7 @@ namespace ICSharpCode.NRefactory.CSharp.Parser
Assert.NotNull (testType); Assert.NotNull (testType);
var field = testType.Fields.First (); var field = testType.Fields.First ();
Assert.IsTrue (field.IsConst); Assert.IsTrue (field.IsConst);
Assert.IsNull (field.ConstantValue);
} }
} }

5
ICSharpCode.NRefactory/TypeSystem/Implementation/DefaultResolvedField.cs

@ -19,6 +19,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using ICSharpCode.NRefactory.Semantics; using ICSharpCode.NRefactory.Semantics;
using ICSharpCode.NRefactory.Utils;
namespace ICSharpCode.NRefactory.TypeSystem.Implementation namespace ICSharpCode.NRefactory.TypeSystem.Implementation
{ {
@ -49,6 +50,9 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation
public object ConstantValue { public object ConstantValue {
get { get {
using (var busyLock = BusyManager.Enter(this)) {
if (!busyLock.Success)
return null;
ResolveResult rr = this.constantValue; ResolveResult rr = this.constantValue;
if (rr == null) { if (rr == null) {
IConstantValue unresolvedCV = ((IUnresolvedField)unresolved).ConstantValue; IConstantValue unresolvedCV = ((IUnresolvedField)unresolved).ConstantValue;
@ -62,4 +66,5 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation
} }
} }
} }
}
} }

Loading…
Cancel
Save