Skip to content

Commit 0f68c9c

Browse files
committed
PHP8 support
1 parent f80bbb8 commit 0f68c9c

File tree

2 files changed

+110
-46
lines changed

2 files changed

+110
-46
lines changed

arginfo.h

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
/**
2+
* This file is part of PHPinnacle/Buffer.
3+
*
4+
* (c) PHPinnacle Team <dev@phpinnacle.com>
5+
*
6+
* For the full copyright and license information, please view the LICENSE
7+
* file that was distributed with this source code.
8+
*/
9+
10+
#ifndef EXT_BUFFER_ARGINFO_H
11+
#define EXT_BUFFER_ARGINFO_H
12+
13+
ZEND_BEGIN_ARG_INFO_EX(arginfo_construct, 0, 0, 0)
14+
ZEND_END_ARG_INFO();
15+
16+
ZEND_BEGIN_ARG_INFO_EX(arginfo_empty, 0, 0, 0)
17+
ZEND_END_ARG_INFO();
18+
19+
ZEND_BEGIN_ARG_INFO_EX(arginfo_bool, 0, 0, 0)
20+
ZEND_ARG_TYPE_INFO(0, value, _IS_BOOL, 0)
21+
ZEND_END_ARG_INFO();
22+
23+
ZEND_BEGIN_ARG_INFO_EX(arginfo_int, 0, 0, 0)
24+
ZEND_ARG_TYPE_INFO(0, value, IS_LONG, 0)
25+
ZEND_END_ARG_INFO();
26+
27+
ZEND_BEGIN_ARG_INFO_EX(arginfo_float, 0, 0, 0)
28+
ZEND_ARG_TYPE_INFO(0, value, IS_DOUBLE, 0)
29+
ZEND_END_ARG_INFO();
30+
31+
ZEND_BEGIN_ARG_INFO_EX(arginfo_string, 0, 0, 0)
32+
ZEND_ARG_TYPE_INFO(0, value, IS_STRING, 0)
33+
ZEND_END_ARG_INFO();
34+
35+
ZEND_BEGIN_ARG_INFO_EX(arginfo_offset, 0, 0, 0)
36+
ZEND_ARG_TYPE_INFO(0, offset, IS_LONG, 0)
37+
ZEND_END_ARG_INFO();
38+
39+
ZEND_BEGIN_ARG_INFO_EX(arginfo_read, 0, 0, 0)
40+
ZEND_ARG_TYPE_INFO(0, size, IS_LONG, 0)
41+
ZEND_ARG_TYPE_INFO(0, offset, IS_LONG, 0)
42+
ZEND_END_ARG_INFO();
43+
44+
ZEND_BEGIN_ARG_INFO_EX(arginfo_count, 0, 0, 0)
45+
ZEND_ARG_TYPE_INFO(0, arginfo_count, IS_LONG, 0)
46+
ZEND_END_ARG_INFO();
47+
48+
#endif

buffer.cc

Lines changed: 62 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
*/
99

1010
#include "php_buffer.h"
11+
#include "arginfo.h"
1112
#include "Buffer.hpp"
1213

1314
#define GUARD_SIZE(b, s) { if (guard_data_size(b, s) == false) return; }
@@ -663,58 +664,58 @@ PHP_METHOD(ByteBuffer, consumeDouble)
663664
}
664665

