main.cpp 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. #include <fstream>
  2. #include "pocketpy.h"
  3. using namespace pkpy;
  4. #ifndef __EMSCRIPTEN__
  5. int main(int argc, char** argv){
  6. VM* vm = pkpy_new_vm(true);
  7. vm->bind_builtin_func<0>("input", [](VM* vm, Args& args){
  8. static std::string line;
  9. std::getline(std::cin, line);
  10. return vm->PyStr(line);
  11. });
  12. if(argc == 1){
  13. REPL* repl = pkpy_new_repl(vm);
  14. bool need_more_lines = false;
  15. while(true){
  16. (*vm->_stdout) << (need_more_lines ? "... " : ">>> ");
  17. std::string line;
  18. if (!std::getline(std::cin, line)) break;
  19. need_more_lines = pkpy_repl_input(repl, line.c_str());
  20. }
  21. pkpy_delete(vm);
  22. return 0;
  23. }
  24. if(argc == 2){
  25. std::string filename = argv[1];
  26. if(filename == "-h" || filename == "--help") goto __HELP;
  27. std::ifstream file(filename);
  28. if(!file.is_open()){
  29. std::cerr << "File not found: " << filename << std::endl;
  30. return 1;
  31. }
  32. std::string src((std::istreambuf_iterator<char>(file)), std::istreambuf_iterator<char>());
  33. PyVarOrNull ret = nullptr;
  34. ret = vm->exec(src.c_str(), filename, EXEC_MODE);
  35. pkpy_delete(vm);
  36. return ret != nullptr ? 0 : 1;
  37. }
  38. __HELP:
  39. std::cout << "Usage: pocketpy [filename]" << std::endl;
  40. return 0;
  41. }
  42. #endif