root/lang/c/misc/mlisp/sexp/inner.h @ 11387

Revision 11387, 1.8 kB (checked in by mokehehe, 7 years ago)

スタックベースに乗せ換え

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