X-Git-Url: https://git.saurik.com/cycript.git/blobdiff_plain/5a6d4d25db388006fc37491a1253b4a102461a6f..0508916952b3c0f050adfa26d25d5af447aa98b5:/Output.cpp diff --git a/Output.cpp b/Output.cpp index c974744..752d8a9 100644 --- a/Output.cpp +++ b/Output.cpp @@ -236,8 +236,8 @@ void CYClause::Output(CYOutput &out) const { out << next_; } -const char *CYDeclaration::ForEachIn() const { - return identifier_->Word(); +void CYDebugger::Output(CYOutput &out, CYFlags flags) const { + out << "debugger" << ';'; } void CYDeclaration::ForIn(CYOutput &out, CYFlags flags) const { @@ -254,9 +254,9 @@ void CYDeclaration::Output(CYOutput &out, CYFlags flags) const { } } -void CYDeclarations::For(CYOutput &out) const { +void CYForDeclarations::Output(CYOutput &out, CYFlags flags) const { out << "var"; - Output(out, CYNoIn); + Output(out, CYRight(flags)); } void CYDeclarations::Output(CYOutput &out) const { @@ -266,16 +266,19 @@ void CYDeclarations::Output(CYOutput &out) const { void CYDeclarations::Output(CYOutput &out, CYFlags flags) const { const CYDeclarations *declaration(this); bool first(true); - output: - CYDeclarations *next(declaration->next_); - CYFlags jacks(first ? CYLeft(flags) : next == NULL ? CYRight(flags) : CYCenter(flags)); - first = false; - declaration->declaration_->Output(out, jacks); - if (next != NULL) { + for (;;) { + CYDeclarations *next(declaration->next_); + + CYFlags jacks(first ? CYLeft(flags) : next == NULL ? CYRight(flags) : CYCenter(flags)); + first = false; + declaration->declaration_->Output(out, jacks); + + if (next == NULL) + break; + out << ',' << ' '; declaration = next; - goto output; } } @@ -318,14 +321,6 @@ void CYExpression::ClassName(CYOutput &out, bool object) const { Output(out, CYAssign::Precedence_, CYNoFlags); } -const char *CYExpression::ForEachIn() const { - return NULL; -} - -void CYExpression::For(CYOutput &out) const { - Output(out, CYNoIn); -} - void CYExpression::ForIn(CYOutput &out, CYFlags flags) const { Output(out, flags | CYNoRightHand); } @@ -348,7 +343,7 @@ void CYFinally::Output(CYOutput &out) const { void CYFor::Output(CYOutput &out, CYFlags flags) const { out << "for" << ' ' << '('; if (initialiser_ != NULL) - initialiser_->For(out); + initialiser_->Output(out, CYNoIn); out.Terminate(); if (test_ != NULL) out << ' '; @@ -407,7 +402,7 @@ void CYFunctionStatement::Output(CYOutput &out, CYFlags flags) const { } void CYFunctionParameter::Output(CYOutput &out) const { - out << *name_; + initialiser_->Output(out, CYNoFlags); if (next_ != NULL) out << ',' << ' ' << *next_; } @@ -475,8 +470,9 @@ void CYLabel::Output(CYOutput &out, CYFlags flags) const { statement_->Single(out, CYRight(flags)); } -void CYLet::Output(CYOutput &out, CYFlags flags) const { - out << "let" << ' ' << '(' << *declarations_ << ')' << ' ' << code_; +void CYLetStatement::Output(CYOutput &out, CYFlags flags) const { + out << "let" << ' ' << '(' << *declarations_ << ')'; + code_->Single(out, CYRight(flags)); } namespace cy { @@ -523,13 +519,6 @@ void CYObject::Output(CYOutput &out, CYFlags flags) const { out << ')'; } -void CYOptionalFunctionParameter::Output(CYOutput &out) const { - out << *name_ << '='; - initializer_->Output(out, CYAssign::Precedence_, CYNoFlags); - if (next_ != NULL) - out << ',' << ' ' << *next_; -} - void CYPostfix::Output(CYOutput &out, CYFlags flags) const { lhs_->Output(out, Precedence(), CYLeft(flags)); out << Operator(); @@ -594,6 +583,9 @@ void CYStatement::Multiple(CYOutput &out, CYFlags flags) const { } void CYStatement::Single(CYOutput &out, CYFlags flags) const { + if (this == NULL) + return out.Terminate(); + _assert(next_ == NULL); out << '\n'; ++out.indent_;