Skip to content

Commit ee2fa92

Browse files
committed
Merge pull request #46 from BitOne/php7
Simplifies code and add summary analyzer
2 parents fecfcae + 6e8e70b commit ee2fa92

File tree

7 files changed

+102
-278
lines changed

7 files changed

+102
-278
lines changed

.travis.yml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,11 @@ before_script:
1919
- phpenv config-rm xdebug.ini
2020

2121
script:
22-
- cd php$(echo $TRAVIS_PHP_VERSION | cut -b 1)/
22+
- cd extension/php$(echo $TRAVIS_PHP_VERSION | cut -b 1)/
2323
- phpize
24-
- configure
24+
- ./configure
2525
- make
26-
- make test
27-
28-
after_script:
29-
- ./.travis.scripts/show-errors.sh
26+
- REPORT_EXIT_STATUS=1 make test
27+
- cd ../../analyzer
28+
- composer install
29+
- vendor/bin/phpspec run

extension/php5/meminfo.c

Lines changed: 30 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ PHP_FUNCTION(meminfo_info_dump)
6464
php_stream_printf(stream TSRMLS_CC, "{\n");
6565

6666
php_stream_printf(stream TSRMLS_CC, "\"header\":\n");
67-
php_stream_printf(stream TSRMLS_CC, meminfo_info_dump_header(header, sizeof(header)));
67+
php_stream_printf(stream TSRMLS_CC, meminfo_info_dump_header(header, sizeof(header) TSRMLS_CC));
6868
php_stream_printf(stream TSRMLS_CC, ",\n");
6969

7070
php_stream_printf(stream TSRMLS_CC, "\"items\": {\n");
@@ -84,28 +84,28 @@ PHP_FUNCTION(meminfo_info_dump)
8484
// Switch the active frame to the current browsed one and rebuild the symbol table
8585
// to get it right
8686
EG(current_execute_data) = exec_frame;
87-
zend_rebuild_symbol_table();
87+
zend_rebuild_symbol_table(TSRMLS_C);
8888
symbol_table = EG(active_symbol_table);
8989

9090
// Once we have the symbol table, switch to the prev frame to get the right frame name
9191
exec_frame = exec_frame->prev_execute_data;
9292

9393
if (exec_frame) {
94-
meminfo_build_frame_label(frame_label, sizeof(frame_label), exec_frame);
94+
meminfo_build_frame_label(frame_label, sizeof(frame_label), exec_frame TSRMLS_CC);
9595

96-
meminfo_browse_zvals_from_symbol_table(stream, frame_label, symbol_table, visited_items, &first_element);
96+
meminfo_browse_zvals_from_symbol_table(stream, frame_label, symbol_table, visited_items, &first_element TSRMLS_CC);
9797

9898
exec_frame = exec_frame->prev_execute_data;
9999
}
100100
}
101101
EG(current_execute_data) = init_exec_frame;
102-
zend_rebuild_symbol_table();
102+
zend_rebuild_symbol_table(TSRMLS_C);
103103

104104
global_symbol_table = &EG(symbol_table);
105105

106106
strcpy(frame_label, "<GLOBAL>");
107107

108-
meminfo_browse_zvals_from_symbol_table(stream, frame_label, global_symbol_table, visited_items, &first_element);
108+
meminfo_browse_zvals_from_symbol_table(stream, frame_label, global_symbol_table, visited_items, &first_element TSRMLS_CC);
109109

110110
php_stream_printf(stream TSRMLS_CC, "\n }\n");
111111
php_stream_printf(stream TSRMLS_CC, "}\n}\n");
@@ -121,7 +121,7 @@ PHP_FUNCTION(meminfo_info_dump)
121121
*
122122
* @return char * class name
123123
*/
124-
const char * meminfo_get_classname(zend_object_handle handle)
124+
const char * meminfo_get_classname(zend_object_handle handle TSRMLS_DC)
125125
{
126126
zend_objects_store *objects = &EG(objects_store);
127127
zend_object *object;
@@ -141,7 +141,7 @@ const char * meminfo_get_classname(zend_object_handle handle)
141141
return class_name;
142142
}
143143

