if (memchr(rl_line_buffer, '\n', rl_end) == NULL)
return rl_newline(count, key);
+ insert:
char *before(CYmemrchr(rl_line_buffer, '\n', rl_point));
if (before == NULL)
before = rl_line_buffer;
else {
std::string command(rl_line_buffer, rl_end);
command += '\n';
- std::istringstream stream(command);
+ std::stringbuf stream(command);
size_t last(std::string::npos);
for (size_t i(0); i != std::string::npos; i = command.find('\n', i + 1))
if (done)
return rl_newline(count, key);
- rl_insert(count, '\n');
- return 0;
+ // XXX: this was the most obvious fix, but is seriously dumb
+ goto insert;
}
static int CYConsoleKeyUp(int count, int key) {
if (bypass)
code = command;
else try {
- std::istringstream stream(command);
+ std::stringbuf stream(command);
CYPool pool;
CYDriver driver(pool, stream);
stream = new std::istringstream(buffer.str());
CYPool pool;
- CYDriver driver(pool, *stream, script);
+ CYDriver driver(pool, *stream->rdbuf(), script);
Setup(driver);
uint64_t begin(CYGetTime());
}
CYPool pool;
- CYDriver driver(pool, *stream, script);
+ CYDriver driver(pool, *stream->rdbuf(), script);
Setup(driver);
bool failed(driver.Parse());