![Damien George](/assets/img/avatar_default.png)
Each built-in exception is now a type, with base type BaseException. C exceptions are created by passing a pointer to the exception type to make an instance of. When raising an exception from the VM, an instance is created automatically if an exception type is raised (as opposed to an exception instance). Exception matching (RT_BINARY_OP_EXCEPTION_MATCH) is now proper. Handling of parse error changed to match new exceptions. mp_const_type renamed to mp_type_type for consistency.
40 lines
1 KiB
C
40 lines
1 KiB
C
#include <stdlib.h>
|
|
#include <stdint.h>
|
|
|
|
#include "nlr.h"
|
|
#include "misc.h"
|
|
#include "mpconfig.h"
|
|
#include "qstr.h"
|
|
#include "obj.h"
|
|
#include "runtime0.h"
|
|
|
|
typedef struct _mp_obj_none_t {
|
|
mp_obj_base_t base;
|
|
} mp_obj_none_t;
|
|
|
|
STATIC void none_print(void (*print)(void *env, const char *fmt, ...), void *env, mp_obj_t self_in, mp_print_kind_t kind) {
|
|
print(env, "None");
|
|
}
|
|
|
|
STATIC mp_obj_t none_unary_op(int op, mp_obj_t o_in) {
|
|
switch (op) {
|
|
case RT_UNARY_OP_BOOL: return mp_const_false;
|
|
default: return MP_OBJ_NULL; // op not supported for None
|
|
}
|
|
}
|
|
|
|
const mp_obj_type_t none_type = {
|
|
{ &mp_type_type },
|
|
.name = MP_QSTR_NoneType,
|
|
.print = none_print,
|
|
.unary_op = none_unary_op,
|
|
};
|
|
|
|
STATIC const mp_obj_none_t none_obj = {{&none_type}};
|
|
const mp_obj_t mp_const_none = (mp_obj_t)&none_obj;
|
|
|
|
// the stop-iteration object just needs to be something unique
|
|
// it's not the StopIteration exception
|
|
STATIC const mp_obj_none_t stop_it_obj = {{&none_type}};
|
|
const mp_obj_t mp_const_stop_iteration = (mp_obj_t)&stop_it_obj;
|