Wind 7add38fe32
IR: allow subexpression with redirection. (#15617)
# Description
Try to fixes https://github.com/nushell/nushell/issues/15326 in another
way.

The main point of this change is to avoid duplicate `write` and `close`
a redirected file. So during compile, if compiler know current element
is a sub-expression(defined by private `is_subexpression` function), it
will no longer invoke `finish_redirection`.

In this way, we can avoid duplicate `finish_redirection`.

# User-Facing Changes
`(^echo aa) o> /tmp/aaa` will no longer raise an error.

Here is the IR after the pr:
```
# 3 registers, 12 instructions, 11 bytes of data
# 1 file used for redirection
   0: load-literal           %1, string("aaa")
   1: open-file              file(0), %1, append = false
   2: load-literal           %1, glob-pattern("echo", no_expand = false)
   3: load-literal           %2, glob-pattern("true", no_expand = false)
   4: push-positional        %1
   5: push-positional        %2
   6: redirect-out           file(0)
   7: redirect-err           caller
   8: call                   decl 135 "run-external", %0
   9: write-file             file(0), %0
  10: close-file             file(0)
  11: return                 %0
```

# Tests + Formatting
Added 3 tests.

# After Submitting
Maybe need to update doc
https://github.com/nushell/nushell.github.io/pull/1876

---------

Co-authored-by: Stefan Holderbach <sholderbach@users.noreply.github.com>
2025-04-24 13:47:04 +02:00
..
2025-01-28 16:03:31 -06:00
2025-01-28 16:03:31 -06:00
2025-01-28 16:03:31 -06:00
2022-11-22 16:58:11 -08:00
2025-02-10 15:32:05 +08:00
2024-05-23 02:05:27 +00:00
2024-05-23 02:05:27 +00:00
2023-10-24 12:48:05 -05:00
2025-04-01 07:17:05 -05:00
2025-01-28 16:03:31 -06:00
2024-10-11 06:43:12 -05:00
2025-02-06 06:56:30 -06:00
2025-01-30 18:27:55 -06:00
2025-01-04 16:41:03 -05:00
2024-05-03 08:36:10 +08:00
2025-04-21 20:08:00 +08:00
2025-01-28 16:03:31 -06:00
2024-12-18 06:36:04 -06:00
2025-02-12 20:03:40 -08:00
2025-01-27 18:23:44 -05:00
2025-01-28 16:03:31 -06:00
2024-12-03 20:45:31 -06:00
2023-04-28 13:25:44 +02:00
2023-04-28 13:25:44 +02:00
2025-04-11 08:02:01 -05:00
2024-05-03 08:36:10 +08:00
2024-05-03 08:36:10 +08:00
2025-01-02 06:26:46 -06:00
2024-07-19 04:16:09 +00:00