]> git.saurik.com Git - cycript.git/commitdiff
Fixed some corner cases in flags propogation.
authorJay Freeman (saurik) <saurik@saurik.com>
Wed, 21 Oct 2009 07:06:35 +0000 (07:06 +0000)
committerJay Freeman (saurik) <saurik@saurik.com>
Wed, 21 Oct 2009 07:06:35 +0000 (07:06 +0000)
Output.cpp

index f648a575d35a55fea68369205210a189b20921d7..f8885247ca89d867ef62e9bfb5e6ee81ba87add3 100644 (file)
@@ -23,7 +23,7 @@ _finline CYFlags &operator |=(CYFlags &lhs, CYFlags rhs) {
 }
 
 _finline CYFlags CYLeft(CYFlags flags) {
-    return flags;
+    return flags & ~CYNoDangle;
 }
 
 _finline CYFlags CYRight(CYFlags flags) {
@@ -31,7 +31,7 @@ _finline CYFlags CYRight(CYFlags flags) {
 }
 
 _finline CYFlags CYCenter(CYFlags flags) {
-    return CYRight(flags);
+    return CYLeft(CYRight(flags));
 }
 
 #define CYPA 16
@@ -344,7 +344,7 @@ void CYDirectMember::Output(CYOutput &out, CYFlags flags) const {
 
 void CYDoWhile::Output(CYOutput &out, CYFlags flags) const {
     out << "do";
-    code_->Single(out, CYNoFlags);
+    code_->Single(out, CYCenter(flags));
     out << "while" << ' ' << '(' << *test_ << ')';
 }
 
@@ -420,7 +420,7 @@ void CYFor::Output(CYOutput &out, CYFlags flags) const {
     out.Terminate();
     out << increment_;
     out << ')';
-    code_->Single(out, CYNoFlags);
+    code_->Single(out, CYRight(flags));
 }
 
 void CYForEachIn::Output(CYOutput &out, CYFlags flags) const {
@@ -505,9 +505,12 @@ void CYIf::Output(CYOutput &out, CYFlags flags) const {
     out << "if" << ' ' << '(' << *test_ << ')';
 
     CYFlags right(protect ? CYNoFlags : CYRight(flags));
+
     CYFlags jacks(CYNoDangle);
     if (false_ == NULL)
         jacks |= right;
+    else
+        jacks |= protect ? CYNoFlags : CYCenter(flags);
 
     bool single(true_->Single(out, jacks));