adjust skipParenReverse to comment

This commit is contained in:
WebFreak001 2017-09-18 18:54:12 +02:00
parent fa81ad2d59
commit 45ee60a13d
1 changed files with 17 additions and 11 deletions

View File

@ -485,7 +485,7 @@ T getExpression(T)(T beforeTokens)
skip:
mixin (EXPRESSION_LOOP_BREAK);
immutable bookmark = i;
beforeTokens.skipParenReverse(i, open, close);
i = beforeTokens.skipParenReverse(i, open, close);
skipCount++;
@ -666,13 +666,13 @@ body
case tok!"[":
return i + 1;
case tok!")":
beforeTokens.skipParenReverse!true(i, tok!")", tok!"(");
i = beforeTokens.skipParenReverseBefore(i, tok!")", tok!"(");
break;
case tok!"}":
beforeTokens.skipParenReverse!true(i, tok!"}", tok!"{");
i = beforeTokens.skipParenReverseBefore(i, tok!"}", tok!"{");
break;
case tok!"]":
beforeTokens.skipParenReverse!true(i, tok!"]", tok!"[");
i = beforeTokens.skipParenReverseBefore(i, tok!"]", tok!"[");
break;
default:
return size_t.max;
@ -700,10 +700,10 @@ void skipParen(T)(T tokenSlice, ref size_t i, IdType open, IdType close)
/**
* Skips blocks of parentheses in reverse until the starting block has been opened
*/
void skipParenReverse(bool before = false, T)(T beforeTokens, ref size_t i, IdType open, IdType close)
size_t skipParenReverse(T)(T beforeTokens, size_t i, IdType open, IdType close)
{
if (i == 0)
return;
return 0;
int depth = 1;
while (depth != 0 && i != 0)
{
@ -713,9 +713,15 @@ void skipParenReverse(bool before = false, T)(T beforeTokens, ref size_t i, IdTy
else if (beforeTokens[i].type == close)
depth--;
}
static if (before)
if (i != 0)
i--;
return i;
}
size_t skipParenReverseBefore(T)(T beforeTokens, size_t i, IdType open, IdType close)
{
i = skipParenReverse(beforeTokens, i, open, close);
if (i != 0)
i--;
return i;
}
///
@ -726,9 +732,9 @@ unittest
Token(tok!"identifier"), Token(tok!"("), Token(tok!")"), Token(tok!",")
];
size_t i = t.length - 1;
skipParenReverse!false(t, i, tok!")", tok!"(");
i = skipParenReverse(t, i, tok!")", tok!"(");
assert(i == 2);
i = t.length - 1;
skipParenReverse!true(t, i, tok!")", tok!"(");
i = skipParenReverseBefore(t, i, tok!")", tok!"(");
assert(i == 1);
}