Skip to content

Commit ea2ff83

Browse files
GearsDatapackslpil
authored andcommitted
Generate correct definitions for indexing named fields
1 parent 377f9fa commit ea2ff83

File tree

32 files changed

+79
-77
lines changed

32 files changed

+79
-77
lines changed

compiler-core/src/javascript.rs

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -487,15 +487,7 @@ impl<'a> Generator<'a> {
487487
record_name = constructor.name,
488488
);
489489

490-
let contents = docvec![break_("", " "), "value[", index, "];"].group();
491-
492-
functions.push(docvec![
493-
line(),
494-
"export const ",
495-
function_name,
496-
" = (value) =>",
497-
contents.nest(INDENT),
498-
]);
490+
let contents;
499491

500492
// If the argument is labelled, also generate a getter for the labelled
501493
// argument.
@@ -505,17 +497,27 @@ impl<'a> Generator<'a> {
505497
record_name = constructor.name,
506498
);
507499

508-
let contents =
500+
contents =
509501
docvec![break_("", " "), "value.", maybe_escape_property(label), ";"].group();
510502

511503
functions.push(docvec![
512504
line(),
513505
"export const ",
514506
function_name,
515507
" = (value) =>",
516-
contents.nest(INDENT),
508+
contents.clone().nest(INDENT),
517509
]);
510+
} else {
511+
contents = docvec![break_("", " "), "value[", index, "];"].group()
518512
}
513+
514+
functions.push(docvec![
515+
line(),
516+
"export const ",
517+
function_name,
518+
" = (value) =>",
519+
contents.nest(INDENT),
520+
]);
519521
}
520522

521523
concat(functions)

compiler-core/src/javascript/tests/snapshots/gleam_core__javascript__tests__case__case_building_record_with_labels_matched_by_pattern_1.snap

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,10 @@ export class Wibble extends $CustomType {
2828
}
2929
export const Wibble$Wibble = (int, string) => new Wibble(int, string);
3030
export const Wibble$isWibble = (value) => value instanceof Wibble;
31-
export const Wibble$Wibble$0 = (value) => value[0];
3231
export const Wibble$Wibble$int = (value) => value.int;
33-
export const Wibble$Wibble$1 = (value) => value[1];
32+
export const Wibble$Wibble$0 = (value) => value.int;
3433
export const Wibble$Wibble$string = (value) => value.string;
34+
export const Wibble$Wibble$1 = (value) => value.string;
3535

