Skip to content

Commit c1d0779

Browse files
committed
Add support for #if macro around classes
1 parent 2e44fa5 commit c1d0779

File tree

1 file changed

+33
-9
lines changed

1 file changed

+33
-9
lines changed

build/gen_stub.php

Lines changed: 33 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2245,6 +2245,8 @@ class ClassInfo {
22452245
public $funcInfos;
22462246
/** @var EnumCaseInfo[] */
22472247
public $enumCaseInfos;
2248+
/** @var string|null */
2249+
public $cond;
22482250

22492251
/**
22502252
* @param Name[] $extends
@@ -2268,7 +2270,8 @@ public function __construct(
22682270
array $constInfos,
22692271
array $propertyInfos,
22702272
array $funcInfos,
2271-
array $enumCaseInfos
2273+
array $enumCaseInfos,
2274+
?string $cond
22722275
) {
22732276
$this->name = $name;
22742277
$this->flags = $flags;
@@ -2284,6 +2287,7 @@ public function __construct(
22842287
$this->propertyInfos = $propertyInfos;
22852288
$this->funcInfos = $funcInfos;
22862289
$this->enumCaseInfos = $enumCaseInfos;
2290+
$this->cond = $cond;
22872291
}
22882292

22892293
/**
@@ -2301,7 +2305,13 @@ public function getRegistration(iterable $allConstInfos): string
23012305

23022306
$escapedName = implode("_", $this->name->parts);
23032307

2304-
$code = "static zend_class_entry *register_class_$escapedName(" . (empty($params) ? "void" : implode(", ", $params)) . ")\n";
2308+
$code = '';
2309+
2310+
if ($this->cond) {
2311+
$code .= "#if {$this->cond}\n";
2312+
}
2313+
2314+
$code .= "static zend_class_entry *register_class_$escapedName(" . (empty($params) ? "void" : implode(", ", $params)) . ")\n";
23052315

23062316
$code .= "{\n";
23072317
if ($this->type == "enum") {
@@ -2362,6 +2372,10 @@ function (Name $item) {
23622372

23632373
$code .= "}\n";
23642374

2375+
if ($this->cond) {
2376+
$code .= "#endif\n";
2377+
}
2378+
23652379
return $code;
23662380
}
23672381

@@ -3183,7 +3197,8 @@ function parseClass(
31833197
array $consts,
31843198
array $properties,
31853199
array $methods,
3186-
array $enumCases
3200+
array $enumCases,
3201+
?string $cond
31873202
): ClassInfo {
31883203
$flags = $class instanceof Class_ ? $class->flags : 0;
31893204
$comment = $class->getDocComment();
@@ -3243,7 +3258,8 @@ function parseClass(
32433258
$consts,
32443259
$properties,
32453260
$methods,
3246-
$enumCases
3261+
$enumCases,
3262+
$cond
32473263
);
32483264
}
32493265

@@ -3393,7 +3409,7 @@ function handleStatements(FileInfo $fileInfo, array $stmts, PrettyPrinterAbstrac
33933409
}
33943410

33953411
$fileInfo->classInfos[] = parseClass(
3396-
$className, $stmt, $constInfos, $propertyInfos, $methodInfos, $enumCaseInfos
3412+
$className, $stmt, $constInfos, $propertyInfos, $methodInfos, $enumCaseInfos, $cond
33973413
);
33983414
continue;
33993415
}
@@ -3631,7 +3647,7 @@ function (FuncInfo $funcInfo) use($fileInfo, &$generatedFunctionDeclarations) {
36313647
}
36323648

36333649
foreach ($fileInfo->classInfos as $classInfo) {
3634-
$code .= generateFunctionEntries($classInfo->name, $classInfo->funcInfos);
3650+
$code .= generateFunctionEntries($classInfo->name, $classInfo->funcInfos, $classInfo->cond);
36353651
}
36363652
}
36373653

@@ -3667,22 +3683,30 @@ function generateClassEntryCode(FileInfo $fileInfo, iterable $allConstInfos): st
36673683
}
36683684

36693685
/** @param FuncInfo[] $funcInfos */
3670-
function generateFunctionEntries(?Name $className, array $funcInfos): string {
3671-
$code = "";
3686+
function generateFunctionEntries(?Name $className, array $funcInfos, ?string $cond = null): string {
3687+
$code = "\n\n";
3688+
3689+
if ($cond) {
3690+
$code .= "#if {$cond}\n";
3691+
}
36723692

36733693
$functionEntryName = "ext_functions";
36743694
if ($className) {
36753695
$underscoreName = implode("_", $className->parts);
36763696
$functionEntryName = "class_{$underscoreName}_methods";
36773697
}
36783698

3679-
$code .= "\n\nstatic const zend_function_entry {$functionEntryName}[] = {\n";
3699+
$code .= "static const zend_function_entry {$functionEntryName}[] = {\n";
36803700
$code .= generateCodeWithConditions($funcInfos, "", function (FuncInfo $funcInfo) {
36813701
return $funcInfo->getFunctionEntry();
36823702
});
36833703
$code .= "\tZEND_FE_END\n";
36843704
$code .= "};\n";
36853705

3706+
if ($cond) {
3707+
$code .= "#endif\n";
3708+
}
3709+
36863710
return $code;
36873711
}
36883712

0 commit comments

Comments
 (0)