mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-25 13:24:46 +00:00
Implement a !subst operation simmilar to $(subst) in GNU make to do
def/var/string substitution on generic pattern templates. For example: def Type; def v4f32 : Type; def TYPE : Type; class GenType<Type t> { let type = !(subst TYPE, v4f32, t); } def TheType : GenType<TYPE>; git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@71801 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
29
test/TableGen/subst.td
Normal file
29
test/TableGen/subst.td
Normal file
@@ -0,0 +1,29 @@
|
||||
// RUN: tblgen %s | grep {Smith} | count 7
|
||||
// RUN: tblgen %s | grep {Johnson} | count 2
|
||||
// RUN: tblgen %s | grep {FIRST} | count 1
|
||||
// RUN: tblgen %s | grep {LAST} | count 1
|
||||
// RUN: tblgen %s | grep {TVAR} | count 2
|
||||
// RUN: tblgen %s | grep {Bogus} | count 1
|
||||
|
||||
class Honorific<string t> {
|
||||
string honorific = t;
|
||||
}
|
||||
|
||||
def Mr : Honorific<"Mr.">;
|
||||
def Ms : Honorific<"Ms.">;
|
||||
def Mrs : Honorific<"Mrs.">;
|
||||
def TVAR : Honorific<"Bogus">;
|
||||
|
||||
class Name<string n, Honorific t> {
|
||||
string name = n;
|
||||
Honorific honorific = t;
|
||||
}
|
||||
|
||||
class AName<string name, Honorific honorific> :
|
||||
Name<!subst("FIRST", "John", !subst("LAST", "Smith", name)),
|
||||
!subst(TVAR, Mr, honorific)>;
|
||||
|
||||
def JohnSmith : AName<"FIRST LAST", TVAR>;
|
||||
def JaneSmith : AName<"Jane LAST", Ms>;
|
||||
def JohnSmithJones : AName<"FIRST LAST-Jones", Mr>;
|
||||
def JimmyJohnson : AName<"Jimmy Johnson", Mr>;
|
Reference in New Issue
Block a user