Fix COPY adding elements
This commit is contained in:
@@ -1994,6 +1994,18 @@ class BuiltinFunction
|
|||||||
throw new TypeMismatch("COPY", sourceArrayIndex + 2);
|
throw new TypeMismatch("COPY", sourceArrayIndex + 2);
|
||||||
len = args[sourceArrayIndex + 1].castInteger;
|
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)
|
if (src.type == ValueType.StringArray && dst.type == ValueType.StringArray)
|
||||||
{
|
{
|
||||||
for(int i = 0; i < len; i++)
|
for(int i = 0; i < len; i++)
|
||||||
|
|||||||
@@ -226,6 +226,42 @@ struct Value
|
|||||||
throw new TypeMismatch();
|
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)
|
void opIndexAssign(Value v, int i)
|
||||||
{
|
{
|
||||||
switch(this.type)
|
switch(this.type)
|
||||||
|
|||||||
Reference in New Issue
Block a user