Skip to content

Commit c93d355

Browse files
fix generated erlang code for externals with discarded arguments
1 parent 5c775ce commit c93d355

5 files changed

Lines changed: 35 additions & 11 deletions

compiler-core/src/erlang.rs

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -739,13 +739,7 @@ impl<'a, 'generator> FunctionGenerator<'a, 'generator> {
739739
name,
740740
name_location: location,
741741
..
742-
} if is_external => {
743-
if name.chars().all(|char| char == '_') {
744-
self.new_generated_variable()
745-
} else {
746-
self.new_erlang_variable(name, *location)
747-
}
748-
}
742+
} if is_external => self.new_generated_variable(),
749743
ArgNames::Discard { .. } | ArgNames::LabelledDiscard { .. } => EcoString::from("_"),
750744
ArgNames::Named { name, location }
751745
| ArgNames::NamedLabelled {

compiler-core/src/erlang/tests/external_fn.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -423,3 +423,14 @@ pub fn woo(__: a, _two: b) -> Nil
423423
"#
424424
);
425425
}
426+
427+
#[test]
428+
// https://github.com/gleam-lang/gleam/issues/5970
429+
fn discarded_argument_called_value_does_not_have_the_same_name_as_discarded_one() {
430+
assert_erl!(
431+
r#"
432+
@external(erlang, "wibble", "wobble")
433+
pub fn woo(_: a, _value: b) -> Nil
434+
"#
435+
);
436+
}

compiler-core/src/erlang/tests/snapshots/gleam_core__erlang__tests__external_fn__discarded_arg_in_external_are_passed_correctly.snap

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,5 @@ pub fn woo(_a: a) -> Nil
1515

1616
-file("project/test/my/mod.gleam", 3).
1717
-spec woo(any()) -> nil.
18-
woo(_a) ->
19-
wibble:wobble(_a).
18+
woo(_value) ->
19+
wibble:wobble(_value).
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
---
2+
source: compiler-core/src/erlang/tests/external_fn.rs
3+
expression: "\n@external(erlang, \"wibble\", \"wobble\")\npub fn woo(_: a, _value: b) -> Nil\n"
4+
---
5+
----- SOURCE CODE
6+
7+
@external(erlang, "wibble", "wobble")
8+
pub fn woo(_: a, _value: b) -> Nil
9+
10+
11+
----- COMPILED ERLANG
12+
-module(my@mod).
13+
-compile([no_auto_import, nowarn_ignored, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
14+
-export([woo/2]).
15+
16+
-file("project/test/my/mod.gleam", 3).
17+
-spec woo(any(), any()) -> nil.
18+
woo(_value, _value@1) ->
19+
wibble:wobble(_value, _value@1).

compiler-core/src/erlang/tests/snapshots/gleam_core__erlang__tests__external_fn__multiple_discarded_args_in_external_are_passed_correctly_2.snap

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,5 @@ pub fn woo(__: a, _two: b) -> Nil
1515

1616
-file("project/test/my/mod.gleam", 3).
1717
-spec woo(any(), any()) -> nil.
18-
woo(_value, _two) ->
19-
wibble:wobble(_value, _two).
18+
woo(_value, _value@1) ->
19+
wibble:wobble(_value, _value@1).

0 commit comments

Comments
 (0)