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: skip:
mixin (EXPRESSION_LOOP_BREAK); mixin (EXPRESSION_LOOP_BREAK);
immutable bookmark = i; immutable bookmark = i;
beforeTokens.skipParenReverse(i, open, close); i = beforeTokens.skipParenReverse(i, open, close);
skipCount++; skipCount++;
@ -666,13 +666,13 @@ body
case tok!"[": case tok!"[":
return i + 1; return i + 1;
case tok!")": case tok!")":
beforeTokens.skipParenReverse!true(i, tok!")", tok!"("); i = beforeTokens.skipParenReverseBefore(i, tok!")", tok!"(");
break; break;
case tok!"}": case tok!"}":
beforeTokens.skipParenReverse!true(i, tok!"}", tok!"{"); i = beforeTokens.skipParenReverseBefore(i, tok!"}", tok!"{");
break; break;
case tok!"]": case tok!"]":
beforeTokens.skipParenReverse!true(i, tok!"]", tok!"["); i = beforeTokens.skipParenReverseBefore(i, tok!"]", tok!"[");
break; break;
default: default:
return size_t.max; 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 * 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) if (i == 0)
return; return 0;
int depth = 1; int depth = 1;
while (depth != 0 && i != 0) 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) else if (beforeTokens[i].type == close)
depth--; depth--;
} }
static if (before) return i;
}
size_t skipParenReverseBefore(T)(T beforeTokens, size_t i, IdType open, IdType close)
{
i = skipParenReverse(beforeTokens, i, open, close);
if (i != 0) if (i != 0)
i--; i--;
return i;
} }
/// ///
@ -726,9 +732,9 @@ unittest
Token(tok!"identifier"), Token(tok!"("), Token(tok!")"), Token(tok!",") Token(tok!"identifier"), Token(tok!"("), Token(tok!")"), Token(tok!",")
]; ];
size_t i = t.length - 1; size_t i = t.length - 1;
skipParenReverse!false(t, i, tok!")", tok!"("); i = skipParenReverse(t, i, tok!")", tok!"(");
assert(i == 2); assert(i == 2);
i = t.length - 1; i = t.length - 1;
skipParenReverse!true(t, i, tok!")", tok!"("); i = skipParenReverseBefore(t, i, tok!")", tok!"(");
assert(i == 1); assert(i == 1);
} }