zsh-workers
 help / color / mirror / code / Atom feed
From: Bart Schaefer <schaefer@brasslantern.com>
To: Zsh hackers list <zsh-workers@zsh.org>
Subject: One possible answer to typeset vs. unset
Date: Sat, 28 Nov 2020 11:49:12 -0800	[thread overview]
Message-ID: <CAH+w=7Zh8URUiLF2n1x-ZrvKO+=JC8wf+n692sRsFTRbkJrzXw@mail.gmail.com> (raw)

Those of you who get zsh repository commit messages will have seen
this already.  Rather than send a patch here (yet), I've taken
Daniel's suggestion and created a new branch.  The changes address the
issue that "typeset foo" creates $foo set to an empty string, by
concealing the internal value rather than altering the way internal
values are defaulted.

You can see these changes by checking out the "declarednull" branch.

I did not (yet) introduce an option or emulation control of this,
though I did test a build where it was predicated on emulation, and
the current default behavior is unchanged in that case.

This imposes the following changes, most of which can be amended if desired:

A typeset variable with no assignment triggers NO_UNSET warnings when
the name is used in parameter expansion or math.  Incidentally, there
is no existing test that covers this; that is, NO_UNSET is tested only
with names that have never been declared or names that have been
explicitly unset.

The typeset -AEFHLRTZailux options are applied upon the first
assignment to the variable. Explicit unset before the first assignment
discards all of those properties. If any option is applied to an
existing name, historic behavior is unchanged.

Consequent to the foregoing, the (t) parameter expansion flag prints
nothing until after the first assignment, and the (i) and (I)
subscript flags also print nothing.  I think the latter is one of the
more problematic consequences, especially for some completion
functions.

One that I forgot in the commit log:  The behavior of "typeset foo;
typeset foo" is changed.  Previously the second typeset would output
the current setting of foo:
  foo=''
With these changes, that outputs nothing.  However, once a value has
been assigned the historic behavior is restored, so "typeset foo=bar;
typeset foo" outputs
  foo=bar
Furthermore, "typeset foo; typeset -p foo" outputs only
  typeset foo

The bash behavior of "unset foo; typeset -p foo" is NOT used.  This is
called out as an emulation distinction, not a change.

The test cases have not been updated, so several now fail.  The test
harness has been updated to declare default values, because otherwise
the harness itself is the first thing that breaks.



             reply	other threads:[~2020-11-28 19:49 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-11-28 19:49 Bart Schaefer [this message]
2020-11-28 20:00 ` Bart Schaefer
2020-11-28 20:21 ` Bart Schaefer
2020-12-01  8:54 ` Felipe Contreras
2020-12-03 21:19   ` Bart Schaefer
2020-12-04 11:04     ` Felipe Contreras
2020-12-04 15:49       ` Bart Schaefer
2020-12-04 19:47         ` Bart Schaefer
2020-12-05  0:22           ` Bart Schaefer
2020-12-05  0:28         ` Bart Schaefer
2020-12-05  0:51       ` Bart Schaefer
2020-12-05 22:17         ` Bart Schaefer
2020-12-23 23:00         ` Felipe Contreras
2020-12-02 17:18 ` Vincent Lefevre
2020-12-02 18:03   ` Bart Schaefer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAH+w=7Zh8URUiLF2n1x-ZrvKO+=JC8wf+n692sRsFTRbkJrzXw@mail.gmail.com' \
    --to=schaefer@brasslantern.com \
    --cc=zsh-workers@zsh.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).