remove symbol.h

This commit is contained in:
Yuichi Nishiwaki 2016-02-19 01:05:28 +09:00
parent 665eda1d92
commit 3198e77ac1
7 changed files with 34 additions and 46 deletions

View File

@ -264,7 +264,6 @@ int pic_str_hash(pic_state *, struct pic_string *);
#include "picrin/macro.h"
#include "picrin/pair.h"
#include "picrin/port.h"
#include "picrin/symbol.h"
void *pic_default_allocf(void *, void *, size_t);

View File

@ -10,6 +10,32 @@ extern "C" {
#endif
/* symbol & identifier */
struct pic_id {
union {
struct pic_symbol {
PIC_OBJECT_HEADER
struct pic_string *str;
} sym;
struct {
PIC_OBJECT_HEADER
struct pic_id *id;
struct pic_env *env;
} id;
} u;
};
#define pic_sym_ptr(v) ((pic_sym *)pic_obj_ptr(v))
#define pic_id_p(pic, v) (pic_type(pic, v) == PIC_TYPE_ID || pic_type(pic, v) == PIC_TYPE_SYMBOL)
#define pic_id_ptr(v) ((pic_id *)pic_obj_ptr(v))
pic_id *pic_make_identifier(pic_state *, pic_id *, struct pic_env *);
struct pic_string *pic_id_name(pic_state *, pic_id *);
/* blob */
struct pic_blob {

View File

@ -1,39 +0,0 @@
/**
* See Copyright Notice in picrin.h
*/
#ifndef PICRIN_SYMBOL_H
#define PICRIN_SYMBOL_H
#if defined(__cplusplus)
extern "C" {
#endif
struct pic_id {
union {
struct pic_symbol {
PIC_OBJECT_HEADER
struct pic_string *str;
} sym;
struct {
PIC_OBJECT_HEADER
struct pic_id *id;
struct pic_env *env;
} id;
} u;
};
#define pic_sym_ptr(v) ((pic_sym *)pic_obj_ptr(v))
#define pic_id_p(pic, v) (pic_type(pic, v) == PIC_TYPE_ID || pic_type(pic, v) == PIC_TYPE_SYMBOL)
#define pic_id_ptr(v) ((pic_id *)pic_obj_ptr(v))
pic_id *pic_make_identifier(pic_state *, pic_id *, struct pic_env *);
const char *pic_identifier_name(pic_state *, pic_id *);
#if defined(__cplusplus)
}
#endif
#endif

View File

@ -3,6 +3,7 @@
*/
#include "picrin.h"
#include "picrin/object.h"
KHASH_DEFINE(ltable, const char *, struct pic_lib, kh_str_hash_func, kh_str_cmp_func)

View File

@ -40,7 +40,7 @@ pic_add_identifier(pic_state *pic, pic_id *id, struct pic_env *env)
pic_sym *uid;
struct pic_string *str;
name = pic_identifier_name(pic, id);
name = pic_str(pic, pic_id_name(pic, id));
if (env->up == NULL && pic_sym_p(pic, pic_obj_value(id))) { /* toplevel & public */
str = pic_strf_value(pic, "%s/%s", pic_str(pic, env->lib), name);
@ -274,7 +274,7 @@ expand_defmacro(pic_state *pic, pic_value expr, struct pic_env *env)
val = pic_call(pic, pic_compile(pic, pic_expand(pic, pic_list_ref(pic, expr, 2), env)), 0);
if (! pic_proc_p(pic, val)) {
pic_errorf(pic, "macro definition \"~s\" evaluates to non-procedure object", pic_identifier_name(pic, id));
pic_errorf(pic, "macro definition \"%s\" evaluates to non-procedure object", pic_str(pic, pic_id_name(pic, id)));
}
define_macro(pic, uid, pic_proc_ptr(val));

View File

@ -3,6 +3,7 @@
*/
#include "picrin.h"
#include "picrin/object.h"
#define kh_pic_str_hash(a) (pic_str_hash(pic, (a)))
#define kh_pic_str_cmp(a, b) (pic_str_cmp(pic, (a), (b)) == 0)
@ -50,14 +51,14 @@ pic_sym_name(pic_state PIC_UNUSED(*pic), pic_sym *sym)
return sym->str;
}
const char *
pic_identifier_name(pic_state *pic, pic_id *id)
struct pic_string *
pic_id_name(pic_state *pic, pic_id *id)
{
while (! pic_sym_p(pic, pic_obj_value(id))) {
id = id->u.id.id;
}
return pic_str(pic, pic_sym_name(pic, (pic_sym *)id));
return pic_sym_name(pic, (pic_sym *)id);
}
static pic_value

View File

@ -288,7 +288,7 @@ write_core(struct writer_control *p, pic_value obj)
xfprintf(pic, file, "#f");
break;
case PIC_TYPE_ID:
xfprintf(pic, file, "#<identifier %s>", pic_identifier_name(pic, pic_id_ptr(obj)));
xfprintf(pic, file, "#<identifier %s>", pic_str(pic, pic_id_name(pic, pic_id_ptr(obj))));
break;
case PIC_TYPE_EOF:
xfprintf(pic, file, "#.(eof-object)");