| |
 | Posted by d-bugmail | Permalink Reply |
|
d-bugmail 
| http://d.puremagic.com/issues/show_bug.cgi?id=1133
Summary: Header generation omits parathesis
Product: D
Version: 1.011
Platform: PC
OS/Version: Linux
Status: NEW
Severity: normal
Priority: P2
Component: DMD
AssignedTo: bugzilla@digitalmars.com
ReportedBy: benoit@tionex.de
(1) does not compile
in the second example, all paranthesis for the static if are missing.
With (2) the problem starts.
========================================
= D code:
========================================
public synchronized bool contains( dejavu.lang.JObject.JObject value ){
return (( value in mData ) !is null );
}
========================================
= Generated Header Code:
========================================
bool containsKey(JObject key)
{
return key in mData !is null; //(1)
}
========================================
= D code:
========================================
T jarraycast(T, U )( U u ) {
// elem -> []
static if( isArrayArrayType!(T) ){
static if( isArrayArrayType!(U) ){
//pragma( msg, "[][]->[][] jarraycast!( " ~ demangleType!(
T.mangleof ) ~ ", " ~ demangleType!( U.mangleof ) ~ ")" );
static assert( false );
}
else static if( isArrayType!(U) ){
//pragma( msg, "[]->[][] jarraycast!( " ~ demangleType!( T.mangleof
) ~ ", " ~ demangleType!( U.mangleof ) ~ ")" );
static assert( false );
}
else static if( is( U : JObject )){
//pragma( msg, "obj->[][] jarraycast!( " ~ demangleType!(
T.mangleof ) ~ ", " ~ demangleType!( U.mangleof ) ~ ")" );
static assert( false );
}
else {
//pragma( msg, "err1: jarraycast!( " ~ demangleType!( T.mangleof )
~ ", " ~ demangleType!( U.mangleof ) ~ ")" );
static assert( false );
}
}
else static if( isArrayType!(T) ){
static if( isArrayArrayType!(U) ){
////pragma( msg, "[][]->[] jarraycast!( " ~ demangleType!(
T.mangleof ) ~ ", " ~ demangleType!( U.mangleof ) ~ ")" );
alias ElemType!(T) TE;
alias ElemType!(U) UE;
T res;
res.length = u.length;
for( int i = 0; i < u.length; i++ ){
res[i] = jarraycast!(TE,UE)(u[i]);
}
return res;
}
else static if( isArrayType!(U) ){
////pragma( msg, "[]->[] jarraycast!( " ~ demangleType!( T.mangleof
) ~ ", " ~ demangleType!( U.mangleof ) ~ ")" );
alias ElemType!(T) TE;
return arraycast!(TE)(u);
}
else static if( is( U : JObject )){
//pragma( msg, "obj->[] jarraycast!( " ~ demangleType!( T.mangleof
) ~ ", " ~ demangleType!( U.mangleof ) ~ ")" );
JArrayT!(T) uarr = cast( JArrayT!(T) ) u;
if( uarr is null ){
return null;
}
else{
return uarr.toArray();
}
}
else {
//pragma( msg, "err2: jarraycast!( " ~ demangleType!( T.mangleof )
~ ", " ~ demangleType!( U.mangleof ) ~ ")" );
static assert( false );
}
}
else static if( is( T : JObject )){
static if( isArrayType!(U) ){
//pragma( msg, "[]->obj jarraycast!( " ~ demangleType!( T.mangleof
) ~ ", " ~ demangleType!( U.mangleof ) ~ ")" );
return JArrayT!(U).create( u );
}
else static if( is( U : JObject )){
//pragma( msg, "obj->obj jarraycast!( " ~ demangleType!( T.mangleof
) ~ ", " ~ demangleType!( U.mangleof ) ~ ")" );
static assert( false );
}
else {
//pragma( msg, "err3: jarraycast!( " ~ demangleType!( T.mangleof )
~ ", " ~ demangleType!( U.mangleof ) ~ ")" );
static assert( false );
}
}
else {
//pragma( msg, "err4: jarraycast!( " ~ demangleType!( T.mangleof ) ~ ",
" ~ demangleType!( U.mangleof ) ~ ")" );
static assert( false );
}
//return null;
}
========================================
= Generated Header Code:
========================================
template jarraycast(T,U)
{
T jarraycast(U u)
{
static if(isArrayArrayType!(T))
static if(isArrayArrayType!(U))
static assert(false);
else
static if(isArrayType!(U))
static assert(false);
else
static if(is(U : JObject))
static assert(false);
else
static assert(false);
else
static if(isArrayType!(T))
static if(isArrayArrayType!(U)) //(2)
alias ElemType!(T) TE;
alias ElemType!(U) UE;
T res;
res.length = u.length;
{
for (int i = 0;
i < u.length; i++)
{
{
res[i] = jarraycast!(TE,UE)(u[i]);
}
}
}
return res;
else
static if(isArrayType!(U))
alias ElemType!(T) TE;
return arraycast!(TE)(u);
else
static if(is(U : JObject))
JArrayT!(T) uarr = cast(JArrayT!(T))u;
if (uarr is null)
{
return null;
}
else
{
return uarr.toArray();
}
else
static assert(false);
else
static if(is(T : JObject))
static if(isArrayType!(U))
return JArrayT!(U).create(u);
else
static if(is(U : JObject))
static assert(false);
else
static assert(false);
else
static assert(false);
}
}
========================================
--
|