From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-3.3 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,UNPARSEABLE_RELAY autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 11138 invoked from network); 2 Jun 2021 02:52:19 -0000 Received: from zero.zsh.org (2a02:898:31:0:48:4558:7a:7368) by inbox.vuxu.org with ESMTPUTF8; 2 Jun 2021 02:52:19 -0000 ARC-Seal: i=1; cv=none; a=rsa-sha256; d=zsh.org; s=rsa-20200801; t=1622602339; b=zX3BIfyOzPjLleQbma6vzANgBGnpFRqGj9d2XGrEf2dFGkwxPrFqosQMG+hCMPc+k6kz3mf2j7 IwIk3sDeH3DoGLtKRx/VEE9D/x6Mvz05kU9rqoaqOuOw1fwNJltpbd4RbKIjES3AyC++OZTuTh TgVXdzebjpIKzZbMkCYMGLrwtl3HLMGbbM3gG/A1s6lCIgf8zrNgnQebzoe9+xiW2DvQ90j4pS gvIAQXfQX1vxwZ+N2C3ivzxcvWSlsTV5Qt0+kYE7P2lUHJLN7NRGjjEYW45NgnukPmiD6HZPq0 zeVYJcDGrYNEJVP4DQZw41Fnjmv3JI0umvaDKzDFeOcugQ==; ARC-Authentication-Results: i=1; zsh.org; iprev=pass (mail-oi1-f170.google.com) smtp.remote-ip=209.85.167.170; dkim=pass header.d=brasslantern-com.20150623.gappssmtp.com header.s=20150623 header.a=rsa-sha256; dmarc=none header.from=brasslantern.com; arc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed; d=zsh.org; s=rsa-20200801; t=1622602339; bh=U+W3UxhkPFuQ8d2yL10NFfBN6QvjEOn63UImHV2LpkE=; h=List-Archive:List-Owner:List-Post:List-Unsubscribe:List-Subscribe:List-Help: List-Id:Sender:Content-Type:To:Subject:Message-ID:Date:From:In-Reply-To: References:MIME-Version:DKIM-Signature:DKIM-Signature; b=upOmt5DRT52ODM2xLpgkuSCH5mNWewoJwOUAYOXufVKwmjqCeARROPUMSFIiFEG/E4LKyAaryX QrjwT668/Yqf2caEbSoN7el8J47XKQQe3iC5yOqEIj18AH/7+3wLKr+RRPeyhquiQrUEVEsMl6 cSZR4huD5BkTq1wCkTWlZulwa14onlzTRsMim4ZgfaRevSuI+CMOGqZgqV4RpdvI9LcUHKRfpZ d2+dThPzLnsoQWqu2Zm4i0a5lsokDyV9USMzQiYo3UhuQ1bYMHkD9fTvXmQ5Lot5eIQ1PhoCKG 33RwKoCv7dzUIo+X6hA9iovSC7cmWH8WTfova97cPoxz/Q==; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=zsh.org; s=rsa-20200801; h=List-Archive:List-Owner:List-Post:List-Unsubscribe: List-Subscribe:List-Help:List-Id:Sender:Content-Type:To:Subject:Message-ID: Date:From:In-Reply-To:References:MIME-Version:Reply-To:Cc: Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID; bh=S8kMAyBvIUww1XT1ENEnfBLC/IAytht3YcQ3wVa4Bds=; b=RNGilkbDKggE2eiFUg7EzFwG7c ILF43dS2sqVub2dlnFaQeDrp4kZzYuOKID/xJ4XTSZiHSRy8WQOPtUA7Ov/GS0AU3cGuhep8RjYBh wrgKPS3Q0fnjSZynGz3Nt6uKjzKVj29slQDK77EYxYXdK59BlQX4fx59eekd8sZuNDy0zKV4P6Pkq 5iSylvvqyYsDNxkhaFqhL3wyp4OzMb235O69IgnJdlTi+roEwqKA2DhAW7NtEf4Z3IRf6op/h+gxt Q1x6uWWXeq7FldSkm0OejMTSdgxfuky+RR7yhyL0w0c25g6U2teeVwVIXvb4jW1+4B2peFLZtmGX/ hThcp/mQ==; Received: from authenticated user by zero.zsh.org with local id 1loGzR-000AVB-4W; Wed, 02 Jun 2021 02:52:17 +0000 Authentication-Results: zsh.org; iprev=pass (mail-oi1-f170.google.com) smtp.remote-ip=209.85.167.170; dkim=pass header.d=brasslantern-com.20150623.gappssmtp.com header.s=20150623 header.a=rsa-sha256; dmarc=none header.from=brasslantern.com; arc=none Received: from mail-oi1-f170.google.com ([209.85.167.170]:45653) by zero.zsh.org with esmtps (TLS1.3:TLS_AES_128_GCM_SHA256:128) id 1loGyw-000AEY-Re; Wed, 02 Jun 2021 02:51:52 +0000 Received: by mail-oi1-f170.google.com with SMTP id w127so1328016oig.12 for ; Tue, 01 Jun 2021 19:51:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=brasslantern-com.20150623.gappssmtp.com; s=20150623; h=mime-version:references:in-reply-to:from:date:message-id:subject:to; bh=S8kMAyBvIUww1XT1ENEnfBLC/IAytht3YcQ3wVa4Bds=; b=R5kmmYaW81Eq+GzXXosLt848n+5+V3xsrSgIE5wnC+Q2vicYX+jXW6NSHVLWsrvNrP NAqtPthjf8Y4sKBjj7M2rwHofSBwlrwS9rnUShjgTi9aq1Y+8gKL1dg8cKcIaBiD+CBn cdn8GeSzHqjETnBDNY57U+UIKZloo5Q0QvfvmaXxq+rLXziY07Pf5tGejmzIcG2P4rRN z8yVfl9+lctDuEFeJbOjWnsCanaqAn5wk+RGC6pQSVkmMA/2emepIoCgtGNnH7ctsF5Y lEs3gOAA6Wm1IvtKgqOkpyoSIxMeXuHA8NNJCZrsW9UKaZVbW4a3IsbHO+X5D+uWus/l AmFQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to; bh=S8kMAyBvIUww1XT1ENEnfBLC/IAytht3YcQ3wVa4Bds=; b=rbQCyYaNihiIGapMO+hOc7Y1jEPnmGKLAXV1jTj0n/8KZVGwAid56yazGHSiCq7eKA 8uxl5+SR9E6/WlwrKx03BbZ+PfWWJOzL858BDpj+nX9gqU/iy40CZZmpbaFhFQ0GS9yF Lb7zBL0dBOvs6ZEXG620nhQPgKHul/aNlb4QTvK6KQ0yR5bq9AFoYKxm58cByA9M+sIs szL6EHcAlJq0/r+VLGMrylvvpITzfYTtKJBpD/kSsa1tebFksjatOoM48cQ2DkCwbOcb rLss5Byc/DUfw6lPtAiZa0fvvMWn8w/wqVVsZfxVUnrPAwLkHwJ2xiVvJVw7VMfIIp/N pUng== X-Gm-Message-State: AOAM5313Z1qZvEtdEtW1GsiylMxX9ofkggwlNki+rqNpcFt7z4nL/2Zx i5pDZbwsx8ns+QiEim3i4phAd7eJazMO5JgO/nV2pnhRrzc+zg== X-Google-Smtp-Source: ABdhPJxval0LZJuIf6lkoQwQDWTF1mmz+E3WRbTuCZKD0m9xxTajM1w06Q9fb9VyiQzpbI1xI/hNEGYH9eqbbbG2LbY= X-Received: by 2002:aca:d658:: with SMTP id n85mr10041492oig.84.1622602303608; Tue, 01 Jun 2021 19:51:43 -0700 (PDT) MIME-Version: 1.0 References: <20191216212706.i3xvf6hn5h3jwkjh@chaz.gmail.com> <20191217073846.4usg2hnsk66bhqvl@chaz.gmail.com> <20191217111113.z242f4g6sx7xdwru@chaz.gmail.com> <2ea6feb3-a686-4d83-ab27-6a582424487c@www.fastmail.com> <20200101140343.qwfx2xaojumuds3d@chaz.gmail.com> <20210430061117.buyhdhky5crqjrf2@chazelas.org> <20210505114521.bemoiekpophssbug@chazelas.org> <20210601053235.b4junj6muuwegl7b@chazelas.org> In-Reply-To: From: Bart Schaefer Date: Tue, 1 Jun 2021 19:51:32 -0700 Message-ID: Subject: [PATCH] (take two?) typeset array[position=index]=value / unset hash[$stuff] To: Zsh hackers list Content-Type: multipart/mixed; boundary="000000000000eb7df405c3bf8999" X-Seq: 48980 Archived-At: X-Loop: zsh-workers@zsh.org Errors-To: zsh-workers-owner@zsh.org Precedence: list Precedence: bulk Sender: zsh-workers-request@zsh.org X-no-archive: yes List-Id: List-Help: List-Subscribe: List-Unsubscribe: List-Post: List-Owner: List-Archive: --000000000000eb7df405c3bf8999 Content-Type: text/plain; charset="UTF-8" On Tue, Jun 1, 2021 at 9:05 AM Bart Schaefer wrote: > > [...] I should at least examine whether getasg() ought to be using > parse_subscript() even though the corresponding parse.c block is using > skipparens(). I've decided parse_subscript() is appropriate there, so that's included below. If anyone sees any problem with that, please point it out. > Whereas most subscript flags are meaningless for unset, we might > consider supporting (e) there. I'm not sure whether that would fully > address the problem with the other characters, though. Turns out it does seem to fix that, so that's the direction I've gone. More discussion below. > The issue with the empty key seems merely to be that the subscript > validity test for associative arrays never changed from the one for > plain arrays. To maintain error-equivalent backward compatibility I didn't "fix" this, instead, hash[(e)] (or hash[(e)''] if you think that more readable) is required in order to unset the element with the empty key. > [...] I'm not sure what backward-compatibility would be broken? Do you > mean that scripts that already have work-arounds for the current issue > might stop working? The one compatibility issue with the foregoing is this: Current pre-patch zsh: % typeset -A zz % bad='(e)bang' % zz[$bad]=x t% typeset -p zz typeset -A zz=( ['(e)bang']=x ) % unset zz\["$bad"\] % typeset -p zz typeset -A zz=( ) With the patch, the "(e)" appearing in the value of $bad becomes a subscript flag, because $bad is expanded before "unset" parses: % zz[$bad]=x % typeset -p zz typeset -A zz=( ['(e)bang']=x ) % unset zz\["$bad"\] % typeset -p zz typeset -A zz=( ['(e)bang']=x ) You have to double the flag: % unset zz\["(e)$bad"\] % typeset -p zz typeset -A zz=( ) Is that a small enough incompatibility for this to be acceptable? I've included doc updates, but not tests. If anyone else would like to take a stab at those? --000000000000eb7df405c3bf8999 Content-Type: text/plain; charset="US-ASCII"; name="hash_subscripts.txt" Content-Disposition: attachment; filename="hash_subscripts.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kpevhk0l0 ZGlmZiAtLWdpdCBhL0RvYy9ac2gvYnVpbHRpbnMueW8gYi9Eb2MvWnNoL2J1aWx0aW5zLnlvCmlu ZGV4IGY4ZTExZDc5ZC4uMDdkOGY2YWM5IDEwMDY0NAotLS0gYS9Eb2MvWnNoL2J1aWx0aW5zLnlv CisrKyBiL0RvYy9ac2gvYnVpbHRpbnMueW8KQEAgLTI0MTEsNiArMjQxMSw4IEBAIGJ1dCB0aGUg cHJldmlvdXMgdmFsdWUgd2lsbCBzdGlsbCByZWFwcGVhciB3aGVuIHRoZSBzY29wZSBlbmRzLgog SW5kaXZpZHVhbCBlbGVtZW50cyBvZiBhc3NvY2lhdGl2ZSBhcnJheSBwYXJhbWV0ZXJzIG1heSBi ZSB1bnNldCBieSB1c2luZwogc3Vic2NyaXB0IHN5bnRheCBvbiB2YXIobmFtZSksIHdoaWNoIHNo b3VsZCBiZSBxdW90ZWQgKG9yIHRoZSBlbnRpcmUgY29tbWFuZAogcHJlZml4ZWQgd2l0aCB0dChu b2dsb2IpKSB0byBwcm90ZWN0IHRoZSBzdWJzY3JpcHQgZnJvbSBmaWxlbmFtZSBnZW5lcmF0aW9u LgorVGhlIGB0dChMUEFSKCkpdHQoZSl0dChSUEFSKCkpJyBzdWJzY3JpcHQgZmxhZyBtYXkgYmUg dXNlZCB0byByZXF1aXJlIHN0cmljdAoraW50ZXJwcmV0YXRpb24gb2YgY2hhcmFjdGVycyBpbiB0 aGUga2V5LgogCiBJZiB0aGUgdHQoLW0pIGZsYWcgaXMgc3BlY2lmaWVkIHRoZSBhcmd1bWVudHMg YXJlIHRha2VuIGFzIHBhdHRlcm5zIChzaG91bGQKIGJlIHF1b3RlZCkgYW5kIGFsbCBwYXJhbWV0 ZXJzIHdpdGggbWF0Y2hpbmcgbmFtZXMgYXJlIHVuc2V0LiAgTm90ZSB0aGF0IHRoaXMKZGlmZiAt LWdpdCBhL0RvYy9ac2gvcGFyYW1zLnlvIGIvRG9jL1pzaC9wYXJhbXMueW8KaW5kZXggZGMyOGE0 NWFlLi4wMzU0N2VmM2YgMTAwNjQ0Ci0tLSBhL0RvYy9ac2gvcGFyYW1zLnlvCisrKyBiL0RvYy9a c2gvcGFyYW1zLnlvCkBAIC00NDMsNyArNDQzLDkgQEAgbm90IGluaGliaXRlZC4KIAogVGhpcyBm bGFnIGNhbiBhbHNvIGJlIHVzZWQgdG8gZm9yY2UgdHQoKikgb3IgdHQoQCkgdG8gYmUgaW50ZXJw cmV0ZWQgYXMKIGEgc2luZ2xlIGtleSByYXRoZXIgdGhhbiBhcyBhIHJlZmVyZW5jZSB0byBhbGwg dmFsdWVzLiAgSXQgbWF5IGJlIHVzZWQKLWZvciBlaXRoZXIgcHVycG9zZSBvbiB0aGUgbGVmdCBz aWRlIG9mIGFuIGFzc2lnbm1lbnQuCitmb3IgZWl0aGVyIHB1cnBvc2Ugb24gdGhlIGxlZnQgc2lk ZSBvZiBhbiBhc3NpZ25tZW50LiAgVGhpcyBmbGFnIG1heQorYWxzbyBiZSB1c2VkIGluIHRoZSBz dWJzY3JpcHQgb2YgYW4gYXJndW1lbnQgdG8gdHQodW5zZXQpIHRvIGRpc2FibGUKK2ludGVycHJl dGF0aW9uIG9mIHNwZWNpYWwgY2hhcmFjdGVycyBhbmQgcXVvdGluZy4KICkKIGVuZGl0ZW0oKQog CmRpZmYgLS1naXQgYS9TcmMvYnVpbHRpbi5jIGIvU3JjL2J1aWx0aW4uYwppbmRleCBhMTZmZGRj YjcuLjdhZmYzNTRjYyAxMDA2NDQKLS0tIGEvU3JjL2J1aWx0aW4uYworKysgYi9TcmMvYnVpbHRp bi5jCkBAIC0xOTMzLDEwICsxOTMzLDE0IEBAIGdldGFzZyhjaGFyICoqKmFyZ3ZwLCBMaW5rTGlz dCBhc3NpZ25zKQogICAgIGFzZy5mbGFncyA9IDA7CiAKICAgICAvKiBzZWFyY2ggZm9yIGA9JyAq LwotICAgIGZvciAoOyAqcyAmJiAqcyAhPSAnPSc7IHMrKyk7CisgICAgZm9yICg7ICpzICYmICpz ICE9ICdbJyAmJiAqcyAhPSAnPScgLyogJiYgKnMgIT0gJysnICovOyBzKyspOworICAgIGlmIChz ID4gYXNnLm5hbWUgJiYgKnMgPT0gJ1snKSB7CisJY2hhciAqc2UgPSBwYXJzZV9zdWJzY3JpcHQo cyArIDEsIDEsICddJyk7CisJaWYgKHNlICYmICpzZSA9PSAnXScpIHMgPSBzZSArIDE7CisgICAg fQogCiAgICAgLyogZm91bmQgYD0nLCBzbyByZXR1cm4gd2l0aCBhIHZhbHVlICovCi0gICAgaWYg KCpzKSB7CisgICAgaWYgKCpzICYmICpzID09ICc9JykgewogCSpzID0gJ1wwJzsKIAlhc2cudmFs dWUuc2NhbGFyID0gcyArIDE7CiAgICAgfSBlbHNlIHsKQEAgLTM3MjYsMTEgKzM3MzAsMTYgQEAg YmluX3Vuc2V0KGNoYXIgKm5hbWUsIGNoYXIgKiphcmd2LCBPcHRpb25zIG9wcywgaW50IGZ1bmMp CiAJaWYgKHNzKSB7CiAJICAgIGNoYXIgKnNzZTsKIAkgICAgKnNzID0gMDsKKwkgICAgLyogcGFy c2Vfc3Vic2NyaXB0KCkgZG9lc24ndCBoYW5kbGUgZW1wdHkgYnJhY2tldHMgLSBzaG91bGQgaXQ/ ICovCiAJICAgIGlmICgoc3NlID0gcGFyc2Vfc3Vic2NyaXB0KHNzKzEsIDEsICddJykpKSB7CiAJ CSpzc2UgPSAwOwotCQlzdWJzY3JpcHQgPSBkdXBzdHJpbmcoc3MrMSk7CisJCWlmIChzc1sxXSA9 PSAnKCcgJiYgc3NbMl0gPT0gJ2UnICYmIHNzWzNdID09ICcpJykgeworCQkgICAgc3Vic2NyaXB0 ID0gZHVwc3RyaW5nKHNzKzQpOworCQl9IGVsc2UgeworCQkgICAgc3Vic2NyaXB0ID0gZHVwc3Ry aW5nKHNzKzEpOworCQkgICAgcmVtbnVsYXJncyhzdWJzY3JpcHQpOworCQl9CiAJCSpzc2UgPSAn XSc7Ci0JCXJlbW51bGFyZ3Moc3Vic2NyaXB0KTsKIAkJdW50b2tlbml6ZShzdWJzY3JpcHQpOwog CSAgICB9CiAJfQpAQCAtMzc2Myw2ICszNzcyLDEyIEBAIGJpbl91bnNldChjaGFyICpuYW1lLCBj aGFyICoqYXJndiwgT3B0aW9ucyBvcHMsIGludCBmdW5jKQogCSAgICB9IGVsc2UgaWYgKFBNX1RZ UEUocG0tPm5vZGUuZmxhZ3MpID09IFBNX1NDQUxBUiB8fAogCQkgICAgICAgUE1fVFlQRShwbS0+ bm9kZS5mbGFncykgPT0gUE1fQVJSQVkpIHsKIAkJc3RydWN0IHZhbHVlIHZidWY7CisJCWlmICgh KnN1YnNjcmlwdCkgeworCQkgICAgKnNzID0gJ1snOworCQkgICAgemVycm5hbShuYW1lLCAiJXM6 IGludmFsaWQgcGFyYW1ldGVyIG5hbWUiLCBzKTsKKwkJICAgIHJldHVybnZhbCA9IDE7CisJCSAg ICBjb250aW51ZTsKKwkJfQogCQl2YnVmLmlzYXJyID0gKFBNX1RZUEUocG0tPm5vZGUuZmxhZ3Mp ID09IFBNX0FSUkFZID8KIAkJCSAgICAgIFNDQU5QTV9BUlJPTkxZIDogMCk7CiAJCXZidWYucG0g PSBwbTsK --000000000000eb7df405c3bf8999--