X-Git-Url: https://git.saurik.com/cycript.git/blobdiff_plain/12e37ba3b9b322dd5b0483b45008e78e12aaa670..8a392978b2d6e7db62cdf6d576e071d70fef9b94:/Replace.cpp diff --git a/Replace.cpp b/Replace.cpp index 7b99022..06b6359 100644 --- a/Replace.cpp +++ b/Replace.cpp @@ -80,7 +80,8 @@ CYArgument *CYArgument::Replace(CYContext &context) { $T(NULL) } CYExpression *CYArray::Replace(CYContext &context) { - elements_->Replace(context); + if (elements_ != NULL) + elements_->Replace(context); return this; } @@ -151,10 +152,6 @@ void CYClause::Replace(CYContext &context) { $T() next_->Replace(context); } -CYStatement *CYComment::Replace(CYContext &context) { - return this; -} - CYExpression *CYCompound::Replace(CYContext &context) { context.Replace(expression_); context.Replace(next_); @@ -302,9 +299,14 @@ CYStatement *CYDoWhile::Replace(CYContext &context) { return this; } -void CYElement::Replace(CYContext &context) { $T() +void CYElementSpread::Replace(CYContext &context) { context.Replace(value_); - next_->Replace(context); +} + +void CYElementValue::Replace(CYContext &context) { + context.Replace(value_); + if (next_ != NULL) + next_->Replace(context); } CYStatement *CYEmpty::Replace(CYContext &context) { @@ -657,7 +659,7 @@ namespace { typedef std::set IdentifierUsages; } -void CYProgram::Replace(CYContext &context) { +void CYScript::Replace(CYContext &context) { CYScope scope(true, context); context.nextlocal_ = $ CYNonLocal(); @@ -857,6 +859,10 @@ void CYScope::Close(CYContext &context, CYStatement *&statements) { } } +CYElementValue *CYSpan::Replace(CYContext &context) { $T(NULL) + return $ CYElementValue(expression_, $ CYElementValue(string_, next_->Replace(context))); +} + CYStatement *CYStatement::Return() { return this; } @@ -885,6 +891,10 @@ CYStatement *CYSwitch::Replace(CYContext &context) { return this; } +CYExpression *CYTemplate::Replace(CYContext &context) { + return $C2($M($M($M($V("String"), $S("prototype")), $S("concat")), $S("apply")), $S(""), $ CYArray($ CYElementValue(string_, spans_->Replace(context)))); +} + CYExpression *CYThis::Replace(CYContext &context) { if (context.this_ != NULL) return $V(context.this_->Identifier(context));