Operators like <=, > work now. Only logical are left know.
parent
c6e3678f15
commit
eed9925160
|
@ -90,6 +90,22 @@ SenchaObject BasicExpression::evaluate()
|
|||
{
|
||||
so = SenchaObject(right != left);
|
||||
}
|
||||
else if(oper == ">")
|
||||
{
|
||||
so = SenchaObject(left > right);
|
||||
}
|
||||
else if(oper == ">=")
|
||||
{
|
||||
so = SenchaObject(left >= right);
|
||||
}
|
||||
else if(oper == "<=")
|
||||
{
|
||||
so = SenchaObject(left <= right);
|
||||
}
|
||||
else if(oper == "<")
|
||||
{
|
||||
so = SenchaObject(left < right);
|
||||
}
|
||||
return so;
|
||||
}
|
||||
|
||||
|
|
|
@ -223,7 +223,7 @@ SenchaObject SenchaObject::operator/(const SenchaObject& right)const
|
|||
}
|
||||
|
||||
SenchaObject SenchaObject::operator==(const SenchaObject& right)const
|
||||
{
|
||||
{
|
||||
SenchaObject result;
|
||||
bool value = false;
|
||||
result.type = boolean;
|
||||
|
@ -254,10 +254,10 @@ SenchaObject SenchaObject::operator==(const SenchaObject& right)const
|
|||
|
||||
result.truthy = value;
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
SenchaObject SenchaObject::operator!=(const SenchaObject& right)const
|
||||
{
|
||||
SenchaObject SenchaObject::operator!=(const SenchaObject& right) const
|
||||
{
|
||||
SenchaObject result;
|
||||
result.type = boolean;
|
||||
|
||||
|
@ -267,6 +267,91 @@ SenchaObject SenchaObject::operator!=(const SenchaObject& right)const
|
|||
else result.truthy = true;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
SenchaObject SenchaObject::operator>(const SenchaObject& right) const
|
||||
{
|
||||
SenchaObject result;
|
||||
bool value = false;
|
||||
result.type = boolean;
|
||||
|
||||
if(type == right.type)
|
||||
{
|
||||
switch(type){
|
||||
case string_literal:
|
||||
if(this->text > right.text)
|
||||
{
|
||||
value = true;
|
||||
}
|
||||
break;
|
||||
case integer_number:
|
||||
if(this->integer > right.integer)
|
||||
{
|
||||
value = true;
|
||||
}
|
||||
break;
|
||||
case float_number:
|
||||
if(this->number > right.number)
|
||||
{
|
||||
value = true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if(type == float_number && right.type == integer_number )
|
||||
{
|
||||
value = (this->number > right.integer);
|
||||
}
|
||||
else if(type == integer_number && right.type == float_number)
|
||||
{
|
||||
value = (this->integer > right.number);
|
||||
}
|
||||
|
||||
result.truthy = value;
|
||||
return result;
|
||||
}
|
||||
|
||||
SenchaObject SenchaObject::operator>= (const SenchaObject& right) const
|
||||
{
|
||||
SenchaObject result;
|
||||
bool value = false;
|
||||
result.type = boolean;
|
||||
|
||||
if((*this == right).truthy || ((*this) > right).truthy)
|
||||
{
|
||||
value = true;
|
||||
}
|
||||
result.truthy = value;
|
||||
return result;
|
||||
}
|
||||
|
||||
SenchaObject SenchaObject::operator< (const SenchaObject& right) const
|
||||
{
|
||||
SenchaObject result;
|
||||
bool value = false;
|
||||
result.type = boolean;
|
||||
|
||||
if(!((*this) >= right).truthy)
|
||||
{
|
||||
value = true;
|
||||
}
|
||||
result.truthy = value;
|
||||
return result;
|
||||
}
|
||||
|
||||
SenchaObject SenchaObject::operator<= (const SenchaObject& right) const
|
||||
{
|
||||
SenchaObject result;
|
||||
bool value = false;
|
||||
result.type = boolean;
|
||||
|
||||
if(!((*this) > right).truthy)
|
||||
{
|
||||
value = true;
|
||||
}
|
||||
result.truthy = value;
|
||||
return result;
|
||||
}
|
||||
|
||||
//TODO change code above to something more generic
|
||||
|
|
|
@ -82,8 +82,11 @@ public:
|
|||
SenchaObject(double number) { set_value(number); }
|
||||
SenchaObject(std::string text) { set_value(text); }
|
||||
|
||||
//TODO overload operators as it should be done
|
||||
|
||||
virtual SenchaObject operator< (const SenchaObject& right)const;
|
||||
virtual SenchaObject operator> (const SenchaObject& right)const;
|
||||
virtual SenchaObject operator<= (const SenchaObject& right)const;
|
||||
virtual SenchaObject operator>= (const SenchaObject& right)const;
|
||||
virtual SenchaObject operator+(const SenchaObject& right)const;
|
||||
virtual SenchaObject operator-(const SenchaObject& right)const;
|
||||
virtual SenchaObject operator*(const SenchaObject& right)const;
|
||||
|
@ -92,6 +95,7 @@ public:
|
|||
virtual SenchaObject operator!=(const SenchaObject& right)const;
|
||||
|
||||
|
||||
|
||||
virtual ~SenchaObject();
|
||||
};
|
||||
|
||||
|
|
|
@ -289,6 +289,8 @@ void ASTInspector::visit(VariableExpression * variable)
|
|||
visit_notes += "VariableExpression:\n";
|
||||
|
||||
visit_notes += "Name: " + variable->name + "\n";
|
||||
visit_notes += "Currently has a value:\n";
|
||||
visit_notes += variable->evaluate().repr();
|
||||
write_report(visit_notes);
|
||||
|
||||
write_report("End of VariableExpression\n");
|
||||
|
|
Loading…
Reference in New Issue