diff --git a/phpunit/code/native-class-global-keyword-case/mixed-case.php b/phpunit/code/native-class-global-keyword-case/mixed-case.php new file mode 100644 index 00000000..70356bd4 --- /dev/null +++ b/phpunit/code/native-class-global-keyword-case/mixed-case.php @@ -0,0 +1,7 @@ +value; +} diff --git a/phpunit/code/native-class-global-keyword-case/uppercase.php b/phpunit/code/native-class-global-keyword-case/uppercase.php new file mode 100644 index 00000000..d3a5f329 --- /dev/null +++ b/phpunit/code/native-class-global-keyword-case/uppercase.php @@ -0,0 +1,7 @@ +discoverNativeClassDeclarations($files); + foreach ($files as $file) { + $compiler->prepareFile($file); + } + $compiler->discoverNativeGlobalObjects($files); + $reader = $compiler->convertFile($files[0]); + $compiler->convertFile($files[1]); + + $code = file_get_contents($reader); + self::assertIsString($code); + self::assertStringContainsString( + 'php::nativeRequireObject(caseSlot, "NativeCaseValue")->value', + $code, + ); + } + + public static function nativeGlobalKeywordCaseProvider(): array + { + return [ + 'uppercase' => ['uppercase.php'], + 'mixed case' => ['mixed-case.php'], + ]; + } + public function testRejectsNativeAttributeOnInterface(): void { $this->expectException(\TypePhp\Exception\SyntaxError::class); diff --git a/src/Preprocessor.php b/src/Preprocessor.php index f34b5fb0..5241d60d 100644 --- a/src/Preprocessor.php +++ b/src/Preprocessor.php @@ -223,9 +223,8 @@ class Preprocessor extends CompilerBase continue; } $source = file_get_contents($file); - if (is_string($source) - && (str_contains($source, 'global') || str_contains($source, '$GLOBALS')) - ) { + // PHP keywords are case-insensitive; this also includes $GLOBALS accesses. + if (is_string($source) && stripos($source, 'global') !== false) { $candidateSources[$file] = $source; } }