zend_register_seen_symbol(lcname, ZEND_SYMBOL_CLASS);
} else {
- name = zend_generate_anon_class_name(decl);
- lcname = zend_string_tolower(name);
+ /* Find an anon class name that is not in use yet. */
+ name = NULL;
+ lcname = NULL;
+ do {
+ zend_tmp_string_release(name);
+ zend_tmp_string_release(lcname);
- name = zend_generate_anon_class_name(decl->start_lineno);
++ name = zend_generate_anon_class_name(decl);
+ lcname = zend_string_tolower(name);
+ } while (zend_hash_exists(CG(class_table), lcname));
}
lcname = zend_new_interned_string(lcname);
if (decl->flags & ZEND_ACC_ANON_CLASS) {
opline->opcode = ZEND_DECLARE_ANON_CLASS;
opline->extended_value = zend_alloc_cache_slot();
- opline->result_type = IS_VAR;
- opline->result.var = get_temporary_variable();
+ zend_make_var_result(result, opline);
if (!zend_hash_add_ptr(CG(class_table), lcname, ce)) {
+ /* We checked above that the class name is not used. This really shouldn't happen. */
zend_error_noreturn(E_ERROR,
"Runtime definition key collision for %s. This is a bug", ZSTR_VAL(name));
}