facebook / facebook/hhvm

Shapes::keyExists does not refine nested key information

Open
#9,294 2 comments 0 reactions 0 assignees View on GitHub
hack
Dominant language
C++
Stars
18.7k
Forks
3.1k
Avg merge
1h 47m
Merged PRs (30d)
2

Description

**Describe the bug**
Originally reported by @eryi here: https://github.com/facebook/hhvm/issues/8012#issuecomment-408665965

**Standalone code, or other way to reproduce the problem**

```hack
function myfunc(shape(?'a' => shape(?'b' => string)) $var): void {
if (!Shapes::keyExists($var, 'a')) throw new Exception();
if (!Shapes::keyExists($var['a'], 'b')) throw new Exception();

// Invalid index operation: 'optional' is marked as an optional shape field....
echo $var['a']['b'];
}
```

**Expected behavior**

There should be no error

**Actual behavior**

```
File "/foo.hack", line 6, characters 18-20:
The field `b` may not be present in this shape. Use `Shapes::idx()` instead. (Typing[4165])
File "/foo.hack", line 1, characters 38-40:
This is where the field was declared as optional.
```

**Environment**

HipHop VM 4.172.0 (rel) (non-lowptr)
Compiler: 1667340154_989010953
Repo schema: 63eaf8b56fb7edbc7a8ca9e32786eb0c1f8f508c

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.