1:
2:
3:
4:
5:
6:
7: (use srfi-1)
8: (use util.list)
9: (use gauche.cgen)
10: (use gauche.parameter)
11: (use gauche.sequence)
12:
13: (define *unit*
14: (make <cgen-unit>
15: :name "builtin-syms"
16: :preamble "/* Generated from builtin-syms.scm $Revision: 1.13 $. DO NOT EDIT */"
17: :pre-decl "#define LIBGAUCHE_BODY"
18: :c-file "builtin-syms.c"
19: :h-file "gauche/builtin-syms.h"
20: :init-prologue "static void init_builtin_syms(void)\n{"
21: :init-epilogue "}"
22: ))
23:
24: (define (main args)
25: (parameterize ((cgen-current-unit *unit*))
26:
27: (cgen-extern "SCM_EXTERN ScmSymbol Scm_BuiltinSymbols[];")
28: (cgen-body "ScmSymbol Scm_BuiltinSymbols[] = {")
29: (cgen-body "#define ENTRY(s) \\"
30: " {{ SCM_CLASS_STATIC_TAG(Scm_SymbolClass) }, \\"
31: " SCM_STRING(s) }")
32: (cgen-init "#define INTERN(s, i) \\"
33: "Scm_HashTablePut(obtable, s, SCM_OBJ(&Scm_BuiltinSymbols[i]))")
34:
35: (for-each-with-index
36: (lambda (index entry)
37: (let* ((str (cgen-literal (symbol->string (car entry))))
38: (strref (cgen-cexpr str))
39: (macro-name (cadr entry)))
40: (cgen-extern (format "#define ~a SCM_OBJ(&Scm_BuiltinSymbols[~a])"
41: macro-name index))
42: (cgen-body (format "ENTRY(~a)," strref))
43: (cgen-init (format "INTERN(~a, ~a)
44: ))
45: (symbols))
46:
47: (cgen-body "#undef ENTRY")
48: (cgen-body "};")
49: (cgen-init "#undef INTERN")
50:
51: (cgen-emit-h (cgen-current-unit))
52: (cgen-emit-c (cgen-current-unit))
53: 0))
54:
55:
56:
57: (define (symbols)
58: '((quote SCM_SYM_QUOTE)
59: (quasiquote SCM_SYM_QUASIQUOTE)
60: (unquote SCM_SYM_UNQUOTE)
61: (unquote-splicing SCM_SYM_UNQUOTE_SPLICING)
62: (define SCM_SYM_DEFINE)
63: (define-constant SCM_SYM_DEFINE_CONSTANT)
64: (define-in-module SCM_SYM_DEFINE_IN_MODULE)
65: (lambda SCM_SYM_LAMBDA)
66: (if SCM_SYM_IF)
67: (set! SCM_SYM_SET)
68: (let SCM_SYM_LET)
69: (let* SCM_SYM_LET_STAR)
70: (letrec SCM_SYM_LETREC)
71: (begin SCM_SYM_BEGIN)
72: (when SCM_SYM_WHEN)
73: (unless SCM_SYM_UNLESS)
74: (and SCM_SYM_AND)
75: (or SCM_SYM_OR)
76: (cond SCM_SYM_COND)
77: (case SCM_SYM_CASE)
78: (else SCM_SYM_ELSE)
79: (=> SCM_SYM_YIELDS)
80: (do SCM_SYM_DO)
81: (delay SCM_SYM_DELAY)
82: (receive SCM_SYM_RECEIVE)
83: (define-module SCM_SYM_DEFINE_MODULE)
84: (with-module SCM_SYM_WITH_MODULE)
85: (select-module SCM_SYM_SELECT_MODULE)
86: (current-module SCM_SYM_CURRENT_MODULE)
87: (import SCM_SYM_IMPORT)
88: (export SCM_SYM_EXPORT)
89: (define-macro SCM_SYM_DEFINE_MACRO)
90: (define-syntax SCM_SYM_DEFINE_SYNTAX)
91: (let-syntax SCM_SYM_LET_SYNTAX)
92: (letrec-syntax SCM_SYM_LETREC_SYNTAX)
93: (%syntax-rules SCM_SYM_SYNTAX_RULES_INT)
94: (syntax-rules SCM_SYM_SYNTAX_RULES)
95: (... SCM_SYM_ELLIPSIS)
96: (%macroexpand SCM_SYM_MACRO_EXPAND)
97: (%macroexpand-1 SCM_SYM_MACRO_EXPAND_1)
98: (%asm SCM_SYM_ASM)
99:
100:
101: (builtin SCM_SYM_BUILTIN)
102: (abstract SCM_SYM_ABSTRACT)
103: (base SCM_SYM_BASE)
104:
105:
106: (*cond-features* SCM_SYM_COND_FEATURES)
107:
108:
109: (null SCM_SYM_NULL)
110: (scheme SCM_SYM_SCHEME)
111: (gauche SCM_SYM_GAUCHE)
112: (gauche.gf SCM_SYM_GAUCHE_GF)
113: (gauche.internal SCM_SYM_GAUCHE_INTERNAL)
114: (user SCM_SYM_USER)
115: (|#| SCM_SYM_SHARP)
116:
117:
118: (*load-path* SCM_SYM_LOAD_PATH)
119: (*load-next* SCM_SYM_LOAD_NEXT)
120: (*load-history* SCM_SYM_LOAD_HISTORY)
121: (*load-port* SCM_SYM_LOAD_PORT)
122: (*load-suffixes* SCM_SYM_LOAD_SUFFIXES)
123: (*dynamic-load-path* SCM_SYM_DYNAMIC_LOAD_PATH)
124:
125:
126: (source-info SCM_SYM_SOURCE_INFO)
127: (bind-info SCM_SYM_BIND_INFO)
128: (arg-info SCM_SYM_ARG_INFO)
129: (debug-print SCM_SYM_DEBUG_PRINT)
130: (define-reader-ctor SCM_SYM_DEFINE_READER_CTOR)
131: (string-interpolate SCM_SYM_STRING_INTERPOLATE)
132: (big-endian SCM_SYM_BIG_ENDIAN)
133: (little-endian SCM_SYM_LITTLE_ENDIAN)
134: (arm-little-endian SCM_SYM_ARM_LITTLE_ENDIAN)
135: (%internal-eval SCM_SYM_INTERNAL_EVAL)
136: (%internal-apply SCM_SYM_INTERNAL_APPLY)
137: (%eval-before SCM_SYM_EVAL_BEFORE)
138: (%eval-after SCM_SYM_EVAL_AFTER)
139: (%toplevel SCM_SYM_TOPLEVEL)
140: (syntax SCM_SYM_SYNTAX)
141: (macro SCM_SYM_MACRO)
142: (inline SCM_SYM_INLINE)
143:
144:
145: (seq SCM_SYM_SEQ)
146: (seq-case SCM_SYM_SEQ_CASE)
147: (seq-uncase SCM_SYM_SEQ_UNCASE)
148: (alt SCM_SYM_ALT)
149: (rep SCM_SYM_REP)
150: (rep-min SCM_SYM_REP_MIN)
151: (rep-while SCM_SYM_REP_WHILE)
152: (any SCM_SYM_ANY)
153: (bol SCM_SYM_BOL)
154: (eol SCM_SYM_EOL)
155: (wb SCM_SYM_WB)
156: (nwb SCM_SYM_NWB)
157: (comp SCM_SYM_COMP)
158: (* SCM_SYM_STAR)
159: (*? SCM_SYM_STARQ)
160: (*+ SCM_SYM_STARP)
161: (+ SCM_SYM_PLUS)
162: (+? SCM_SYM_PLUSQ)
163: (+? SCM_SYM_PLUSP)
164: (? SCM_SYM_QUESTION)
165: (?? SCM_SYM_QUESTIONQ)
166: (?+ SCM_SYM_QUESTIONP)
167: (backref SCM_SYM_BACKREF)
168: (once SCM_SYM_ONCE)
169: (reg SCM_SYM_REG)
170: (assert SCM_SYM_ASSERT)
171: (nassert SCM_SYM_NASSERT)
172: (lookbehind SCM_SYM_LOOKBEHIND)
173: (nlookbehind SCM_SYM_NLOOKBEHIND)
174: (cpat SCM_SYM_CPAT)
175: (open-paren SCM_SYM_OPEN_PAREN)
176: (close-paren SCM_SYM_CLOSE_PAREN)
177:
178:
179: (directory SCM_SYM_DIRECTORY)
180: (regular SCM_SYM_REGULAR)
181: (character SCM_SYM_CHARACTER)
182: (block SCM_SYM_BLOCK)
183: (fifo SCM_SYM_FIFO)
184: (symlink SCM_SYM_SYMLINK)
185: (socket SCM_SYM_SOCKET)
186: (time-utc SCM_SYM_TIME_UTC)
187: ))
188:
189: