File tree Expand file tree Collapse file tree 1 file changed +34
-25
lines changed
include/behaviortree_cpp/scripting Expand file tree Collapse file tree 1 file changed +34
-25
lines changed Original file line number Diff line number Diff line change @@ -157,40 +157,49 @@ struct ExprBinaryArithmetic : ExprBase
157
157
return Any (lv / rv);
158
158
default : {}
159
159
}
160
- try {
161
- int64_t li = lhs_v.cast <int64_t >();
162
- int64_t ri = rhs_v.cast <int64_t >();
163
- switch (op)
164
- {
165
- case bit_and:
160
+
161
+ if (op == bit_and || op == bit_or || op == bit_xor)
162
+ {
163
+ try {
164
+ int64_t li = lhs_v.cast <int64_t >();
165
+ int64_t ri = rhs_v.cast <int64_t >();
166
+ switch (op)
167
+ {
168
+ case bit_and:
166
169
return Any (static_cast <double >(li & ri));
167
- case bit_or:
170
+ case bit_or:
168
171
return Any (static_cast <double >(li | ri));
169
- case bit_xor:
172
+ case bit_xor:
170
173
return Any (static_cast <double >(li ^ ri));
171
- default : {}
174
+ default : {}
175
+ }
176
+ }
177
+ catch (...)
178
+ {
179
+ throw std::runtime_error (" Binary operators are not allowed if "
180
+ " one of the operands is not an integer" );
172
181
}
173
- }
174
- catch (...)
175
- {
176
- throw std::runtime_error (" Binary operators are not allowed if one of the operands is an integer" );
177
182
}
178
183
179
- try {
180
- auto lb = lhs_v.cast <bool >();
181
- auto rb = rhs_v.cast <bool >();
182
- switch (op)
183
- {
184
- case logic_or:
184
+ if (op == logic_or || op == logic_and)
185
+ {
186
+ try {
187
+ auto lb = lhs_v.cast <bool >();
188
+ auto rb = rhs_v.cast <bool >();
189
+ switch (op)
190
+ {
191
+ case logic_or:
185
192
return Any (static_cast <double >(lb || rb));
186
- case logic_and:
193
+ case logic_and:
187
194
return Any (static_cast <double >(lb && rb));
188
- default : {}
195
+ default : {}
196
+ }
197
+ }
198
+ catch (...)
199
+ {
200
+ throw std::runtime_error (" Logic operators are not allowed if "
201
+ " one of the operands is not castable to bool" );
189
202
}
190
- }
191
- catch (...)
192
- {
193
- throw std::runtime_error (" Logic operators are not allowed if one of the operands is not castable to bool" );
194
203
}
195
204
}
196
205
else if (rhs_v.isType <SimpleString>() && lhs_v.isType <SimpleString>() && op == plus)
You can’t perform that action at this time.
0 commit comments