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 e74fff9

Browse files
author
Andrew Zenin
committed
Update ZENDAPI.pas
1 parent fcd7e70 commit e74fff9

File tree

1 file changed

+47
-10
lines changed

1 file changed

+47
-10
lines changed

‎Source/ZENDAPI.pas

Lines changed: 47 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -725,6 +725,9 @@ procedure dispose_pzval_array(Params: pzval_array);
725725

726726
procedure ZEND_PUTS(str: zend_pchar);
727727

728+
type
729+
TObjectAConvertMethod = procedure(v:variant;z:pzval);
730+
TObjectBConvertMethod = function(a: pzval):Variant;
728731

729732
var
730733
zend_register_internal_class : function(class_entry: pzend_class_entry; TSRMLS_DC: pointer): Pzend_class_entry; cdecl;
@@ -799,13 +802,14 @@ procedure ArrayToHash(Keys,AR: Array of Variant; var HT: pzval); overload;
799802
function ToStrA(V: Variant): zend_ustr;
800803
function ToStr(V: Variant): String;
801804
function toWChar(s: zend_pchar): PWideChar;
802-
function ZendToVariant(const Value: pzval): Variant;
805+
function ZendToVariant(const Value: pzval;cobj: TObjectBConvertMethod=nil): Variant;
803806
{$IFNDEF PHP7}
804807
overload;
805-
function ZendToVariant(const Value: ppzval): Variant; overload;
806-
function ZendToVariant(const Value: pppzval): Variant; overload;
808+
function ZendToVariant(const Value: ppzval;cobj: TObjectBConvertMethod=nil): Variant; overload;
809+
function ZendToVariant(const Value: pppzval;cobj: TObjectBConvertMethod=nil): Variant; overload;
807810
{$ENDIF}
808-
procedure VariantToZend(const Value: Variant; z: pzval);
811+
procedure VariantToZend(const Value: Variant; z: pzval;
812+
cobj: TObjectAConvertMethod=nil);
809813
procedure ZVAL_STRING(z: pzval; s: zend_pchar; duplicate: boolean);
810814
procedure ZVAL_STRINGU(z: pzval; s: PUtf8Char; duplicate: boolean);
811815
procedure ZVAL_STRINGW(z: pzval; s: PWideChar; duplicate: boolean);
@@ -1601,7 +1605,8 @@ procedure VarArrayToHash(var HT: pzval;Value: Variant);
16011605
end;
16021606
end;
16031607

1604-
function ZendToVariant(const Value: pzval): Variant; overload;
1608+
function ZendToVariant(const Value: pzval;
1609+
cobj: TObjectBConvertMethod=nil): Variant; overload;
16051610
Var
16061611
S: String;
16071612
begin
@@ -1611,7 +1616,11 @@ function ZendToVariant(const Value: pzval): Variant; overload;
16111616
2: Result := Value^.value.dval;
16121617
3: Result := boolean(Value^.value.lval);
16131618
4: Result := HashToVarArray(Value^.value.ht);
1614-
//5: Result := object //HERE;
1619+
5:
1620+
if Assigned(cobj) then
1621+
Result := cobj(Value)
1622+
else
1623+
Result := Null;
16151624
7: Result := Value^.value.lval;
16161625
6: begin S := Value^.value.str.val; Result := S; end;
16171626
8: begin S := Value^.value.str.val; Result := S; end;
@@ -1620,7 +1629,8 @@ function ZendToVariant(const Value: pzval): Variant; overload;
16201629
end;
16211630
end;
16221631

1623-
procedure VariantToZend(const Value:Variant;z:pzval);
1632+
procedure VariantToZend(const Value:Variant;z:pzval;
1633+
cobj: TObjectAConvertMethod=nil);
16241634
var
16251635
W : WideString;
16261636
S: String;
@@ -1673,14 +1683,41 @@ procedure VariantToZend(const Value:Variant;z:pzval);
16731683
//<==óêàçàòåëü íà âûçûâàþùóþ ôóíêöèþ... õç òî÷íî íå ïîéìó
16741684
//âîîáùåì íà ìåòîä ñ òèïîì Dispatch (âûçîâ, âûáðîñ)... çàáûë ÿ
16751685
//íó ìåòîä â êëàññå êîðî.÷å
1686+
varDispatch :
1687+
begin
1688+
if Assigned(cobj) then
1689+
cobj(Value, z)
1690+
else
1691+
ZVALVAL(z);
1692+
end;
16761693
//varAny : integer(TVarData(Value).VAny
16771694
//<==óêàçàòåëü íà ìåòîä*(ëþáîé)
16781695
//
1679-
1696+
varAny :
1697+
begin
1698+
if Assigned(cobj) then
1699+
cobj(Value, z)
1700+
else
1701+
ZVALVAL(z);
1702+
end;
16801703
//varRecord : integer(TVarData(Value).VRecord)
16811704
//<==çàïèñü... ÿ äî ñèõ ïîð íå ðàçîáðàëñÿ êàê ñ íèìè ÷åðåç RTTI ðàáîòàòü
1705+
varRecord :
1706+
begin
1707+
if Assigned(cobj) then
1708+
cobj(Value, z)
1709+
else
1710+
ZVALVAL(z);
1711+
end;
16821712
//varObject : integer(TVarData(Value).VObject)
16831713
//<==îáúåêò...
1714+
varObject :
1715+
begin
1716+
if Assigned(cobj) then
1717+
cobj(Value, z)
1718+
else
1719+
ZVALVAL(z, integer(TObject(TVarData(Value).VPointer^)));
1720+
end;
16841721
varStrArg : //Peter Enz
16851722
begin
16861723
if Assigned ( TVarData(Value).VString ) then
@@ -1719,12 +1756,12 @@ procedure VariantToZend(const Value:Variant;z:pzval);
17191756
end;
17201757
end;
17211758

1722-
function ZendToVariant(const Value: ppzval): Variant; overload;
1759+
function ZendToVariant(const Value: ppzval;cobj: TObjectBConvertMethod=nil): Variant; overload;
17231760
begin
17241761
Result := ZendToVariant(Value^);
17251762
end;
17261763

1727-
function ZendToVariant(const Value: pppzval): Variant; overload;
1764+
function ZendToVariant(const Value: pppzval;cobj: TObjectBConvertMethod=nil): Variant; overload;
17281765
begin
17291766
Result := ZendToVariant(Value^^);
17301767
end;

0 commit comments

Comments
(0)

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