X-Git-Url: https://git.saurik.com/cycript.git/blobdiff_plain/e91fbe93b995ee8077bbc2097c5407138dc02627..9cad30fab188a57c3db8df0912a1691099468e64:/Output.cpp diff --git a/Output.cpp b/Output.cpp index 6a60504..04f893c 100644 --- a/Output.cpp +++ b/Output.cpp @@ -59,7 +59,7 @@ _finline CYFlags &operator |=(CYFlags &lhs, CYFlags rhs) { } _finline CYFlags CYLeft(CYFlags flags) { - return flags & ~CYNoDangle; + return flags & ~(CYNoDangle | CYNoInteger); } _finline CYFlags CYRight(CYFlags flags) { @@ -85,14 +85,24 @@ CYOutput &CYOutput::operator <<(char rhs) { for (unsigned i(0); i != indent_; ++i) out_ << " "; else goto done; - else goto work; + else if (rhs == '\r') { + if (right_) { + out_ << '\n'; + right_ = false; + goto mode; + } + } else goto work; + right_ = true; + mode: mode_ = NoMode; goto done; work: - if (mode_ == Terminated && rhs != '}') + if (mode_ == Terminated && rhs != '}') { + right_ = true; out_ << ';'; + } if (rhs == ';') { if (pretty_) @@ -116,6 +126,7 @@ CYOutput &CYOutput::operator <<(char rhs) { } else none: mode_ = NoMode; + right_ = true; out_ << rhs; done: return *this; @@ -141,6 +152,7 @@ CYOutput &CYOutput::operator <<(const char *rhs) { else mode_ = NoMode; + right_ = true; out_ << rhs; return *this; } @@ -222,6 +234,12 @@ void Catch::Output(CYOutput &out) const { } } +void CYComment::Output(CYOutput &out, CYFlags flags) const { + out << '\r'; + out << value_; + out << '\r'; +} + void CYCompound::Output(CYOutput &out, CYFlags flags) const { if (CYExpression *expression = expressions_) if (CYExpression *next = expression->next_) { @@ -513,7 +531,11 @@ void CYNull::Output(CYOutput &out, CYFlags flags) const { void CYNumber::Output(CYOutput &out, CYFlags flags) const { std::ostringstream str; CYNumerify(str, Value()); - out << str.str().c_str(); + std::string value(str.str()); + out << value.c_str(); + // XXX: this should probably also handle hex conversions and exponents + if ((flags & CYNoInteger) != 0 && value.find('.') == std::string::npos) + out << '.'; } void CYNumber::PropertyName(CYOutput &out) const {