From a60cd15850448bf833ea0467d5872a57b64c0d7f Mon Sep 17 00:00:00 2001 From: Giorgio Premi Date: Wed, 9 Nov 2016 12:31:16 +0100 Subject: [PATCH] [ClassLoader] Fix ClassCollectionLoader inlining with __halt_compiler --- .../ClassLoader/ClassCollectionLoader.php | 13 ++++++++++--- .../Tests/ClassCollectionLoaderTest.php | 5 ++++- .../Tests/ClassMapGeneratorTest.php | 8 +++++--- .../Tests/Fixtures/Namespaced/WithDirMagic.php | 15 +++++++++++++++ .../Fixtures/Namespaced/WithFileMagic.php | 15 +++++++++++++++ .../Fixtures/Namespaced/WithHaltCompiler.php | 18 ++++++++++++++++++ 6 files changed, 67 insertions(+), 7 deletions(-) create mode 100644 src/Symfony/Component/ClassLoader/Tests/Fixtures/Namespaced/WithDirMagic.php create mode 100644 src/Symfony/Component/ClassLoader/Tests/Fixtures/Namespaced/WithFileMagic.php create mode 100644 src/Symfony/Component/ClassLoader/Tests/Fixtures/Namespaced/WithHaltCompiler.php diff --git a/src/Symfony/Component/ClassLoader/ClassCollectionLoader.php b/src/Symfony/Component/ClassLoader/ClassCollectionLoader.php index 9f2001839b..593ed44ca0 100644 --- a/src/Symfony/Component/ClassLoader/ClassCollectionLoader.php +++ b/src/Symfony/Component/ClassLoader/ClassCollectionLoader.php @@ -104,8 +104,15 @@ class ClassCollectionLoader } } - $c = '(?:\s*+(?:(?:#|//)[^\n]*+\n|/\*(?:(?getFileName(); $c = file_get_contents($file); - if (preg_match($strictTypesRegex, $c)) { + if (preg_match($dontInlineRegex, $c)) { $file = explode(DIRECTORY_SEPARATOR, $file); for ($i = 0; isset($file[$i], $cacheDir[$i]); ++$i) { diff --git a/src/Symfony/Component/ClassLoader/Tests/ClassCollectionLoaderTest.php b/src/Symfony/Component/ClassLoader/Tests/ClassCollectionLoaderTest.php index dbceff3bb3..00be361f50 100644 --- a/src/Symfony/Component/ClassLoader/Tests/ClassCollectionLoaderTest.php +++ b/src/Symfony/Component/ClassLoader/Tests/ClassCollectionLoaderTest.php @@ -235,7 +235,7 @@ class ClassCollectionLoaderTest extends \PHPUnit_Framework_TestCase $strictTypes = defined('HHVM_VERSION') ? '' : "\nnamespace {require __DIR__.'/Fixtures/Namespaced/WithStrictTypes.php';}"; ClassCollectionLoader::load( - array('Namespaced\\WithComments', 'Pearlike_WithComments', $strictTypes ? 'Namespaced\\WithStrictTypes' : 'Namespaced\\WithComments'), + array('Namespaced\\WithComments', 'Pearlike_WithComments', 'Namespaced\\WithDirMagic', 'Namespaced\\WithFileMagic', 'Namespaced\\WithHaltCompiler', $strictTypes ? 'Namespaced\\WithStrictTypes' : 'Namespaced\\WithComments'), __DIR__, 'bar', false @@ -275,6 +275,9 @@ class Pearlike_WithComments public static $loaded = true; } } +namespace {require __DIR__.'/Fixtures/Namespaced/WithDirMagic.php';} +namespace {require __DIR__.'/Fixtures/Namespaced/WithFileMagic.php';} +namespace {require __DIR__.'/Fixtures/Namespaced/WithHaltCompiler.php';} EOF .$strictTypes, str_replace(array(" realpath(__DIR__).'/Fixtures/Namespaced/Foo.php', 'Namespaced\\Baz' => realpath(__DIR__).'/Fixtures/Namespaced/Baz.php', 'Namespaced\\WithComments' => realpath(__DIR__).'/Fixtures/Namespaced/WithComments.php', - 'Namespaced\WithStrictTypes' => realpath(__DIR__).'/Fixtures/Namespaced/WithStrictTypes.php', - ), - ), + 'Namespaced\\WithStrictTypes' => realpath(__DIR__).'/Fixtures/Namespaced/WithStrictTypes.php', + 'Namespaced\\WithHaltCompiler' => realpath(__DIR__).'/Fixtures/Namespaced/WithHaltCompiler.php', + 'Namespaced\\WithDirMagic' => realpath(__DIR__).'/Fixtures/Namespaced/WithDirMagic.php', + 'Namespaced\\WithFileMagic' => realpath(__DIR__).'/Fixtures/Namespaced/WithFileMagic.php', + )), array(__DIR__.'/Fixtures/beta/NamespaceCollision', array( 'NamespaceCollision\\A\\B\\Bar' => realpath(__DIR__).'/Fixtures/beta/NamespaceCollision/A/B/Bar.php', 'NamespaceCollision\\A\\B\\Foo' => realpath(__DIR__).'/Fixtures/beta/NamespaceCollision/A/B/Foo.php', diff --git a/src/Symfony/Component/ClassLoader/Tests/Fixtures/Namespaced/WithDirMagic.php b/src/Symfony/Component/ClassLoader/Tests/Fixtures/Namespaced/WithDirMagic.php new file mode 100644 index 0000000000..f997ca7dd9 --- /dev/null +++ b/src/Symfony/Component/ClassLoader/Tests/Fixtures/Namespaced/WithDirMagic.php @@ -0,0 +1,15 @@ +