IoMessage newParseNextMessageChain(IoState state, IoLexer lexer) { IoMessage msg = clone(state) as IoMessage; if (lexer.top() != null && lexer.top().isValidMessageName()) { msg.parseName(state, lexer); } if (lexer.topType() == IoTokenType.OPENPAREN_TOKEN) { msg.parseArgs(lexer); } if (lexer.top() != null && lexer.top().isValidMessageName()) { msg.parseNext(lexer); } while (lexer.topType() == IoTokenType.TERMINATOR_TOKEN) { lexer.pop(); if (lexer.top() != null && lexer.top().isValidMessageName()) { IoMessage eol = IoMessage.newWithName(state, state.semicolonSymbol); msg.next = eol; eol.parseNext(lexer); } } return(msg); }