Skip to content

Commit e91b2b8

Browse files
committed
fix stuff
1 parent 52e85af commit e91b2b8

File tree

7 files changed

+21
-43
lines changed

7 files changed

+21
-43
lines changed

Zend/tests/type_declarations/abstract_generics/extended_interface_abstract_generic_types_basic.phpt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@ Abstract generic type behaviour in extended interface
33
--FILE--
44
<?php
55

6-
interface IWG<T1> {
6+
interface I<T1> {
77
public function foo(T1 $param): T1;
88
}
99

10-
interface I2<T2> extends IWG<T2> {
10+
interface I2<T2> extends I<T2> {
1111
public function bar(int $o, T2 $param): T2;
1212
}
1313

Zend/zend.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -732,7 +732,6 @@ static void compiler_globals_ctor(zend_compiler_globals *compiler_globals) /* {{
732732

733733
compiler_globals->script_encoding_list = NULL;
734734
compiler_globals->current_linking_class = NULL;
735-
compiler_globals->bound_associated_types = NULL;
736735

737736
/* Map region is going to be created and resized at run-time. */
738737
compiler_globals->map_ptr_real_base = NULL;

Zend/zend.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,8 @@ struct _zend_class_entry {
218218
zend_trait_precedence **trait_precedences;
219219
HashTable *attributes;
220220

221-
/* Only for interfaces */
221+
/* The bound_types HashTable is a map: "lower_case_interface_names" => map<int|string, zend_type>
222+
* Where an integer index refers to the position, and the string to the name of the generic parameter */
222223
HashTable *bound_types;
223224
zend_generic_parameter *generic_parameters;
224225
uint32_t num_generic_parameters;

Zend/zend_compile.c

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -465,7 +465,6 @@ void init_compiler(void) /* {{{ */
465465
CG(delayed_autoloads) = NULL;
466466
CG(unlinked_uses) = NULL;
467467
CG(current_linking_class) = NULL;
468-
CG(bound_generic_types) = NULL;
469468
}
470469
/* }}} */
471470

@@ -494,12 +493,6 @@ void shutdown_compiler(void) /* {{{ */
494493
CG(unlinked_uses) = NULL;
495494
}
496495
CG(current_linking_class) = NULL;
497-
/* This can happen during a fatal error */
498-
if (CG(bound_generic_types)) {
499-
zend_hash_destroy(CG(bound_generic_types));
500-
FREE_HASHTABLE(CG(bound_generic_types));
501-
CG(bound_generic_types) = NULL;
502-
}
503496
}
504497
/* }}} */
505498

Zend/zend_globals.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -151,8 +151,6 @@ struct _zend_compiler_globals {
151151
HashTable *delayed_autoloads;
152152
HashTable *unlinked_uses;
153153
zend_class_entry *current_linking_class;
154-
/* Those are initialized and destroyed by zend_do_inheritance_ex() */
155-
HashTable *bound_generic_types;
156154

157155
uint32_t rtd_key_counter;
158156

Zend/zend_opcode.c

Lines changed: 17 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -333,6 +333,23 @@ ZEND_API void destroy_zend_class(zval *zv)
333333
return;
334334
}
335335

336+
bool persistent = ce->type == ZEND_INTERNAL_CLASS;
337+
/* Common to internal and user classes */
338+
if (ce->attributes) {
339+
zend_hash_release(ce->attributes);
340+
}
341+
if (ce->bound_types) {
342+
zend_hash_release(ce->bound_types);
343+
}
344+
if (ce->num_generic_parameters > 0) {
345+
for (uint32_t generic_param_index = 0; generic_param_index < ce->num_generic_parameters; generic_param_index++) {
346+
const zend_generic_parameter generic_param = ce->generic_parameters[generic_param_index];
347+
zend_string_release(generic_param.name);
348+
zend_type_release(generic_param.constraint, persistent);
349+
}
350+
pefree(ce->generic_parameters, persistent);
351+
}
352+
336353
switch (ce->type) {
337354
case ZEND_USER_CLASS:
338355
if (!(ce->ce_flags & ZEND_ACC_CACHED)) {
@@ -347,22 +364,6 @@ ZEND_API void destroy_zend_class(zval *zv)
347364
zend_string_release_ex(ce->doc_comment, 0);
348365
}
349366

350-
if (ce->attributes) {
351-
zend_hash_release(ce->attributes);
352-
}
353-
354-
if (ce->bound_types) {
355-
zend_hash_release(ce->bound_types);
356-
}
357-
if (ce->num_generic_parameters > 0) {
358-
for (uint32_t generic_param_index = 0; generic_param_index < ce->num_generic_parameters; generic_param_index++) {
359-
const zend_generic_parameter generic_param = ce->generic_parameters[generic_param_index];
360-
zend_string_release_ex(generic_param.name, false);
361-
zend_type_release(generic_param.constraint, false);
362-
}
363-
efree(ce->generic_parameters);
364-
}
365-
366367
if (ce->num_interfaces > 0 && !(ce->ce_flags & ZEND_ACC_RESOLVED_INTERFACES)) {
367368
uint32_t i;
368369

@@ -536,20 +537,6 @@ ZEND_API void destroy_zend_class(zval *zv)
536537
if (ce->properties_info_table) {
537538
free(ce->properties_info_table);
538539
}
539-
if (ce->attributes) {
540-
zend_hash_release(ce->attributes);
541-
}
542-
if (ce->bound_types) {
543-
zend_hash_release(ce->bound_types);
544-
}
545-
if (ce->num_generic_parameters > 0) {
546-
for (uint32_t generic_param_index = 0; generic_param_index < ce->num_generic_parameters; generic_param_index++) {
547-
const zend_generic_parameter generic_param = ce->generic_parameters[generic_param_index];
548-
zend_string_release(generic_param.name);
549-
zend_type_release(generic_param.constraint, true);
550-
}
551-
free(ce->generic_parameters);
552-
}
553540
free(ce);
554541
break;
555542
}

0 commit comments

Comments
 (0)