144-
void meminfo_browse_zvals_from_symbol_table(php_stream *stream, char* frame_label, HashTable *symbol_table, HashTable * visited_items, int *first_element)
144+
void meminfo_browse_zvals_from_symbol_table(php_stream *stream, char* frame_label, HashTable *symbol_table, HashTable * visited_items, int *first_element TSRMLS_DC)
145145
{
146146
zval **zval_to_dump;
147147
HashPosition pos;
@@ -155,13 +155,13 @@ void meminfo_browse_zvals_from_symbol_table(php_stream *stream, char* frame_labe
155155

156156
zend_hash_get_current_key_ex(symbol_table, &key, &key_len, &num_key, 0, &pos);
157157

158-
meminfo_zval_dump(stream, frame_label, key, *zval_to_dump, visited_items, first_element);
158+
meminfo_zval_dump(stream, frame_label, key, *zval_to_dump, visited_items, first_element TSRMLS_CC);
159159

160160
zend_hash_move_forward_ex(symbol_table, &pos);
161161
}
162162
}
163163

164-
int meminfo_visit_item(const char * item_label, HashTable *visited_items)
164+
int meminfo_visit_item(const char * item_label, HashTable *visited_items TSRMLS_DC)
165165
{
166166
int found = 0;
167167
int isset = 1;
@@ -176,7 +176,7 @@ int meminfo_visit_item(const char * item_label, HashTable *visited_items)
176176
return found;
177177
}
178178

