Fix enum parsing when the syntax is "enum foo:string {}" without space between name and type, fixes #10498

main
Jordi Boggiano 2 years ago
parent 2da8d886cc
commit db8ea45295
No known key found for this signature in database
GPG Key ID: 7BBD42C429EC80BC

@ -272,11 +272,18 @@ class ClassMapGenerator
// This is an XHP class, https://github.com/facebook/xhp
$name = 'xhp'.substr(str_replace(array('-', ':'), array('_', '__'), $name), 1);
} elseif ($matches['type'][$i] === 'enum') {
// In Hack, something like:
// something like:
// enum Foo: int { HERP = '123'; }
// The regex above captures the colon, which isn't part of
// the class name.
$name = rtrim($name, ':');
// or:
// enum Foo:int { HERP = '123'; }
// The regex above captures the colon and type, which isn't part of
// the class name.
$colonPos = strrpos($name, ':');
if (false !== $colonPos) {
$name = substr($name, 0, $colonPos);
}
}
$classes[] = ltrim($namespace . $name, '\\');
}

@ -1,6 +1,6 @@
<?php
enum RolesBackedEnum: string {
enum RolesBackedEnum:string {
case Admin = 'Administrator';
case Guest = 'Guest';
case Moderator = 'Moderator';

Loading…
Cancel
Save