@@ -782,7 +782,11 @@ function ZValArrayKeyFind(v: pzval; idx: Integer; out pData: ppzval)
782
782
Make: Boolean = false): pzval;
783
783
procedure ZVAL_RESOURCE (value : pzval; l: longint);
784
784
procedure ZVAL_EMPTY_STRING (z: pzval);
785
+
785
786
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
+
786
790
procedure ZVAL_ARRAY (z: pzval; arr: TWSDate); overload;
787
791
procedure ZVAL_ARRAY (z: pzval; arr: TASDate); overload;
788
792
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
1593
1597
procedure VarArrayToHash (var HT: pzval;Value : Variant);
1594
1598
Var
1595
1599
I,Len: Integer;
1596
- z: pzval;
1597
1600
begin
1598
1601
_array_init(ht,nil ,1 );
1599
1602
len := TVarData(Value ).VArray^.Bounds[0 ].ElementCount;
1600
1603
for i:= 0 to len - 1 do
1601
1604
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]));
1605
1606
end ;
1606
1607
end ;
1607
-
1608
1608
function ZendToVariant (const Value : pzval;
1609
1609
cobj: TObjectBConvertMethod=nil ): Variant; overload;
1610
1610
Var
@@ -1793,45 +1793,24 @@ procedure ArrayToHash(AR: Array of Variant; var HT: pzval); overload;
1793
1793
len := Length(AR);
1794
1794
for i:=0 to len-1 do
1795
1795
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]);
1804
1797
end ;
1805
1798
end ;
1806
1799
1807
1800
procedure ArrayToHash (Keys,AR: Array of Variant; var HT: pzval); overload;
1808
1801
Var
1809
1802
I,Len: Integer;
1810
- v: Variant;
1811
- key: zend_pchar;
1812
- s: zend_pchar;
1813
1803
begin
1814
1804
_array_init(ht,nil ,1 );
1815
1805
len := Length(AR);
1816
1806
for i:=0 to len-1 do
1817
1807
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]);
1828
1809
end ;
1829
1810
end ;
1830
1811
1831
1812
function add_next_index_variant (arg: pzval; value : variant): integer;
1832
1813
var iz: pzval;
1833
- W: WideString;
1834
- S: String;
1835
1814
begin
1836
1815
iz := MAKE_STD_ZVAL;
1837
1816
if VarIsEmpty(value ) then
@@ -1840,54 +1819,37 @@ function add_next_index_variant(arg: pzval; value: variant): integer;
1840
1819
Result := add_next_index_zval(arg, iz);
1841
1820
Exit;
1842
1821
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 ;
1863
1825
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;
1886
1835
end ;
1887
-
1888
- Result := add_next_index_zval (arg, iz);
1836
+ VariantToZend( Value ,iz);
1837
+ Result := add_index_zval (arg, index , iz);
1889
1838
end ;
1890
1839
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 ;
1891
1853
1892
1854
procedure ZVAL_ARRAY (z: pzval; arr: TWSDate); overload;
1893
1855
var
@@ -2069,51 +2031,6 @@ procedure ZVAL_ARRAY(z: pzval; arr: Variant); overload;
2069
2031
2070
2032
for i := 0 to arr.DimCount-1 do
2071
2033
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; }
2117
2034
add_next_index_variant(z, arr[i]);
2118
2035
end ;
2119
2036
Exit;
0 commit comments