Skip to content

How do if(<expression>) guard patterns interact with array/object pattern caches? #321

@gibson042

Description

@gibson042

Consider the following:

function* makeIterable() {
  yield 1;
}
match({ iterable: makeIterable() }) {
    when let subject and { iterable: let iter } and iter is [1] and if(subject.iterable is [1]): console.log("fully cached");
    when { iterable: let iter } and iter is [1] and if(iter is [1]): console.log("partially cached");
    default: console.log("uncached");
}

What will be logged—"fully cached" because the if expression uses the cached results for both getting subject.iterable and for getting an iterator for that, "partially cached" because the if expression does not use cached results for the first Get but still remembers results from the iterator, or "uncached" because e.g. the if expression is independent of caching?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions