X-Git-Url: https://git.saurik.com/cycript.git/blobdiff_plain/64a505ff07b28093bb91a680f8a2c2292327e896..c3d9dbc7522c2ba685074d9ab5672e3e023e5f5d:/Replace.cpp diff --git a/Replace.cpp b/Replace.cpp index c812c35..307ccec 100644 --- a/Replace.cpp +++ b/Replace.cpp @@ -1187,6 +1187,28 @@ CYTarget *CYTypeSigned::Replace(CYContext &context) { return $ CYCall($ CYDirectMember(specifier_->Replace(context), $ CYString("signed"))); } +CYTarget *CYTypeStruct::Replace(CYContext &context) { + CYList types; + CYList names; + + CYForEach (field, fields_) { + CYTypedIdentifier *typed(field->typed_); + types->*$ CYElementValue(typed->Replace(context)); + + CYExpression *name; + if (typed->identifier_ == NULL) + name = NULL; + else + name = $S(typed->identifier_->Word()); + names->*$ CYElementValue(name); + } + + CYTarget *target($N2($V("Type"), $ CYArray(types), $ CYArray(names))); + if (name_ != NULL) + target = $C1($M(target, $S("withName")), $S(name_->Word())); + return target; +} + CYTarget *CYTypeUnsigned::Replace(CYContext &context) { return $ CYCall($ CYDirectMember(specifier_->Replace(context), $ CYString("unsigned"))); }