@@ -286,28 +286,6 @@ type LanguageSpec struct {
286286 Ops []OpRecord
287287}
288288
289- func argEnum (name string ) []string {
290- if name == "txn" || name == "gtxn" || name == "gtxns" {
291- return logic .TxnFieldNames
292- }
293- if name == "global" {
294- return logic .GlobalFieldNames
295- }
296- if name == "txna" || name == "gtxna" || name == "gtxnsa" || name == "txnas" || name == "gtxnas" || name == "gtxnsas" {
297- return logic .TxnaFieldNames ()
298- }
299- if name == "asset_holding_get" {
300- return logic .AssetHoldingFieldNames
301- }
302- if name == "asset_params_get" {
303- return logic .AssetParamsFieldNames
304- }
305- if name == "app_params_get" {
306- return logic .AppParamsFieldNames
307- }
308- return nil
309- }
310-
311289func typeString (types []logic.StackType ) string {
312290 out := make ([]byte , len (types ))
313291 for i , t := range types {
@@ -330,27 +308,32 @@ func typeString(types []logic.StackType) string {
330308 return string (out )
331309}
332310
333- func argEnumTypes (name string ) string {
334- if name == "txn" || name == "gtxn" || name == "gtxns" || name == "itxn" || name == "gitxn" || name == "itxn_field" {
335- return typeString (logic .TxnFieldTypes )
336- }
337- if name == "global" {
338- return typeString (logic .GlobalFieldTypes )
339- }
340- if name == "txna" || name == "gtxna" || name == "gtxnsa" || name == "txnas" || name == "gtxnas" || name == "gtxnsas" || name == "itxna" || name == "gitxna" {
341- return typeString (logic .TxnaFieldTypes ())
342- }
343- if name == "asset_holding_get" {
344- return typeString (logic .AssetHoldingFieldTypes )
345- }
346- if name == "asset_params_get" {
347- return typeString (logic .AssetParamsFieldTypes )
348- }
349- if name == "app_params_get" {
350- return typeString (logic .AppParamsFieldTypes )
311+ func fieldsAndTypes (names []string , specs speccer ) ([]string , string ) {
312+ types := make ([]logic.StackType , len (names ))
313+ for i , name := range names {
314+ types [i ] = specs .SpecByName (name ).Type ()
351315 }
316+ return names , typeString (types )
317+ }
352318
353- return ""
319+ func argEnums (name string ) (names []string , types string ) {
320+ switch name {
321+ case "txn" , "gtxn" , "gtxns" , "itxn" , "gitxn" , "itxn_field" :
322+ return fieldsAndTypes (logic .TxnFieldNames , logic .TxnFieldSpecByName )
323+ case "global" :
324+ return
325+ case "txna" , "gtxna" , "gtxnsa" , "txnas" , "gtxnas" , "gtxnsas" , "itxna" , "gitxna" :
326+ // Map is the whole txn field spec map. That's fine, we only lookup the given names.
327+ return fieldsAndTypes (logic .TxnaFieldNames (), logic .TxnFieldSpecByName )
328+ case "asset_holding_get" :
329+ return fieldsAndTypes (logic .AssetHoldingFieldNames , logic .AssetHoldingFieldSpecByName )
330+ case "asset_params_get" :
331+ return fieldsAndTypes (logic .AssetParamsFieldNames , logic .AssetParamsFieldSpecByName )
332+ case "app_params_get" :
333+ return fieldsAndTypes (logic .AppParamsFieldNames , logic .AppParamsFieldSpecByName )
334+ default :
335+ return nil , ""
336+ }
354337}
355338
356339func buildLanguageSpec (opGroups map [string ][]string ) * LanguageSpec {
@@ -363,8 +346,7 @@ func buildLanguageSpec(opGroups map[string][]string) *LanguageSpec {
363346 records [i ].Returns = typeString (spec .Returns )
364347 records [i ].Cost = spec .Details .Cost
365348 records [i ].Size = spec .Details .Size
366- records [i ].ArgEnum = argEnum (spec .Name )
367- records [i ].ArgEnumTypes = argEnumTypes (spec .Name )
349+ records [i ].ArgEnum , records [i ].ArgEnumTypes = argEnums (spec .Name )
368350 records [i ].Doc = logic .OpDoc (spec .Name )
369351 records [i ].DocExtra = logic .OpDocExtra (spec .Name )
370352 records [i ].ImmediateNote = logic .OpImmediateNote (spec .Name )
@@ -416,6 +398,10 @@ func main() {
416398 fieldSpecsMarkdown (appparams , logic .AppParamsFieldNames , logic .AppParamsFieldSpecByName )
417399 appparams .Close ()
418400
401+ acctparams , _ := os .Create ("acct_params_fields.md" )
402+ fieldSpecsMarkdown (acctparams , logic .AcctParamsFieldNames , logic .AcctParamsFieldSpecByName )
403+ acctparams .Close ()
404+
419405 langspecjs , _ := os .Create ("langspec.json" )
420406 enc := json .NewEncoder (langspecjs )
421407 enc .Encode (buildLanguageSpec (opGroups ))
0 commit comments