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

View File

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

View File

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