amber-lang / amber-lang/amber

[BUG] `len` function passes garbage value when evaluated as an argument.

Offen
#1,162 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
bug
Vorherrschende Sprache
Rust
Sterne
5.2k
Forks
145
Ø Merge
5 T. 3 Std.
Gemergte PRs (30 T.)
7

Beschreibung

**Describe the bug**
When using the `len` function to take the length of an array as an argument to a function call, it passes an incorrect value in a format such as _\_length\_1[@]. This behavior is not seen when assigning the result of `len` to a variable and then passing that variable to the function.

**To Reproduce**
```js
import { printf } from "std/env"

fun print_length(length: Int) {
echo(length)
}

// this prints the incorrect __length_1[@] text
let arr = ["a", "b"]
printf("Calling len function: ")
print_length(len(arr))

// this prints correctly
let arr_len = len(arr)
printf("Assigning len to a variable: ")
print_length(arr_len)

fun length_plus_one(length: Int): Int {
// bash error: bad array subscript
return length + 1
}

printf("Integer operation: ")
length_plus_one(len(arr))
```

This creates the output (on bash-4.3):

```
Calling len function: __length_2[@]
Assigning len to a variable: 2
Integer operation: bash: line 46: __length_6[@]: bad array subscript
```

This reproduces when compiling to all available targets (bash-4.3, bash-3.2, zsh, ksh). It's notable that while the value generated by `len` as a parameter is not a valid `Int`, it still type checks as a regular `Int`, which I verified with an `if length is Int` check. This behavior is also not seen from other function calls, including a wrapper function immediately returning `len` of a value.

**Expected behavior**
A `len` call passed as a parameter should be evaluated to a plain `Int` with a value which is only a single number and no extra labels or strings, and which can be used for int operations.

**Additional context**
Environment:
- MacOS Sequoia 15.6
- amber 0.6.0-alpha

Beitragsleitfaden

Für dieses Repository ist kein Beitragsleitfaden indexiert

Bewertung

Dieses Issue wurde noch nicht bewertet.

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.