Skip to content

Commit 51a1898

Browse files
committed
Drop integer value type
1 parent dc1bcf7 commit 51a1898

File tree

5 files changed

+94
-136
lines changed

5 files changed

+94
-136
lines changed

include/scratchcpp/valuedata.h

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,9 @@ enum class LIBSCRATCHCPP_EXPORT SpecialValue
1818

1919
enum class LIBSCRATCHCPP_EXPORT ValueType
2020
{
21-
Integer = 0,
22-
Double = 1,
23-
Bool = 2,
24-
String = 3,
21+
Number = 0,
22+
Bool = 1,
23+
String = 2,
2524
Infinity = -1,
2625
NegativeInfinity = -2,
2726
NaN = -3
@@ -35,8 +34,7 @@ extern "C"
3534
// NOTE: Any changes must also be done in the LLVM code builder!
3635
union
3736
{
38-
long intValue;
39-
double doubleValue;
37+
double numberValue;
4038
bool boolValue;
4139
char *stringValue;
4240
};

src/scratch/inputvalue.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@
1818
using namespace libscratchcpp;
1919

2020
static const std::map<ValueType, InputValue::Type> VALUE_TYPE_MAP = {
21-
{ ValueType::Integer, InputValue::Type::Number }, { ValueType::Double, InputValue::Type::Number }, { ValueType::Bool, InputValue::Type::String },
22-
{ ValueType::String, InputValue::Type::String }, { ValueType::Infinity, InputValue::Type::String }, { ValueType::NegativeInfinity, InputValue::Type::String },
23-
{ ValueType::NaN, InputValue::Type::String }
21+
{ ValueType::Number, InputValue::Type::Number }, { ValueType::Bool, InputValue::Type::String },
22+
{ ValueType::String, InputValue::Type::String }, { ValueType::Infinity, InputValue::Type::String },
23+
{ ValueType::NegativeInfinity, InputValue::Type::String }, { ValueType::NaN, InputValue::Type::String }
2424
};
2525

2626
/*! Constructs InputValue with the given type. */

src/scratch/value_functions.cpp

Lines changed: 51 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)