Skip to content

Commit 0514dbb

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

File tree

1 file changed

+34
-117
lines changed

1 file changed

+34
-117
lines changed

Source/ZENDAPI.pas

Lines changed: 34 additions & 117 deletions
Original file line numberDiff line numberDiff line change
@@ -782,7 +782,11 @@ function ZValArrayKeyFind(v: pzval; idx: Integer; out pData: ppzval)
782782
Make: Boolean = false): pzval;
783783
procedure ZVAL_RESOURCE(value: pzval; l: longint);
784784
procedure ZVAL_EMPTY_STRING(z: pzval);
785+
785786
function add_next_index_variant(arg: pzval; value: variant): integer;
787+
function add_index_variant(arg: pzval; index:integer; value: variant): integer;
788+
function add_assoc_variant(arg: pzval; key: zend_pchar; key_len: uint; value: variant): integer;
789+
786790
procedure ZVAL_ARRAY(z: pzval; arr: TWSDate); overload;
787791
procedure ZVAL_ARRAY(z: pzval; arr: TASDate); overload;
788792
procedure ZVAL_ARRAY(z: pzval; arr: array of string); overload;
@@ -1593,18 +1597,14 @@ function HashToVarArray(const Value:{$IFDEF PHP7}Pzend_array{$ELSE}PHashTable{$E
15931597
procedure VarArrayToHash(var HT: pzval;Value: Variant);
15941598
Var
15951599
I,Len: Integer;
1596-
z: pzval;
15971600
begin
15981601
_array_init(ht,nil,1);
15991602
len := TVarData(Value).VArray^.Bounds[0].ElementCount;
16001603
for i:= 0 to len - 1 do
16011604
begin
1602-
z := MAKE_STD_ZVAL;
1603-
VariantToZend(VarArrayGet(Value, [i]),z);
1604-
add_index_zval(HT, i, z);
1605+
add_index_variant(HT, i, VarArrayGet(Value, [i]));
16051606
end;
16061607
end;
1607-
16081608
function ZendToVariant(const Value: pzval;
16091609
cobj: TObjectBConvertMethod=nil): Variant; overload;
16101610
Var
@@ -1793,45 +1793,24 @@ procedure ArrayToHash(AR: Array of Variant; var HT: pzval); overload;
17931793
len := Length(AR);
17941794
for i:=0 to len-1 do
17951795
begin
1796-
case VarType(AR[i]) of
1797-
varInteger, varSmallint, varLongWord, 17: add_index_long(ht,i,AR[i]);
1798-
varDouble,varSingle: add_index_double(ht,i,AR[i]);
1799-
varBoolean: add_index_bool(ht,i,AR[I]);
1800-
varEmpty: add_index_null(ht,i);
1801-
varString: add_index_string(ht,i,zend_pchar(ToStr(AR[I])),1);
1802-
258: add_index_string(ht,i,zend_pchar(zend_ustr(ToStr(AR[I]))),1);
1803-
end;
1796+
add_index_variant(ht,i,AR[i]);
18041797
end;
18051798
end;
18061799

18071800
procedure ArrayToHash(Keys,AR: Array of Variant; var HT: pzval); overload;
18081801
Var
18091802
I,Len: Integer;
1810-
v: Variant;
1811-
key: zend_pchar;
1812-
s: zend_pchar;
18131803
begin
18141804
_array_init(ht,nil,1);
18151805
len := Length(AR);
18161806
for i:=0 to len-1 do
18171807
begin
1818-
v := AR[I];
1819-
key := zend_pchar(ToStrA(keys[i]));
1820-
s := zend_pchar(ToStrA(v));
1821-
case VarType(AR[i]) of
1822-
varInteger, varSmallint, varLongWord, 17: add_assoc_long_ex(ht,ToPChar(Keys[i]),strlen(ToPChar(Keys[i]))+1,AR[i]);
1823-
varDouble,varSingle: add_assoc_double_ex(ht,ToPChar(Keys[i]),strlen(ToPChar(Keys[i]))+1,AR[i]);
1824-
varBoolean: add_assoc_bool_ex(ht,ToPChar(Keys[i]),strlen(ToPChar(Keys[i]))+1,AR[I]);
1825-
varEmpty: add_assoc_null_ex(ht,ToPChar(Keys[i]),strlen(ToPChar(Keys[i]))+1);
1826-
varString,258: add_assoc_string_ex(ht,key,strlen(key)+1,s,1);
1827-
end;
1808+
add_assoc_variant(ht, ToPChar(Keys[i]),strlen(ToPChar(Keys[i]))+1,AR[i]);
18281809
end;
18291810
end;
18301811

18311812
function add_next_index_variant(arg: pzval; value: variant): integer;
18321813
var iz: pzval;
1833-
W: WideString;
1834-
S: String;
18351814
begin
18361815
iz := MAKE_STD_ZVAL;
18371816
if VarIsEmpty(value) then
@@ -1840,54 +1819,37 @@ function add_next_index_variant(arg: pzval; value: variant): integer;
18401819
Result := add_next_index_zval(arg, iz);
18411820
Exit;
18421821
end;
1843-
// MessageBoxA(0, zend_pchar(AnsiString( TVarData(Value).VType.ToString)), '', 0 ) ;
1844-
case TVarData(Value).VType of
1845-
varString : //Peter Enz
1846-
begin
1847-
if Assigned ( TVarData(Value).VString ) then
1848-
begin
1849-
ZVAL_STRING(iz, TVarData(Value).VString , true);
1850-
end
1851-
else
1852-
begin
1853-
ZVAL_STRING(iz, '', true);
1854-
end;
1855-
end;
1856-
1857-
varUString : //Peter Enz
1858-
begin
1859-
S := string(TVarData(Value).VUString);
1860-
1861-
ZVAL_STRING(iz, zend_pchar(zend_ustr(S)), true);
1862-
end;
1822+
VariantToZend(Value,iz);
1823+
Result := add_next_index_zval(arg, iz);
1824+
end;
18631825

1864-
varOleStr : //Peter Enz
1865-
begin
1866-
if Assigned ( TVarData(Value).VOleStr ) then
1867-
begin
1868-
W := WideString(Pointer(TVarData(Value).VOleStr));
1869-
ZVAL_STRINGW(iz, PWideChar(W), true);
1870-
end
1871-
else
1872-
begin
1873-
ZVAL_STRING(iz, '', true);
1874-
end;
1875-
end;
1876-
varSmallInt : ZVALVAL(iz, TVarData(Value).VSmallint);
1877-
varInteger : ZVALVAL(iz, TVarData(Value).VInteger);
1878-
varBoolean : ZVALVAL(iz, TVarData(Value).VBoolean);
1879-
varSingle : ZVALVAL(iz, TVarData(Value).VSingle);
1880-
varDouble : ZVALVAL(iz, TVarData(Value).VDouble);
1881-
varError : ZVALVAL(iz, TVarData(Value).VError);
1882-
varByte : ZVALVAL(iz, TVarData(Value).VByte);
1883-
varDate : ZVALVAL(iz, TVarData(Value).VDate);
1884-
else
1885-
ZVAL_NULL(iz);
1826+
function add_index_variant(arg: pzval; index:integer; value: variant): integer;
1827+
var iz: pzval;
1828+
begin
1829+
iz := MAKE_STD_ZVAL;
1830+
if VarIsEmpty(value) then
1831+
begin
1832+
ZVAL_NULL(iz);
1833+
Result := add_index_zval(arg, index, iz);
1834+
Exit;
18861835
end;
1887-
1888-
Result := add_next_index_zval(arg, iz);
1836+
VariantToZend(Value,iz);
1837+
Result := add_index_zval(arg, index, iz);
18891838
end;
18901839

1840+
function add_assoc_variant(arg: pzval; key: zend_pchar; key_len: uint; value: variant): integer;
1841+
var iz: pzval;
1842+
begin
1843+
iz := MAKE_STD_ZVAL;
1844+
if VarIsEmpty(value) then
1845+
begin
1846+
ZVAL_NULL(iz);
1847+
Result := add_assoc_zval_ex(arg, key, key_len, iz);
1848+
Exit;
1849+
end;
1850+
VariantToZend(Value,iz);
1851+
Result := add_assoc_zval_ex(arg, key, key_len, iz);
1852+
end;
18911853

18921854
procedure ZVAL_ARRAY(z: pzval; arr: TWSDate); overload;
18931855
var
@@ -2069,51 +2031,6 @@ procedure ZVAL_ARRAY(z: pzval; arr: Variant); overload;
20692031

20702032
for i := 0 to arr.DimCount-1 do
20712033
begin
2072-
{V := TVarData( arr[i] );
2073-
case V.VType of
2074-
varEmpty, varNull:
2075-
add_next_index_null(z);
2076-
varSmallInt:
2077-
add_next_index_string(z, zend_pchar(zend_ustr(IntToStr(V.VSmallInt))), 1);
2078-
varInteger:
2079-
add_next_index_string(z, zend_pchar(zend_ustr(IntToStr(V.VInteger))), 1);
2080-
varSingle:
2081-
add_next_index_string(z, zend_pchar(zend_ustr(V.VSingle.ToString())), 1);
2082-
varDouble:
2083-
add_next_index_double(z, V.VDouble);
2084-
varCurrency:
2085-
add_next_index_string(z, zend_pchar(zend_ustr(CurrToStr(V.VCurrency))), 1);
2086-
varDate:
2087-
add_next_index_string(z, zend_pchar(zend_ustr(DateTimeToStr(V.VDate))), 1);
2088-
varOleStr:
2089-
add_next_index_string(z, zend_pchar(zend_ustr(V.VOleStr)), 1);
2090-
varBoolean:
2091-
add_next_index_bool(z, V.VBoolean.ToInteger());
2092-
varByte:
2093-
add_next_index_string(z, zend_pchar(zend_ustr(IntToStr(V.VByte))), 1);
2094-
varWord:
2095-
add_next_index_string(z, zend_pchar(zend_ustr(IntToStr(V.VWord))), 1);
2096-
varShortInt:
2097-
add_next_index_string(z, zend_pchar(zend_ustr(IntToStr(V.VShortInt))), 1);
2098-
varLongWord:
2099-
add_next_index_long(z, V.VLongWord);
2100-
varInt64:
2101-
add_next_index_string(z, zend_pchar(zend_ustr(IntToStr(V.VInt64))), 1);
2102-
varString:
2103-
add_next_index_string(z, zend_pchar(zend_ustr(V.VString)), 1);
2104-
{$IFDEF SUPPORTS_UNICODE_STRING}{
2105-
varUString:
2106-
add_next_index_string(z, zend_pchar(zend_ustr(V.VUString)), 1);
2107-
{$ENDIF SUPPORTS_UNICODE_STRING}
2108-
{varArray,
2109-
varDispatch,
2110-
varError,
2111-
varUnknown,
2112-
varAny,
2113-
varByRef:}{
2114-
varObject:
2115-
add_next_index_long(z, Integer(
2116-
end; }
21172034
add_next_index_variant(z, arr[i]);
21182035
end;
21192036
Exit;

0 commit comments

Comments
 (0)