665666
static zend_function_entry buffer_object_methods[] = {
666-
PHP_ME(ByteBuffer, __construct, NULL, ZEND_ACC_CTOR | ZEND_ACC_PUBLIC)
667-
PHP_ME(ByteBuffer, __toString, NULL, ZEND_ACC_PUBLIC)
668-
PHP_ME(ByteBuffer, bytes, NULL, ZEND_ACC_PUBLIC)
669-
PHP_ME(ByteBuffer, size, NULL, ZEND_ACC_PUBLIC)
670-
PHP_ME(ByteBuffer, empty, NULL, ZEND_ACC_PUBLIC)
671-
PHP_ME(ByteBuffer, append, NULL, ZEND_ACC_PUBLIC)
672-
PHP_ME(ByteBuffer, read, NULL, ZEND_ACC_PUBLIC)
673-
PHP_ME(ByteBuffer, consume, NULL, ZEND_ACC_PUBLIC)
674-
PHP_ME(ByteBuffer, discard, NULL, ZEND_ACC_PUBLIC)
675-
PHP_ME(ByteBuffer, slice, NULL, ZEND_ACC_PUBLIC)
676-
PHP_ME(ByteBuffer, shift, NULL, ZEND_ACC_PUBLIC)
677-
PHP_ME(ByteBuffer, flush, NULL, ZEND_ACC_PUBLIC)
667+
PHP_ME(ByteBuffer, __construct, arginfo_construct, ZEND_ACC_CTOR | ZEND_ACC_PUBLIC)
668+
PHP_ME(ByteBuffer, __toString, arginfo_empty, ZEND_ACC_PUBLIC)
669+
PHP_ME(ByteBuffer, bytes, arginfo_empty, ZEND_ACC_PUBLIC)
670+
PHP_ME(ByteBuffer, size, arginfo_empty, ZEND_ACC_PUBLIC)
671+
PHP_ME(ByteBuffer, empty, arginfo_empty, ZEND_ACC_PUBLIC)
672+
PHP_ME(ByteBuffer, append, arginfo_string, ZEND_ACC_PUBLIC)
673+
PHP_ME(ByteBuffer, read, arginfo_read, ZEND_ACC_PUBLIC)
674+
PHP_ME(ByteBuffer, consume, arginfo_count, ZEND_ACC_PUBLIC)
675+
PHP_ME(ByteBuffer, discard, arginfo_count, ZEND_ACC_PUBLIC)
676+
PHP_ME(ByteBuffer, slice, arginfo_read, ZEND_ACC_PUBLIC)
677+
PHP_ME(ByteBuffer, shift, arginfo_count, ZEND_ACC_PUBLIC)
678+
PHP_ME(ByteBuffer, flush, arginfo_empty, ZEND_ACC_PUBLIC)
678679
// BOOL
679-
PHP_ME(ByteBuffer, appendBool, NULL, ZEND_ACC_PUBLIC)
680-
PHP_ME(ByteBuffer, readBool, NULL, ZEND_ACC_PUBLIC)
681-
PHP_ME(ByteBuffer, consumeBool, NULL, ZEND_ACC_PUBLIC)
680+
PHP_ME(ByteBuffer, appendBool, arginfo_bool, ZEND_ACC_PUBLIC)
681+
PHP_ME(ByteBuffer, readBool, arginfo_offset, ZEND_ACC_PUBLIC)
682+
PHP_ME(ByteBuffer, consumeBool, arginfo_empty, ZEND_ACC_PUBLIC)
682683
// INT 8
683-
PHP_ME(ByteBuffer, appendInt8, NULL, ZEND_ACC_PUBLIC)
684-
PHP_ME(ByteBuffer, readInt8, NULL, ZEND_ACC_PUBLIC)
685-
PHP_ME(ByteBuffer, consumeInt8, NULL, ZEND_ACC_PUBLIC)
686-
PHP_ME(ByteBuffer, appendUInt8, NULL, ZEND_ACC_PUBLIC)
687-
PHP_ME(ByteBuffer, readUInt8, NULL, ZEND_ACC_PUBLIC)
688-
PHP_ME(ByteBuffer, consumeUInt8, NULL, ZEND_ACC_PUBLIC)
684+
PHP_ME(ByteBuffer, appendInt8, arginfo_int, ZEND_ACC_PUBLIC)
685+
PHP_ME(ByteBuffer, readInt8, arginfo_offset, ZEND_ACC_PUBLIC)
686+
PHP_ME(ByteBuffer, consumeInt8, arginfo_empty, ZEND_ACC_PUBLIC)
687+
PHP_ME(ByteBuffer, appendUInt8, arginfo_int, ZEND_ACC_PUBLIC)
688+
PHP_ME(ByteBuffer, readUInt8, arginfo_offset, ZEND_ACC_PUBLIC)
689+
PHP_ME(ByteBuffer, consumeUInt8, arginfo_empty, ZEND_ACC_PUBLIC)
689690
// INT 16
690-
PHP_ME(ByteBuffer, appendInt16, NULL, ZEND_ACC_PUBLIC)
691-
PHP_ME(ByteBuffer, readInt16, NULL, ZEND_ACC_PUBLIC)
692-
PHP_ME(ByteBuffer, consumeInt16, NULL, ZEND_ACC_PUBLIC)
693-
PHP_ME(ByteBuffer, appendUInt16, NULL, ZEND_ACC_PUBLIC)
694-
PHP_ME(ByteBuffer, readUInt16, NULL, ZEND_ACC_PUBLIC)
695-
PHP_ME(ByteBuffer, consumeUInt16, NULL, ZEND_ACC_PUBLIC)
691+
PHP_ME(ByteBuffer, appendInt16, arginfo_int, ZEND_ACC_PUBLIC)
692+
PHP_ME(ByteBuffer, readInt16, arginfo_offset, ZEND_ACC_PUBLIC)
693+
PHP_ME(ByteBuffer, consumeInt16, arginfo_empty, ZEND_ACC_PUBLIC)
694+
PHP_ME(ByteBuffer, appendUInt16, arginfo_int, ZEND_ACC_PUBLIC)
695+
PHP_ME(ByteBuffer, readUInt16, arginfo_offset, ZEND_ACC_PUBLIC)
696+
PHP_ME(ByteBuffer, consumeUInt16, arginfo_empty, ZEND_ACC_PUBLIC)
696697
// INT 32
697-
PHP_ME(ByteBuffer, appendInt32, NULL, ZEND_ACC_PUBLIC)
698-
PHP_ME(ByteBuffer, readInt32, NULL, ZEND_ACC_PUBLIC)
699-
PHP_ME(ByteBuffer, consumeInt32, NULL, ZEND_ACC_PUBLIC)
700-
PHP_ME(ByteBuffer, appendUInt32, NULL, ZEND_ACC_PUBLIC)
701-
PHP_ME(ByteBuffer, readUInt32, NULL, ZEND_ACC_PUBLIC)
702-
PHP_ME(ByteBuffer, consumeUInt32, NULL, ZEND_ACC_PUBLIC)
698+
PHP_ME(ByteBuffer, appendInt32, arginfo_int, ZEND_ACC_PUBLIC)
699+
PHP_ME(ByteBuffer, readInt32, arginfo_offset, ZEND_ACC_PUBLIC)
700+
PHP_ME(ByteBuffer, consumeInt32, arginfo_empty, ZEND_ACC_PUBLIC)
701+
PHP_ME(ByteBuffer, appendUInt32, arginfo_int, ZEND_ACC_PUBLIC)
702+
PHP_ME(ByteBuffer, readUInt32, arginfo_offset, ZEND_ACC_PUBLIC)
703+
PHP_ME(ByteBuffer, consumeUInt32, arginfo_empty, ZEND_ACC_PUBLIC)
703704
// INT 64
704-
PHP_ME(ByteBuffer, appendInt64, NULL, ZEND_ACC_PUBLIC)
705-
PHP_ME(ByteBuffer, readInt64, NULL, ZEND_ACC_PUBLIC)
706-
PHP_ME(ByteBuffer, consumeInt64, NULL, ZEND_ACC_PUBLIC)
707-
PHP_ME(ByteBuffer, appendUInt64, NULL, ZEND_ACC_PUBLIC)
708-
PHP_ME(ByteBuffer, readUInt64, NULL, ZEND_ACC_PUBLIC)
709-
PHP_ME(ByteBuffer, consumeUInt64, NULL, ZEND_ACC_PUBLIC)
705+
PHP_ME(ByteBuffer, appendInt64, arginfo_int, ZEND_ACC_PUBLIC)
706+
PHP_ME(ByteBuffer, readInt64, arginfo_offset, ZEND_ACC_PUBLIC)
707+
PHP_ME(ByteBuffer, consumeInt64, arginfo_empty, ZEND_ACC_PUBLIC)
708+
PHP_ME(ByteBuffer, appendUInt64, arginfo_int, ZEND_ACC_PUBLIC)
709+
PHP_ME(ByteBuffer, readUInt64, arginfo_offset, ZEND_ACC_PUBLIC)
710+
PHP_ME(ByteBuffer, consumeUInt64, arginfo_empty, ZEND_ACC_PUBLIC)
710711
// FLOAT
711-
PHP_ME(ByteBuffer, appendFloat, NULL, ZEND_ACC_PUBLIC)
712-
PHP_ME(ByteBuffer, readFloat, NULL, ZEND_ACC_PUBLIC)
713-
PHP_ME(ByteBuffer, consumeFloat, NULL, ZEND_ACC_PUBLIC)
712+
PHP_ME(ByteBuffer, appendFloat, arginfo_float, ZEND_ACC_PUBLIC)
713+
PHP_ME(ByteBuffer, readFloat, arginfo_offset, ZEND_ACC_PUBLIC)
714+
PHP_ME(ByteBuffer, consumeFloat, arginfo_empty, ZEND_ACC_PUBLIC)
714715
// DOUBLE
715-
PHP_ME(ByteBuffer, appendDouble, NULL, ZEND_ACC_PUBLIC)
716-
PHP_ME(ByteBuffer, readDouble, NULL, ZEND_ACC_PUBLIC)
717-
PHP_ME(ByteBuffer, consumeDouble, NULL, ZEND_ACC_PUBLIC)
716+
PHP_ME(ByteBuffer, appendDouble, arginfo_float, ZEND_ACC_PUBLIC)
717+
PHP_ME(ByteBuffer, readDouble, arginfo_offset, ZEND_ACC_PUBLIC)
718+
PHP_ME(ByteBuffer, consumeDouble, arginfo_empty, ZEND_ACC_PUBLIC)
718719

719720
PHP_FE_END
720721
};
@@ -732,9 +733,10 @@ static zend_object* buffer_object_create(zend_class_entry *ce) {
732733
return ret;
733734
}
734735

