Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Stop Hack array compat notices from within BuiltinEnum methods
Summary: Stop Hack array compat notices from triggering from within BuiltinEnum methods by manually doing int-like key conversion. This also ensures that once darrays become dicts, their behavior won't change and can be dealt with separately. Reviewed By: paulbiss Differential Revision: D6886711 fbshipit-source-id: 92c44d7201c4904b06757044e1d5fb87cbc672d2
- Loading branch information
Showing
with
333 additions
and 16 deletions.
- +9 −1 hphp/runtime/base/enum-cache.cpp
- +22 −14 hphp/runtime/ext/enum/ext_enum.cpp
- +57 −0 hphp/test/slow/dv_array/enums.php
- +94 −1 hphp/test/slow/dv_array/enums.php.expect
- +57 −0 hphp/test/slow/hack_arr_compat/enums.php
- +92 −0 hphp/test/slow/hack_arr_compat/enums.php.expect
- +1 −0 hphp/test/slow/hack_arr_compat/enums.php.hphp_opts
- +1 −0 hphp/test/slow/hack_arr_compat/enums.php.opts
@@ -0,0 +1,57 @@ | ||
<?hh | ||
// Copyright 2004-present Facebook. All Rights Reserved. | ||
|
||
enum Enum1 : string { | ||
ONE = '1'; | ||
TWO = '2'; | ||
THREE = '3'; | ||
} | ||
|
||
enum Enum2 : int { | ||
ONE = 1; | ||
TWO = 2; | ||
THREE = 3; | ||
} | ||
|
||
enum Enum3 : mixed { | ||
ONE = '1'; | ||
TWO = '2'; | ||
THREE = '3'; | ||
} | ||
|
||
var_dump(Enum1::getNames()); | ||
var_dump(Enum1::getValues()); | ||
var_dump(Enum1::isValid('1')); | ||
var_dump(Enum1::isValid(1)); | ||
var_dump(Enum1::coerce('1')); | ||
var_dump(Enum1::coerce(1)); | ||
var_dump(Enum1::assert('1')); | ||
var_dump(Enum1::assert(1)); | ||
var_dump(Enum1::assertAll(vec['1'])); | ||
var_dump(Enum1::assertAll(vec[1])); | ||
|
||
echo "==============================================\n"; | ||
|
||
var_dump(Enum2::getNames()); | ||
var_dump(Enum2::getValues()); | ||
var_dump(Enum2::isValid('1')); | ||
var_dump(Enum2::isValid(1)); | ||
var_dump(Enum2::coerce('1')); | ||
var_dump(Enum2::coerce(1)); | ||
var_dump(Enum2::assert('1')); | ||
var_dump(Enum2::assert(1)); | ||
var_dump(Enum2::assertAll(vec['1'])); | ||
var_dump(Enum2::assertAll(vec[1])); | ||
|
||
echo "==============================================\n"; | ||
|
||
var_dump(Enum3::getNames()); | ||
var_dump(Enum3::getValues()); | ||
var_dump(Enum3::isValid('1')); | ||
var_dump(Enum3::isValid(1)); | ||
var_dump(Enum3::coerce('1')); | ||
var_dump(Enum3::coerce(1)); | ||
var_dump(Enum3::assert('1')); | ||
var_dump(Enum3::assert(1)); | ||
var_dump(Enum3::assertAll(vec['1'])); | ||
var_dump(Enum3::assertAll(vec[1])); |
@@ -0,0 +1,92 @@ | ||
array(3) { | ||
[1]=> | ||
string(3) "ONE" | ||
[2]=> | ||
string(3) "TWO" | ||
[3]=> | ||
string(5) "THREE" | ||
} | ||
array(3) { | ||
["ONE"]=> | ||
string(1) "1" | ||
["TWO"]=> | ||
string(1) "2" | ||
["THREE"]=> | ||
string(1) "3" | ||
} | ||
bool(true) | ||
bool(true) | ||
string(1) "1" | ||
string(1) "1" | ||
string(1) "1" | ||
string(1) "1" | ||
array(1) { | ||
[0]=> | ||
string(1) "1" | ||
} | ||
array(1) { | ||
[0]=> | ||
string(1) "1" | ||
} | ||
============================================== | ||
array(3) { | ||
[1]=> | ||
string(3) "ONE" | ||
[2]=> | ||
string(3) "TWO" | ||
[3]=> | ||
string(5) "THREE" | ||
} | ||
array(3) { | ||
["ONE"]=> | ||
int(1) | ||
["TWO"]=> | ||
int(2) | ||
["THREE"]=> | ||
int(3) | ||
} | ||
bool(true) | ||
bool(true) | ||
int(1) | ||
int(1) | ||
int(1) | ||
int(1) | ||
array(1) { | ||
[0]=> | ||
int(1) | ||
} | ||
array(1) { | ||
[0]=> | ||
int(1) | ||
} | ||
============================================== | ||
array(3) { | ||
[1]=> | ||
string(3) "ONE" | ||
[2]=> | ||
string(3) "TWO" | ||
[3]=> | ||
string(5) "THREE" | ||
} | ||
array(3) { | ||
["ONE"]=> | ||
string(1) "1" | ||
["TWO"]=> | ||
string(1) "2" | ||
["THREE"]=> | ||
string(1) "3" | ||
} | ||
bool(true) | ||
bool(true) | ||
string(1) "1" | ||
int(1) | ||
string(1) "1" | ||
int(1) | ||
array(1) { | ||
[0]=> | ||
string(1) "1" | ||
} | ||
array(1) { | ||
[0]=> | ||
int(1) | ||
} |
@@ -0,0 +1 @@ | ||
-vRuntime.Eval.HackArrCompatNotices=true -d hhvm.php7.all=0 |
@@ -0,0 +1 @@ | ||
-vEval.HackArrCompatNotices=true |