Can you shrink it further?

Andrei Alexandrescu via Digitalmars-d digitalmars-d at puremagic.com
Tue Oct 11 08:08:34 PDT 2016


On 10/10/2016 11:00 PM, Stefan Koch wrote:
>
> void popFront3(ref char[] s) @trusted pure nothrow {
>    immutable c = s[0];
>    uint char_length = 1;
>    if (c < 127)
>    {
>    Lend :
>      s = s.ptr[char_length .. s.length];
>    } else {
>      if ((c & b01100_0000) == 0b1000_0000)
>      {
>        //just skip one in case this is not the beginning of a code-point
> char
>        goto Lend;
>      }
>      if (c < 192)
>      {
>        char_length = 2;
>        goto Lend;
>      }
>      if (c < 240)
>      {
>        char_length = 3;
>        goto Lend;
>      }
>      if (c < 248)
>      {
>        char_length = 4;
>        goto Lend;
>      }
>    }
>  }

Looked at this, still seems to generate a jump forward with ldc. Also, 
why do you leave a fallthrough path? Progress needs to be made on all 
paths, otherwise we have infinite loops.


Andrei



More information about the Digitalmars-d mailing list