Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 2c9ba90

Browse files
author
Andrew Zenin
committed
First steps to php7 support
1 parent 9814ac6 commit 2c9ba90

File tree

8 files changed

+171
-52
lines changed

8 files changed

+171
-52
lines changed

‎Source/DelphiFunctions.pas

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -692,7 +692,7 @@ procedure RegisterInternalClasses(p : pointer);
692692

693693
begin
694694
{$IFDEF PHP7}
695-
object_functions
695+
!
696696
{$ELSE}
697697
object_functions[0].fname := 'delphi_classname';
698698
object_functions[0].handler := @delphi_object_classname;

‎Source/PHP.INC

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,9 @@ backward compatibility between PHP versions.
6262
{$DEFINE ZEND_WIN32}
6363
{$DEFINE PHP_COMPILER_ID}
6464
{$ENDIF}
65-
{..$DEFINE soulengine_build}
66-
{..$DEFINE PHP7}
67-
{..$DEFINE P_CUT}
65+
{$DEFINE soulengine_build}
66+
{.$DEFINE PHP7}
67+
{.$DEFINE P_CUT}
6868
{$IFDEF PHP7}
6969
{$DEFINE COMPILER_VC14}
7070
{$DEFINE PHP560}

‎Source/PHPAPI.pas

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,7 @@ interface
2929
Windows
3030
{$ENDIF},
3131

32-
ZendTypes,
33-
{$IFDEF PHP7} hzend_types,{$ENDIF}
32+
{$IFDEF PHP7} hzend_types, {$ELSE} ZendTypes, {$ENDIF}
3433
PHPTypes, zendAPI,
3534

3635

‎Source/PHPFunctions.pas

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,7 @@ interface
2323
{$IFDEF PHP_UNICE}WideStrUtils, {$ENDIF}
2424
{$IFDEF VERSION6} Variants,
2525
{$ENDIF}
26-
{$IFDEF PHP7} hzend_types, {$ENDIF}
27-
ZendTypes, PHPTypes, ZendAPI, PHPAPI ;
26+
{$IFDEF PHP7} hzend_types, {$ELSE} ZendTypes, {$ENDIF} PHPTypes, ZendAPI, PHPAPI ;
2827

2928
type
3029
TParamType = (tpString, tpInteger, tpFloat, tpBoolean, tpArray, tpUnknown);

‎Source/PHPTypes.pas

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
interface
1717

1818
uses
19-
{$IFNDEF FPC} Windows{$ELSE} LCLType{$ENDIF}, {$IFDEF PHP7}hzend_types,{$ENDIF} ZENDTypes;
19+
{$IFNDEF FPC} Windows{$ELSE} LCLType{$ENDIF}, {$IFDEF PHP7}hzend_types{$ELSE} ZendTypes {$ENDIF};
2020

2121
{$IFDEF PHP4}
2222
const

‎Source/ZENDAPI.pas

Lines changed: 98 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,7 @@ interface
2121

