+void CYContext::NonLocal(CYStatement *&statements) {
+ CYContext &context(*this);
+
+ if (nonlocal_->identifier_ != NULL) {
+ CYVariable *cye($V("$cye"));
+ CYVariable *unique($ CYVariable(nonlocal_->identifier_));
+
+ statements = $$->*
+ $E($ CYAssign(unique, $ CYObject()))->*
+ $ cy::Syntax::Try(statements, $ cy::Syntax::Catch(cye->name_, $$->*
+ $ CYIf($ CYIdentical($M(cye, $S("$cyk")), unique), $$->*
+ $ CYReturn($M(cye, $S("$cyv"))))->*
+ $ cy::Syntax::Throw(cye)
+ ), NULL);
+ }
+}
+
+CYIdentifier *CYContext::Unique() {
+ CYContext &context(*this);
+ return $ CYIdentifier(apr_psprintf(pool_, "$cy%u", unique_++));
+}
+