| // RUN: llvm-tblgen %s | |
| // CHECK: def One { | |
| // CHECK-NEXT: list<string> names = ["Jeffrey Sinclair"]; | |
| // CHECK-NEXT: string element = "Jeffrey Sinclair"; | |
| // CHECK-NEXT: list<string> rest = []; | |
| // CHECK-NEXT: int null = 1; | |
| // CHECK-NEXT: } | |
| // CHECK-NEXT: def Three { | |
| // CHECK-NEXT: list<string> names = ["Tom", "Dick", "Harry"]; | |
| // CHECK-NEXT: string element = "Tom"; | |
| // CHECK-NEXT: list<string> rest = ["Dick", "Harry"]; | |
| // CHECK-NEXT: int null = 0; | |
| // CHECK-NEXT: } | |
| class List<list<string> n> { | |
| list<string> names = n; | |
| } | |
| class CAR<string e> { | |
| string element = e; | |
| } | |
| class CDR<list<string> r, int n> { | |
| list<string> rest = r; | |
| int null = n; | |
| } | |
| class NameList<list<string> Names> : | |
| List<Names>, CAR<!head(Names)>, CDR<!tail(Names), !empty(!tail(Names))>; | |
| def Three : NameList<["Tom", "Dick", "Harry"]>; | |
| def One : NameList<["Jeffrey Sinclair"]>; |