1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
//! The stamp home's declarations: the pattern a caller authors, the sites that adopt it, the artifact both are rendered into, and how stamping refuses.
//!
//! Declarations only.
//! Every road that reaches a private field lives in `type_guard.rs`, this file's own child, which is what makes the identifier alphabet and the two closed namespaces structural rather than remembered.
use crate;
use crate;
use crateDigestContract;
use crateGeneratedTree;
/// Segments one spelled path may carry.
///
/// A path reaching deeper than eight segments has stopped naming an item and started describing a tree, and the repair is a re-export at the address rather than a longer spelling at this end.
pub const PATH_SEGMENT_LIMIT: usize = 8;
/// Parts one pattern may declare, and therefore the most arguments one site can carry.
pub const PART_LIMIT: usize = 64;
/// Sites one published stamp may cover.
///
/// One publication unit is one artifact landed at one address, and past sixty-four the unit has stopped being one migration and become two.
pub const SITE_LIMIT: usize = 64;
crateroster!
crateroster!
crateroster!
crateroster!
/// How one seat is matched, and how an expansion writes it back.
///
/// Three shapes, because three is what a matcher can express about one metavariable: one of something, any number of them, or any number of attributes written over the item.
/// One metavariable seat: the name material travels under, and the shape it travels in.
///
/// The name is the caller's and is never composed from another: a matcher cannot build an identifier out of an identifier, and a derived name would be this home deciding a spelling law nobody gave it.
/// One part of a pattern's declared shape.
///
/// A pattern is a sequence of these, and both halves of the grammar are walks over it: a matcher reads a seat as a metavariable and a site writes its own material there, while literal parts are the same tokens on both sides.
/// One authored pattern: what the definition is documented with, the shape it is invoked in, and the body that shape expands into.
///
/// # Authority
///
/// **The body is the caller's token material and nothing here reads it.**
/// It names seats by the names the shape declares them under, and the two reaches by the names this home publishes.
/// A body naming anything else is a defect the consumer's own compiler reports at the site that adopted it, because a producer that checked it would be legislating a meaning it does not own.
/// The name one published stamp is exported under.
///
/// The spelling is the caller's and is never mangled: a published artifact is visible source a person commits and other files invoke by name, so the uniqueness an exported macro namespace needs is the caller's to keep.
/// The path one site reaches its published stamp by.
///
/// Structurally non-empty, and read the way the language reads a path: qualifiers only at the root — `crate`, `self`, or a leading run of `super` — and an item name at every later step, so a root the consumer's compiler would read as something else is not a value anybody can hold.
/// Usually one segment: the crate the stamp is published in names its own root, and a site elsewhere names that crate.
/// One site that adopts a stamp: what the manifest calls it, how it reaches the definition, the reach it writes, and one argument per declared seat.
///
/// The arguments are as many as the pattern declares seats, settled where the site meets the pattern rather than counted a second time here.
/// The complete declared payload one published stamp is rendered from: the name it is exported under, the pattern it stamps, and every site that adopts it.
///
/// # Bounds
///
/// Structurally non-empty — a definition nobody invokes is an artifact with no reader — and the site namespace is closed at declaration, because two rows naming one site is a manifest that says one thing twice.
/// Every site's arguments are settled against the pattern here rather than left to the consumer's compiler, which would report a mismatch inside an expansion nobody wrote.
/// What a plan decided about the artifact one stamp publishes, read off the plan's own surface.
///
/// Holding one says nothing about whether anything was rendered, staged, or landed — but it does say the reading happened: the only mint is [`planned`](crate::stamp::planned), which is where the seat's existence and its publication destination are checked, so a value of this type cannot state a decision no plan made.
/// This side's record of one publication act.
///
/// # Authority
///
/// **It is a statement and never a receipt.**
/// It answers which unit the artifact materializes, what its staged bytes must satisfy, why the road is lawful at all, and what the unit contains — so a publication step compares its own independently built answers against these rather than a value with itself.
///
/// The manifest is read off the stamp the artifact was rendered from, never kept as a second list that agrees with it until it does not.
/// One covered site's landing: the site, and the invocation written there.
///
/// The two travel together because they are one fact about one site.
/// An invocation without the site it stands for cannot be placed, and a site without its invocation is a file the published stamp never reaches.
/// The published stamp: the definition a publication road lands as visible source, and every landing it is landed for.
///
/// # Authority
///
/// **What is emitted is declarative and calls nothing.**
/// The definition's body is the caller's self-contained token material and this compiler is named nowhere in it, which is why a stamp can stand in a crate that carries no edge back here.
///
/// # Bounds
///
/// Nothing here writes to disk: these are rendered trees and the record that pairs with them.
/// The landings are as many as the record's stamp declares sites, because the one road that builds them walks that stamp, and the exported name is read out of the record rather than kept beside it.
/// How stamping says no.
///
/// One cause per refusal: every road here settles one question, and the road that settles several settles them in a declared order, so exactly one row is true of any refused value.