From: Jay Freeman (saurik) Date: Mon, 12 Jul 2010 03:46:48 +0000 (+0000) Subject: Build CYSetLast to simplify some replacements. X-Git-Tag: v0.9.432~12 X-Git-Url: https://git.saurik.com/cycript.git/commitdiff_plain/359e8b829aeee532360ef95d60fe4a242e7e7128?ds=sidebyside Build CYSetLast to simplify some replacements. --- diff --git a/Parser.hpp b/Parser.hpp index ebcbb7f..0b9099a 100644 --- a/Parser.hpp +++ b/Parser.hpp @@ -57,6 +57,18 @@ struct CYNext { } }; +template +void CYSetLast(Type_ *&list, Type_ *item) { + if (list == NULL) + list = item; + else { + Type_ *next(list); + while (next->next_ != NULL) + next = next->next_; + next->next_ = item; + } +} + #define CYForEach(value, list) \ for (__typeof__(*list) *value(list); value != NULL; value = value->next_) @@ -426,10 +438,7 @@ struct CYBlock : } void AddPrev(CYStatement *statement) { - CYStatement *last(statement); - while (last->next_ != NULL) - last = last->next_; - last->SetNext(statements_); + CYSetLast(statement, statements_); statements_ = statement; } @@ -614,10 +623,7 @@ struct CYCompound : } void AddPrev(CYExpression *expression) { - CYExpression *last(expression); - while (last->next_ != NULL) - last = last->next_; - last->SetNext(expressions_); + CYSetLast(expression, expressions_); expressions_ = expression; } diff --git a/Replace.cpp b/Replace.cpp index d1f8ab5..5803478 100644 --- a/Replace.cpp +++ b/Replace.cpp @@ -453,10 +453,7 @@ namespace cy { namespace Syntax { CYExpression *New::AddArgument(CYContext &context, CYExpression *value) { - CYArgument **argument(&arguments_); - while (*argument != NULL) - argument = &(*argument)->next_; - *argument = $ CYArgument(value); + CYSetLast(arguments_, $ CYArgument(value)); return this; }