diff options
author | Mike Buland <eichlan@xagasoft.com> | 2012-01-02 00:26:29 -0700 |
---|---|---|
committer | Mike Buland <eichlan@xagasoft.com> | 2012-01-02 00:26:29 -0700 |
commit | 0433eb31936fc72486e9a81732d5bcd38cf5808a (patch) | |
tree | 01f2a53e300af872350b700dbe8d4a0fa7fac38d /src | |
parent | 55e6f570f5760e970c6523458914b5e4c63a6ce4 (diff) | |
download | stage-0433eb31936fc72486e9a81732d5bcd38cf5808a.tar.gz stage-0433eb31936fc72486e9a81732d5bcd38cf5808a.tar.bz2 stage-0433eb31936fc72486e9a81732d5bcd38cf5808a.tar.xz stage-0433eb31936fc72486e9a81732d5bcd38cf5808a.zip |
Variables upconvert on add now.
It's not perfect, but it's decent for now, and early testing.
Diffstat (limited to 'src')
-rw-r--r-- | src/variable.cpp | 17 | ||||
-rw-r--r-- | src/variable.h | 5 |
2 files changed, 20 insertions, 2 deletions
diff --git a/src/variable.cpp b/src/variable.cpp index a3fb4a2..965e1af 100644 --- a/src/variable.cpp +++ b/src/variable.cpp | |||
@@ -453,6 +453,16 @@ Variable Variable::operator+( const Variable &rhs ) const | |||
453 | { | 453 | { |
454 | if( eType != rhs.eType ) | 454 | if( eType != rhs.eType ) |
455 | { | 455 | { |
456 | Type eNew = bestType( eType, rhs.eType ); | ||
457 | |||
458 | if( eType != eNew ) | ||
459 | { | ||
460 | return to( eNew ) + rhs; | ||
461 | } | ||
462 | else | ||
463 | { | ||
464 | return *this + rhs.to( eNew ); | ||
465 | } | ||
456 | throw VariableException("Adding between dissimilar types is not yet supported."); | 466 | throw VariableException("Adding between dissimilar types is not yet supported."); |
457 | } | 467 | } |
458 | else | 468 | else |
@@ -868,6 +878,13 @@ void Variable::deinitType() | |||
868 | iValue = 0; | 878 | iValue = 0; |
869 | } | 879 | } |
870 | 880 | ||
881 | Variable::Type Variable::bestType( Variable::Type t1, Variable::Type t2 ) const | ||
882 | { | ||
883 | Type tBest = Bu::max( t1, t2 ); | ||
884 | |||
885 | return tBest; | ||
886 | } | ||
887 | |||
871 | template<> uint32_t Bu::__calcHashCode<Variable>( const Variable &k ) | 888 | template<> uint32_t Bu::__calcHashCode<Variable>( const Variable &k ) |
872 | { | 889 | { |
873 | switch( k.getType() ) | 890 | switch( k.getType() ) |
diff --git a/src/variable.h b/src/variable.h index 8741b28..2eedcbb 100644 --- a/src/variable.h +++ b/src/variable.h | |||
@@ -28,12 +28,12 @@ public: | |||
28 | tBool, | 28 | tBool, |
29 | tInt, | 29 | tInt, |
30 | tFloat, | 30 | tFloat, |
31 | tString, | ||
32 | tSituation, | 31 | tSituation, |
33 | tVariable, | 32 | tVariable, |
34 | tVarPtr, | 33 | tVarPtr, |
35 | tList, | 34 | tList, |
36 | tDictionary | 35 | tDictionary, |
36 | tString, | ||
37 | }; | 37 | }; |
38 | 38 | ||
39 | public: | 39 | public: |
@@ -90,6 +90,7 @@ public: | |||
90 | private: | 90 | private: |
91 | void initType(); | 91 | void initType(); |
92 | void deinitType(); | 92 | void deinitType(); |
93 | Type bestType( Type t1, Type t2 ) const; | ||
93 | 94 | ||
94 | private: | 95 | private: |
95 | Type eType; | 96 | Type eType; |