2222
uses
2323
{$IFNDEF FPC} Windows{$ELSE} LCLType,LCLIntf,dynlibs,libc{$ENDIF}, SysUtils,
24-
{$IFDEF PHP7} hzend_types, {$ENDIF}
25-
ZendTypes, Variants,
24+
{$IFDEF PHP7} hzend_types, {$ElSE} ZendTypes, {$ENDIF} Variants,
2625
PHPTypes;
2726
type
2827
TArrayVariant = array of variant;
@@ -218,8 +217,9 @@ function zend_hash_add(ht : {$IFDEF PHP7}Pzend_array{$ELSE}PHashTable{$ENDIF}; a
218217

219218
var
220219
zend_hash_graceful_destroy : procedure(ht: PHashTable); cdecl;
220+
{$IFNDEF PHP7}
221221
zend_hash_graceful_reverse_destroy : zend_hash_graceful_reverse_destroy_t;
222-
222+
{$ENDIF}
223223
zend_hash_apply : procedure(ht: PHashTable; apply_func: pointer; TSRMLS_DC: Pointer); cdecl;
224224

225225
zend_hash_apply_with_argument : procedure(ht: PHashTable;
@@ -332,8 +332,17 @@ procedure zend_hash_internal_pointer_reset(ht: {$IFDEF PHP7} Pzend_array {$ELSE}
332332

333333
zend_register_constant : function(var c: zend_constant; TSRMLS_DC: Pointer): Integer; cdecl;
334334

335-
zend_register_auto_global : function(name: zend_pchar; name_len: uint; callback: Pointer; TSRMLS_DC: Pointer): Integer; cdecl;
336-
335+
zend_register_auto_global :
336+
{$IFDEF PHP700}
337+
function(name:Pzend_string; jit:zend_bool; auto_global_callback:Pointer):longint; cdecl;
338+
{$ELSE}
339+
{$IFDEF PHP5}
340+
function(name: zend_pchar; name_len: uint; jit:boolean; callback: Pointer; TSRMLS_DC: Pointer): Integer; cdecl;
341+
zend_activate_auto_globals: procedure(TSRMLS_C: Pointer); cdecl;
342+
{$ELSE}
343+
function(name: zend_pchar; name_len: uint; callback: Pointer; TSRMLS_DC: Pointer): Integer; cdecl;
344+
{$ENDIF}
345+
{$ENDIF}
337346
procedure REGISTER_MAIN_LONG_CONSTANT(name: zend_pchar; lval: longint; flags: integer; TSRMLS_DC: Pointer);
338347
procedure REGISTER_MAIN_DOUBLE_CONSTANT(name: zend_pchar; dval: double; flags: integer; TSRMLS_DC: Pointer);
339348
procedure REGISTER_MAIN_STRING_CONSTANT(name: zend_pchar; str: zend_pchar; flags: integer; TSRMLS_DC: Pointer);
@@ -551,17 +560,32 @@ procedure convert_to_string(op: pzval);
551560
{$ELSE}
552561
zend_indent : procedure; cdecl;
553562
{$ENDIF}
554-
ZendGetParameters : function: integer; cdecl;
555-
zend_get_params_ex : function(param_count : Integer; Args : {$IFNDEF PHP700} ppzval {$ELSE} pzval{$ENDIF}) :integer; cdecl varargs;
563+
ZendGetParameters :
564+
{$IFDEF PHP7}
565+
function(ht:longint; param_count:longint):longint; cdecl varargs;
566+
{$ELSE}
567+
function: integer; cdecl;
568+
{$ENDIF}
569+
zend_get_params_ex :
570+
{$IFDEF PHP7}
571+
function(param_count:longint):longint; cdecl varargs;
572+
{$ELSE}
573+
function(param_count : Integer; Args : ppzval) :integer; cdecl varargs;
574+
{$ENDIF}
575+
{$IFDEF PHP7}
576+
ZvalGetArgs: function(Count: Integer; Args: ppzval): Integer;cdecl varargs;
577+
_zend_get_parameters_array_ex:function(param_count:longint; argument_array:Pzval):longint; cdecl;
578+
{$ELSE}
579+
_zend_get_parameters_array_ex : function(param_count: integer; argument_array:
580+
pppzval; TSRMLS_CC: pointer): integer; cdecl;
581+
{$ENDIF}
556582
function zend_get_parameters_ex(number: integer; var Params: pzval_array): integer;
557583
function zend_get_parameters_my(number: integer; var Params: pzval_array; TSRMLS_DC: Pointer): integer;
558-
584+
{$IFNDEF PHP7}
559585
function zend_get_parameters(ht: integer; param_count: integer; Params: array of
560586
ppzval): integer;
587+
{$ENDIF}
561588

562-
var
563-
_zend_get_parameters_array_ex : function(param_count: integer; argument_array:
564-
pppzval; TSRMLS_CC: pointer): integer; cdecl;
565589

566590
procedure dispose_pzval_array(Params: pzval_array);
567591

@@ -869,10 +893,10 @@ function Z_STRVAL(z : Pzval) : zend_ustr;
869893
function Z_STRUVAL(z : PZval): UTF8String;
870894
function Z_STRWVAL(z : pzval) : String;
871895
function Z_STRLEN(z : Pzval) : longint;
872-
function Z_ARRVAL(z : Pzval ) : {$IFDEF PHP7}Pzend_array{$ELSE}PHashTable{$ENDIF};
873-
function Z_OBJ_HANDLE(z :Pzval) : zend_object_handle;
874-
function Z_OBJ_HT(z : Pzval) : {$IFDEF PHP7}hzend_types.P_zend_object_handlers{$ELSE}pzend_object_handlers{$ENDIF};
875-
function Z_OBJPROP(z : Pzval) : {$IFDEF PHP7}hzend_types.PHashTable{$ELSE}PHashTable{$ENDIF};
896+
function Z_ARRVAL(z : Pzval ) : PHashTable;
897+
function Z_OBJ_HANDLE(z :Pzval) : {$IFDEF PHP7} P_zend_object_handlers {$ELSE}zend_object_handle{$ENDIF};
898+
function Z_OBJ_HT(z : Pzval) : {$IFDEF PHP7}P_zend_object_handlers{$ELSE}pzend_object_handlers{$ENDIF};
899+
function Z_OBJPROP(z : Pzval) : PHashTable;
876900
function Z_VARREC(z: pzval): TVarRec;
877901

878902
procedure zend_addref_p(z: pzval); cdecl;
@@ -1306,7 +1330,7 @@ function ZValArrayKeyDel(v: pzval; key: zend_ustr): Boolean; overload;
13061330
{$IFDEF PHP7}
13071331
begin
13081332
pzs^.len := strlen(zend_pchar(key));
1309-
pzs^.val := zend_pchar(key);
1333+
pzs^.val := estrdup(zend_pchar(key));
13101334
Result := zend_hash_del_key_or_index(v.value.arr, pzs) = SUCCESS
13111335
end;
13121336
{$ELSE}
@@ -1326,7 +1350,7 @@ function ZValArrayKeyDel(v: pzval; idx: Integer): Boolean; overload;
13261350
{$IFDEF PHP7}
13271351
begin
13281352
pzs^.len := strlen(zend_pchar(inttostr(idx)));
1329-
pzs^.val := zend_pchar(inttostr(idx));
1353+
pzs^.val := estrdup(zend_pchar(inttostr(idx)));
13301354
Result := zend_hash_del_key_or_index(v.value.arr, pzs) = SUCCESS
13311355
end;
13321356
{$ELSE}
@@ -2458,6 +2482,9 @@ function LoadZEND(const DllFilename: zend_ustr = PHPWin) : boolean;
24582482
zend_register_constant := GetProcAddress(PHPLib, 'zend_register_constant');
24592483

24602484
zend_register_auto_global := GetProcAddress(PHPLib, 'zend_register_auto_global');
2485+
{$IFDEF PHP5}
2486+
zend_activate_auto_globals := GetProcAddress(PHPLib, 'zend_activate_auto_globals');
2487+
{$ENDIF}
24612488

24622489
// -- tsrm_shutdown
24632490
tsrm_shutdown := GetProcAddress(PHPLib, 'tsrm_shutdown');
@@ -2725,6 +2752,8 @@ function LoadZEND(const DllFilename: zend_ustr = PHPWin) : boolean;
27252752
{$IFDEF PHP7}
27262753
// -- zend_parse_parameters_throw
27272754
zend_parse_parameters_throw := GetProcAddress(PHPLib, 'zend_parse_parameters_throw');
2755+
ZvalGetArgs := GetProcAddress(PHPLib, 'zend_get_parameters_ex');
2756+
_zend_get_parameters_array_ex := GetProcAddress(PHPLib, '_zend_get_parameters_array_ex');
27282757
{$ELSE}
27292758
// -- zend_indent
27302759
zend_indent := GetProcAddress(PHPLib, 'zend_indent');
@@ -3026,34 +3055,64 @@ function zend_get_parameters_ex(number: integer; var Params: pzval_array): integ
30263055
var
30273056
i : integer;
30283057
begin
3029-
SetLength(Params, number);
3058+
30303059
if number = 0 then
30313060
begin
30323061
Result := SUCCESS;
30333062
Exit;
30343063
end;
3064+
{$IFDEF PHP7}
3065+
Params.value.arr.nNumOfElements := number;
3066+
for i := 0 to number - 1 do
3067+
zend_hash_index_add_empty_element(Params.value.arr, i);
3068+
Result := ZvalGetArgs(number, @Params);
3069+
{$ELSE}
3070+
SetLength(Params, number);
30353071
for i := 0 to number - 1 do
30363072
New(Params[i]);
3037-
30383073
Result := zend_get_parameters(number, number, Params);
3074+
{$ENDIF}
30393075
end;
30403076

30413077
function zend_get_parameters_my(number: integer; var Params: pzval_array; TSRMLS_DC: Pointer): integer;
30423078
var
30433079
i : integer;
3044-
p: pppzval;
3080+
3081+
p:
3082+
{$IFDEF PHP7}
3083+
pzval
3084+
{$ELSE}
3085+
pppzval
3086+
{$ENDIF};
30453087
begin
3046-
SetLength(Params, number);
30473088
if number = 0 then
30483089
begin
30493090
Result := SUCCESS;
30503091
Exit;
30513092
end;
3093+
{$IFDEF PHP7}
3094+
Params.value.arr.nNumOfElements := number;
3095+
for i := 0 to number - 1 do
3096+
zend_hash_index_add_empty_element(Params.value.arr, i);
3097+
3098+
p := emalloc(number * sizeOf(zval));
3099+
Result := _zend_get_parameters_array_ex(number, p);
3100+
3101+
for i := 0 to number - 1 do
3102+
begin
3103+
_zend_hash_update_ind(Params.value.arr, i, p, '', 0);
3104+
if i <> number then
3105+
inc(integer(p), sizeof(zval));
3106+
end;
3107+
3108+
efree(p);
3109+
_zend_get_parameters_array_ex(number, p);
3110+
{$ELSE}
3111+
SetLength(Params, number);
30523112
for i := 0 to number - 1 do
30533113
New(Params[i]);
3054-
{$IFNDEF PHP700}
3114+
30553115
p := emalloc(number * sizeOf(ppzval));
3056-
{$ENDIF}
30573116
Result := _zend_get_parameters_array_ex(number, p, TSRMLS_DC);
30583117

30593118
for i := 0 to number - 1 do
@@ -3064,8 +3123,9 @@ function zend_get_parameters_my(number: integer; var Params: pzval_array; TSRMLS
30643123
end;
30653124

30663125
efree(p);
3126+
{$ENDIF}
30673127
end;
3068-
3128+
{$IFNDEF PHP7}
30693129
function zend_get_parameters(ht: integer; param_count: integer; Params: array of ppzval): integer; assembler; register;
30703130
asm
30713131
push esi
@@ -3092,15 +3152,20 @@ function zend_get_parameters(ht: integer; param_count: integer; Params: array of
30923152
loop @toploop2
30933153
pop esi
30943154
end;
3095-
3155+
{$ENDIF}
30963156
procedure dispose_pzval_array(Params: pzval_array);
30973157
var
30983158
i : integer;
30993159
begin
3160+
{$IFDEF PHP7}
3161+
if Params.value.arr.nNumOfElements>0 then
3162+
for i := 0 to Params.value.arr.nNumOfElements-1 do
3163+
Freemem(zend_hash_index_findZval(Params,i));
3164+
{$ELSE}
31003165
if Length(Params)>0 then
3101-
31023166
for i := 0 to High(Params) do
31033167
FreeMem(Params[i]);
3168+
{$ENDIF}
31043169
Params := nil;
31053170
end;
31063171

@@ -3302,6 +3367,8 @@ procedure CheckZendErrors;
33023367
if @zend_html_puts = nil then raise EPHP4DelphiException.Create('zend_html_puts');
33033368
{$IFDEF PHP7}
33043369
if @zend_parse_parameters_throw = nil then EPHP4DelphiException.Create('zend_parse_parameters_throw');
3370+
if @ZvalGetArgs = nil then EPHP4DelphiException.Create('ZvalGetArgs');
3371+
if @_zend_get_parameters_array_ex = nil then EPHP4DelphiException.Create('_zend_get_parameters_array_ex');
33053372
{$ELSE}
33063373
if @zend_indent = nil then raise EPHP4DelphiException.Create('zend_indent');
33073374
{$ENDIF}
@@ -3418,7 +3485,7 @@ function zend_unregister_functions(functions : {$IFDEF PHP7}P_zend_function_entr
34183485
break;
34193486
{$IFDEF PHP7}
34203487
pzs^.len := strlen(ptr.fname);
3421-
pzs^.val := ptr.fname;
3488+
pzs^.val := estrdup(ptr.fname);
34223489
zend_hash_del_key_or_index(function_table, pzs);
34233490
{$ELSE}
34243491
zend_hash_del_key_or_index(function_table, ptr.fname, strlen(ptr.fname) +1, 0, HASH_DEL_KEY);
@@ -3614,7 +3681,7 @@ function Z_BVAL(z : pzval) : boolean;
36143681
end;
36153682

36163683
if {$IFDEF PHP7}z.u1.v._type{$ELSE}z._type{$ENDIF} = IS_BOOL then
3617-
Result := zend_bool(z.value.lval)
3684+
Result := boolean(zend_bool(z.value.lval))
36183685
else
36193686
case {$IFDEF PHP7}z.u1.v._type{$ELSE}z._type{$ENDIF} of
36203687
IS_DOUBLE: if Trunc(z.value.dval) = 0 then Result := false else Result := true;
@@ -3766,9 +3833,9 @@ function Z_ARRVAL(z : pzval ) : {$IFDEF PHP7}Pzend_array{$ELSE}PHashTable{$ENDIF
37663833
Result := {$IFDEF PHP7} z.value.arr {$ELSE}z.value.ht{$ENDIF};
37673834
end;
37683835

3769-
function Z_OBJ_HANDLE(z :pzval) : zend_object_handle;
3836+
function Z_OBJ_HANDLE(z :pzval) : {$IFDEF PHP7} P_zend_object_handlers {$ELSE}zend_object_handle{$ENDIF};
37703837
begin
3771-
Result := z.value.obj.handle;
3838+
Result := {$IFDEF PHP7}z.value.obj.handlers{$ELSE}z.value.obj.handle{$ENDIF};
37723839
end;
37733840

37743841
function Z_OBJ_HT(z : pzval) : {$IFDEF PHP7}hzend_types.P_zend_object_handlers{$ELSE}pzend_object_handlers{$ENDIF};
@@ -3824,7 +3891,7 @@ function zend_hash_add_or_update(ht : {$IFDEF PHP7}Pzend_array{$ELSE}PHashTable{
38243891
begin
38253892
{$IFDEF PHP7}
38263893
pz^.len := strlen(arKey);
3827-
pz^.val := arKey;
3894+
pz^.val := estrdup(arKey);
38283895
if Assigned(_zend_hash_add_or_update) then
38293896
Result := _zend_hash_add_or_update(ht, pz, pData, flag, '', 0).u2.fe_iter_idx
38303897
{$ELSE}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /