@@ -11,44 +11,45 @@ namespace Strata
1111open Elab
1212open Parser (minPrec)
1313
14+ def SyntaxCat.mkOpt (c:SyntaxCat) : SyntaxCat := { ann := .none, name := q`Init.Option, args := #[c] }
15+ def SyntaxCat.mkSeq (c:SyntaxCat) : SyntaxCat := { ann := .none, name := q`Init.Seq, args := #[c] }
16+ def SyntaxCat.mkCommaSepBy (c:SyntaxCat) : SyntaxCat := { ann := .none, name := q`Init.CommaSepBy, args := #[c] }
17+
1418def initDialect : Dialect := BuiltinM.create! "Init" #[] do
15- let Ident : ArgDeclKind := .cat <| .atom q`Init.Ident
16- let Num : SyntaxCat := .atom q`Init.Num
17- let Str : SyntaxCat := .atom q`Init.Str
19+ let Ident : ArgDeclKind := .cat <| .atom .none q`Init.Ident
20+ let Num : SyntaxCat := .atom .none q`Init.Num
21+ let Str : SyntaxCat := .atom .none q`Init.Str
1822
1923 declareAtomicCat q`Init.Ident
2024 declareAtomicCat q`Init.Num
2125 declareAtomicCat q`Init.Decimal
2226 declareAtomicCat q`Init.Str
2327
2428 declareCat q`Init.Option #["a" ]
25- let mkOpt (c:SyntaxCat) : SyntaxCat := .app (.atom q`Init.Option) c
2629
2730 declareCat q`Init.Seq #["a" ]
28- let mkSeq (c:SyntaxCat) : SyntaxCat := .app (.atom q`Init.Seq) c
2931
3032 declareCat q`Init.CommaSepBy #["a" ]
31- let mkCommaSepBy (c:SyntaxCat) : SyntaxCat := .app (.atom q`Init.CommaSepBy) c
3233
3334 let QualifiedIdent := q`Init.QualifiedIdent
3435 declareCat QualifiedIdent
3536 declareOp {
3637 name := "qualifiedIdentType" ,
37- argDecls := #[] ,
38+ argDecls := .empty ,
3839 category := QualifiedIdent,
3940 syntaxDef := .ofList [.str "Type" ],
4041 }
4142 declareOp {
4243 name := "qualifiedIdentImplicit" ,
43- argDecls := #[
44+ argDecls := .ofArray #[
4445 { ident := "name" , kind := Ident }
4546 ],
4647 category := QualifiedIdent,
4748 syntaxDef := .ofList [.ident 0 0 ],
4849 }
4950 declareOp {
5051 name := "qualifiedIdentExplicit" ,
51- argDecls := #[
52+ argDecls := .ofArray #[
5253 { ident := "dialect" , kind := Ident },
5354 { ident := "name" , kind := Ident }
5455 ],
@@ -57,27 +58,27 @@ def initDialect : Dialect := BuiltinM.create! "Init" #[] do
5758 }
5859
5960 let TypeExprId := q`Init.TypeExpr
60- let TypeExpr : ArgDeclKind := .cat (.atom TypeExprId)
61+ let TypeExpr : ArgDeclKind := .cat (.atom .none TypeExprId)
6162 declareCat TypeExprId
6263 declareOp {
6364 name := "TypeIdent" ,
64- argDecls := #[
65- { ident := "value" , kind := .cat <| .atom QualifiedIdent }
65+ argDecls := .ofArray #[
66+ { ident := "value" , kind := .cat <| .atom .none QualifiedIdent }
6667 ]
6768 category := TypeExprId,
6869 syntaxDef := .ofList [.ident 0 maxPrec]
6970 }
7071 declareOp {
7172 name := "TypeParen" ,
72- argDecls := #[
73+ argDecls := .ofArray #[
7374 { ident := "value" , kind := TypeExpr }
7475 ]
7576 category := TypeExprId,
7677 syntaxDef := .ofList [.str "(" , .ident 0 0 , .str ")" ]
7778 }
7879 declareOp {
7980 name := "TypeArrow" ,
80- argDecls := #[
81+ argDecls := .ofArray #[
8182 { ident := "lhs" , kind := TypeExpr },
8283 { ident := "rhs" , kind := TypeExpr }
8384 ]
@@ -86,7 +87,7 @@ def initDialect : Dialect := BuiltinM.create! "Init" #[] do
8687 }
8788 declareOp {
8889 name := "TypeApp" ,
89- argDecls := #[
90+ argDecls := .ofArray #[
9091 { ident := "fn" , kind := TypeExpr },
9192 { ident := "val" , kind := TypeExpr }
9293 ]
@@ -98,7 +99,7 @@ def initDialect : Dialect := BuiltinM.create! "Init" #[] do
9899 declareCat «Type »
99100 declareOp {
100101 name := "mkType" ,
101- argDecls := #[
102+ argDecls := .ofArray #[
102103 { ident := "type" , kind := TypeExpr }
103104 ],
104105 category := «Type »,
@@ -109,25 +110,25 @@ def initDialect : Dialect := BuiltinM.create! "Init" #[] do
109110 declareCat Expr
110111 declareOp {
111112 name := "exprIdent" ,
112- argDecls := #[
113+ argDecls := .ofArray #[
113114 { ident := "value" , kind := Ident }
114115 ],
115116 category := Expr,
116117 syntaxDef := .ofList [.ident 0 0 ],
117118 }
118119 declareOp {
119120 name := "exprParen" ,
120- argDecls := #[
121- { ident := "value" , kind := .cat (.atom Expr) }
121+ argDecls := .ofArray #[
122+ { ident := "value" , kind := .cat (.atom .none Expr) }
122123 ],
123124 category := Expr,
124125 syntaxDef := .ofList [.str "(" , .ident 0 0 , .str ")" ]
125126 }
126127 declareOp {
127128 name := "exprApp" ,
128- argDecls := #[
129+ argDecls := .ofArray #[
129130 { ident := "function" , kind := Ident },
130- { ident := "args" , kind := .cat <| mkCommaSepBy (.atom Expr) }
131+ { ident := "args" , kind := .cat <| . mkCommaSepBy (.atom .none Expr) }
131132 ],
132133 category := Expr,
133134 syntaxDef := .ofList [.ident 0 0 , .str "(" , .ident 1 0 , .str ")" ]
@@ -137,61 +138,61 @@ def initDialect : Dialect := BuiltinM.create! "Init" #[] do
137138 declareCat MetadataArg
138139 declareOp {
139140 name := "MetadataArgParen" ,
140- argDecls := #[
141- { ident := "value" , kind := .cat (.atom MetadataArg) }
141+ argDecls := .ofArray #[
142+ { ident := "value" , kind := .cat (.atom .none MetadataArg) }
142143 ],
143144 category := MetadataArg,
144145 syntaxDef := .ofList [.str "(" , .ident 0 0 , .str ")" ]
145146 }
146147 declareOp {
147148 name := "MetadataArgNum" ,
148- argDecls := #[
149+ argDecls := .ofArray #[
149150 { ident := "value" , kind := .cat Num }
150151 ],
151152 category := MetadataArg,
152153 syntaxDef := .ofList [.ident 0 0 ]
153154 }
154155 declareOp {
155156 name := "MetadataArgIdent" ,
156- argDecls := #[
157+ argDecls := .ofArray #[
157158 { ident := "value" , kind := Ident }
158159 ],
159160 category := MetadataArg,
160161 syntaxDef := .ofList [.ident 0 0 ]
161162 }
162163 declareOp {
163164 name := "MetadataArgTrue" ,
164- argDecls := #[] ,
165+ argDecls := .empty ,
165166 category := MetadataArg,
166167 syntaxDef := .ofList [.str "true" ]
167168 }
168169 declareOp {
169170 name := "MetadataArgFalse" ,
170- argDecls := #[] ,
171+ argDecls := .empty ,
171172 category := MetadataArg,
172173 syntaxDef := .ofList [.str "false" ]
173174 }
174175 declareOp {
175176 name := "MetadataArgSome" ,
176- argDecls := #[
177- { ident := "value" , kind := .cat (.atom MetadataArg) }
177+ argDecls := .ofArray #[
178+ { ident := "value" , kind := .cat (.atom .none MetadataArg) }
178179 ],
179180 category := MetadataArg,
180181 syntaxDef := .ofList [.str "some" , .ident 0 appPrec]
181182 }
182183 declareOp {
183- name := "MetadataArgNone" ,
184- argDecls := #[],
185- category := MetadataArg,
184+ name := "MetadataArgNone"
185+ argDecls := .empty
186+ category := MetadataArg
186187 syntaxDef := .ofList [.str "none" ]
187188 }
188189
189190 let MetadataArgs := q`Init.MetadataArgs
190191 declareCat MetadataArgs
191192 declareOp {
192193 name := "MetadataArgsMk" ,
193- argDecls := #[
194- { ident := "args" , kind := .cat <| mkCommaSepBy <| .atom MetadataArg }
194+ argDecls := .ofArray #[
195+ { ident := "args" , kind := .cat <| . mkCommaSepBy <| .atom .none MetadataArg }
195196 ],
196197 category := MetadataArgs,
197198 syntaxDef := .ofList [.str "(" , .ident 0 0 , .str ")" ]
@@ -201,9 +202,9 @@ def initDialect : Dialect := BuiltinM.create! "Init" #[] do
201202 declareCat MetadataAttr
202203 declareOp {
203204 name := "MetadataAttrMk" ,
204- argDecls := #[
205- { ident := "name" , kind := .cat <| .atom QualifiedIdent },
206- { ident := "args" , kind := .cat <| mkOpt <| .atom MetadataArgs }
205+ argDecls := .ofArray #[
206+ { ident := "name" , kind := .cat <| .atom .none QualifiedIdent },
207+ { ident := "args" , kind := .cat <| . mkOpt <| .atom .none MetadataArgs }
207208 ],
208209 category := MetadataAttr,
209210 syntaxDef := .ofList [.ident 0 0 , .ident 1 0 ]
@@ -213,8 +214,8 @@ def initDialect : Dialect := BuiltinM.create! "Init" #[] do
213214 declareCat Metadata
214215 declareOp {
215216 name := "MetadataMk" ,
216- argDecls := #[
217- { ident := "attrs" , kind := .cat <| mkCommaSepBy <| .atom MetadataAttr }
217+ argDecls := .ofArray #[
218+ { ident := "attrs" , kind := .cat <| . mkCommaSepBy <| .atom .none MetadataAttr }
218219 ],
219220 category := Metadata,
220221 syntaxDef := .ofList [.str "@[" , .ident 0 0 , .str "]" ]
@@ -227,7 +228,7 @@ def initDialect : Dialect := BuiltinM.create! "Init" #[] do
227228 declareCat BindingType
228229 declareOp {
229230 name := "mkBindingType" ,
230- argDecls := #[
231+ argDecls := .ofArray #[
231232 { ident := "type" , kind := TypeExpr }
232233 ],
233234 category := BindingType,
@@ -239,7 +240,7 @@ def initDialect : Dialect := BuiltinM.create! "Init" #[] do
239240 declareCat TypeP
240241 declareOp {
241242 name := "mkTypeP" ,
242- argDecls := #[
243+ argDecls := .ofArray #[
243244 { ident := "type" , kind := TypeExpr }
244245 ],
245246 category := TypeP,
@@ -250,7 +251,7 @@ def initDialect : Dialect := BuiltinM.create! "Init" #[] do
250251 declareCat SyntaxAtomPrec
251252 declareOp {
252253 name := "syntaxAtomPrec" ,
253- argDecls := #[
254+ argDecls := .ofArray #[
254255 { ident := "value" , kind := .cat Num }
255256 ],
256257 category := SyntaxAtomPrec,
@@ -261,27 +262,27 @@ def initDialect : Dialect := BuiltinM.create! "Init" #[] do
261262 declareCat SyntaxAtom
262263 declareOp {
263264 name := "syntaxAtomIdent" ,
264- argDecls := #[
265+ argDecls := .ofArray #[
265266 { ident := "ident" , kind := Ident },
266- { ident := "prec" , kind := .cat <| mkOpt <| .atom SyntaxAtomPrec }
267+ { ident := "prec" , kind := .cat <| . mkOpt <| .atom .none SyntaxAtomPrec }
267268 ],
268269 category := SyntaxAtom,
269270 syntaxDef := .ofList [.ident 0 0 , .ident 1 0 ],
270271 metadata := .empty,
271272 }
272273 declareOp {
273274 name := "syntaxAtomString" ,
274- argDecls := #[
275+ argDecls := .ofArray #[
275276 { ident := "value" , kind := .cat Str }
276277 ],
277278 category := SyntaxAtom,
278279 syntaxDef := .ofList [.ident 0 0 ],
279280 }
280281 declareOp {
281282 name := "syntaxAtomIndent" ,
282- argDecls := #[
283+ argDecls := .ofArray #[
283284 { ident := "indent" , kind := .cat Num },
284- { ident := "args" , kind := .cat <| mkSeq <| .atom SyntaxAtom }
285+ { ident := "args" , kind := .cat <| . mkSeq <| .atom .none SyntaxAtom }
285286 ],
286287 category := SyntaxAtom,
287288 syntaxDef := .ofList [.str "indent" , .str "(" , .ident 0 0 , .str ", " , .ident 1 0 , .str ")" ],
@@ -291,8 +292,8 @@ def initDialect : Dialect := BuiltinM.create! "Init" #[] do
291292 declareCat SyntaxDef
292293 declareOp {
293294 name := "mkSyntaxDef" ,
294- argDecls := #[
295- { ident := "args" , kind := .cat <| mkSeq (.atom SyntaxAtom) }
295+ argDecls := .ofArray #[
296+ { ident := "args" , kind := .cat <| . mkSeq (.atom .none SyntaxAtom) }
296297 ],
297298 category := SyntaxDef,
298299 syntaxDef := .ofList [.ident 0 0 ],
0 commit comments