diff --git a/include/pocketpy/common.h b/include/pocketpy/common.h index bb612864..9b09c2c3 100644 --- a/include/pocketpy/common.h +++ b/include/pocketpy/common.h @@ -187,12 +187,12 @@ struct Type { #define PK_ACTION(x) ([](VM* vm, ArgsView args) { x; return vm->None; }) #ifdef POCKETPY_H -#define FATAL_ERROR() throw std::runtime_error( "L" + std::to_string(__LINE__) + " FATAL_ERROR()!"); +#define PK_FATAL_ERROR() throw std::runtime_error( "L" + std::to_string(__LINE__) + " FATAL_ERROR()!"); #else -#define FATAL_ERROR() throw std::runtime_error( __FILE__ + std::string(":") + std::to_string(__LINE__) + " FATAL_ERROR()!"); +#define PK_FATAL_ERROR() throw std::runtime_error( __FILE__ + std::string(":") + std::to_string(__LINE__) + " FATAL_ERROR()!"); #endif -#define PK_ASSERT(x) if(!(x)) FATAL_ERROR(); +#define PK_ASSERT(x) if(!(x)) PK_FATAL_ERROR(); struct PyObject; #define PK_BITS(p) (reinterpret_cast(p)) diff --git a/include/pocketpy/frame.h b/include/pocketpy/frame.h index 647d039d..4f7c5701 100644 --- a/include/pocketpy/frame.h +++ b/include/pocketpy/frame.h @@ -59,7 +59,7 @@ struct ValueStackImpl { PyObject** end() { return _sp; } void reset(PyObject** sp) { #if PK_DEBUG_EXTRA_CHECK - if(sp < _begin || sp > _begin + MAX_SIZE) FATAL_ERROR(); + if(sp < _begin || sp > _begin + MAX_SIZE) PK_FATAL_ERROR(); #endif _sp = sp; } @@ -105,7 +105,7 @@ struct Frame { Bytecode next_bytecode() { _ip = _next_ip++; #if PK_DEBUG_EXTRA_CHECK - if(_ip >= co->codes.size()) FATAL_ERROR(); + if(_ip >= co->codes.size()) PK_FATAL_ERROR(); #endif return co->codes[_ip]; } diff --git a/include/pocketpy/namedict.h b/include/pocketpy/namedict.h index e5127a91..3f6026db 100644 --- a/include/pocketpy/namedict.h +++ b/include/pocketpy/namedict.h @@ -159,7 +159,7 @@ while(!_items[i].first.empty()) { \ if(old_items[i].first.empty()) continue; bool ok; uint16_t j; HASH_PROBE_1(old_items[i].first, ok, j); - if(ok) FATAL_ERROR(); + if(ok) PK_FATAL_ERROR(); _items[j] = old_items[i]; } free(old_items); diff --git a/include/pocketpy/str.h b/include/pocketpy/str.h index e19df1b6..b8c68e5b 100644 --- a/include/pocketpy/str.h +++ b/include/pocketpy/str.h @@ -23,7 +23,7 @@ struct Str{ Str(int size, bool is_ascii); Str(const std::string& s); Str(std::string_view s); - Str(std::nullptr_t) { FATAL_ERROR(); } + Str(std::nullptr_t) { PK_FATAL_ERROR(); } Str(const char* s); Str(const char* s, int len); Str(std::pair); diff --git a/src/ceval.cpp b/src/ceval.cpp index 246ca9ea..534be4b7 100644 --- a/src/ceval.cpp +++ b/src/ceval.cpp @@ -55,7 +55,7 @@ PyObject* VM::_run_top_frame(){ while(true){ #if PK_DEBUG_EXTRA_CHECK - if(frame.index < base_id) FATAL_ERROR(); + if(frame.index < base_id) PK_FATAL_ERROR(); #endif try{ if(need_raise){ need_raise = false; _raise(); } @@ -845,7 +845,7 @@ __NEXT_STEP:; #if !PK_ENABLE_COMPUTED_GOTO static_assert(OP_DEC_GLOBAL == 111); - case 112: case 113: case 114: case 115: case 116: case 117: case 118: case 119: case 120: case 121: case 122: case 123: case 124: case 125: case 126: case 127: case 128: case 129: case 130: case 131: case 132: case 133: case 134: case 135: case 136: case 137: case 138: case 139: case 140: case 141: case 142: case 143: case 144: case 145: case 146: case 147: case 148: case 149: case 150: case 151: case 152: case 153: case 154: case 155: case 156: case 157: case 158: case 159: case 160: case 161: case 162: case 163: case 164: case 165: case 166: case 167: case 168: case 169: case 170: case 171: case 172: case 173: case 174: case 175: case 176: case 177: case 178: case 179: case 180: case 181: case 182: case 183: case 184: case 185: case 186: case 187: case 188: case 189: case 190: case 191: case 192: case 193: case 194: case 195: case 196: case 197: case 198: case 199: case 200: case 201: case 202: case 203: case 204: case 205: case 206: case 207: case 208: case 209: case 210: case 211: case 212: case 213: case 214: case 215: case 216: case 217: case 218: case 219: case 220: case 221: case 222: case 223: case 224: case 225: case 226: case 227: case 228: case 229: case 230: case 231: case 232: case 233: case 234: case 235: case 236: case 237: case 238: case 239: case 240: case 241: case 242: case 243: case 244: case 245: case 246: case 247: case 248: case 249: case 250: case 251: case 252: case 253: case 254: case 255: FATAL_ERROR(); break; + case 112: case 113: case 114: case 115: case 116: case 117: case 118: case 119: case 120: case 121: case 122: case 123: case 124: case 125: case 126: case 127: case 128: case 129: case 130: case 131: case 132: case 133: case 134: case 135: case 136: case 137: case 138: case 139: case 140: case 141: case 142: case 143: case 144: case 145: case 146: case 147: case 148: case 149: case 150: case 151: case 152: case 153: case 154: case 155: case 156: case 157: case 158: case 159: case 160: case 161: case 162: case 163: case 164: case 165: case 166: case 167: case 168: case 169: case 170: case 171: case 172: case 173: case 174: case 175: case 176: case 177: case 178: case 179: case 180: case 181: case 182: case 183: case 184: case 185: case 186: case 187: case 188: case 189: case 190: case 191: case 192: case 193: case 194: case 195: case 196: case 197: case 198: case 199: case 200: case 201: case 202: case 203: case 204: case 205: case 206: case 207: case 208: case 209: case 210: case 211: case 212: case 213: case 214: case 215: case 216: case 217: case 218: case 219: case 220: case 221: case 222: case 223: case 224: case 225: case 226: case 227: case 228: case 229: case 230: case 231: case 232: case 233: case 234: case 235: case 236: case 237: case 238: case 239: case 240: case 241: case 242: case 243: case 244: case 245: case 246: case 247: case 248: case 249: case 250: case 251: case 252: case 253: case 254: case 255: PK_FATAL_ERROR(); break; } #endif } diff --git a/src/compiler.cpp b/src/compiler.cpp index 0b93abd5..b2e31f0e 100644 --- a/src/compiler.cpp +++ b/src/compiler.cpp @@ -299,7 +299,7 @@ namespace pkpy{ case TK("**"): ctx()->s_expr.push(make_expr(2, ctx()->s_expr.popx())); break; - default: FATAL_ERROR(); + default: PK_FATAL_ERROR(); } } @@ -489,7 +489,7 @@ __SUBSCR_END: if(is_slice){ e->b = std::move(slice); }else{ - if(state != 1) FATAL_ERROR(); + PK_ASSERT(state == 1) e->b = std::move(slice->start); } ctx()->s_expr.push(std::move(e)); @@ -1128,7 +1128,7 @@ __EAT_DOTS_END: if(std::holds_alternative(value)){ obj = VAR(std::get(value)); } - if(obj == nullptr) FATAL_ERROR(); + PK_ASSERT(obj != nullptr) return obj; } @@ -1163,7 +1163,7 @@ __EAT_DOTS_END: CodeObject_ Compiler::compile(){ - if(used) FATAL_ERROR(); + PK_ASSERT(!used) used = true; tokens = lexer->run(); diff --git a/src/expr.cpp b/src/expr.cpp index ee8036e7..e0e86521 100644 --- a/src/expr.cpp +++ b/src/expr.cpp @@ -26,7 +26,7 @@ namespace pkpy{ if(curr_type == FOR_LOOP) for_loop_depth--; co->blocks[curr_block_i].end = co->codes.size(); curr_block_i = co->blocks[curr_block_i].parent; - if(curr_block_i < 0) FATAL_ERROR(); + if(curr_block_i < 0) PK_FATAL_ERROR(); if(curr_type == FOR_LOOP){ // add a no op here to make block check work @@ -116,7 +116,7 @@ namespace pkpy{ case NAME_GLOBAL_UNKNOWN: emit_(OP_STORE_NAME, StrName(name).index, line); break; - default: FATAL_ERROR(); break; + default: PK_FATAL_ERROR(); break; } } @@ -151,7 +151,7 @@ namespace pkpy{ case NAME_GLOBAL_UNKNOWN: ctx->emit_(OP_DELETE_NAME, StrName(name).index, line); break; - default: FATAL_ERROR(); break; + default: PK_FATAL_ERROR(); break; } return true; } @@ -206,7 +206,7 @@ namespace pkpy{ case TK("True"): ctx->emit_(OP_LOAD_TRUE, BC_NOARG, line); break; case TK("False"): ctx->emit_(OP_LOAD_FALSE, BC_NOARG, line); break; case TK("..."): ctx->emit_(OP_LOAD_ELLIPSIS, BC_NOARG, line); break; - default: FATAL_ERROR(); + default: PK_FATAL_ERROR(); } } @@ -245,7 +245,7 @@ namespace pkpy{ if(std::holds_alternative(value)){ obj = VAR(std::get(value)); } - if(obj == nullptr) FATAL_ERROR(); + PK_ASSERT(obj != nullptr) ctx->emit_(OP_LOAD_CONST, ctx->add_const(obj), line); } @@ -557,7 +557,7 @@ namespace pkpy{ if(!kwargs.empty()){ for(auto& item: kwargs){ if(item.second->is_starred()){ - if(item.second->star_level() != 2) FATAL_ERROR(); + PK_ASSERT(item.second->star_level() == 2) item.second->emit_(ctx); }else{ // k=v @@ -658,7 +658,7 @@ namespace pkpy{ case TK("^"): ctx->emit_(OP_BITWISE_XOR, BC_NOARG, line); break; case TK("@"): ctx->emit_(OP_BINARY_MATMUL, BC_NOARG, line); break; - default: FATAL_ERROR(); + default: PK_FATAL_ERROR(); } for(int i: jmps) ctx->patch_jump(i); diff --git a/src/gc.cpp b/src/gc.cpp index 9831c5a3..5c1daf7d 100644 --- a/src/gc.cpp +++ b/src/gc.cpp @@ -41,7 +41,7 @@ namespace pkpy{ } int ManagedHeap::collect(){ - if(_gc_lock_counter > 0) FATAL_ERROR(); + PK_ASSERT(_gc_lock_counter == 0) mark(); int freed = sweep(); return freed; diff --git a/src/lexer.cpp b/src/lexer.cpp index 2510669a..4eb6a495 100644 --- a/src/lexer.cpp +++ b/src/lexer.cpp @@ -438,7 +438,7 @@ static bool is_unicode_Lo_char(uint32_t c) { case 2: SyntaxError("invalid utf8 sequence: " + std::string(1, c)); break; case 3: SyntaxError("@id contains invalid char"); break; case 4: SyntaxError("invalid JSON token"); break; - default: FATAL_ERROR(); + default: PK_FATAL_ERROR(); } return true; } @@ -473,7 +473,7 @@ static bool is_unicode_Lo_char(uint32_t c) { } std::vector Lexer::run() { - if(used) FATAL_ERROR(); + PK_ASSERT(!used) used = true; while (lex_one_token()); return std::move(nexts); diff --git a/src/pocketpy.cpp b/src/pocketpy.cpp index 4bc25577..7ccf0ff8 100644 --- a/src/pocketpy.cpp +++ b/src/pocketpy.cpp @@ -276,7 +276,7 @@ void init_builtins(VM* _vm) { }); _vm->bind__repr__(_vm->tp_object, [](VM* vm, PyObject* obj) { - if(is_tagged(obj)) FATAL_ERROR(); + if(is_tagged(obj)) PK_FATAL_ERROR(); std::stringstream ss; // hex ss << "<" << OBJ_NAME(vm->_t(obj)) << " object at 0x"; ss << std::hex << reinterpret_cast(obj) << ">"; diff --git a/src/vm.cpp b/src/vm.cpp index ae627094..587482f7 100644 --- a/src/vm.cpp +++ b/src/vm.cpp @@ -121,7 +121,7 @@ namespace pkpy{ FrameId VM::top_frame(){ #if PK_DEBUG_EXTRA_CHECK - if(callstack.empty()) FATAL_ERROR(); + if(callstack.empty()) PK_FATAL_ERROR(); #endif return FrameId(&callstack.data(), callstack.size()-1); } @@ -240,7 +240,7 @@ namespace pkpy{ PyObject* obj = builtins->attr().try_get_likely_found(type); if(obj == nullptr){ for(auto& t: _all_types) if(t.name == type) return &t; - FATAL_ERROR(); + PK_FATAL_ERROR(); } return &_all_types[PK_OBJ_GET(Type, obj)]; } @@ -669,7 +669,7 @@ void VM::_log_s_data(const char* title) { if(title) ss << title << " | "; std::map sp_bases; for(Frame& f: callstack.data()){ - if(f._sp_base == nullptr) FATAL_ERROR(); + if(f._sp_base == nullptr) PK_FATAL_ERROR(); sp_bases[f._sp_base] += 1; } FrameId frame = top_frame(); @@ -877,7 +877,7 @@ PyObject* VM::vectorcall(int ARGC, int KWARGC, bool op_call){ // handle boundmethod, do a patch if(is_non_tagged_type(callable, tp_bound_method)){ - if(method_call) FATAL_ERROR(); + if(method_call) PK_FATAL_ERROR(); auto& bm = CAST(BoundMethod&, callable); callable = bm.func; // get unbound method p1[-(ARGC + 2)] = bm.func; @@ -962,7 +962,7 @@ __FAST_CALL: } if(is_non_tagged_type(callable, tp_type)){ - if(method_call) FATAL_ERROR(); + if(method_call) PK_FATAL_ERROR(); // [type, NULL, args..., kwargs...] PyObject* new_f = find_name_in_mro(callable, __new__); PyObject* obj;