736+
#if PHP_VERSION_ID < 80000
735737
static zend_object *buffer_object_clone(zval *object)
736738
{
737-
buffer_object *old_obj = buffer_object_from_zend_object(Z_OBJ_P(object));
739+
buffer_object *old_obj = buffer_object_from_zend_object(Z_OBJ_P(object));
738740
buffer_object *new_obj = buffer_object_from_zend_object(buffer_object_create(old_obj->std.ce));
739741

740742
zend_objects_clone_members(&new_obj->std, &old_obj->std);
@@ -744,6 +746,20 @@ static zend_object *buffer_object_clone(zval *object)
744746

745747
return &new_obj->std;
746748
}
749+
#else
750+
static zend_object *buffer_object_clone(zend_object *object)
751+
{
752+
buffer_object *old_obj = buffer_object_from_zend_object(object);
753+
buffer_object *new_obj = buffer_object_from_zend_object(buffer_object_create(old_obj->std.ce));
754+
755+
zend_objects_clone_members(&new_obj->std, &old_obj->std);
756+
757+
new_obj->data = new Buffer();
758+
new_obj->data->merge(*old_obj->data);
759+
760+
return &new_obj->std;
761+
}
762+
#endif
747763

748764
static void buffer_object_free(zend_object *zobj)
749765
{

0 commit comments

Comments
 (0)