root/lang/c/misc/mlisp/core/inner.h @ 12263

Revision 12263, 1.8 kB (checked in by mokehehe, 6 years ago)

change vector to module.

Line 
1//=============================================================================
2///     ����
3//=============================================================================
4
5#pragma once
6
7#include "sexp.h"
8#include "mlisp.h"
9
10#ifndef FALSE
11#define FALSE   (0)
12#define TRUE    (1)
13#endif
14
15
16/// �G���[
17enum {
18        // read ���̃G���[
19        ERR_READ_ILLEGAL_CHAR = 1,
20        ERR_READ_STRING_NOT_TERMINATE,
21        ERR_READ_NO_CLOSE_PAREN,
22        ERR_READ_DOT_FIRST,
23        ERR_READ_EMPTY_AFTER_DOT,
24        ERR_READ_ILLEGAL_DOT_LIST,
25
26        // �R���p�C�����̃G���[
27        ERR_TYPE_REQUIRED,
28        ERR_UNDEFINED_SYMBOL,
29        ERR_UNEXPECTED,
30};
31
32
33/// S���̒lj���x�[�X�N���X�i�Z���Ȃǁj
34struct SExpExt {
35        SType type;                             ///< �^
36};
37
38
39/// �Z��
40struct Cell : public SExpExt {
41        SExp car;
42        SExp cdr;
43};
44
45
46/// �V���{��
47struct Symbol : public SExpExt {
48        char str[1];                            ///< ������������L�т�};
49
50
51/// ������truct String : public SExpExt {
52        char* str;
53};
54
55
56/// �v���V�W���i�����_�A�}�N���j
57struct Procedure : public SExpExt {
58        enum {
59                ProcType        = 1 << 0,
60                Lambda          = 0 << 0,
61                Macro           = 1 << 0,
62
63                FuncType        = 1 << 1,
64                Builtin         = 0 << 1,
65                Cell            = 1 << 1,
66        };
67
68        int flag;
69        union {
70                SCFunc cfunc;
71                SCFuncM mfunc;
72                struct {
73                        SExp s;                 ///< ��
74                        SExp e;                 ///< ���L�V�J���‹�
75                } cell;
76        } u;
77        int minnarg, maxnarg;   ///< �ŏ��A�ő�����
78
79        int get_func_type() const               { return flag & FuncType; }
80        int get_proc_type() const               { return flag & ProcType; }
81};
82
83
84/// �f�o�b�O���Â炢�̂ŁA�S�̂�񂾌^���
85union SExpExtU {
86        SExpExt base;
87        Cell cell;
88        Symbol symbol;
89        String string;
90        Procedure procedure;
91};
92
93
94__inline SExp gen_sexpext(struct SExpExt* p) {
95        SExp s;
96        s.ptr = (SExpExtU*)p;
97        return s;
98}
99
100
101
102
103void print_rec(SExp s);
104void print_vector(SExp v);
105
106
107SExp macroexpand_1(SExp x);
Note: See TracBrowser for help on using the browser.