mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2026-04-25 21:18:19 +00:00
Graduate LLVM to the big leagues by embedding a LISP processor into TableGen.
Ok, not really, but do support some common LISP functions: * car * cdr * null git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@71805 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -520,6 +520,41 @@ Init *UnOpInit::Fold(Record *CurRec, MultiClass *CurMultiClass) {
|
||||
}
|
||||
break;
|
||||
}
|
||||
case CAR: {
|
||||
ListInit *LHSl = dynamic_cast<ListInit*>(LHS);
|
||||
if (LHSl) {
|
||||
if (LHSl->getSize() == 0) {
|
||||
assert(0 && "Empty list in car");
|
||||
return 0;
|
||||
}
|
||||
return LHSl->getElement(0);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case CDR: {
|
||||
ListInit *LHSl = dynamic_cast<ListInit*>(LHS);
|
||||
if (LHSl) {
|
||||
if (LHSl->getSize() == 0) {
|
||||
assert(0 && "Empty list in cdr");
|
||||
return 0;
|
||||
}
|
||||
ListInit *Result = new ListInit(LHSl->begin()+1, LHSl->end());
|
||||
return Result;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case LNULL: {
|
||||
ListInit *LHSl = dynamic_cast<ListInit*>(LHS);
|
||||
if (LHSl) {
|
||||
if (LHSl->getSize() == 0) {
|
||||
return new IntInit(1);
|
||||
}
|
||||
else {
|
||||
return new IntInit(0);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return this;
|
||||
}
|
||||
@@ -536,6 +571,9 @@ std::string UnOpInit::getAsString() const {
|
||||
std::string Result;
|
||||
switch (Opc) {
|
||||
case CAST: Result = "!cast<" + getType()->getAsString() + ">"; break;
|
||||
case CAR: Result = "!car"; break;
|
||||
case CDR: Result = "!cdr"; break;
|
||||
case LNULL: Result = "!null"; break;
|
||||
}
|
||||
return Result + "(" + LHS->getAsString() + ")";
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user