Skip to content

Commit 2783417

Browse files
committed
Быстрый доступ к объекту Value
1 parent e947ae0 commit 2783417

File tree

10 files changed

+40
-17
lines changed

10 files changed

+40
-17
lines changed

src/com/annimon/ownlang/lib/ArrayValue.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,11 @@ public void set(int index, Value value) {
7272
elements[index] = value;
7373
}
7474

75+
@Override
76+
public Object raw() {
77+
return elements;
78+
}
79+
7580
@Override
7681
public int asInt() {
7782
throw new TypeException("Cannot cast array to integer");

src/com/annimon/ownlang/lib/FunctionValue.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,11 @@ public int type() {
2222
return Types.FUNCTION;
2323
}
2424

25+
@Override
26+
public Object raw() {
27+
return value;
28+
}
29+
2530
@Override
2631
public int asInt() {
2732
throw new TypeException("Cannot cast function to integer");

src/com/annimon/ownlang/lib/MapValue.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,11 @@ public void set(Value key, Value value) {
4545
map.put(key, value);
4646
}
4747

48+
@Override
49+
public Object raw() {
50+
return map;
51+
}
52+
4853
@Override
4954
public int asInt() {
5055
throw new TypeException("Cannot cast map to integer");

src/com/annimon/ownlang/lib/NumberValue.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ public int type() {
2525
return Types.NUMBER;
2626
}
2727

28+
@Override
2829
public Number raw() {
2930
return value;
3031
}

src/com/annimon/ownlang/lib/StringValue.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,11 @@ public int length() {
2424
public int type() {
2525
return Types.STRING;
2626
}
27+
28+
@Override
29+
public Object raw() {
30+
return value;
31+
}
2732

2833
@Override
2934
public int asInt() {

src/com/annimon/ownlang/lib/Value.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
*/
77
public interface Value extends Comparable<Value> {
88

9+
Object raw();
10+
911
int asInt();
1012

1113
double asNumber();

src/com/annimon/ownlang/lib/modules/functions/json_encode.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ private Object process(Value val) {
2626
case Types.MAP:
2727
return process((MapValue) val);
2828
case Types.NUMBER:
29-
return ((NumberValue) val).raw();
29+
return val.raw();
3030
case Types.STRING:
3131
return val.asString();
3232
default:

src/com/annimon/ownlang/lib/modules/functions/std_sprintf.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public Value execute(Value... args) {
1313
final Object[] values = new Object[args.length - 1];
1414
for (int i = 1; i < args.length; i++) {
1515
values[i - 1] = (args[i].type() == Types.NUMBER)
16-
? ((NumberValue) args[i]).raw()
16+
? args[i].raw()
1717
: args[i].asString();
1818
}
1919
return new StringValue(String.format(format, values));

src/com/annimon/ownlang/parser/ast/BinaryExpression.java

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ private Value add(NumberValue value1, Value value2) {
101101
final Number number1 = value1.raw();
102102
if (value2.type() == Types.NUMBER) {
103103
// number1 + number2
104-
final Number number2 = ((NumberValue) value2).raw();
104+
final Number number2 = (Number) value2.raw();
105105
if (number1 instanceof Double || number2 instanceof Double) {
106106
return new NumberValue(number1.doubleValue() + number2.doubleValue());
107107
}
@@ -138,7 +138,7 @@ private Value subtract(NumberValue value1, Value value2) {
138138
final Number number1 = value1.raw();
139139
if (value2.type() == Types.NUMBER) {
140140
// number1 - number2
141-
final Number number2 = ((NumberValue) value2).raw();
141+
final Number number2 = (Number) value2.raw();
142142
if (number1 instanceof Double || number2 instanceof Double) {
143143
return new NumberValue(number1.doubleValue() - number2.doubleValue());
144144
}
@@ -184,7 +184,7 @@ private Value multiply(NumberValue value1, Value value2) {
184184
final Number number1 = value1.raw();
185185
if (value2.type() == Types.NUMBER) {
186186
// number1 * number2
187-
final Number number2 = ((NumberValue) value2).raw();
187+
final Number number2 = (Number) value2.raw();
188188
if (number1 instanceof Double || number2 instanceof Double) {
189189
return new NumberValue(number1.doubleValue() * number2.doubleValue());
190190
}
@@ -221,7 +221,7 @@ private Value divide(NumberValue value1, Value value2) {
221221
final Number number1 = value1.raw();
222222
if (value2.type() == Types.NUMBER) {
223223
// number1 / number2
224-
final Number number2 = ((NumberValue) value2).raw();
224+
final Number number2 = (Number) value2.raw();
225225
if (number1 instanceof Double || number2 instanceof Double) {
226226
return new NumberValue(number1.doubleValue() / number2.doubleValue());
227227
}
@@ -258,7 +258,7 @@ private Value remainder(NumberValue value1, Value value2) {
258258
final Number number1 = value1.raw();
259259
if (value2.type() == Types.NUMBER) {
260260
// number1 % number2
261-
final Number number2 = ((NumberValue) value2).raw();
261+
final Number number2 = (Number) value2.raw();
262262
if (number1 instanceof Double || number2 instanceof Double) {
263263
return new NumberValue(number1.doubleValue() % number2.doubleValue());
264264
}
@@ -303,7 +303,7 @@ private Value and(NumberValue value1, Value value2) {
303303
final Number number1 = value1.raw();
304304
if (value2.type() == Types.NUMBER) {
305305
// number1 & number2
306-
final Number number2 = ((NumberValue) value2).raw();
306+
final Number number2 = (Number) value2.raw();
307307
if (number1 instanceof Long || number2 instanceof Long) {
308308
return new NumberValue(number1.longValue() & number2.longValue());
309309
}
@@ -328,7 +328,7 @@ private Value or(NumberValue value1, Value value2) {
328328
final Number number1 = value1.raw();
329329
if (value2.type() == Types.NUMBER) {
330330
// number1 | number2
331-
final Number number2 = ((NumberValue) value2).raw();
331+
final Number number2 = (Number) value2.raw();
332332
if (number1 instanceof Long || number2 instanceof Long) {
333333
return new NumberValue(number1.longValue() | number2.longValue());
334334
}
@@ -353,7 +353,7 @@ private Value xor(NumberValue value1, Value value2) {
353353
final Number number1 = value1.raw();
354354
if (value2.type() == Types.NUMBER) {
355355
// number1 ^ number2
356-
final Number number2 = ((NumberValue) value2).raw();
356+
final Number number2 = (Number) value2.raw();
357357
if (number1 instanceof Long || number2 instanceof Long) {
358358
return new NumberValue(number1.longValue() ^ number2.longValue());
359359
}
@@ -383,7 +383,7 @@ private Value lshift(NumberValue value1, Value value2) {
383383
final Number number1 = value1.raw();
384384
if (value2.type() == Types.NUMBER) {
385385
// number1 << number2
386-
final Number number2 = ((NumberValue) value2).raw();
386+
final Number number2 = (Number) value2.raw();
387387
if (number1 instanceof Long || number2 instanceof Long) {
388388
return new NumberValue(number1.longValue() << number2.longValue());
389389
}
@@ -408,7 +408,7 @@ private Value rshift(NumberValue value1, Value value2) {
408408
final Number number1 = value1.raw();
409409
if (value2.type() == Types.NUMBER) {
410410
// number1 >> number2
411-
final Number number2 = ((NumberValue) value2).raw();
411+
final Number number2 = (Number) value2.raw();
412412
if (number1 instanceof Long || number2 instanceof Long) {
413413
return new NumberValue(number1.longValue() >> number2.longValue());
414414
}
@@ -433,7 +433,7 @@ private Value urshift(NumberValue value1, Value value2) {
433433
final Number number1 = value1.raw();
434434
if (value2.type() == Types.NUMBER) {
435435
// number1 >>> number2
436-
final Number number2 = ((NumberValue) value2).raw();
436+
final Number number2 = (Number) value2.raw();
437437
if (number1 instanceof Long || number2 instanceof Long) {
438438
return new NumberValue(number1.longValue() >>> number2.longValue());
439439
}

src/com/annimon/ownlang/parser/ast/UnaryExpression.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ public Value eval() {
8888

8989
private Value increment(Value value) {
9090
if (value.type() == Types.NUMBER) {
91-
final Number number = ((NumberValue) value).raw();
91+
final Number number = (Number) value.raw();
9292
if (number instanceof Double) {
9393
return new NumberValue(number.doubleValue() + 1);
9494
}
@@ -104,7 +104,7 @@ private Value increment(Value value) {
104104

105105
private Value decrement(Value value) {
106106
if (value.type() == Types.NUMBER) {
107-
final Number number = ((NumberValue) value).raw();
107+
final Number number = (Number) value.raw();
108108
if (number instanceof Double) {
109109
return new NumberValue(number.doubleValue() - 1);
110110
}
@@ -124,7 +124,7 @@ private Value negate(Value value) {
124124
return new StringValue(sb.reverse().toString());
125125
}
126126
if (value.type() == Types.NUMBER) {
127-
final Number number = ((NumberValue) value).raw();
127+
final Number number = (Number) value.raw();
128128
if (number instanceof Double) {
129129
return new NumberValue(-number.doubleValue());
130130
}
@@ -140,7 +140,7 @@ private Value negate(Value value) {
140140

141141
private Value complement(Value value) {
142142
if (value.type() == Types.NUMBER) {
143-
final Number number = ((NumberValue) value).raw();
143+
final Number number = (Number) value.raw();
144144
if (number instanceof Long) {
145145
return new NumberValue(~number.longValue());
146146
}

0 commit comments

Comments
 (0)