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 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)

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