Skip to content

Commit

Permalink
add picrin/extra.h
Browse files Browse the repository at this point in the history
  • Loading branch information
nyuichi committed Feb 20, 2016
1 parent 317369a commit 53b760c
Show file tree
Hide file tree
Showing 34 changed files with 163 additions and 117 deletions.
1 change: 1 addition & 0 deletions contrib/10.math/math.c
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
#include "picrin.h"
#include "picrin/extra.h"

#include <math.h>

Expand Down
1 change: 1 addition & 0 deletions contrib/20.r7rs/src/file.c
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
*/

#include "picrin.h"
#include "picrin/extra.h"

#include <stdio.h>

Expand Down
1 change: 1 addition & 0 deletions contrib/20.r7rs/src/load.c
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
*/

#include "picrin.h"
#include "picrin/extra.h"

#include <stdio.h>

Expand Down
1 change: 1 addition & 0 deletions contrib/20.r7rs/src/mutable-string.c
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
#include "picrin.h"
#include "picrin/extra.h"
#include "picrin/object.h"

void
Expand Down
1 change: 1 addition & 0 deletions contrib/20.r7rs/src/system.c
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
#include <stdlib.h>

#include "picrin.h"
#include "picrin/extra.h"

extern int picrin_argc;
extern char **picrin_argv;
Expand Down
1 change: 1 addition & 0 deletions contrib/20.r7rs/src/time.c
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
#include <time.h>

#include "picrin.h"
#include "picrin/extra.h"

#define UTC_TAI_DIFF 35

Expand Down
1 change: 1 addition & 0 deletions contrib/30.random/src/random.c
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
#include "picrin.h"
#include "picrin/extra.h"

double genrand_real3(void);

Expand Down
1 change: 1 addition & 0 deletions contrib/30.readline/src/readline.c
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
forget to use the C++ extern "C" to get it to compile.
*/
#include "picrin.h"
#include "picrin/extra.h"

#include <editline/readline.h>

Expand Down
1 change: 1 addition & 0 deletions contrib/30.regexp/src/regexp.c
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
#include "picrin.h"
#include "picrin/extra.h"

#include <regex.h>

Expand Down
1 change: 1 addition & 0 deletions contrib/40.srfi/src/106.c
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
#include "picrin.h"
#include "picrin/extra.h"

#include <errno.h>
#include <netdb.h>
Expand Down
3 changes: 1 addition & 2 deletions contrib/60.repl/repl.c
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
#include "picrin.h"
#include "picrin/extra.h"

#include <unistd.h>


static pic_value
pic_repl_tty_p(pic_state *pic)
{

pic_get_args(pic, "");

return pic_bool_value(pic, (isatty(STDIN_FILENO)));
Expand Down
1 change: 1 addition & 0 deletions etc/mkloader.pl
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
*/
#include "picrin.h"
#include "picrin/extra.h"
EOL

Expand Down
1 change: 1 addition & 0 deletions extlib/benz/blob.c
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
*/

#include "picrin.h"
#include "picrin/extra.h"
#include "picrin/object.h"

pic_value
Expand Down
1 change: 1 addition & 0 deletions extlib/benz/debug.c
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
*/

#include "picrin.h"
#include "picrin/extra.h"
#include "picrin/object.h"
#include "picrin/state.h"

Expand Down
1 change: 1 addition & 0 deletions extlib/benz/dict.c
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
*/

#include "picrin.h"
#include "picrin/extra.h"
#include "picrin/object.h"

KHASH_DEFINE(dict, pic_sym *, pic_value, kh_ptr_hash_func, kh_ptr_hash_equal)
Expand Down
1 change: 1 addition & 0 deletions extlib/benz/error.c
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
*/

#include "picrin.h"
#include "picrin/extra.h"
#include "picrin/object.h"
#include "picrin/state.h"

Expand Down
1 change: 1 addition & 0 deletions extlib/benz/eval.c
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
*/

#include "picrin.h"
#include "picrin/extra.h"
#include "picrin/object.h"
#include "picrin/opcode.h"
#include "picrin/state.h"
Expand Down
115 changes: 0 additions & 115 deletions extlib/benz/include/picrin.h
Original file line number Diff line number Diff line change
Expand Up @@ -291,121 +291,6 @@ int xfprintf(pic_state *, xFILE *fp, const char *fmt, ...);
int xvfprintf(pic_state *, xFILE *fp, const char *fmt, va_list);



/* extra stuff */


void *pic_default_allocf(void *, void *, size_t);

#define pic_assert_type(pic, v, type) \
if (! pic_##type##_p(pic, v)) { \
pic_errorf(pic, "expected " #type ", but got ~s", v); \
}

xFILE *xfile_xstdin(pic_state *);
xFILE *xfile_xstdout(pic_state *);
xFILE *xfile_xstderr(pic_state *);

#define xstdin (xfile_xstdin(pic))
#define xstdout (xfile_xstdout(pic))
#define xstderr (xfile_xstderr(pic))

#if PIC_ENABLE_STDIO
xFILE *xfopen_file(pic_state *, FILE *, const char *mode);
#endif
xFILE *xfopen_buf(pic_state *, const char *buf, int len, const char *mode);
int xfget_buf(pic_state *, xFILE *file, const char **buf, int *len);
xFILE *xfopen_null(pic_state *, const char *mode);

#define pic_void(exec) \
pic_void_(PIC_GENSYM(ai), exec)
#define pic_void_(ai,exec) do { \
size_t ai = pic_enter(pic); \
exec; \
pic_leave(pic, ai); \
} while (0)

pic_value pic_read(pic_state *, pic_value port);
pic_value pic_read_cstr(pic_state *, const char *);

pic_value pic_expand(pic_state *, pic_value program, pic_value env);

pic_value pic_eval(pic_state *, pic_value program, const char *lib);

void pic_load(pic_state *, pic_value port);
void pic_load_cstr(pic_state *, const char *);

#define pic_deflibrary(pic, lib) do { \
if (! pic_find_library(pic, lib)) { \
pic_make_library(pic, lib); \
} \
pic_in_library(pic, lib); \
} while (0)

