blueloveTH há 3 anos atrás
pai
commit
2008ecbd0f
3 ficheiros alterados com 10 adições e 9 exclusões
  1. 2 4
      src/pocketpy.h
  2. 1 4
      src/repl.h
  3. 7 1
      tests/_eval.py

+ 2 - 4
src/pocketpy.h

@@ -62,14 +62,12 @@ void __initializeBuiltinFunctions(VM* _vm) {
     });
 
     _vm->bindBuiltinFunc<1>("eval", [](VM* vm, const pkpy::ArgList& args) {
-        const _Str& expr = vm->PyStr_AS_C(args[0]);
-        _Code code = vm->compile(expr, "<eval>", EVAL_MODE);
+        _Code code = vm->compile(vm->PyStr_AS_C(args[0]), "<eval>", EVAL_MODE);
         return vm->_exec(code, vm->top_frame()->_module, vm->top_frame()->_locals);
     });
 
     _vm->bindBuiltinFunc<1>("exec", [](VM* vm, const pkpy::ArgList& args) {
-        const _Str& expr = vm->PyStr_AS_C(args[0]);
-        _Code code = vm->compile(expr, "<exec>", EXEC_MODE);
+        _Code code = vm->compile(vm->PyStr_AS_C(args[0]), "<exec>", EXEC_MODE);
         vm->_exec(code, vm->top_frame()->_module, vm->top_frame()->_locals);
         return vm->None;
     });

+ 1 - 4
src/repl.h

@@ -44,16 +44,13 @@ __NOT_ENOUGH_LINES:
         }
 
         try{
-            vm->compile(line, "<stdin>", mode);
+            vm->exec(line, "<stdin>", mode);
         }catch(NeedMoreLines& ne){
             buffer += line;
             buffer += '\n';
             need_more_lines = ne.isClassDef ? 3 : 2;
             if (need_more_lines) return NEED_MORE_LINES;
-        }catch(...){
-            // do nothing
         }
-        vm->exec(line, "<stdin>", mode);
         return EXEC_STARTED;
     }
 };

+ 7 - 1
tests/_eval.py

@@ -17,4 +17,10 @@ def f(x):
     exec('a = x')
     return a
 
-assert f(2) == 2
+assert f(2) == 2
+
+exec(
+    "exec('a = eval(\"3 + 5\")')"
+)
+
+assert a == 8