1
0

Fix COPY adding elements

This commit is contained in:
otya128
2016-12-19 23:15:29 +09:00
parent 2ac6efc1ed
commit 7cf62acc80
2 changed files with 48 additions and 0 deletions

View File

@@ -1994,6 +1994,18 @@ class BuiltinFunction
throw new TypeMismatch("COPY", sourceArrayIndex + 2);
len = args[sourceArrayIndex + 1].castInteger;
}
else
{
len = src.length - srcoffset;
}
if (dst.length < len + dstoffset)
{
if (dst.dimCount != 1)
{
throw new SubscriptOutOfRange("COPY");
}
dst.length = len + dstoffset;
}
if (src.type == ValueType.StringArray && dst.type == ValueType.StringArray)
{
for(int i = 0; i < len; i++)

View File

@@ -226,6 +226,42 @@ struct Value
throw new TypeMismatch();
}
}
@property void length(int len)
{
switch(this.type)
{
case ValueType.String:
stringValue.length = len;
return;
case ValueType.IntegerArray:
integerArray.length = len;
return;
case ValueType.DoubleArray:
doubleArray.length = len;
return;
case ValueType.StringArray:
stringArray.length = len;
return;
default:
throw new TypeMismatch();
}
}
@property int dimCount()
{
switch(this.type)
{
case ValueType.String:
return stringValue.dimCount;
case ValueType.IntegerArray:
return integerArray.dimCount;
case ValueType.DoubleArray:
return doubleArray.dimCount;
case ValueType.StringArray:
return stringArray.dimCount;
default:
throw new TypeMismatch();
}
}
void opIndexAssign(Value v, int i)
{
switch(this.type)