From c2131f196668734336c0bdf11a73117ced7df666 Mon Sep 17 00:00:00 2001 From: Bob Miller Date: Mon, 17 May 2010 00:18:02 -0700 Subject: [PATCH] Split UNDEFINED into UNINITIALIZED and UNSPECIFIED. --- eval.c | 20 ++++++++++---------- heap.c | 9 ++++++--- mem.h | 13 +++++++------ obj.h | 11 ++++++----- obj_proc.c | 18 ++++++++++++++---- obj_symbol.c | 6 +++--- obj_undefined.h | 18 ------------------ obj_uninit.h | 18 ++++++++++++++++++ obj_unspec.h | 18 ++++++++++++++++++ prim_ctrl.c | 4 +++- prim_defn.c | 6 +++--- prim_expr.c | 10 +++++----- prim_io.c | 8 ++++---- prim_list.c | 4 ++-- print.c | 17 ++++++++++++----- repl.c | 12 ++++-------- roots.h | 12 ++++++------ scan.c | 4 ++-- types.h | 3 ++- 19 files changed, 125 insertions(+), 86 deletions(-) delete mode 100644 obj_undefined.h create mode 100644 obj_uninit.h create mode 100644 obj_unspec.h diff --git a/eval.c b/eval.c index b937436..1e60d59 100644 --- a/eval.c +++ b/eval.c @@ -140,7 +140,7 @@ extern cv_t c_apply_proc(obj_t cont, obj_t values) return ((cont_proc_t)procedure_code(operator))(cont, values); else { // N.B., call proc after all other allocations. - obj_t new_values = CONS(UNDEFINED_OBJ, saved_values); + obj_t new_values = CONS(make_uninitialized(), saved_values); pair_set_car_nc(new_values, apply_proc(operator, arg_list)); return cv(next, new_values); } @@ -167,7 +167,7 @@ extern cv_t c_apply_proc(obj_t cont, obj_t values) env_bind(new_env, formal, BT_LEXICAL, M_MUTABLE, actual); } // Push a value for c_eval_seq to discard. - obj_t new_values = CONS(UNDEFINED_OBJ, saved_values); + obj_t new_values = CONS(make_uninitialized(), saved_values); return cv(make_cont4(c_eval_seq, next, new_env, body), new_values); } } @@ -188,7 +188,7 @@ static cv_t c_eval_operator(obj_t cont, obj_t values) } else { // N.B., call proc after all other allocations. obj_t arg_list = application_operands(appl); - obj_t new_values = CONS(UNDEFINED_OBJ, CDR(values)); + obj_t new_values = CONS(make_uninitialized(), CDR(values)); pair_set_car(new_values, apply_proc(operator, arg_list)); return cv(cont_cont(cont), new_values); } @@ -274,7 +274,7 @@ static cv_t default_handler(obj_t cont, obj_t values) } } obj_t who_p = FALSE_OBJ; - obj_t irr_p = UNDEFINED_OBJ; + obj_t irr_p = make_uninitialized(); for (i = 0; i < size; i++) { obj_t p = vector_ref(parts, i); obj_t rtd = record_rtd(p); @@ -288,20 +288,20 @@ static cv_t default_handler(obj_t cont, obj_t values) else if (rtd == irritants) irr_p = record_get_field(p, 0); } - if (who_p != FALSE_OBJ && irr_p != UNDEFINED_OBJ) { + if (who_p != FALSE_OBJ && !is_uninitialized(irr_p)) { ofprintf(stderr, "%*s %O\n", psnl, psn, CONS(who_p, irr_p)); psn = ""; } else if (who_p != FALSE_OBJ) { ofprintf(stderr, "%*s %O\n", psnl, psn, who_p); psn = ""; - } else if (irr_p != UNDEFINED_OBJ) { + } else if (!is_uninitialized(irr_p)) { ofprintf(stderr, "%*s %O\n", psnl, psn, irr_p); psn = ""; } if (*psn) fprintf(stderr, "%s: unknown exception\n", psn); ofprintf(stderr, "\n"); - return cv(EMPTY_LIST, CONS(UNDEFINED_OBJ, EMPTY_LIST)); + return cv(EMPTY_LIST, CONS(make_uninitialized(), EMPTY_LIST)); } static cv_t c_exception_returned(obj_t cont, obj_t values) @@ -388,8 +388,8 @@ extern obj_t core_eval_cont(volatile obj_t cont, collect_garbage(); cont = cont_root; values = values_root; - cont_root = UNDEFINED_OBJ; - values_root = UNDEFINED_OBJ; + cont_root = make_uninitialized(); + values_root = make_uninitialized(); break; case LT_NO_EXCEPTION: @@ -414,7 +414,7 @@ extern obj_t core_eval_cont(volatile obj_t cont, #endif } deregister_lowex_handler(handle_lowex); - eval_dyn_env = make_undefined(); + eval_dyn_env = make_uninitialized(); EVAL_LOG("END values=%O", values); assert(is_null(CDR(values))); return CAR(values); diff --git a/heap.c b/heap.c index c18b6d7..6d433e9 100644 --- a/heap.c +++ b/heap.c @@ -13,7 +13,8 @@ #include "obj_eof.h" #include "obj_fixnum.h" #include "obj_null.h" -#include "obj_undefined.h" +#include "obj_uninit.h" +#include "obj_unspec.h" #include "roots.h" #if DEBUG_HEAP @@ -339,8 +340,10 @@ const wchar_t *obj_type_name(const obj_t obj) return L"forward"; if (is_null(obj)) return L"null"; - if (is_undefined(obj)) - return L"undefined"; + if (is_uninitialized(obj)) + return L"uninitialized"; + if (is_unspecified(obj)) + return L"unspecified"; if (is_eof(obj)) return L"eof-object"; if (is_read_action(obj)) diff --git a/mem.h b/mem.h index c5a8698..99c401a 100644 --- a/mem.h +++ b/mem.h @@ -47,12 +47,13 @@ * See read.c. * * 0001 1110 - Special constant. - * 0000 0001 1110 - nil (the empty list) - * 0001 0001 1110 - undefined - * 0010 0001 1110 - missing arg - * 0011 0001 1110 - end of file - * 0100 0001 1110 - mem ops primitive (see below) - * 0101 0001 1110 - end of args + * 0000 0001 1110 - the empty list (nil) + * 0001 0001 1110 - unspecified + * 0010 0001 1110 - uninitialized + * 0011 0001 1110 - missing arg + * 0100 0001 1110 - end of file + * 0101 0001 1110 - mem ops primitive (see below) + * 0110 0001 1110 - end of args * * - "Forwarding" pointers are used by the garbage collector, and * are never seen by the mutator. While a heap region is being diff --git a/obj.h b/obj.h index 2b622b8..dbcb7d1 100644 --- a/obj.h +++ b/obj.h @@ -44,11 +44,12 @@ #define SPECIAL_OBJ(n) ((obj_t)((n) << SPECIAL_SHIFT | SPECIAL_TAG)) #define EMPTY_LIST (SPECIAL_OBJ(0)) -#define UNDEFINED_OBJ (SPECIAL_OBJ(1)) -#define END_OF_FILE (SPECIAL_OBJ(2)) -#define MISSING_ARG (SPECIAL_OBJ(3)) -#define MEM_OPS_PRIMITIVE (SPECIAL_OBJ(4)) -#define END_OF_ARGS (SPECIAL_OBJ(5)) +#define UNINITIALIZED_OBJ (SPECIAL_OBJ(1)) +#define UNSPECIFIED_OBJ (SPECIAL_OBJ(2)) +#define END_OF_FILE (SPECIAL_OBJ(3)) +#define MISSING_ARG (SPECIAL_OBJ(4)) +#define MEM_OPS_PRIMITIVE (SPECIAL_OBJ(5)) +#define END_OF_ARGS (SPECIAL_OBJ(6)) #define OBJ_TYPE_PREDICATE(type) \ static inline bool is_##type(obj_t obj) \ diff --git a/obj_proc.c b/obj_proc.c index 1479796..24d7fae 100644 --- a/obj_proc.c +++ b/obj_proc.c @@ -2,6 +2,8 @@ #include +#include "obj_uninit.h" + static size_t proc_size_op(const heap_object_t *hobj) { return sizeof (proc_obj_t); @@ -75,7 +77,11 @@ obj_t make_procedure(obj_t body, obj_t arglist, obj_t env) CHECK_OBJ(body); CHECK_OBJ(arglist); CHECK_OBJ(env); - return make_proc(PF_ARGS_EVALUATED, body, UNDEFINED_OBJ, arglist, env); + return make_proc(PF_ARGS_EVALUATED, + body, + make_uninitialized(), + arglist, + env); } obj_t make_C_procedure(C_procedure_t code, @@ -92,7 +98,7 @@ obj_t make_raw_procedure(cont_proc_t code, obj_t name, obj_t env) { CHECK_OBJ(env); proc_flags_t flags = PF_COMPILED_C | PF_RAW | PF_ARGS_EVALUATED; - return make_proc(flags, (obj_t)code, name, UNDEFINED_OBJ, env); + return make_proc(flags, (obj_t)code, name, make_uninitialized(), env); } obj_t make_special_form_procedure(obj_t body, obj_t env) @@ -100,7 +106,11 @@ obj_t make_special_form_procedure(obj_t body, obj_t env) CHECK_OBJ(body); CHECK_OBJ(env); proc_flags_t flags = 0; - return make_proc(flags, body, UNDEFINED_OBJ, UNDEFINED_OBJ, env); + return make_proc(flags, + body, + make_uninitialized(), + make_uninitialized(), + env); } obj_t make_C_special_form_procedure(C_procedure_t code, @@ -117,5 +127,5 @@ obj_t make_raw_special_form_procedure(cont_proc_t code, obj_t name, obj_t env) { CHECK_OBJ(env); proc_flags_t flags = PF_COMPILED_C | PF_RAW; - return make_proc(flags, (obj_t)code, name, UNDEFINED_OBJ, env); + return make_proc(flags, (obj_t)code, name, make_uninitialized(), env); } diff --git a/obj_symbol.c b/obj_symbol.c index aa894a6..f25ce68 100644 --- a/obj_symbol.c +++ b/obj_symbol.c @@ -9,7 +9,7 @@ #include "obj_null.h" #include "obj_pair.h" #include "obj_string.h" -#include "obj_undefined.h" +#include "obj_uninit.h" #include "roots.h" mem_ops_t symbol_ops; @@ -72,7 +72,7 @@ obj_t make_symbol_from_C_str(const wchar_t *C_name) obj_t make_anonymous_symbol(void) { - return alloc_symbol(UNDEFINED_OBJ); + return alloc_symbol(make_uninitialized()); } obj_t symbol_name(obj_t symbol) @@ -80,7 +80,7 @@ obj_t symbol_name(obj_t symbol) CHECK_OBJ(symbol); CHECK(is_symbol(symbol), "must be symbol", symbol); obj_t name = fixvec1_get_ptr(symbol, 0); - if (is_undefined(name)) { + if (is_uninitialized(name)) { size_t max_len = 12; ssize_t name_len; wchar_t name_buf[max_len]; diff --git a/obj_undefined.h b/obj_undefined.h deleted file mode 100644 index 4b263a8..0000000 --- a/obj_undefined.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef OBJ_UNDEF_INCLUDED -#define OBJ_UNDEF_INCLUDED - -#include "obj.h" - -#define UNDEFINED_REPR L"#" - -static inline obj_t make_undefined(void) -{ - return UNDEFINED_OBJ; -} - -static inline bool is_undefined(obj_t obj) -{ - return obj == UNDEFINED_OBJ; -} - -#endif /* !OBJ_UNDEF_INCLUDED */ diff --git a/obj_uninit.h b/obj_uninit.h new file mode 100644 index 0000000..0118518 --- /dev/null +++ b/obj_uninit.h @@ -0,0 +1,18 @@ +#ifndef OBJ_UNINIT_INCLUDED +#define OBJ_UNINIT_INCLUDED + +#include "obj.h" + +#define UNINITIALIZED_REPR L"#" + +static inline obj_t make_uninitialized(void) +{ + return UNINITIALIZED_OBJ; +} + +static inline bool is_uninitialized(obj_t obj) +{ + return obj == UNINITIALIZED_OBJ; +} + +#endif /* !OBJ_UNINIT_INCLUDED */ diff --git a/obj_unspec.h b/obj_unspec.h new file mode 100644 index 0000000..7157131 --- /dev/null +++ b/obj_unspec.h @@ -0,0 +1,18 @@ +#ifndef OBJ_UNSPEC_INCLUDED +#define OBJ_UNSPEC_INCLUDED + +#include "obj.h" + +#define UNSPECIFIED_REPR L"#" + +static inline obj_t make_unspecified(void) +{ + return UNSPECIFIED_OBJ; +} + +static inline bool is_unspecified(obj_t obj) +{ + return obj == UNSPECIFIED_OBJ; +} + +#endif /* !OBJ_UNSPEC_INCLUDED */ diff --git a/prim_ctrl.c b/prim_ctrl.c index 62064a7..3cd748c 100644 --- a/prim_ctrl.c +++ b/prim_ctrl.c @@ -61,7 +61,9 @@ DEFINE_RAW_PROC(L"call-with-current-continuation")(obj_t cont, obj_t values) obj_t saved_values = cont5_arg2(cont); obj_t closure = CONS((obj_t)cont_cont(cont), saved_values); - obj_t escape = make_raw_procedure(escape_callcc, UNDEFINED_OBJ, closure); + obj_t escape = make_raw_procedure(escape_callcc, + make_unspecified(), + closure); return cv(make_cont5(c_apply_proc, cont_cont(cont), cont_env(cont), diff --git a/prim_defn.c b/prim_defn.c index 8a37698..37477e3 100644 --- a/prim_defn.c +++ b/prim_defn.c @@ -1,7 +1,7 @@ #include "env.h" #include "list.h" #include "prim.h" -#include "obj_undefined.h" +#include "obj_unspec.h" #include "test.h" #include "types.h" @@ -10,7 +10,7 @@ static cv_t c_continue_define(obj_t cont, obj_t values) assert(is_cont5(cont)); EVAL_LOG("var=%O values=%O", cont5_arg1(cont), values); /* N.B., allocate new values before mutating environment. */ - obj_t new_values = CONS(UNDEFINED_OBJ, cont5_arg2(cont)); + obj_t new_values = CONS(make_unspecified(), cont5_arg2(cont)); obj_t ret = cont_cont(cont); env_bind(cont_env(cont), cont5_arg1(cont), @@ -39,4 +39,4 @@ DEFINE_SPECIAL_FORM(L"define")(obj_t cont, obj_t values) } TEST_EVAL(L"(define v0 3) v0", L"3"); -TEST_EVAL(L"(define v5 1)", UNDEFINED_REPR); +TEST_EVAL(L"(define v5 1)", UNSPECIFIED_REPR); diff --git a/prim_expr.c b/prim_expr.c index 1834c1c..ae7d5fa 100644 --- a/prim_expr.c +++ b/prim_expr.c @@ -76,7 +76,7 @@ static cv_t c_continue_if(obj_t cont, obj_t values) return cv(make_cont4(c_eval, cont_cont(cont), env, consequent), CDR(values)); } else if (is_null(CDDDR(form))) - return cv(cont_cont(cont), CONS(UNDEFINED_OBJ, CDR(values))); + return cv(cont_cont(cont), CONS(make_unspecified(), CDR(values))); else { obj_t alternate = CADDDR(form); return cv(make_cont4(c_eval, cont_cont(cont), env, alternate), @@ -101,7 +101,7 @@ DEFINE_SPECIAL_FORM(L"if")(obj_t cont, obj_t values) TEST_EVAL(L"(if (= 0 0) 1 2)", L"1"); TEST_EVAL(L"(if (= 0 1) 1 2)", L"2"); TEST_EVAL(L"(if (= 0 0) 1)", L"1"); -TEST_EVAL(L"(if (= 0 1) 1)", UNDEFINED_REPR); +TEST_EVAL(L"(if (= 0 1) 1)", UNSPECIFIED_REPR); /* from r6rs */ TEST_EVAL(L"(if (> 3 2) 'yes 'no)", L"yes"); @@ -109,7 +109,7 @@ TEST_EVAL(L"(if (> 2 3) 'yes 'no)", L"no"); TEST_EVAL(L"(if (> 3 2)\n" L" (- 3 2)\n" L" (+ 3 2))", L"1"); -TEST_EVAL(L"(if #f #f)", UNDEFINED_REPR); +TEST_EVAL(L"(if #f #f)", UNSPECIFIED_REPR); static cv_t c_continue_set(obj_t cont, obj_t values) { @@ -120,7 +120,7 @@ static cv_t c_continue_set(obj_t cont, obj_t values) obj_t bdg = env_lookup(env, var); EVAL_LOG("var=%O value=%O", var, value); /* N.B., allocate values list before mutating environment. */ - obj_t new_values = CONS(UNDEFINED_OBJ, cont5_arg2(cont)); + obj_t new_values = CONS(make_unspecified(), cont5_arg2(cont)); obj_t ret = cont_cont(cont); binding_set_value(bdg, value); return cv(ret, new_values); @@ -144,7 +144,7 @@ DEFINE_SPECIAL_FORM(L"set!")(obj_t cont, obj_t values) } TEST_EVAL(L"(define v1 '()) (set! v1 4) v1", L"4"); -TEST_EVAL(L"(define v2 '()) (set! v2 4)", UNDEFINED_REPR); +TEST_EVAL(L"(define v2 '()) (set! v2 4)", UNSPECIFIED_REPR); TEST_EVAL(L"((lambda (x) (set! x #t) x) #f)", L"#t"); /* from r6rs */ diff --git a/prim_io.c b/prim_io.c index f4700cd..2bd917f 100644 --- a/prim_io.c +++ b/prim_io.c @@ -76,7 +76,7 @@ static obj_t make_readline_port(void) FALSE_OBJ, FALSE_OBJ, FALSE_OBJ, - make_undefined(), + make_uninitialized(), FALSE_OBJ); } @@ -164,13 +164,13 @@ static obj_t make_text_file_input_port(int fd, bool close) FALSE_OBJ, /* write proc */ FALSE_OBJ, /* seek proc */ file_close_proc, - make_undefined(), /* text buffer */ + make_uninitialized(), /* text buffer */ binary_buffer); /* binary buffer */ } static obj_t current_stdin(void) { - if (is_undefined(standard_input)) { + if (is_uninitialized(standard_input)) { int ifd = fileno(stdin), ofd = fileno(stdout); if (isatty(ifd) && isatty(ofd)) standard_input = make_readline_port(); @@ -260,7 +260,7 @@ DEFINE_EXTERN_RAW_PROC(c_peek_char, L"peek-char")(obj_t cont, obj_t values) EVAL_LOG("values=%O port=%O", values, port); CHECK(is_port(port), "must be port"); obj_t rbuf = port_text_buffer(port); - if (!is_undefined(rbuf)) { + if (!is_uninitialized(rbuf)) { if (is_eof(rbuf)) return cv(cont_cont(cont), CONS(rbuf, saved_values)); size_t rpos = port_text_pos(port); diff --git a/prim_list.c b/prim_list.c index f310c7c..b92f7b8 100644 --- a/prim_list.c +++ b/prim_list.c @@ -35,12 +35,12 @@ DEFINE_PROC(L"set-car!", 2)(obj_t pair, obj_t obj) { /* N.B., mutate list after all other allocations. */ pair_set_car(pair, obj); - return UNDEFINED_OBJ; + return make_unspecified(); } DEFINE_PROC(L"set-cdr!", 2)(obj_t pair, obj_t obj) { /* N.B., mutate list after all other allocations. */ pair_set_cdr(pair, obj); - return UNDEFINED_OBJ; + return make_unspecified(); } diff --git a/print.c b/print.c index 847e1de..1538afe 100644 --- a/print.c +++ b/print.c @@ -213,9 +213,14 @@ static void print_record(obj_t obj, outstream_t *out) outstream_putwc(L'>', out); } -static void print_undefined(obj_t obj, outstream_t *out) +static void print_uninitialized(obj_t obj, outstream_t *out) { - outstream_printf(out, L"#"); + outstream_printf(out, UNINITIALIZED_REPR); +} + +static void print_unspecified(obj_t obj, outstream_t *out) +{ + outstream_printf(out, UNSPECIFIED_REPR); } static void print_form(obj_t obj, outstream_t *out) @@ -244,8 +249,10 @@ static void print_form(obj_t obj, outstream_t *out) print_rtd(obj, out); } else if (is_record(obj)) { print_record(obj, out); - } else if (is_undefined(obj)) { - print_undefined(obj, out); + } else if (is_uninitialized(obj)) { + print_uninitialized(obj, out); + } else if (is_unspecified(obj)) { + print_unspecified(obj, out); } else { outstream_printf(out, L"#<%ls-%p>", obj_type_name(obj), obj); } @@ -258,7 +265,7 @@ void princ(obj_t obj, outstream_t *out) void print(obj_t obj, outstream_t *out) { - if (!is_undefined(obj)) { + if (!is_unspecified(obj)) { print_form(obj, out); outstream_putwc(L'\n', out); } diff --git a/repl.c b/repl.c index dfa04b9..3ec4f2a 100644 --- a/repl.c +++ b/repl.c @@ -7,15 +7,11 @@ #include "io.h" /* XXX */ #include "obj.h" #include "obj_eof.h" -#include "obj_proc.h" -#include "obj_record.h" -#include "obj_string.h" -#include "obj_symbol.h" -#include "obj_vector.h" #include "oprintf.h" #include "prim.h" #include "print.h" /* XXX */ #include "read.h" +#include "types.h" /* * ((lambda () @@ -77,7 +73,7 @@ static cv_t c_handler(obj_t cont, obj_t values) } } obj_t who_p = FALSE_OBJ; - obj_t irr_p = UNDEFINED_OBJ; + obj_t irr_p = make_uninitialized(); for (i = 0; i < size; i++) { obj_t p = vector_ref(parts, i); obj_t rtd = record_rtd(p); @@ -91,13 +87,13 @@ static cv_t c_handler(obj_t cont, obj_t values) else if (rtd == irritants) irr_p = record_get_field(p, 0); } - if (who_p != FALSE_OBJ && irr_p != UNDEFINED_OBJ) { + if (who_p != FALSE_OBJ && !is_uninitialized(irr_p)) { ofprintf(stderr, "%*s %O\n", psnl, psn, CONS(who_p, irr_p)); psn = ""; } else if (who_p != FALSE_OBJ) { ofprintf(stderr, "%*s %O\n", psnl, psn, who_p); psn = ""; - } else if (irr_p != UNDEFINED_OBJ) { + } else if (!is_uninitialized(irr_p)) { ofprintf(stderr, "%*s %O\n", psnl, psn, irr_p); psn = ""; } diff --git a/roots.h b/roots.h index 07d621c..1eb6d53 100644 --- a/roots.h +++ b/roots.h @@ -9,15 +9,15 @@ * Roots must be statically allocated. * * A root can either have STATIC or EXTERN storage class. Those terms - * mean what they do in C: STATIC has file scope; EXTERN has global scope. - * STATIC is the default. + * mean what they do in C: STATIC has file scope; EXTERN has global + * scope. STATIC is the default. * * A root can either be local to a THREAD or global to all threads. * The interpreter is not (yet?) multi-threaded, so THREAD is a no-op. * - * A root can be implicitly initialized to the undefined value, or - * explicitly initialized with a constructor. The constructor will - * be invoked after the heap is initialized. + * A root can be implicitly initialized to the uninitialized value, or + * explicitly initialized with a constructor. The constructor will be + * invoked after the heap is initialized. */ #define ROOT STATIC_ROOT @@ -42,7 +42,7 @@ static obj_t init_root_##name(void) #define GENERAL_ROOT_(storage_class, name, init) \ - storage_class obj_t name = UNDEFINED_OBJ; \ + storage_class obj_t name = UNINITIALIZED_OBJ; \ __attribute__((constructor)) \ static void mem_record_root_ ## name(void) \ { \ diff --git a/scan.c b/scan.c index 09d2366..9240e6e 100644 --- a/scan.c +++ b/scan.c @@ -623,7 +623,7 @@ static cv_t c_continue_read_token(obj_t cont, obj_t values) } if (is_eof(ch)) return cv(cont_cont(cont), - MAKE_LIST(make_fixnum(TOK_EOF), UNDEFINED_OBJ)); + MAKE_LIST(make_fixnum(TOK_EOF), make_uninitialized())); const yy_delta_row_t *row = &yy_delta[state]; yy_cc_t cc = char_class(character_value(ch)); if (cc < row->yy_len) @@ -680,7 +680,7 @@ static cv_t c_continue_read_token(obj_t cont, obj_t values) second, cont_env(cont), MISSING_ARG, - UNDEFINED_OBJ); + make_uninitialized()); return cv(first, cont5_arg2(cont)); } } diff --git a/types.h b/types.h index b9b42b4..bba54a6 100644 --- a/types.h +++ b/types.h @@ -14,7 +14,8 @@ #include "obj_rtd.h" #include "obj_string.h" #include "obj_symbol.h" -#include "obj_undefined.h" +#include "obj_uninit.h" +#include "obj_unspec.h" #include "obj_vector.h" #endif /* !TYPES_INCLUDED */