};
 
 template <typename Type_>
-void CYSetLast(Type_ *&list, Type_ *item) {
+Type_ *&CYLast(Type_ *&list) {
     if (list == NULL)
-        list = item;
+        return list;
     else {
         Type_ *next(list);
         while (next->next_ != NULL)
             next = next->next_;
-        next->next_ = item;
+        return next->next_;
     }
 }
 
 
     }
 
     void AddPrev(CYStatement *statement) {
-        CYSetLast(statement, statements_);
+        CYLast(statement) = statements_;
         statements_ = statement;
     }
 
     }
 
     void AddPrev(CYExpression *expression) {
-        CYSetLast(expression, expressions_);
+        CYLast(expression) = expressions_;
         expressions_ = expression;
     }
 
 
 namespace Syntax {
 
 CYExpression *New::AddArgument(CYContext &context, CYExpression *value) {
-    CYSetLast(arguments_, $ CYArgument(value));
+    CYLast(arguments_) = $ CYArgument(value);
     return this;
 }