73 lines
1.5 KiB
D
73 lines
1.5 KiB
D
module otya.smilebasic.type;
|
|
enum ValueType : byte
|
|
{
|
|
Void,//DEF A()ENDの返り値とか未初期化の変数とか
|
|
Integer,
|
|
Double,
|
|
String,
|
|
Array,
|
|
IntegerArray,
|
|
DoubleArray,
|
|
StringArray,
|
|
}
|
|
struct Value
|
|
{
|
|
ValueType type;
|
|
union
|
|
{
|
|
int integerValue;
|
|
double doubleValue;
|
|
wstring stringValue;
|
|
int[] intArray;
|
|
}
|
|
this(int value)
|
|
{
|
|
this.type = ValueType.Integer;
|
|
integerValue = value;
|
|
}
|
|
this(double value)
|
|
{
|
|
this.type = ValueType.Double;
|
|
doubleValue = value;
|
|
}
|
|
this(wstring value)
|
|
{
|
|
this.type = ValueType.String;
|
|
stringValue = value;
|
|
}
|
|
this(ValueType type)
|
|
{
|
|
this.type = type;
|
|
if(type == ValueType.String)
|
|
{
|
|
stringValue = "";
|
|
}
|
|
}
|
|
void castOp(ValueType type)
|
|
{
|
|
switch(type)
|
|
{
|
|
case ValueType.Double:
|
|
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
bool boolValue()
|
|
{
|
|
switch(type)
|
|
{
|
|
case ValueType.Double:
|
|
return this.doubleValue != 0;
|
|
case ValueType.Integer:
|
|
return this.integerValue != 0;
|
|
case ValueType.String:
|
|
return true;//3.1現在では文字列はtrue(ただし!"A"などは動かない)
|
|
default:
|
|
//配列はtype mismatch
|
|
return false;
|
|
}
|
|
}
|
|
}
|