Skip to content

Commit 197faf4

Browse files
committed
Fixes
1 parent 4ae092e commit 197faf4

File tree

1 file changed

+33
-24
lines changed

1 file changed

+33
-24
lines changed

build/gen_stub.php

Lines changed: 33 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -984,7 +984,7 @@ public function getMethodSynopsisFilename(): string {
984984
}
985985

986986
public function getAttributeName(): string {
987-
return $this->name->toString();
987+
return strtolower($this->name->toString());
988988
}
989989

990990
public function __toString(): string {
@@ -1032,7 +1032,7 @@ public function getMethodSynopsisFilename(): string {
10321032
}
10331033

10341034
public function getAttributeName(): string {
1035-
return $this->methodName;
1035+
return strtolower($this->methodName);
10361036
}
10371037

10381038
public function __toString(): string {
@@ -3598,7 +3598,11 @@ function findEquivalentFuncInfo(array $generatedFuncInfos, FuncInfo $funcInfo):
35983598
return null;
35993599
}
36003600

3601-
/** @param iterable $infos */
3601+
/**
3602+
* @template T
3603+
* @param iterable<T> $infos
3604+
* @param Closure(T): string|null $codeGenerator
3605+
*/
36023606
function generateCodeWithConditions(
36033607
iterable $infos, string $separator, Closure $codeGenerator): string {
36043608
$code = "";
@@ -3636,7 +3640,7 @@ function generateArgInfoCode(
36363640
$generatedFuncInfos = [];
36373641
$code .= generateCodeWithConditions(
36383642
$fileInfo->getAllFuncInfos(), "\n",
3639-
function (FuncInfo $funcInfo) use(&$generatedFuncInfos) {
3643+
static function (FuncInfo $funcInfo) use (&$generatedFuncInfos) {
36403644
/* If there already is an equivalent arginfo structure, only emit a #define */
36413645
if ($generatedFuncInfo = findEquivalentFuncInfo($generatedFuncInfos, $funcInfo)) {
36423646
$code = sprintf(
@@ -3658,7 +3662,7 @@ function (FuncInfo $funcInfo) use(&$generatedFuncInfos) {
36583662
$generatedFunctionDeclarations = [];
36593663
$code .= generateCodeWithConditions(
36603664
$fileInfo->getAllFuncInfos(), "",
3661-
function (FuncInfo $funcInfo) use($fileInfo, &$generatedFunctionDeclarations) {
3665+
static function (FuncInfo $funcInfo) use ($fileInfo, &$generatedFunctionDeclarations) {
36623666
$key = $funcInfo->getDeclarationKey();
36633667
if (isset($generatedFunctionDeclarations[$key])) {
36643668
return null;
@@ -3683,6 +3687,7 @@ function (FuncInfo $funcInfo) use($fileInfo, &$generatedFunctionDeclarations) {
36833687
$attributeInitializationCode = generateAttributeInitialization($fileInfo, $classEntriesWithSensitiveParams);
36843688

36853689
if ($attributeInitializationCode !== "" || !empty($fileInfo->constInfos)) {
3690+
$classEntriesWithSensitiveParams = array_unique($classEntriesWithSensitiveParams);
36863691
$code .= "\nstatic void register_{$stubFilenameWithoutExtension}_symbols(int module_number";
36873692
foreach ($classEntriesWithSensitiveParams as $ce) {
36883693
$code .= ", zend_class_entry *$ce";
@@ -3732,7 +3737,7 @@ function generateFunctionEntries(?Name $className, array $funcInfos): string {
37323737
}
37333738

37343739
$code .= "\n\nstatic const zend_function_entry {$functionEntryName}[] = {\n";
3735-
$code .= generateCodeWithConditions($funcInfos, "", function (FuncInfo $funcInfo) {
3740+
$code .= generateCodeWithConditions($funcInfos, "", static function (FuncInfo $funcInfo) {
37363741
return $funcInfo->getFunctionEntry();
37373742
});
37383743
$code .= "\tZEND_FE_END\n";
@@ -3742,27 +3747,31 @@ function generateFunctionEntries(?Name $className, array $funcInfos): string {
37423747
}
37433748

37443749
function generateAttributeInitialization(FileInfo $fileInfo, array &$classEntriesWithSensitiveParams): string {
3745-
$code = "";
3750+
return generateCodeWithConditions(
3751+
$fileInfo->getAllFuncInfos(),
3752+
"",
3753+
static function (FuncInfo $funcInfo) use (&$classEntriesWithSensitiveParams) {
3754+
$code = null;
3755+
3756+
foreach ($funcInfo->args as $index => $arg) {
3757+
if (!$arg->isSensitive) {
3758+
continue;
3759+
}
37463760

3747-
foreach ($fileInfo->getAllFuncInfos() as $funcInfo) {
3748-
foreach ($funcInfo->args as $index => $arg) {
3749-
if (!$arg->isSensitive) {
3750-
continue;
3751-
}
3761+
if ($funcInfo->name instanceof MethodName) {
3762+
$classEntry = "class_entry_" . str_replace("\\", "_", $funcInfo->name->className->toString());
3763+
$functionTable = "&{$classEntry}->function_table";
3764+
$classEntriesWithSensitiveParams[] = $classEntry;
3765+
} else {
3766+
$functionTable = "CG(function_table)";
3767+
}
37523768

3753-
if ($funcInfo->name instanceof MethodName) {
3754-
$classEntry = "class_entry_" . str_replace("\\", "_", $funcInfo->name->className->toString());
3755-
$functionTable = "&{$classEntry}->function_table";
3756-
$classEntriesWithSensitiveParams[] = $classEntry;
3757-
} else {
3758-
$functionTable = "CG(function_table)";
3769+
$code .= " zend_mark_function_parameter_as_sensitive($functionTable, \"" . $funcInfo->name->getAttributeName() . "\", $index);\n";
37593770
}
37603771

3761-
$code .= " zend_mark_function_parameter_as_sensitive($functionTable, \"" . $funcInfo->name->getAttributeName() . "\", $index);\n";
3772+
return $code;
37623773
}
3763-
}
3764-
3765-
return $code;
3774+
);
37663775
}
37673776

37683777
/** @param FuncInfo<string, FuncInfo> $funcInfos */
@@ -3772,7 +3781,7 @@ function generateOptimizerInfo(array $funcInfos): string {
37723781

37733782
$code .= "static const func_info_t func_infos[] = {\n";
37743783

3775-
$code .= generateCodeWithConditions($funcInfos, "", function (FuncInfo $funcInfo) {
3784+
$code .= generateCodeWithConditions($funcInfos, "", static function (FuncInfo $funcInfo) {
37763785
return $funcInfo->getOptimizerInfo();
37773786
});
37783787

@@ -4169,7 +4178,7 @@ function initPhpParser() {
41694178
installPhpParser($version, $phpParserDir);
41704179
}
41714180

4172-
spl_autoload_register(function(string $class) use($phpParserDir) {
4181+
spl_autoload_register(function(string $class) use ($phpParserDir) {
41734182
if (strpos($class, "PhpParser\\") === 0) {
41744183
$fileName = $phpParserDir . "/lib/" . str_replace("\\", "/", $class) . ".php";
41754184
require $fileName;

0 commit comments

Comments
 (0)