struct pic_cont *pic_alloca_cont(pic_state *);
pic_value pic_make_cont(pic_state *, struct pic_cont *);
void pic_push_native_handler(pic_state *, struct pic_cont *);
void pic_push_handler(pic_state *, pic_value);
pic_value pic_pop_handler(pic_state *);
void pic_save_point(pic_state *, struct pic_cont *, PIC_JMPBUF *);
void pic_exit_point(pic_state *);

/* do not return from try block! */

pic_value pic_err(pic_state *);

#define pic_try \
pic_try_(PIC_GENSYM(cont), PIC_GENSYM(handler))
#define pic_catch \
pic_catch_(PIC_GENSYM(label))
#define pic_try_(cont, handler) \
do { \
PIC_JMPBUF jmp; \
struct pic_cont *cont = pic_alloca_cont(pic); \
if (PIC_SETJMP(pic, jmp) == 0) { \
pic_save_point(pic, cont, &jmp); \
pic_push_native_handler(pic, cont);
#define pic_catch_(label) \
pic_pop_handler(pic); \
pic_exit_point(pic); \
} else { \
goto label; \
} \
} while (0); \
if (0) \
label:

PIC_NORETURN void pic_error(pic_state *, const char *type, const char *msg, pic_value irrs);

#define pic_for_each(var, list, it) \
for (it = (list); ! pic_nil_p(pic, it); it = pic_cdr(pic, it)) \
if ((var = pic_car(pic, it)), true)

#define pic_push(pic, item, place) (place = pic_cons(pic, item, place))
#define pic_pop(pic, place) (place = pic_cdr(pic, place))

void pic_warnf(pic_state *, const char *, ...);
pic_value pic_get_backtrace(pic_state *);
void pic_print_backtrace(pic_state *, xFILE *);

#define pic_stdin(pic) pic_funcall(pic, "picrin.base", "current-input-port", 0)
#define pic_stdout(pic) pic_funcall(pic, "picrin.base", "current-output-port", 0)
#define pic_stderr(pic) pic_funcall(pic, "picrin.base", "current-error-port", 0)

pic_value pic_write(pic_state *, pic_value); /* returns given obj */
pic_value pic_fwrite(pic_state *, pic_value, xFILE *);
void pic_printf(pic_state *, const char *, ...);
void pic_fprintf(pic_state *, pic_value port, const char *, ...);
pic_value pic_display(pic_state *, pic_value);
pic_value pic_fdisplay(pic_state *, pic_value, xFILE *);

pic_value pic_library_environment(pic_state *, const char *);

#if DEBUG
# define pic_debug(pic,obj) pic_fwrite(pic,obj,xstderr)
# define pic_fdebug(pic,obj,file) pic_fwrite(pic,obj,file)
#endif

#if defined(__cplusplus)
}
#endif
Expand Down
131 changes: 131 additions & 0 deletions extlib/benz/include/picrin/extra.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
/**
* See Copyright Notice in picrin.h
*/

#ifndef PICRIN_EXTRA_H
#define PICRIN_EXTRA_H

