token_list_t *argument;
token_node_t *node = *node_ret, *last;
int paren_count;
- int arg_count;
last = node;
node = node->next;
argument = NULL;
- paren_count = 0;
- arg_count = 0;
- do {
+ for (paren_count = 0; node; last = node, node = node->next) {
if (node->token->type == '(')
{
paren_count++;
else if (node->token->type == ')')
{
paren_count--;
+ if (paren_count == 0) {
+ last = node;
+ node = node->next;
+ break;
+ }
}
else if (node->token->type == ',' &&
paren_count == 1)
}
else {
if (argument == NULL) {
+ /* Don't treat initial whitespace as
+ * part of the arguement. */
+ if (node->token->type == SPACE)
+ continue;
argument = _token_list_create (arguments);
_argument_list_append (arguments, argument);
}
_token_list_append (argument, node->token);
}
-
- last = node;
- node = node->next;
-
- } while (node && paren_count);
+ }
if (node && paren_count)
return FUNCTION_UNBALANCED_PARENTHESES;