@@ -27,8 +27,8 @@ extern "C"
2727 /* ! Initializes the given value. */
2828 void value_init (ValueData *v)
2929 {
30- v->type = ValueType::Integer ;
31- v->intValue = 0 ;
30+ v->type = ValueType::Number ;
31+ v->numberValue = 0 ;
3232 }
3333
3434 /* assign */
@@ -45,8 +45,8 @@ extern "C"
4545 else if (std::isnan (numberValue))
4646 v->type = ValueType::NaN;
4747 else {
48- v->type = ValueType::Double ;
49- v->doubleValue = value_floatToDouble (numberValue);
48+ v->type = ValueType::Number ;
49+ v->numberValue = value_floatToDouble (numberValue);
5050 }
5151 }
5252
@@ -62,8 +62,8 @@ extern "C"
6262 else if (std::isnan (numberValue))
6363 v->type = ValueType::NaN;
6464 else {
65- v->type = ValueType::Double ;
66- v->doubleValue = numberValue;
65+ v->type = ValueType::Number ;
66+ v->numberValue = numberValue;
6767 }
6868 }
6969
@@ -72,26 +72,26 @@ extern "C"
7272 {
7373 value_free (v);
7474
75- v->type = ValueType::Integer ;
76- v->intValue = numberValue;
75+ v->type = ValueType::Number ;
76+ v->numberValue = numberValue;
7777 }
7878
7979 /* ! Assigns number of type 'size_t' to the given value. */
8080 void value_assign_size_t (ValueData *v, size_t numberValue)
8181 {
8282 value_free (v);
8383
84- v->type = ValueType::Integer ;
85- v->intValue = numberValue;
84+ v->type = ValueType::Number ;
85+ v->numberValue = numberValue;
8686 }
8787
8888 /* ! Assigns number of type 'long' to the given value. */
8989 void value_assign_long (ValueData *v, long numberValue)
9090 {
9191 value_free (v);
9292
93- v->type = ValueType::Integer ;
94- v->intValue = numberValue;
93+ v->type = ValueType::Number ;
94+ v->numberValue = numberValue;
9595 }
9696
9797 /* ! Assigns boolean to the given value. */
@@ -141,20 +141,17 @@ extern "C"
141141 else if (specialValue == SpecialValue::NaN)
142142 v->type = ValueType::NaN;
143143 else {
144- v->type = ValueType::Integer ;
145- v->intValue = 0 ;
144+ v->type = ValueType::Number ;
145+ v->numberValue = 0 ;
146146 }
147147 }
148148
149149 /* ! Assigns another value to the given value. */
150150 void value_assign_copy (ValueData *v, const libscratchcpp::ValueData *another)
151151 {
152- if (another->type == ValueType::Integer ) {
152+ if (another->type == ValueType::Number ) {
153153 value_free (v);
154- v->intValue = another->intValue ;
155- } else if (another->type == ValueType::Double) {
156- value_free (v);
157- v->doubleValue = another->doubleValue ;
154+ v->numberValue = another->numberValue ;
158155 } else if (another->type == ValueType::Bool) {
159156 value_free (v);
160157 v->boolValue = another->boolValue ;
@@ -178,10 +175,8 @@ extern "C"
178175 switch (v->type ) {
179176 case ValueType::Infinity:
180177 return true ;
181- case ValueType::Integer:
182- return value_isInf (v->intValue );
183- case ValueType::Double:
184- return value_isInf (v->doubleValue );
178+ case ValueType::Number:
179+ return value_isInf (v->numberValue );
185180 case ValueType::String:
186181 return strcmp (v->stringValue , " Infinity" ) == 0 ;
187182 default :
@@ -195,10 +190,8 @@ extern "C"
195190 switch (v->type ) {
196191 case ValueType::NegativeInfinity:
197192 return true ;
198- case ValueType::Integer:
199- return value_isNegativeInf (-v->intValue );
200- case ValueType::Double:
201- return value_isNegativeInf (-v->doubleValue );
193+ case ValueType::Number:
194+ return value_isNegativeInf (-v->numberValue );
202195 case ValueType::String:
203196 return strcmp (v->stringValue , " -Infinity" ) == 0 ;
204197 default :
@@ -212,9 +205,9 @@ extern "C"
212205 switch (v->type ) {
213206 case ValueType::NaN:
214207 return true ;
215- case ValueType::Double :
216- assert (!std::isnan (v->doubleValue ));
217- return std::isnan (v->doubleValue );
208+ case ValueType::Number :
209+ assert (!std::isnan (v->numberValue ));
210+ return std::isnan (v->numberValue );
218211 case ValueType::String:
219212 return strcmp (v->stringValue , " NaN" ) == 0 ;
220213 default :
@@ -225,7 +218,7 @@ extern "C"
225218 /* ! Returns true if the given value is a number. */
226219 bool value_isNumber (const libscratchcpp::ValueData *v)
227220 {
228- return v->type == ValueType::Integer || v-> type == ValueType::Double ;
221+ return v->type == ValueType::Number ;
229222 }
230223
231224 /* ! Returns true if the given value is a number or can be converted to a number. */
@@ -240,8 +233,7 @@ extern "C"
240233 assert (v->type != ValueType::Infinity && v->type != ValueType::NegativeInfinity);
241234
242235 switch (v->type ) {
243- case ValueType::Integer:
244- case ValueType::Double:
236+ case ValueType::Number:
245237 case ValueType::Bool:
246238 return true ;
247239 case ValueType::String:
@@ -256,16 +248,15 @@ extern "C"
256248 {
257249 // https://github.com/scratchfoundation/scratch-vm/blob/112989da0e7306eeb405a5c52616e41c2164af24/src/util/cast.js#L157-L181
258250 switch (v->type ) {
259- case ValueType::Integer:
260251 case ValueType::Bool:
261252 case ValueType::Infinity:
262253 case ValueType::NegativeInfinity:
263254 case ValueType::NaN:
264255 return true ;
265- case ValueType::Double : {
256+ case ValueType::Number : {
266257 double intpart;
267- std::modf (v->doubleValue , &intpart);
268- return v->doubleValue == intpart;
258+ std::modf (v->numberValue , &intpart);
259+ return v->numberValue == intpart;
269260 }
270261 case ValueType::String:
271262 return value_checkString (v->stringValue ) == 1 ;
@@ -291,10 +282,8 @@ extern "C"
291282 /* ! Returns the long representation of the given value. */
292283 long value_toLong (const libscratchcpp::ValueData *v)
293284 {
294- if (v->type == ValueType::Integer)
295- return v->intValue ;
296- else if (v->type == ValueType::Double)
297- return v->doubleValue ;
285+ if (v->type == ValueType::Number)
286+ return v->numberValue ;
298287 else if (v->type == ValueType::Bool)
299288 return v->boolValue ;
300289 else if (v->type == ValueType::String)
@@ -306,10 +295,8 @@ extern "C"
306295 /* ! Returns the int representation of the given value. */
307296 int value_toInt (const libscratchcpp::ValueData *v)
308297 {
309- if (v->type == ValueType::Integer)
310- return v->intValue ;
311- else if (v->type == ValueType::Double)
312- return v->doubleValue ;
298+ if (v->type == ValueType::Number)
299+ return v->numberValue ;
313300 else if (v->type == ValueType::Bool)
314301 return v->boolValue ;
315302 else if (v->type == ValueType::String)
@@ -321,10 +308,8 @@ extern "C"
321308 /* ! Returns the double representation of the given value. */
322309 double value_toDouble (const libscratchcpp::ValueData *v)
323310 {
324- if (v->type == ValueType::Double)
325- return v->doubleValue ;
326- else if (v->type == ValueType::Integer)
327- return v->intValue ;
311+ if (v->type == ValueType::Number)
312+ return v->numberValue ;
328313 else if (v->type == ValueType::Bool)
329314 return v->boolValue ;
330315 else if (v->type == ValueType::String)
@@ -342,10 +327,8 @@ extern "C"
342327 {
343328 if (v->type == ValueType::Bool) {
344329 return v->boolValue ;
345- } else if (v->type == ValueType::Integer) {
346- return v->intValue != 0 ;
347- } else if (v->type == ValueType::Double) {
348- return v->doubleValue != 0 ;
330+ } else if (v->type == ValueType::Number) {
331+ return v->numberValue != 0 ;
349332 } else if (v->type == ValueType::String) {
350333 return strlen (v->stringValue ) != 0 && !value_stringsEqual (v->stringValue , " false" ) && strcmp (v->stringValue , " 0" ) != 0 ;
351334 } else if (v->type == ValueType::Infinity || v->type == ValueType::NegativeInfinity) {
@@ -362,10 +345,8 @@ extern "C"
362345 {
363346 if (v->type == ValueType::String)
364347 dst->assign (v->stringValue );
365- else if (v->type == ValueType::Integer)
366- dst->assign (std::to_string (v->intValue ));
367- else if (v->type == ValueType::Double)
368- dst->assign (value_doubleToString (v->doubleValue ));
348+ else if (v->type == ValueType::Number)
349+ dst->assign (value_doubleToString (v->numberValue ));
369350 else if (v->type == ValueType::Bool)
370351 dst->assign (v->boolValue ? " true" : " false" );
371352 else if (v->type == ValueType::Infinity)
@@ -391,11 +372,8 @@ extern "C"
391372 /* ! Adds the given values and writes the result to dst. */
392373 void value_add (const libscratchcpp::ValueData *v1, const libscratchcpp::ValueData *v2, ValueData *dst)
393374 {
394- if (v1->type == ValueType::Integer && v2->type == ValueType::Integer) {
395- value_assign_long (dst, v1->intValue + v2->intValue );
396- return ;
397- } else if (v1->type == ValueType::Double && v2->type == ValueType::Double) {
398- value_assign_double (dst, v1->doubleValue + v2->doubleValue );
375+ if (v1->type == ValueType::Number && v2->type == ValueType::Number) {
376+ value_assign_double (dst, v1->numberValue + v2->numberValue );
399377 return ;
400378 } else if (v1->type == ValueType::Bool && v2->type == ValueType::Bool) {
401379 value_assign_long (dst, v1->boolValue + v2->boolValue );
@@ -419,11 +397,8 @@ extern "C"
419397 /* ! Subtracts the given values and writes the result to dst. */
420398 void value_subtract (const libscratchcpp::ValueData *v1, const libscratchcpp::ValueData *v2, ValueData *dst)
421399 {
422- if (v1->type == ValueType::Integer && v2->type == ValueType::Integer) {
423- value_assign_long (dst, v1->intValue - v2->intValue );
424- return ;
425- } else if (v1->type == ValueType::Double && v2->type == ValueType::Double) {
426- value_assign_double (dst, v1->doubleValue - v2->doubleValue );
400+ if (v1->type == ValueType::Number && v2->type == ValueType::Number) {
401+ value_assign_double (dst, v1->numberValue - v2->numberValue );
427402 return ;
428403 } else if (v1->type == ValueType::Bool && v2->type == ValueType::Bool) {
429404 value_assign_long (dst, v1->boolValue - v2->boolValue );
@@ -447,10 +422,9 @@ extern "C"
447422 /* ! Multiplies the given values and writes the result to dst. */
448423 void value_multiply (const libscratchcpp::ValueData *v1, const libscratchcpp::ValueData *v2, ValueData *dst)
449424 {
450- if (v1->type == ValueType::Integer && v2->type == ValueType::Integer)
451- value_assign_long (dst, v1->intValue * v2->intValue );
452- else if (v1->type == ValueType::Double && v2->type == ValueType::Double)
453- value_assign_double (dst, v1->doubleValue * v2->doubleValue );
425+
426+ if (v1->type == ValueType::Number && v2->type == ValueType::Number)
427+ value_assign_double (dst, v1->numberValue * v2->numberValue );
454428 else if (v1->type == ValueType::Bool && v2->type == ValueType::Bool)
455429 value_assign_long (dst, v1->boolValue * v2->boolValue );
456430 else {
@@ -529,10 +503,8 @@ extern "C"
529503 // https://github.com/scratchfoundation/scratch-vm/blob/112989da0e7306eeb405a5c52616e41c2164af24/src/util/cast.js#L121-L150
530504 assert (v1 && v2);
531505
532- if (v1->type == ValueType::Integer && v2->type == ValueType::Integer)
533- return v1->intValue == v2->intValue ;
534- else if (v1->type == ValueType::Double && v2->type == ValueType::Double)
535- return v1->doubleValue == v2->doubleValue ;
506+ if (v1->type == ValueType::Number && v2->type == ValueType::Number)
507+ return v1->numberValue == v2->numberValue ;
536508 else if (v1->type == ValueType::Bool && v2->type == ValueType::Bool)
537509 return v1->boolValue == v2->boolValue ;
538510
@@ -568,10 +540,8 @@ extern "C"
568540 {
569541 assert (v1 && v2);
570542
571- if (v1->type == ValueType::Integer && v2->type == ValueType::Integer)
572- return v1->intValue > v2->intValue ;
573- else if (v1->type == ValueType::Double && v2->type == ValueType::Double)
574- return v1->doubleValue > v2->doubleValue ;
543+ if (v1->type == ValueType::Number && v2->type == ValueType::Number)
544+ return v1->numberValue > v2->numberValue ;
575545 else if (v1->type == ValueType::Bool && v2->type == ValueType::Bool)
576546 return v1->boolValue > v2->boolValue ;
577547 else if ((static_cast <int >(v1->type ) < 0 ) || (static_cast <int >(v2->type ) < 0 )) {
@@ -605,10 +575,8 @@ extern "C"
605575 {
606576 assert (v1 && v2);
607577
608- if (v1->type == ValueType::Integer && v2->type == ValueType::Integer)
609- return v1->intValue < v2->intValue ;
610- else if (v1->type == ValueType::Double && v2->type == ValueType::Double)
611- return v1->doubleValue < v2->doubleValue ;
578+ if (v1->type == ValueType::Number && v2->type == ValueType::Number)
579+ return v1->numberValue < v2->numberValue ;
612580 else if (v1->type == ValueType::Bool && v2->type == ValueType::Bool)
613581 return v1->boolValue < v2->boolValue ;
614582 else if ((static_cast <int >(v1->type ) < 0 ) || (static_cast <int >(v2->type ) < 0 )) {
0 commit comments