-/* Cycript - Remove Execution Server and Disassembler
+/* Cycript - Inlining/Optimizing JavaScript Compiler
* Copyright (C) 2009 Jay Freeman (saurik)
*/
}
_finline CYFlags CYLeft(CYFlags flags) {
- return flags & ~CYNoDangle;
+ return flags & ~(CYNoDangle | CYNoInteger);
}
_finline CYFlags CYRight(CYFlags flags) {
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_)
} else none:
mode_ = NoMode;
+ right_ = true;
out_ << rhs;
done:
return *this;
else
mode_ = NoMode;
+ right_ = true;
out_ << rhs;
return *this;
}
} }
+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_) {
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 {