X-Git-Url: https://git.saurik.com/cycript.git/blobdiff_plain/c5b15840ab1bb70218506531f9a73fe2d112b007..64a505ff07b28093bb91a680f8a2c2292327e896:/Output.cpp diff --git a/Output.cpp b/Output.cpp index ce8e00c..cbd853f 100644 --- a/Output.cpp +++ b/Output.cpp @@ -253,8 +253,8 @@ void CYContinue::Output(CYOutput &out, CYFlags flags) const { void CYClause::Output(CYOutput &out) const { out << '\t'; - if (case_ != NULL) - out << "case" << ' ' << *case_; + if (value_ != NULL) + out << "case" << ' ' << *value_; else out << "default"; out << ':' << '\n'; @@ -268,45 +268,35 @@ void CYDebugger::Output(CYOutput &out, CYFlags flags) const { out << "debugger" << ';'; } -void CYDeclaration::ForIn(CYOutput &out, CYFlags flags) const { - out << "var" << ' '; - Output(out, CYRight(flags)); -} - -void CYDeclaration::Output(CYOutput &out, CYFlags flags) const { +void CYBinding::Output(CYOutput &out, CYFlags flags) const { out << *identifier_; //out.out_ << ':' << identifier_->usage_ << '#' << identifier_->offset_; - if (initialiser_ != NULL) { + if (initializer_ != NULL) { out << ' ' << '=' << ' '; - initialiser_->Output(out, CYAssign::Precedence_, CYRight(flags)); + initializer_->Output(out, CYAssign::Precedence_, CYRight(flags)); } } -void CYForDeclarations::Output(CYOutput &out, CYFlags flags) const { - out << "var" << ' '; - declarations_->Output(out, CYRight(flags)); -} - -void CYDeclarations::Output(CYOutput &out) const { +void CYBindings::Output(CYOutput &out) const { Output(out, CYNoFlags); } -void CYDeclarations::Output(CYOutput &out, CYFlags flags) const { - const CYDeclarations *declaration(this); +void CYBindings::Output(CYOutput &out, CYFlags flags) const { + const CYBindings *binding(this); bool first(true); for (;;) { - CYDeclarations *next(declaration->next_); + CYBindings *next(binding->next_); CYFlags jacks(first ? CYLeft(flags) : next == NULL ? CYRight(flags) : CYCenter(flags)); first = false; - declaration->declaration_->Output(out, jacks); + binding->binding_->Output(out, jacks); if (next == NULL) break; out << ',' << ' '; - declaration = next; + binding = next; } } @@ -353,15 +343,15 @@ void CYEmpty::Output(CYOutput &out, CYFlags flags) const { out.Terminate(); } +void CYEval::Output(CYOutput &out, CYFlags flags) const { + _assert(false); +} + void CYExpress::Output(CYOutput &out, CYFlags flags) const { expression_->Output(out, flags | CYNoBFC); out << ';'; } -void CYExpression::ForIn(CYOutput &out, CYFlags flags) const { - Output(out, flags | CYNoRightHand); -} - void CYExpression::Output(CYOutput &out) const { Output(out, CYNoFlags); } @@ -392,8 +382,8 @@ void CYFinally::Output(CYOutput &out) const { void CYFor::Output(CYOutput &out, CYFlags flags) const { out << "for" << ' ' << '('; - if (initialiser_ != NULL) - initialiser_->Output(out, CYNoIn); + if (initializer_ != NULL) + initializer_->Output(out, CYNoIn); out.Terminate(); if (test_ != NULL) out << ' '; @@ -406,31 +396,47 @@ void CYFor::Output(CYOutput &out, CYFlags flags) const { code_->Single(out, CYRight(flags), CYCompactShort); } -void CYForOf::Output(CYOutput &out, CYFlags flags) const { - out << "for" << ' ' << "each" << ' ' << '('; - initialiser_->ForIn(out, CYNoIn); - out << ' ' << "in" << ' ' << *set_ << ')'; +void CYForLexical::Output(CYOutput &out, CYFlags flags) const { + out << (constant_ ? "const" : "let") << ' '; + binding_->Output(out, CYRight(flags)); +} + +void CYForIn::Output(CYOutput &out, CYFlags flags) const { + out << "for" << ' ' << '('; + initializer_->Output(out, CYNoIn | CYNoRightHand); + out << ' ' << "in" << ' ' << *iterable_ << ')'; code_->Single(out, CYRight(flags), CYCompactShort); } -void CYForOfComprehension::Output(CYOutput &out) const { - out << "for" << ' ' << "each" << ' ' << '('; - declaration_->Output(out, CYNoIn); - out << ' ' << "in" << ' ' << *set_ << ')' << next_; +void CYForInitialized::Output(CYOutput &out, CYFlags flags) const { + out << "for" << ' ' << '(' << "var" << ' '; + binding_->Output(out, CYNoIn | CYNoRightHand); + out << ' ' << "in" << ' ' << *iterable_ << ')'; + code_->Single(out, CYRight(flags), CYCompactShort); } -void CYForIn::Output(CYOutput &out, CYFlags flags) const { +void CYForInComprehension::Output(CYOutput &out) const { out << "for" << ' ' << '('; - if (initialiser_ != NULL) - initialiser_->ForIn(out, CYNoIn); - out << ' ' << "in" << ' ' << *set_ << ')'; + binding_->Output(out, CYNoIn | CYNoRightHand); + out << ' ' << "in" << ' ' << *iterable_ << ')'; +} + +void CYForOf::Output(CYOutput &out, CYFlags flags) const { + out << "for" << ' ' << '('; + initializer_->Output(out, CYNoRightHand); + out << ' ' << "of" << ' ' << *iterable_ << ')'; code_->Single(out, CYRight(flags), CYCompactShort); } -void CYForInComprehension::Output(CYOutput &out) const { +void CYForOfComprehension::Output(CYOutput &out) const { out << "for" << ' ' << '('; - declaration_->Output(out, CYNoIn); - out << ' ' << "in" << ' ' << *set_ << ')'; + binding_->Output(out, CYNoRightHand); + out << ' ' << "of" << ' ' << *iterable_ << ')' << next_; +} + +void CYForVariable::Output(CYOutput &out, CYFlags flags) const { + out << "var" << ' '; + binding_->Output(out, CYRight(flags)); } void CYFunction::Output(CYOutput &out) const { @@ -461,13 +467,13 @@ void CYFunctionStatement::Output(CYOutput &out, CYFlags flags) const { } void CYFunctionParameter::Output(CYOutput &out) const { - initialiser_->Output(out, CYNoFlags); + binding_->Output(out, CYNoFlags); if (next_ != NULL) out << ',' << ' ' << *next_; } const char *CYIdentifier::Word() const { - return replace_ == NULL || replace_ == this ? CYWord::Word() : replace_->Word(); + return next_ == NULL || next_ == this ? CYWord::Word() : next_->Word(); } void CYIf::Output(CYOutput &out, CYFlags flags) const { @@ -513,6 +519,11 @@ void CYImport::Output(CYOutput &out, CYFlags flags) const { out << "@import"; } +void CYIndirect::Output(CYOutput &out, CYFlags flags) const { + out << "*"; + rhs_->Output(out, Precedence(), CYRight(flags)); +} + void CYIndirectMember::Output(CYOutput &out, CYFlags flags) const { object_->Output(out, Precedence(), CYLeft(flags)); if (const char *word = property_->Word()) @@ -629,9 +640,14 @@ void CYTypeDefinition::Output(CYOutput &out, CYFlags flags) const { out << "typedef" << ' ' << *typed_; } -void CYLetStatement::Output(CYOutput &out, CYFlags flags) const { - out << "let" << ' ' << '(' << *declarations_ << ')'; - code_->Single(out, CYRight(flags), CYCompactShort); +void CYTypeExpression::Output(CYOutput &out, CYFlags flags) const { + out << '(' << "typedef" << ' ' << *typed_ << ')'; +} + +void CYLexical::Output(CYOutput &out, CYFlags flags) const { + out << "let" << ' '; + bindings_->Output(out, flags); // XXX: flags + out << ';'; } void CYModule::Output(CYOutput &out) const { @@ -918,7 +934,7 @@ void CYTypeVoid::Output(CYOutput &out) const { void CYVar::Output(CYOutput &out, CYFlags flags) const { out << "var" << ' '; - declarations_->Output(out, flags); + bindings_->Output(out, flags); // XXX: flags out << ';'; }