Bad array indexing is considered deadly
ketmar via Digitalmars-d
digitalmars-d at puremagic.com
Wed May 31 08:25:31 PDT 2017
Steven Schveighoffer wrote:
> On 5/31/17 10:07 AM, Steven Schveighoffer wrote:
>
>> Here is complete implementation (should be @safe too):
>>
>> struct ExArr(T, size_t dim)
>> {
>> T[dim] _value;
>> alias _value this;
>> ref inout(T) opIndex(size_t idx, string fname = __FILE__, size_t
>> linenum = __LINE__) inout
>> {
>> if(idx >= dim)
>> throw new Exception("Index out of bounds", fname, linenum);
>> static ref x(ref inout(T[dim]) val, size_t i) @trusted { return
>> val.ptr[i]; }
>> return x(_value, idx);
>> }
>> }
>
> Just realized, that @trusted escape is just so unnecessarily verbose.
>
> struct ExArr(T, size_t dim)
> {
> T[dim] _value;
> alias _value this;
> ref inout(T) opIndex(size_t idx, string fname = __FILE__, size_t
> linenum = __LINE__) inout @trusted
> {
> if(idx >= dim)
> throw new Exception("Index out of bounds", fname, linenum);
> return _value.ptr[idx];
> }
> }
>
> -Steve
bonus point: you can include index and length in error message! (something
i really miss in dmd range error)
More information about the Digitalmars-d
mailing list