Mono.CSharp.SwitchLabel.ResolveAndReduce C# (CSharp) Method

ResolveAndReduce() public method

public ResolveAndReduce ( ResolveContext ec, System.TypeSpec required_type, bool allow_nullable ) : bool
ec ResolveContext
required_type System.TypeSpec
allow_nullable bool
return bool
		public bool ResolveAndReduce (ResolveContext ec, TypeSpec required_type, bool allow_nullable)
		{	
			Expression e = label.Resolve (ec);

			if (e == null)
				return false;

			Constant c = e as Constant;
			if (c == null){
				ec.Report.Error (150, loc, "A constant value is expected");
				return false;
			}

			if (required_type == TypeManager.string_type && c.GetValue () == null) {
				converted = NullStringCase;
				return true;
			}

			if (allow_nullable && c.GetValue () == null) {
				converted = NullStringCase;
				return true;
			}
			
			c = c.ImplicitConversionRequired (ec, required_type, loc);
			if (c == null)
				return false;

			converted = c.GetValue ();
			return true;
		}