move sturct definitions for basic types to type-specific headers respectively

This commit is contained in:
Yuichi Nishiwaki 2014-02-22 15:20:53 +09:00
parent a8aa6b2c5e
commit 56f5f4a1f5
16 changed files with 99 additions and 37 deletions

View File

@ -164,19 +164,6 @@ bool pic_interned_p(pic_state *, pic_sym);
char *pic_strdup(pic_state *, const char *);
char *pic_strndup(pic_state *, const char *, size_t);
pic_str *pic_str_new(pic_state *, const char * /* nullable */, size_t);
pic_str *pic_str_new_cstr(pic_state *, const char *);
char pic_str_ref(pic_state *, pic_str *, size_t);
pic_str *pic_strcat(pic_state *, pic_str *, pic_str *);
pic_str *pic_substr(pic_state *, pic_str *, size_t, size_t);
pic_value pic_format(pic_state *, const char *, ...);
pic_value pic_vformat(pic_state *, const char *, va_list);
pic_value pic_vfformat(pic_state *, XFILE *, const char *, va_list);
struct pic_vector *pic_vec_new(pic_state *, size_t);
struct pic_vector *pic_vec_new_from_list(pic_state *, pic_value);
void pic_vec_extend_ip(pic_state *, struct pic_vector *, size_t);
int pic_parse_file(pic_state *, FILE *, pic_value *);
int pic_parse_cstr(pic_state *, const char *, pic_value *);

View File