179-
void meminfo_hash_dump(php_stream *stream, HashTable *ht, zend_bool is_object, HashTable *visited_items, int *first_element)
179+
void meminfo_hash_dump(php_stream *stream, HashTable *ht, zend_bool is_object, HashTable *visited_items, int *first_element TSRMLS_DC)
180180
{
181181
zval **zval;
182182
char *key, *char_buf;;
@@ -205,11 +205,11 @@ void meminfo_hash_dump(php_stream *stream, HashTable *ht, zend_bool is_object, H
205205
if (is_object) {
206206
const char *property_name, *class_name;
207207
zend_unmangle_property_name(key, key_len - 1, &class_name, &property_name);
208-
char_buf = meminfo_escape_for_json(property_name);
208+
char_buf = meminfo_escape_for_json(property_name TSRMLS_CC);
209209
php_stream_printf(stream TSRMLS_CC, " \"%s\":\"%p\"", char_buf, *zval );
210210
efree(char_buf);
211211
} else {
212-
char_buf = meminfo_escape_for_json(key);
212+
char_buf = meminfo_escape_for_json(key TSRMLS_CC);
213213
php_stream_printf(stream TSRMLS_CC, " \"%s\":\"%p\"", char_buf, *zval );
214214
efree(char_buf);
215215
}
@@ -226,18 +226,18 @@ void meminfo_hash_dump(php_stream *stream, HashTable *ht, zend_bool is_object, H
226226

227227
zend_hash_internal_pointer_reset_ex(ht, &pos);
228228
while (zend_hash_get_current_data_ex(ht, (void **) &zval, &pos) == SUCCESS) {
229-
meminfo_zval_dump(stream, NULL, NULL, *zval, visited_items, first_element);
229+
meminfo_zval_dump(stream, NULL, NULL, *zval, visited_items, first_element TSRMLS_CC);
230230
zend_hash_move_forward_ex(ht, &pos);
231231
}
232232
}
233233

234-
void meminfo_zval_dump(php_stream * stream, char * frame_label, char * symbol_name, zval * zv, HashTable *visited_items, int *first_element)
234+
void meminfo_zval_dump(php_stream * stream, char * frame_label, char * symbol_name, zval * zv, HashTable *visited_items, int *first_element TSRMLS_DC)
235235
{
236236
char zval_id[16];
237237
char *char_buf;
238238
sprintf(zval_id, "%p", zv);
239239

240-
if (meminfo_visit_item(zval_id, visited_items)) {
240+
if (meminfo_visit_item(zval_id, visited_items TSRMLS_CC)) {
241241
return;
242242
}
243243

@@ -249,16 +249,16 @@ void meminfo_zval_dump(php_stream * stream, char * frame_label, char * symbol_na
249249

250250
php_stream_printf(stream TSRMLS_CC, " \"%s\" : {\n", zval_id);
251251
php_stream_printf(stream TSRMLS_CC, " \"type\" : \"%s\",\n", zend_get_type_by_const(Z_TYPE_P(zv)));
252-
php_stream_printf(stream TSRMLS_CC, " \"size\" : \"%ld\",\n", meminfo_get_element_size(zv));
252+
php_stream_printf(stream TSRMLS_CC, " \"size\" : \"%ld\",\n", meminfo_get_element_size(zv TSRMLS_CC));
253253

254254
if (frame_label) {
255255
if (symbol_name) {
256-
char_buf = meminfo_escape_for_json(symbol_name);
256+
char_buf = meminfo_escape_for_json(symbol_name TSRMLS_CC);
257257
php_stream_printf(stream TSRMLS_CC, " \"symbol_name\" : \"%s\",\n", char_buf);
258258
efree(char_buf);
259259
}
260260
php_stream_printf(stream TSRMLS_CC, " \"is_root\" : true,\n");
261-
char_buf = meminfo_escape_for_json(frame_label);
261+
char_buf = meminfo_escape_for_json(frame_label TSRMLS_CC);
262262
php_stream_printf(stream TSRMLS_CC, " \"frame\" : \"%s\"\n", char_buf);
263263
efree(char_buf);
264264
} else {
@@ -273,15 +273,15 @@ void meminfo_zval_dump(php_stream * stream, char * frame_label, char * symbol_na
273273
int is_temp;
274274

275275
php_stream_printf(stream TSRMLS_CC, ",\n");
276-
char_buf = meminfo_escape_for_json(meminfo_get_classname(zv->value.obj.handle));
276+
char_buf = meminfo_escape_for_json(meminfo_get_classname(zv->value.obj.handle TSRMLS_CC) TSRMLS_CC);
277277
php_stream_printf(stream TSRMLS_CC, " \"class\" : \"%s\",\n", char_buf);
278278
efree(char_buf);
279279
php_stream_printf(stream TSRMLS_CC, " \"object_handle\" : \"%d\",\n", zv->value.obj.handle);
280280

281281
properties = Z_OBJDEBUG_P(zv, is_temp);
282282

283283
if (properties != NULL) {
284-
meminfo_hash_dump(stream, properties, 1, visited_items, first_element);
284+
meminfo_hash_dump(stream, properties, 1, visited_items, first_element TSRMLS_CC);
285285

286286
if (is_temp) {
287287
zend_hash_destroy(properties);
@@ -290,7 +290,7 @@ void meminfo_zval_dump(php_stream * stream, char * frame_label, char * symbol_na
290290
}
291291
} else if (Z_TYPE_P(zv) == IS_ARRAY) {
292292
php_stream_printf(stream TSRMLS_CC, ",\n");
293-
meminfo_hash_dump(stream, zv->value.ht, 0, visited_items, first_element);
293+
meminfo_hash_dump(stream, zv->value.ht, 0, visited_items, first_element TSRMLS_CC);
294294
} else {
295295
php_stream_printf(stream TSRMLS_CC, "\n");
296296
}
@@ -303,7 +303,7 @@ void meminfo_zval_dump(php_stream * stream, char * frame_label, char * symbol_na
303303
*
304304
* @return zend_ulong
305305
*/
306-
zend_ulong meminfo_get_element_size(zval *zv)
306+
zend_ulong meminfo_get_element_size(zval *zv TSRMLS_DC)
307307
{
308308
zend_ulong size;
309309

@@ -330,7 +330,7 @@ zend_ulong meminfo_get_element_size(zval *zv)
330330
* Build the current frame label based on function name and object class
331331
* if necessary
332332
*/
333-
void meminfo_build_frame_label(char* frame_label, int frame_label_len, zend_execute_data* frame)
333+
void meminfo_build_frame_label(char* frame_label, int frame_label_len, zend_execute_data* frame TSRMLS_DC)
334334
{
335335
const char* function_name;
336336
const char *class_name = NULL;
@@ -418,7 +418,7 @@ void meminfo_build_frame_label(char* frame_label, int frame_label_len, zend_exec
418418
/**
419419
* Escape the \ and " characters for JSON encoding
420420
*/
421-
char * meminfo_escape_for_json(const char *s)
421+
char * meminfo_escape_for_json(const char *s TSRMLS_DC)
422422
{
423423
int new_str_len;
424424
char *s1, *s2;
@@ -437,18 +437,18 @@ char * meminfo_escape_for_json(const char *s)
437437
* Generate a JSON header for the meminfo
438438
*
439439
*/
440-
char * meminfo_info_dump_header(char * header, int header_len)
440+
char * meminfo_info_dump_header(char * header, int header_len TSRMLS_DC)
441441
{
442442
size_t memory_usage;
443443
size_t memory_usage_real;
444444
size_t peak_memory_usage;
445445
size_t peak_memory_usage_real;
446446

447-
memory_usage = zend_memory_usage(0);
448-
memory_usage_real = zend_memory_usage(1);
447+
memory_usage = zend_memory_usage(0 TSRMLS_CC);
448+
memory_usage_real = zend_memory_usage(1 TSRMLS_CC);
449449

450-
peak_memory_usage = zend_memory_peak_usage(0);
451-
peak_memory_usage_real = zend_memory_peak_usage(1);
450+
peak_memory_usage = zend_memory_peak_usage(0 TSRMLS_CC);
451+
peak_memory_usage_real = zend_memory_peak_usage(1 TSRMLS_CC);
452452

453453
snprintf(
454454
header,

extension/php5/php_meminfo.h

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,22 +9,22 @@
99
#define MEMINFO_COPYRIGHT "Copyright (c) 2010-2017 by Benoit Jacquemont"
1010
#define MEMINFO_COPYRIGHT_SHORT "Copyright (c) 2011-2017"
1111

12-
PHP_FUNCTION(meminfo_info_dump);
12+
extern zend_module_entry meminfo_entry;
1313

14-
const char * meminfo_get_classname(zend_object_handle handle);
15-
zend_ulong meminfo_get_element_size(zval* z);
14+
PHP_FUNCTION(meminfo_info_dump);
1615

17-
void meminfo_zval_dump(php_stream * stream, char * frame_label, char * symbol_name, zval * zv, HashTable *visited_items, int *first_element);
18-
void meminfo_hash_dump(php_stream *stream, HashTable *ht, zend_bool is_object, HashTable *visited_items, int *first_element);
19-
void meminfo_browse_zvals_from_symbol_table(php_stream *stream, char * frame_label, HashTable *symbol_table, HashTable * visited_items, int *first_element);
20-
void meminfo_browse_zvals_from_op_array(php_stream *stream, char * frame_label, zend_op_array *op_array, zend_execute_data *exec_frame, HashTable * visited_items, int *first_element);
21-
int meminfo_visit_item(const char * item_label, HashTable *visited_items);
16+
const char * meminfo_get_classname(zend_object_handle handle TSRMLS_DC);
17+
zend_ulong meminfo_get_element_size(zval* z TSRMLS_DC);
2218

23-
void meminfo_build_frame_label(char * frame_label, int frame_label_len, zend_execute_data* frame);
19+
void meminfo_zval_dump(php_stream * stream, char * frame_label, char * symbol_name, zval * zv, HashTable *visited_items, int *first_element TSRMLS_DC);
20+
void meminfo_hash_dump(php_stream *stream, HashTable *ht, zend_bool is_object, HashTable *visited_items, int *first_element TSRMLS_DC);
21+
void meminfo_browse_zvals_from_symbol_table(php_stream *stream, char * frame_label, HashTable *symbol_table, HashTable * visited_items, int *first_element TSRMLS_DC);
22+
void meminfo_browse_zvals_from_op_array(php_stream *stream, char * frame_label, zend_op_array *op_array, zend_execute_data *exec_frame, HashTable * visited_items, int *first_element TSRMLS_DC);
23+
int meminfo_visit_item(const char * item_label, HashTable *visited_items TSRMLS_DC);
2424

25-
char * meminfo_escape_for_json(const char *s);
26-
char * meminfo_info_dump_header(char * header, int header_len);
25+
void meminfo_build_frame_label(char * frame_label, int frame_label_len, zend_execute_data* frame TSRMLS_DC);
2726

28-
extern zend_module_entry meminfo_entry;
27+
char * meminfo_escape_for_json(const char *s TSRMLS_DC);
28+
char * meminfo_info_dump_header(char * header, int header_len TSRMLS_DC);
2929

3030
#endif

extension/php5/tests/info_dump.phpt

Lines changed: 0 additions & 115 deletions
This file was deleted.

0 commit comments

Comments
 (0)