#if defined(__cplusplus)
extern "C" {
#endif


#if PIC_ENABLE_LIBC
void *pic_default_allocf(void *, void *, size_t);
#endif


#define pic_assert_type(pic, v, type) \
if (! pic_##type##_p(pic, v)) { \
pic_errorf(pic, "expected " #type ", but got ~s", v); \
}

xFILE *xfile_xstdin(pic_state *);
xFILE *xfile_xstdout(pic_state *);
xFILE *xfile_xstderr(pic_state *);

#define xstdin (xfile_xstdin(pic))
#define xstdout (xfile_xstdout(pic))
#define xstderr (xfile_xstderr(pic))

#if PIC_ENABLE_STDIO
xFILE *xfopen_file(pic_state *, FILE *, const char *mode);
#endif
xFILE *xfopen_buf(pic_state *, const char *buf, int len, const char *mode);
int xfget_buf(pic_state *, xFILE *file, const char **buf, int *len);
xFILE *xfopen_null(pic_state *, const char *mode);

#define pic_void(exec) \
pic_void_(PIC_GENSYM(ai), exec)
#define pic_void_(ai,exec) do { \
size_t ai = pic_enter(pic); \
exec; \
pic_leave(pic, ai); \
} while (0)

pic_value pic_read(pic_state *, pic_value port);
pic_value pic_read_cstr(pic_state *, const char *);

pic_value pic_expand(pic_state *, pic_value program, pic_value env);

pic_value pic_eval(pic_state *, pic_value program, const char *lib);

void pic_load(pic_state *, pic_value port);
void pic_load_cstr(pic_state *, const char *);

#define pic_deflibrary(pic, lib) do { \
if (! pic_find_library(pic, lib)) { \
pic_make_library(pic, lib); \
} \
pic_in_library(pic, lib); \
} while (0)

struct pic_cont *pic_alloca_cont(pic_state *);
pic_value pic_make_cont(pic_state *, struct pic_cont *);
void pic_push_native_handler(pic_state *, struct pic_cont *);
void pic_push_handler(pic_state *, pic_value);
pic_value pic_pop_handler(pic_state *);
void pic_save_point(pic_state *, struct pic_cont *, PIC_JMPBUF *);
void pic_exit_point(pic_state *);

/* do not return from try block! */

pic_value pic_err(pic_state *);

#define pic_try \
pic_try_(PIC_GENSYM(cont), PIC_GENSYM(handler))
#define pic_catch \
pic_catch_(PIC_GENSYM(label))
#define pic_try_(cont, handler) \
do { \
PIC_JMPBUF jmp; \
struct pic_cont *cont = pic_alloca_cont(pic); \
if (PIC_SETJMP(pic, jmp) == 0) { \
pic_save_point(pic, cont, &jmp); \
pic_push_native_handler(pic, cont);
#define pic_catch_(label) \
pic_pop_handler(pic); \
pic_exit_point(pic); \
} else { \
goto label; \
} \
} while (0); \
if (0) \
label:

PIC_NORETURN void pic_error(pic_state *, const char *type, const char *msg, pic_value irrs);

#define pic_for_each(var, list, it) \
for (it = (list); ! pic_nil_p(pic, it); it = pic_cdr(pic, it)) \
if ((var = pic_car(pic, it)), true)

#define pic_push(pic, item, place) (place = pic_cons(pic, item, place))
#define pic_pop(pic, place) (place = pic_cdr(pic, place))

void pic_warnf(pic_state *, const char *, ...);
pic_value pic_get_backtrace(pic_state *);
void pic_print_backtrace(pic_state *, xFILE *);

#define pic_stdin(pic) pic_funcall(pic, "picrin.base", "current-input-port", 0)
#define pic_stdout(pic) pic_funcall(pic, "picrin.base", "current-output-port", 0)
#define pic_stderr(pic) pic_funcall(pic, "picrin.base", "current-error-port", 0)

pic_value pic_write(pic_state *, pic_value); /* returns given obj */
pic_value pic_fwrite(pic_state *, pic_value, xFILE *);
void pic_printf(pic_state *, const char *, ...);
void pic_fprintf(pic_state *, pic_value port, const char *, ...);
pic_value pic_display(pic_state *, pic_value);
pic_value pic_fdisplay(pic_state *, pic_value, xFILE *);

pic_value pic_library_environment(pic_state *, const char *);

#if DEBUG
# define pic_debug(pic,obj) pic_fwrite(pic,obj,xstderr)
# define pic_fdebug(pic,obj,file) pic_fwrite(pic,obj,file)
#endif

#if defined(__cplusplus)
}
#endif

#endif
1 change: 1 addition & 0 deletions extlib/benz/lib.c
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
*/

#include "picrin.h"
#include "picrin/extra.h"
#include "picrin/object.h"
#include "picrin/state.h"

Expand Down
Loading

0 comments on commit 53b760c

Please sign in to comment.