bool GetDPByExpExpression::Set(Expressive::EvalContext* context, Variant value)
{
	Object* obj = m_object->Evaluate(context);
	DependencyObject* depObj = dynamic_cast<DependencyObject*>(obj);
	if (depObj == NULL)
	{
		VERIFY(0);
	}
	Variant propertyRef = m_exp->Evaluate(context);

	PropertyValue* pProperty;

	if (propertyRef.IsString())
		pProperty = depObj->GetProperty(depObj->GetClass()->GetLocalProperty(propertyRef.ToString()));
	else if (propertyRef.IsInt())
		pProperty = depObj->GetProperty(depObj->GetClass()->GetLocalProperty(int(propertyRef)));
	else
		raise(Exception("property not found"));

	pProperty->UpdateValue(value);
	return true;
}
///This function makes sure that a value has the proper
///underlying type.  If it doesn't, it will cause a fatal error and 
///report whereabouts the error happened.
void PError::AssertType(Variant v, int type, const string & outsideMessage)
{

	string message;

	switch(type)
		{

		case PEAT_STACK_SIGNAL:
			if( !v.IsStackSignal())
				{
                    message = outsideMessage;
                    message += "Wanted stack signal but got a " + GetTypeName(v) + ": " + v.GetString();
                    SignalFatalError(message);
				}

			break;


		case PEAT_FUNCTION:
			if( !v.IsFunction())
				{
                      message = outsideMessage;
					message += "Wanted function but got a " + GetTypeName(v) + ": "  + v.GetString();
					SignalFatalError(message);
				}

			break;
		case PEAT_FUNCTION_POINTER:
			if( !v.IsFunction())
				{
                    message = outsideMessage;
					message += "Wanted function pointer but got " + GetTypeName(v) + ": " + v.GetString();
					SignalFatalError(message);
				}

			break;
		case PEAT_NUMBER:
			if( !v.IsNumber())
				{
                    message = outsideMessage;
					message += "Wanted number but got " + GetTypeName(v) + ": " + v.GetString();
					SignalFatalError(message);
				}
			break;

		case PEAT_INTEGER:

			if( !v.IsInteger())
				{
                    message = outsideMessage;
                    message += "Wanted integer but got " + GetTypeName(v) + ": " + v.GetString();
					SignalFatalError(message);
				}
			break;
		case PEAT_FLOAT:
			if( !v.IsNumber())
				{
                    message = outsideMessage;
					message +="Wanted floating-point number but got " + GetTypeName(v) + ": "+ v.GetString();
					SignalFatalError(message);
				}
			break;

		case PEAT_STRING:
			if( !v.IsString())
				{
                    message = outsideMessage;
					message +="Wanted string but got " + GetTypeName(v) + ": "+ v.GetString();
					SignalFatalError(message);
				}
			break;

		case PEAT_VARIABLE:
            
			if( v.IsGlobalVariable() || v.IsLocalVariable())
				{
                    return;
                }
            message = outsideMessage;
            message +="Wanted variable but got " + GetTypeName(v) + ": "+ v.GetString();
            SignalFatalError(message);
            
			break;


        case PEAT_AUDIOOUT:
            if(v.IsComplexData())
                {
                    if((v.GetComplexData())->IsAudioOut())
                        {
                            //Everything is fine, return without error.
                            return;
                        }
                }
            message = outsideMessage;
            message +="Wanted AudioOut stream but got " + GetTypeName(v) + ": "+ v.GetString();
            SignalFatalError(message);
			
			break;
        case PEAT_COLOR:
            if(v.IsComplexData())
                {
                    if((v.GetComplexData())->IsColor())
                        {
                            //Everything is fine, return without error.
                            return;
                        }
                }
            
            message = outsideMessage;
            message +="Wanted PEBL Color but got " + GetTypeName(v) + ": "+ v.GetString();
            SignalFatalError(message);           
          break;
          
        case PEAT_ENVIRONMENT:
            
            if(v.IsComplexData())
                {
                    if((v.GetComplexData())->IsEnvironment())
                        {
                            //Everything is fine, return without error.
                            return;
                        }
                }
            message = outsideMessage;
            message +="Wanted Environment but got " + GetTypeName(v) + ": "+ v.GetString();
            SignalFatalError(message);
            
            break;

        case PEAT_FILESTREAM:
            
            if(v.IsComplexData())
                {
                    if((v.GetComplexData())->IsFileStream())
                        {
                            //Everything is fine, return without error.
                            return;
                        }
                }
            message = outsideMessage;
            message +="Wanted FileStream but got " + GetTypeName(v) + ": "+ v.GetString();
            SignalFatalError(message);

          break;
          

        case PEAT_FONT:
            
            if(v.IsComplexData())
                {
                    if((v.GetComplexData())->IsFont())
                        {
                            //Everything is fine, return without error.
                            return;
                        }
                }
            
            message = outsideMessage;
            message +="Wanted font but got " + GetTypeName(v) + ": "+ v.GetString();
            SignalFatalError(message);
            
            break;


        case PEAT_IMAGEBOX:
            
            if(v.IsComplexData())
                {
                    if((v.GetComplexData())->IsImageBox())
                        {
                            //Everything is fine, return without error.
                            return;
                        }
                }
            message = outsideMessage;
            message +="Wanted Image but got " + GetTypeName(v) + ": "+ v.GetString();
            SignalFatalError(message);
            
            break;



        case PEAT_JOYSTICK:
            
            if(v.IsComplexData())
                {
                    if((v.GetComplexData())->IsJoystick())
                        {
                            //Everything is fine, return without error.
                            return;
                        }
                }
            message = outsideMessage;
            message +="Wanted Joystick but got " + GetTypeName(v) + ": "+ v.GetString();
            SignalFatalError(message);
            
            break;


        case PEAT_KEYBOARD:
            
            if(v.IsComplexData())
                {
                    if((v.GetComplexData())->IsKeyboard())
                        {
                            //Everything is fine, return without error.
                            return;
                        }
                }
            message = outsideMessage;
            message +="Wanted Keyboard but got " + GetTypeName(v) + ": "+ v.GetString();
            SignalFatalError(message);
            
            break;

        case PEAT_LIST:
            
            if(v.IsComplexData())
                {
                    if((v.GetComplexData())->IsList())
                        {
                            //Everything is fine, return without error.
                            return;
                        }
                }
            message = outsideMessage;
            message +="Wanted list but got " + GetTypeName(v) + ": "+ v.GetString();
            SignalFatalError(message);

          break;


      case PEAT_WIDGET:
          
          if(v.IsComplexData())
              {
                  if((v.GetComplexData())->IsWidget())
                      {
                          //Everything is fine, return without error.
                          return;
                      }
              }
          message = outsideMessage;
          message +="Wanted Widget but got " + GetTypeName(v) + ": "+ v.GetString();
          SignalFatalError(message);
          
          break;


      case PEAT_OBJECT:
          if(v.IsComplexData())
              {
                  //Any complex data is a PEBLObject (except maybe a list?)
                  return;
              }
          message = outsideMessage;
          message +="Wanted Object but got " + GetTypeName(v) + ": "+ v.GetString();
          SignalFatalError(message);
          
          break;
          

      case PEAT_WINDOW:
          
          if(v.IsComplexData())
              {
                  if((v.GetComplexData())->IsWindow())
                      {
                          //Everything is fine, return without error.
                          return;
                      }
              }
          message = outsideMessage;
          message +="Wanted Window but got " + GetTypeName(v) + ": "+ v.GetString();
          SignalFatalError(message);
          
          break;
          
        case PEAT_TEXTOBJECT:
            
            if(v.IsComplexData())
                {
                    if((v.GetComplexData())->IsTextObject())
                        {
                            //Everything is fine, return without error.
                            return;
                        }
                }
            message = outsideMessage;
            message +="Wanted TextObject but got " + GetTypeName(v) + ": " + v.GetString();
            SignalFatalError(message);

            break;


        case PEAT_LABEL:
            
            if(v.IsComplexData())
                {
                    if((v.GetComplexData())->IsLabel())
                        {
                            //Everything is fine, return without error.
                            return;
                        }
                }
            message = outsideMessage;
            message +="Wanted Label but got " + GetTypeName(v) + ": " + v.GetString();
            SignalFatalError(message);

            break;
            


        case PEAT_TEXTBOX:
            
            if(v.IsComplexData())
                {
                    if((v.GetComplexData())->IsTextBox())
                        {
                            //Everything is fine, return without error.
                            return;
                        }
                }
            message = outsideMessage;
            message +="Wanted Text Box but got " + GetTypeName(v) + ": " + v.GetString();
            SignalFatalError(message);

            break;
            
        case PEAT_NETWORKCONNECTION:
             
            if(v.IsComplexData())
                {
                    if((v.GetComplexData())->IsNetworkConnection())
                        {
                            //Everything is fine, return without error.
                            return;
                        }
                }
            message = outsideMessage;
            message +="Wanted network but got " + GetTypeName(v) + ": "+ v.GetString();
            SignalFatalError(message);

          break;
          
          
        case PEAT_PARALLELPORT:
             
            if(v.IsComplexData())
                {
                    if((v.GetComplexData())->IsParallelPort())
                        {
                            //Everything is fine, return without error.
                            return;
                        }
                }
            message = outsideMessage;
            message +="Wanted parallelport but got " + GetTypeName(v) + ": "+ v.GetString();
            SignalFatalError(message);

          break;
          
        case PEAT_COMPORT:
             
            if(v.IsComplexData())
                {
                    if((v.GetComplexData())->IsComPort())
                        {
                            //Everything is fine, return without error.
                            return;
                        }
                }
            message = outsideMessage;
            message +="Wanted ComPort but got " + GetTypeName(v) + ": "+ v.GetString();
            SignalFatalError(message);

          break;

        case PEAT_MOVIE:
            
            if(v.IsComplexData())
                {
                    if((v.GetComplexData())->IsMovie())
                        {
                            //Everything is fine, return without error.
                            return;
                        }
                }
            message = outsideMessage;
            message +="Wanted Movie but got " + GetTypeName(v) + ": "+ v.GetString();
            SignalFatalError(message);
            
            break;

            
        case PEAT_UNDEFINED:
		default:
            
            message = outsideMessage;
            message += string("Undefined type in PErrorAssert: ") + v.GetString();
            SignalFatalError(message);
            break;
        }

}