This commit is contained in:
blueloveTH 2022-11-29 01:36:23 +08:00
parent 8f29dcbca7
commit ef407a8326
3 changed files with 8 additions and 11 deletions

View File

@ -482,13 +482,13 @@ public:
int _body_start = getCode()->co_code.size();
int ARGC = 0;
do {
matchNewLines();
matchNewLines(mode()==SINGLE_MODE);
if (peek() == TK("]")) break;
EXPR(); ARGC++;
matchNewLines();
matchNewLines(mode()==SINGLE_MODE);
if(ARGC == 1 && match(TK("for"))) goto __LISTCOMP;
} while (match(TK(",")));
matchNewLines();
matchNewLines(mode()==SINGLE_MODE);
consume(TK("]"));
emitCode(OP_BUILD_LIST, ARGC);
return;
@ -499,7 +499,7 @@ __LISTCOMP:
getCode()->co_code[_patch].arg = _body_end;
emitCode(OP_BUILD_LIST, 0);
EXPR_FOR_VARS();consume(TK("in"));EXPR_TUPLE();
matchNewLines();
matchNewLines(mode()==SINGLE_MODE);
int _skipPatch = emitCode(OP_JUMP_ABSOLUTE);
int _cond_start = getCode()->co_code.size();
@ -531,11 +531,11 @@ __LISTCOMP:
void exprMap() {
int size = 0;
do {
matchNewLines();
matchNewLines(mode()==SINGLE_MODE);
if (peek() == TK("}")) break;
EXPR();consume(TK(":"));EXPR();
size++;
matchNewLines();
matchNewLines(mode()==SINGLE_MODE);
} while (match(TK(",")));
matchNewLines();
consume(TK("}"));

View File

@ -10,7 +10,7 @@ const _Int _Int_MAX_NEG = -9223372036854775807LL;
const _Float _FLOAT_INF_POS = INFINITY;
const _Float _FLOAT_INF_NEG = -INFINITY;
#define PK_VERSION "0.3.3"
#define PK_VERSION "0.3.4"
class CodeObject;
class BasePointer;

View File

@ -13,7 +13,6 @@ class REPL: public PkExportedResource {
protected:
int need_more_lines = 0;
std::string buffer;
CompileMode mode;
VM* vm;
bool exited = false;
@ -34,7 +33,6 @@ public:
InputResult input(std::string line){
if(exited) return EXEC_SKIPPED;
mode = SINGLE_MODE;
if(need_more_lines){
buffer += line;
buffer += '\n';
@ -45,7 +43,6 @@ public:
}
need_more_lines = 0;
line = buffer;
mode = EXEC_MODE; // tmp set to EXEC_MODE
buffer.clear();
}else{
__NOT_ENOUGH_LINES:
@ -57,7 +54,7 @@ __NOT_ENOUGH_LINES:
}
try{
_Code code = compile(vm, line.c_str(), "<stdin>", mode);
_Code code = compile(vm, line.c_str(), "<stdin>", SINGLE_MODE);
if(code == nullptr) return EXEC_SKIPPED;
vm->execAsync(code);
return EXEC_DONE;