From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Paul Pogonyshev Newsgroups: gmane.emacs.bugs Subject: bug#26073: workaround Date: Mon, 20 Mar 2017 15:20:58 +0100 Message-ID: References: NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 X-Trace: blaine.gmane.org 1490019746 15615 195.159.176.226 (20 Mar 2017 14:22:26 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Mon, 20 Mar 2017 14:22:26 +0000 (UTC) Cc: 26073@debbugs.gnu.org To: Stefan Monnier Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Mon Mar 20 15:22:22 2017 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cpyCI-0002nQ-7d for geb-bug-gnu-emacs@m.gmane.org; Mon, 20 Mar 2017 15:22:10 +0100 Original-Received: from localhost ([::1]:33296 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cpyCO-0001eR-2x for geb-bug-gnu-emacs@m.gmane.org; Mon, 20 Mar 2017 10:22:16 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:42956) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cpyCF-0001dA-TL for bug-gnu-emacs@gnu.org; Mon, 20 Mar 2017 10:22:08 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1cpyC9-0006NI-UL for bug-gnu-emacs@gnu.org; Mon, 20 Mar 2017 10:22:05 -0400 Original-Received: from debbugs.gnu.org ([208.118.235.43]:38283) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1cpyC9-0006ND-Qy for bug-gnu-emacs@gnu.org; Mon, 20 Mar 2017 10:22:01 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1cpyC9-0000lK-KM for bug-gnu-emacs@gnu.org; Mon, 20 Mar 2017 10:22:01 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Paul Pogonyshev Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 20 Mar 2017 14:22:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 26073 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: Original-Received: via spool by 26073-submit@debbugs.gnu.org id=B26073.14900196662863 (code B ref 26073); Mon, 20 Mar 2017 14:22:01 +0000 Original-Received: (at 26073) by debbugs.gnu.org; 20 Mar 2017 14:21:06 +0000 Original-Received: from localhost ([127.0.0.1]:36482 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cpyBG-0000k7-0r for submit@debbugs.gnu.org; Mon, 20 Mar 2017 10:21:06 -0400 Original-Received: from mail-pg0-f42.google.com ([74.125.83.42]:33647) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cpyBE-0000jG-Kd for 26073@debbugs.gnu.org; Mon, 20 Mar 2017 10:21:04 -0400 Original-Received: by mail-pg0-f42.google.com with SMTP id n190so78206515pga.0 for <26073@debbugs.gnu.org>; Mon, 20 Mar 2017 07:21:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=ddGjUJEgbv9rS6h30RD7y7SOYRHsXzAkT6gXAsg3FZg=; b=M7ckST7z6gS7mxvkXvL7FxPuclt4jceMuFrMhEfBoKSf02IViW78TPIosm5wbd2kp1 x8NKUBEpczeEJztXCpAhDhVP1NyRJTrzK6hx1q5jam5/bUQhrbh8BoipOXqJJbtuEih8 HrrsPgNEQxKUefDvg8nNmQIyEh9QA3+DZb6NjyfmcWVrfaCLg/KGARiegFr5t42uqIKs hSdxbpkzV2GFaYGZhPSb3eNvZ5RAKCVP/jWiiOIGGxcpnhyJhqRdAHTPydU97IgqJUuM U5xlbGzMFVUqxzFi+reqYvlNF6Rv2bT7fwv/1Oy8j6/adbrLQKS+YCDCFtDgRchUikN7 E0TA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=ddGjUJEgbv9rS6h30RD7y7SOYRHsXzAkT6gXAsg3FZg=; b=GGZ9jwNHt8WPAUFpBZeFAfSTNSA5ijqmU3JdOy9YOwujaN7zMX+6sRkshQZnLh1SA6 ksDuVYkShTCmpjDR/ELaQOGoWPxJOrrfk9aBMRFvx9d70l/yv1YjOCB4YXlx8tDqR3bs YAOUmRp4183DUhHKD5P6Cca5JV9XgLQmpDuNMINI/sR/Aw5Vo5A36B/0wK29x+LYGlh7 LTVqAlb5esRNP3Bub3UGICCGpUlFNRwo3zXDeu7J/GySxGdai0Hzt5Me4QXCzNDUfpuS ac2+Y5Fzw38n9A6PClE9sHj48Ehld43+TG29b+U2m+B26t74J7yXmpoOXgJQtN7NqEEA L2Iw== X-Gm-Message-State: AFeK/H2LCpVCW6xKAZtZ830u5XDFJ2+UuAELRy6DZgFQSYeYhBXN3+9wRX+GlIelpfwa+njYmnUg1lmkS0/ZMA== X-Received: by 10.98.196.12 with SMTP id y12mr32989830pff.49.1490019658748; Mon, 20 Mar 2017 07:20:58 -0700 (PDT) Original-Received: by 10.100.138.13 with HTTP; Mon, 20 Mar 2017 07:20:58 -0700 (PDT) In-Reply-To: X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 208.118.235.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.org gmane.emacs.bugs:130752 Archived-At: > Could you give me some concrete (but simple) example? Basically, when you define a generator function (iter-defun foo () (let ((x (bar 1))) (iter-yield x) (iter-yield (+ x (bar 2))))) the resulting iterator must somehow preserve value of `x' after the first yield-point. Therefore, the iterator function will look something like this (simplified): (defun foo-iterator () (let* (outer-scope-x to-execute (step-1 (lambda () (setf to-execute step-2) (setf outer-scope-x (bar 1)) (throw 'yield outer-scope-x))) (step-2 (lambda () (throw 'yield (+ outer-scope-x (bar 2)))))) (setf to-execute step-1) (build-iterator-object ...))) Here `outer-scope-x' is the rebinding of `x' needed to somehow send its value from first step closure to the second. Iteration (let ((iter (foo-iterator))) (iter-next iter) (iter-next iter)) will then look like (omitting all the internal crap): (let ((iter (foo-iterator))) (call-to-execute iter) ; here to-execute = step-1 (call-to-execute iter)) ; here to-execute = step-2 But remember that the caller of `iter-next' knows nothing about how iterator internally works and has no idea what it really does and how it achieves the documented behavior (or doesn't, when there is a bug). Paul