Fork of daniellemaywood.uk/gleam — Wasm codegen work
2

Configure Feed

Select the types of activity you want to include in your feed.

reuse assignment var in pattern matching code gen

+78 -78
+1 -1
compiler-core/src/javascript/decision.rs
··· 279 279 // name so we can use this variable to reference it and never 280 280 // do any duplicate work recomputing its value every time 281 281 // this pattern variable is used. 282 - let name = self.variables.next_local_var(&"pattern".into()); 282 + let name = self.variables.next_local_var(&ASSIGNMENT_VAR.into()); 283 283 let value = self.variables.get_value(var); 284 284 self.variables.bind(name.clone(), var); 285 285 docvec![let_(name, value.to_doc()), line()]
+2 -2
compiler-core/src/javascript/tests/snapshots/gleam_core__javascript__tests__case__case_branches_guards_are_wrapped_in_parentheses.snap
··· 21 21 if ($ instanceof $Empty) { 22 22 23 23 } else { 24 - let pattern = $.tail; 25 - if (pattern instanceof $Empty) { 24 + let $1 = $.tail; 25 + if ($1 instanceof $Empty) { 26 26 if (false || true) { 27 27 let a = $.head; 28 28 return a;
+3 -3
compiler-core/src/javascript/tests/snapshots/gleam_core__javascript__tests__case__deeply_nested_string_prefix_assignment.snap
··· 49 49 50 50 export function main() { 51 51 let tmp = new Wibble(new Wobble(new Wabble([42, "wibble"]))); 52 - let pattern = tmp[0].wabble.tuple[1]; 53 - if (pattern.startsWith("w")) { 52 + let $ = tmp[0].wabble.tuple[1]; 53 + if ($.startsWith("w")) { 54 54 let wibble = "w"; 55 - let rest = pattern.slice(1); 55 + let rest = $.slice(1); 56 56 return wibble + rest; 57 57 } else { 58 58 throw makeError(
+5 -5
compiler-core/src/javascript/tests/snapshots/gleam_core__javascript__tests__case__guard_variable_only_brought_into_scope_when_needed.snap
··· 21 21 if (x instanceof $Empty) { 22 22 return 2; 23 23 } else { 24 - let pattern = x.tail; 25 - if (pattern instanceof $Empty) { 24 + let $ = x.tail; 25 + if ($ instanceof $Empty) { 26 26 return 2; 27 27 } else { 28 - let pattern$1 = pattern.tail; 29 - if (pattern$1 instanceof $Empty) { 28 + let $1 = $.tail; 29 + if ($1 instanceof $Empty) { 30 30 let a = x.head; 31 31 if (a === 1) { 32 - let b = pattern.head; 32 + let b = $.head; 33 33 return a + b; 34 34 } else { 35 35 return 2;
+3 -3
compiler-core/src/javascript/tests/snapshots/gleam_core__javascript__tests__case__nested_string_prefix_assignment.snap
··· 29 29 30 30 export function main() { 31 31 let tmp = new Wibble("wibble"); 32 - let pattern = tmp.wobble; 33 - if (pattern.startsWith("w")) { 32 + let $ = tmp.wobble; 33 + if ($.startsWith("w")) { 34 34 let wibble = "w"; 35 - let rest = pattern.slice(1); 35 + let rest = $.slice(1); 36 36 return wibble + rest; 37 37 } else { 38 38 throw makeError(
+14 -14
compiler-core/src/javascript/tests/snapshots/gleam_core__javascript__tests__case__nested_string_prefix_match.snap
··· 17 17 18 18 function main() { 19 19 let $ = new Ok(toList(["a", "b c", "d"])); 20 - let pattern = $[0]; 21 - if (pattern instanceof $Empty) { 20 + let $1 = $[0]; 21 + if ($1 instanceof $Empty) { 22 22 return 1; 23 23 } else { 24 - let pattern$1 = pattern.tail; 25 - if (pattern$1 instanceof $Empty) { 24 + let $2 = $1.tail; 25 + if ($2 instanceof $Empty) { 26 26 return 1; 27 27 } else { 28 - let pattern$2 = pattern$1.tail; 29 - if (pattern$2 instanceof $Empty) { 28 + let $3 = $2.tail; 29 + if ($3 instanceof $Empty) { 30 30 return 1; 31 31 } else { 32 - let pattern$3 = pattern$2.tail; 33 - if (pattern$3 instanceof $Empty) { 34 - let pattern$4 = pattern$2.head; 35 - if (pattern$4 === "d") { 36 - let pattern$5 = pattern$1.head; 37 - if (pattern$5.startsWith("b ")) { 38 - let pattern$6 = pattern.head; 39 - if (pattern$6 === "a") { 32 + let $4 = $3.tail; 33 + if ($4 instanceof $Empty) { 34 + let $5 = $3.head; 35 + if ($5 === "d") { 36 + let $6 = $2.head; 37 + if ($6.startsWith("b ")) { 38 + let $7 = $1.head; 39 + if ($7 === "a") { 40 40 return 1; 41 41 } else { 42 42 return 1;
+10 -10
compiler-core/src/javascript/tests/snapshots/gleam_core__javascript__tests__case__nested_string_prefix_match_that_would_crash_on_js.snap
··· 17 17 18 18 function main() { 19 19 let $ = new Ok(toList(["b c", "d"])); 20 - let pattern = $[0]; 21 - if (pattern instanceof $Empty) { 20 + let $1 = $[0]; 21 + if ($1 instanceof $Empty) { 22 22 return 1; 23 23 } else { 24 - let pattern$1 = pattern.tail; 25 - if (pattern$1 instanceof $Empty) { 24 + let $2 = $1.tail; 25 + if ($2 instanceof $Empty) { 26 26 return 1; 27 27 } else { 28 - let pattern$2 = pattern$1.tail; 29 - if (pattern$2 instanceof $Empty) { 30 - let pattern$3 = pattern$1.head; 31 - if (pattern$3 === "d") { 32 - let pattern$4 = pattern.head; 33 - if (pattern$4.startsWith("b ")) { 28 + let $3 = $2.tail; 29 + if ($3 instanceof $Empty) { 30 + let $4 = $2.head; 31 + if ($4 === "d") { 32 + let $5 = $1.head; 33 + if ($5.startsWith("b ")) { 34 34 return 1; 35 35 } else { 36 36 return 1;
+2 -2
compiler-core/src/javascript/tests/snapshots/gleam_core__javascript__tests__case__tuple_and_guard.snap
··· 15 15 ----- COMPILED JAVASCRIPT 16 16 function go(x) { 17 17 let $ = [1, 2]; 18 - let pattern = $[0]; 19 - if (pattern === 1) { 18 + let $1 = $[0]; 19 + if ($1 === 1) { 20 20 let a = $[1]; 21 21 if (a === 2) { 22 22 return 1;
+5 -5
compiler-core/src/javascript/tests/snapshots/gleam_core__javascript__tests__case_clause_guards__alternative_patterns_assignment.snap
··· 18 18 if (xs instanceof $Empty) { 19 19 return 1; 20 20 } else { 21 - let pattern = xs.tail; 22 - if (pattern instanceof $Empty) { 21 + let $ = xs.tail; 22 + if ($ instanceof $Empty) { 23 23 let x = xs.head; 24 24 return x; 25 25 } else { 26 - let pattern$1 = pattern.tail; 27 - if (pattern$1 instanceof $Empty) { 28 - let x = pattern.head; 26 + let $1 = $.tail; 27 + if ($1 instanceof $Empty) { 28 + let x = $.head; 29 29 return x; 30 30 } else { 31 31 return 1;
+5 -5
compiler-core/src/javascript/tests/snapshots/gleam_core__javascript__tests__case_clause_guards__alternative_patterns_guard.snap
··· 18 18 if (xs instanceof $Empty) { 19 19 return 0; 20 20 } else { 21 - let pattern = xs.tail; 22 - if (pattern instanceof $Empty) { 21 + let $ = xs.tail; 22 + if ($ instanceof $Empty) { 23 23 let x = xs.head; 24 24 if (x === 1) { 25 25 return x; ··· 27 27 return 0; 28 28 } 29 29 } else { 30 - let pattern$1 = pattern.tail; 31 - if (pattern$1 instanceof $Empty) { 32 - let x = pattern.head; 30 + let $1 = $.tail; 31 + if ($1 instanceof $Empty) { 32 + let x = $.head; 33 33 if (x === 1) { 34 34 return x; 35 35 } else {
+10 -10
compiler-core/src/javascript/tests/snapshots/gleam_core__javascript__tests__case_clause_guards__alternative_patterns_list.snap
··· 18 18 if (xs instanceof $Empty) { 19 19 return 1; 20 20 } else { 21 - let pattern = xs.tail; 22 - if (pattern instanceof $Empty) { 23 - let pattern$1 = xs.head; 24 - if (pattern$1 === 1) { 21 + let $ = xs.tail; 22 + if ($ instanceof $Empty) { 23 + let $1 = xs.head; 24 + if ($1 === 1) { 25 25 return 0; 26 26 } else { 27 27 return 1; 28 28 } 29 29 } else { 30 - let pattern$1 = pattern.tail; 31 - if (pattern$1 instanceof $Empty) { 32 - let pattern$2 = pattern.head; 33 - if (pattern$2 === 2) { 34 - let pattern$3 = xs.head; 35 - if (pattern$3 === 1) { 30 + let $1 = $.tail; 31 + if ($1 instanceof $Empty) { 32 + let $2 = $.head; 33 + if ($2 === 2) { 34 + let $3 = xs.head; 35 + if ($3 === 1) { 36 36 return 0; 37 37 } else { 38 38 return 1;
+4 -4
compiler-core/src/javascript/tests/snapshots/gleam_core__javascript__tests__custom_types__imported_pattern.snap
··· 23 23 import { Two } from "../other.mjs"; 24 24 25 25 export function main(x) { 26 - let pattern = x.a; 27 - if (pattern === 1) { 26 + let $ = x.a; 27 + if ($ === 1) { 28 28 return 1; 29 29 } else { 30 - let pattern$1 = x.b; 31 - if (pattern$1 === 2) { 30 + let $1 = x.b; 31 + if ($1 === 2) { 32 32 let c = x.c; 33 33 return c; 34 34 } else {
+4 -4
compiler-core/src/javascript/tests/snapshots/gleam_core__javascript__tests__lists__case.snap
··· 21 21 if (xs instanceof $Empty) { 22 22 return 0; 23 23 } else { 24 - let pattern = xs.tail; 25 - if (pattern instanceof $Empty) { 24 + let $ = xs.tail; 25 + if ($ instanceof $Empty) { 26 26 return 1; 27 27 } else { 28 - let pattern$1 = pattern.tail; 29 - if (pattern$1 instanceof $Empty) { 28 + let $1 = $.tail; 29 + if ($1 instanceof $Empty) { 30 30 return 2; 31 31 } else { 32 32 return 9999;
+8 -8
compiler-core/src/javascript/tests/snapshots/gleam_core__javascript__tests__tuples__case.snap
··· 15 15 16 16 ----- COMPILED JAVASCRIPT 17 17 function go(a) { 18 - let pattern = a[0]; 19 - if (pattern === 2) { 18 + let $ = a[0]; 19 + if ($ === 2) { 20 20 let a$1 = a[1]; 21 21 return a$1; 22 - } else if (pattern === 1) { 23 - let pattern$1 = a[1]; 24 - if (pattern$1 === 1) { 22 + } else if ($ === 1) { 23 + let $1 = a[1]; 24 + if ($1 === 1) { 25 25 return 1; 26 26 } else { 27 - let a$1 = pattern; 28 - let b = pattern$1; 27 + let a$1 = $; 28 + let b = $1; 29 29 return a$1 + b; 30 30 } 31 31 } else { 32 - let a$1 = pattern; 32 + let a$1 = $; 33 33 let b = a[1]; 34 34 return a$1 + b; 35 35 }
+2 -2
compiler-core/src/javascript/tests/snapshots/gleam_core__javascript__tests__tuples__nested_pattern.snap
··· 14 14 15 15 ----- COMPILED JAVASCRIPT 16 16 function go(x) { 17 - let pattern = x[0]; 18 - if (pattern === 2) { 17 + let $ = x[0]; 18 + if ($ === 2) { 19 19 let a = x[1][0]; 20 20 let b = x[1][1]; 21 21 return a + b;