@ -9,6 +9,15 @@
extern "C" {
#endif
struct pic_pair {
PIC_OBJECT_HEADER
pic_value car;
pic_value cdr;
};
#define pic_pair_p(v) (pic_type(v) == PIC_TT_PAIR)
#define pic_pair_ptr(o) ((struct pic_pair *)pic_ptr(o))
pic_value pic_cons(pic_state *, pic_value, pic_value);
pic_value pic_car(pic_state *, pic_value);
pic_value pic_cdr(pic_state *, pic_value);

36
include/picrin/string.h Normal file
View File

@ -0,0 +1,36 @@
/**
* See Copyright Notice in picrin.h
*/
#ifndef PICRIN_STRING_H__
#define PICRIN_STRING_H__
#if defined(__cplusplus)
extern "C" {
#endif
struct pic_string {
PIC_OBJECT_HEADER
char *str;
size_t len;
};
#define pic_str_p(v) (pic_type(v) == PIC_TT_STRING)
#define pic_str_ptr(o) ((struct pic_string *)pic_ptr(o))
pic_str *pic_str_new(pic_state *, const char * /* nullable */, size_t);
pic_str *pic_str_new_cstr(pic_state *, const char *);
char pic_str_ref(pic_state *, pic_str *, size_t);
pic_str *pic_strcat(pic_state *, pic_str *, pic_str *);
pic_str *pic_substr(pic_state *, pic_str *, size_t, size_t);
pic_value pic_format(pic_state *, const char *, ...);
pic_value pic_vformat(pic_state *, const char *, va_list);
pic_value pic_vfformat(pic_state *, XFILE *, const char *, va_list);
#if defined(__cplusplus)
}
#endif
#endif

View File

@ -113,37 +113,25 @@ struct pic_object {
PIC_OBJECT_HEADER
};
typedef struct pic_pair {
PIC_OBJECT_HEADER
pic_value car;
pic_value cdr;
} pic_pair;
typedef struct pic_string {
PIC_OBJECT_HEADER
char *str;
size_t len;
} pic_str;
typedef struct pic_vector {
PIC_OBJECT_HEADER
pic_value *data;
size_t len;
} pic_vec;
struct pic_pair;
struct pic_string;
struct pic_vector;
struct pic_proc;
struct pic_port;
struct pic_blob;
/* set aliases to basic types */
typedef struct pic_pair pic_pair;
typedef struct pic_string pic_str;
typedef struct pic_vector pic_vec;
#define pic_float(v) ((v).u.f)
#define pic_int(v) ((v).u.i)
#define pic_sym(v) ((v).u.sym)
#define pic_char(v) ((v).u.c)
#define pic_obj_ptr(o) ((struct pic_object *)pic_ptr(o))
#define pic_pair_ptr(o) ((struct pic_pair *)pic_ptr(o))
#define pic_str_ptr(o) ((struct pic_string *)pic_ptr(o))
#define pic_vec_ptr(o) ((struct pic_vector *)pic_ptr(o))
#define pic_nil_p(v) (pic_vtype(v) == PIC_VTYPE_NIL)
#define pic_true_p(v) (pic_vtype(v) == PIC_VTYPE_TRUE)
@ -153,9 +141,6 @@ struct pic_blob;
#define pic_int_p(v) (pic_vtype(v) == PIC_VTYPE_INT)
#define pic_sym_p(v) (pic_vtype(v) == PIC_VTYPE_SYMBOL)
#define pic_char_p(v) (pic_vtype(v) == PIC_VTYPE_CHAR)
#define pic_pair_p(v) (pic_type(v) == PIC_TT_PAIR)
#define pic_str_p(v) (pic_type(v) == PIC_TT_STRING)
#define pic_vec_p(v) (pic_type(v) == PIC_TT_VECTOR)
#define pic_test(v) (! pic_false_p(v))

29
include/picrin/vector.h Normal file
View File

@ -0,0 +1,29 @@
/**
* See Copyright Notice in picrin.h
*/
#ifndef PICRIN_VECTOR_H__
#define PICRIN_VECTOR_H__
#if defined(__cplusplus)
extern "C" {
#endif
struct pic_vector {
PIC_OBJECT_HEADER
pic_value *data;
size_t len;
};
#define pic_vec_p(v) (pic_type(v) == PIC_TT_VECTOR)
#define pic_vec_ptr(o) ((struct pic_vector *)pic_ptr(o))
struct pic_vector *pic_vec_new(pic_state *, size_t);
struct pic_vector *pic_vec_new_from_list(pic_state *, pic_value);
void pic_vec_extend_ip(pic_state *, struct pic_vector *, size_t);
#if defined(__cplusplus)
}
#endif
#endif

View File

@ -8,6 +8,7 @@
#include "picrin.h"
#include "picrin/pair.h"
#include "picrin/string.h"
#include "picrin/error.h"
const char *
@ -30,7 +31,7 @@ raise(pic_state *pic, struct pic_error *e)
}
NORETURN static void
error(pic_state *pic, struct pic_string *msg, pic_value irrs)
error(pic_state *pic, pic_str *msg, pic_value irrs)
{
struct pic_error *e;

View File

@ -6,6 +6,9 @@
#include "picrin.h"
#include "picrin/gc.h"
#include "picrin/pair.h"
#include "picrin/string.h"
#include "picrin/vector.h"
#include "picrin/irep.h"
#include "picrin/proc.h"
#include "picrin/port.h"

View File

@ -4,6 +4,7 @@
#include "picrin.h"
#include "picrin/pair.h"
#include "picrin/string.h"
#include "picrin/proc.h"
#include "picrin/macro.h"
#include "picrin/lib.h"

View File

@ -8,6 +8,8 @@
#include "picrin.h"
#include "picrin/pair.h"
#include "picrin/string.h"
#include "picrin/vector.h"
#include "picrin/blob.h"
#include "picrin/parse.h"

View File

@ -8,6 +8,7 @@
#include "picrin.h"
#include "picrin/proc.h"
#include "picrin/port.h"
#include "picrin/string.h"
#include "picrin/blob.h"
pic_value

View File

@ -5,6 +5,7 @@
#include <string.h>
#include "picrin.h"
#include "picrin/string.h"
#include "picrin/pair.h"
#include "picrin/port.h"

View File

@ -7,6 +7,7 @@
#include <math.h>
#include "picrin.h"
#include "picrin/string.h"
pic_sym
pic_intern_cstr(pic_state *pic, const char *str)

View File

@ -5,6 +5,7 @@
#include <stdlib.h>
#include "picrin.h"
#include "picrin/string.h"
#include "picrin/pair.h"
static pic_value

View File

@ -3,6 +3,7 @@
*/
#include "picrin.h"
#include "picrin/vector.h"
#include "picrin/pair.h"
struct pic_vector *

View File

@ -9,6 +9,8 @@
#include "picrin.h"
#include "picrin/pair.h"
#include "picrin/string.h"
#include "picrin/vector.h"
#include "picrin/proc.h"
#include "picrin/port.h"
#include "picrin/irep.h"

View File

@ -5,6 +5,8 @@
#include "picrin.h"
#include "picrin/port.h"
#include "picrin/pair.h"
#include "picrin/string.h"
#include "picrin/vector.h"
#include "picrin/blob.h"
#include "picrin/macro.h"