3636
export class Wobble extends $CustomType {
3737
constructor($0) {

compiler-core/src/javascript/tests/snapshots/gleam_core__javascript__tests__case__case_building_record_with_labels_matched_by_pattern_2.snap

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,10 @@ export class Wibble extends $CustomType {
2828
}
2929
export const Wibble$Wibble = (int, string) => new Wibble(int, string);
3030
export const Wibble$isWibble = (value) => value instanceof Wibble;
31-
export const Wibble$Wibble$0 = (value) => value[0];
3231
export const Wibble$Wibble$int = (value) => value.int;
33-
export const Wibble$Wibble$1 = (value) => value[1];
32+
export const Wibble$Wibble$0 = (value) => value.int;
3433
export const Wibble$Wibble$string = (value) => value.string;
34+
export const Wibble$Wibble$1 = (value) => value.string;
3535

3636
export class Wobble extends $CustomType {
3737
constructor($0) {

compiler-core/src/javascript/tests/snapshots/gleam_core__javascript__tests__case__case_building_record_with_labels_matched_by_pattern_3.snap

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,10 @@ export class Wibble extends $CustomType {
2929
}
3030
export const Wibble$Wibble = (int, string) => new Wibble(int, string);
3131
export const Wibble$isWibble = (value) => value instanceof Wibble;
32-
export const Wibble$Wibble$0 = (value) => value[0];
3332
export const Wibble$Wibble$int = (value) => value.int;
34-
export const Wibble$Wibble$1 = (value) => value[1];
33+
export const Wibble$Wibble$0 = (value) => value.int;
3534
export const Wibble$Wibble$string = (value) => value.string;
35+
export const Wibble$Wibble$1 = (value) => value.string;
3636

3737
export class Wobble extends $CustomType {
3838
constructor($0) {

compiler-core/src/javascript/tests/snapshots/gleam_core__javascript__tests__case__case_building_record_with_labels_matched_by_pattern_4.snap

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,10 @@ export class Wibble extends $CustomType {
2828
}
2929
export const Wibble$Wibble = (int, string) => new Wibble(int, string);
3030
export const Wibble$isWibble = (value) => value instanceof Wibble;
31-
export const Wibble$Wibble$0 = (value) => value[0];
3231
export const Wibble$Wibble$int = (value) => value.int;
33-
export const Wibble$Wibble$1 = (value) => value[1];
32+
export const Wibble$Wibble$0 = (value) => value.int;
3433
export const Wibble$Wibble$string = (value) => value.string;
34+
export const Wibble$Wibble$1 = (value) => value.string;
3535

3636
export class Wobble extends $CustomType {
3737
constructor($0) {

compiler-core/src/javascript/tests/snapshots/gleam_core__javascript__tests__case__case_building_record_with_labels_matched_by_pattern_5.snap

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,10 @@ export class Wibble extends $CustomType {
2828
}
2929
export const Wibble$Wibble = (int, string) => new Wibble(int, string);
3030
export const Wibble$isWibble = (value) => value instanceof Wibble;
31-
export const Wibble$Wibble$0 = (value) => value[0];
3231
export const Wibble$Wibble$int = (value) => value.int;
33-
export const Wibble$Wibble$1 = (value) => value[1];
32+
export const Wibble$Wibble$0 = (value) => value.int;
3433
export const Wibble$Wibble$string = (value) => value.string;
34+
export const Wibble$Wibble$1 = (value) => value.string;
3535

3636
export class Wobble extends $CustomType {
3737
constructor($0) {

compiler-core/src/javascript/tests/snapshots/gleam_core__javascript__tests__case__case_building_record_with_labels_matched_by_pattern_6.snap

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,10 @@ export class Wibble extends $CustomType {
2828
}
2929
export const Wibble$Wibble = (int, string) => new Wibble(int, string);
3030
export const Wibble$isWibble = (value) => value instanceof Wibble;
31-
export const Wibble$Wibble$0 = (value) => value[0];
3231
export const Wibble$Wibble$int = (value) => value.int;
33-
export const Wibble$Wibble$1 = (value) => value[1];
32+
export const Wibble$Wibble$0 = (value) => value.int;
3433
export const Wibble$Wibble$string = (value) => value.string;
34+
export const Wibble$Wibble$1 = (value) => value.string;
3535

3636
export class Wobble extends $CustomType {
3737
constructor($0) {

compiler-core/src/javascript/tests/snapshots/gleam_core__javascript__tests__case__record_update_in_pipeline_in_case_clause.snap

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,10 @@ export class Wibble extends $CustomType {
3535
}
3636
export const Wibble$Wibble = (wibble, wobble) => new Wibble(wibble, wobble);
3737
export const Wibble$isWibble = (value) => value instanceof Wibble;
38-
export const Wibble$Wibble$0 = (value) => value[0];
3938
export const Wibble$Wibble$wibble = (value) => value.wibble;
40-
export const Wibble$Wibble$1 = (value) => value[1];
39+
export const Wibble$Wibble$0 = (value) => value.wibble;
4140
export const Wibble$Wibble$wobble = (value) => value.wobble;
41+
export const Wibble$Wibble$1 = (value) => value.wobble;
4242

4343
function identity(x) {
4444
return x;

compiler-core/src/javascript/tests/snapshots/gleam_core__javascript__tests__case_clause_guards__field_access.snap

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,12 @@ export class Person extends $CustomType {
3131
export const Person$Person = (username, name, age) =>
3232
new Person(username, name, age);
3333
export const Person$isPerson = (value) => value instanceof Person;
34-
export const Person$Person$0 = (value) => value[0];
3534
export const Person$Person$username = (value) => value.username;
36-
export const Person$Person$1 = (value) => value[1];
35+
export const Person$Person$0 = (value) => value.username;
3736
export const Person$Person$name = (value) => value.name;
38-
export const Person$Person$2 = (value) => value[2];
37+
export const Person$Person$1 = (value) => value.name;
3938
export const Person$Person$age = (value) => value.age;
39+
export const Person$Person$2 = (value) => value.age;
4040

4141
export function main() {
4242
let given_name = "jack";

compiler-core/src/javascript/tests/snapshots/gleam_core__javascript__tests__case_clause_guards__nested_record_access.snap

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@ export class A extends $CustomType {
3535
}
3636
export const A$A = (b) => new A(b);
3737
export const A$isA = (value) => value instanceof A;
38-
export const A$A$0 = (value) => value[0];
3938
export const A$A$b = (value) => value.b;
39+
export const A$A$0 = (value) => value.b;
4040

4141
export class B extends $CustomType {
4242
constructor(c) {
@@ -46,8 +46,8 @@ export class B extends $CustomType {
4646
}
4747
export const B$B = (c) => new B(c);
4848
export const B$isB = (value) => value instanceof B;
49-
export const B$B$0 = (value) => value[0];
5049
export const B$B$c = (value) => value.c;
50+
export const B$B$0 = (value) => value.c;
5151

5252
export class C extends $CustomType {
5353
constructor(d) {
@@ -57,8 +57,8 @@ export class C extends $CustomType {
5757
}
5858
export const C$C = (d) => new C(d);
5959
export const C$isC = (value) => value instanceof C;
60-
export const C$C$0 = (value) => value[0];
6160
export const C$C$d = (value) => value.d;
61+
export const C$C$0 = (value) => value.d;
6262

6363
export function a(a) {
6464
if (a.b.c.d) {

0 commit comments

Comments
 (0)