]> git.saurik.com Git - cycript.git/commitdiff
Build CYSetLast to simplify some replacements.
authorJay Freeman (saurik) <saurik@saurik.com>
Mon, 12 Jul 2010 03:46:48 +0000 (03:46 +0000)
committerJay Freeman (saurik) <saurik@saurik.com>
Mon, 12 Jul 2010 03:46:48 +0000 (03:46 +0000)
Parser.hpp
Replace.cpp

index ebcbb7f8f577b48ca154d52427d1f18fd0e4598d..0b9099adfa8059009323d8f016a7451e68a40c49 100644 (file)
@@ -57,6 +57,18 @@ struct CYNext {
     }
 };
 
+template <typename Type_>
+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;
     }
 
index d1f8ab5b11a9c53ee797832e9447c25d9562fdaa..5803478d1d6ffc16418e3c703eae99c3f0a6c527 100644 (file)
@@ -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;
 }