On 22/02/12 11:09, Dave Mitchell wrote:
On Wed, Feb 22, 2012 at 10:04:45AM +0000, Martin J. Evans wrote:
DBI.xs(4291) : error C2275: 'SV' : illegal use of this type as an expression
C:\Perl\lib\CORE\perl.h(2243) : see declaration of 'SV'
...
Lines 4291 and 4292 are:
MY_CXT_INIT;
(void)MY_CXT; /* avoid 'unused variable' warning */
Hopefully the diff below should fix it. Need declarations before code!
It didn't:
BOOT:
MY_CXT_INIT;
(void)cv; // THIS IS LINE 4291
(void)items; /* avoid 'unused variable' warning */
(void)MY_CXT; /* avoid 'unused variable' warning */
dbi_bootinit(NULL);
DBI.xs(4291) : error C2275: 'SV' : illegal use of this type as an expression
C:\Perl\lib\CORE\perl.h(2243) : see declaration of 'SV'
DBI.xs(4291) : error C2065: 'my_cxt_sv' : undeclared identifier
DBI.xs(4291) : error C2275: 'my_cxt_t' : illegal use of this type as an expressi
on
DBI.xs(294) : see declaration of 'my_cxt_t'
DBI.xs(4291) : error C2065: 'my_cxtp' : undeclared identifier
DBI.xs(4291) : warning C4047: 'function' : 'SV *' differs in levels of indirecti
on from 'int'
DBI.xs(4291) : warning C4024: 'Perl_sv_setuv' : different types for formal and a
ctual parameter 2
DBI.xs(4292) : error C2100: illegal indirection
NMAKE : fatal error U1077: '"C:\Program Files\Microsoft Visual Studio 8\VC\BIN\c
l.EXE"' : return code '0x2'
Stop.
It is possible the following is the relevant code after preprocessing:
#line 4344 "DBI.c"
void XS_DBI_constant(register PerlInterpreter* my_perl , CV* cv);
void XS_DBI_constant(register PerlInterpreter* my_perl , CV* cv)
{
extern int Perl___notused ; SV **sp = (*Perl_Tstack_sp_ptr(my_perl)); I32
ax = (*(*Perl_Tmarkstack_ptr_ptr(my_perl))--); register SV **mark =
(*Perl_Tstack_base_ptr(my_perl)) + ax++; I32 items = (I32)(sp - mark);
#line 4353 "DBI.c"
I32 ix = ((XPVCV*)(cv)->sv_any)->xcv_xsubany.any_i32;
if (items != 0)
S_croak_xs_usage(my_perl, cv,"");
{
I32 RETVAL;
SV * const targ = (((*Perl_Top_ptr(my_perl))->op_private & 32) ?
((*Perl_Tcurpad_ptr(my_perl))[(*Perl_Top_ptr(my_perl))->op_targ]) :
Perl_sv_newmortal(my_perl));
#line 4387 "DBI.xs"
RETVAL = ix;
#line 4362 "DBI.c"
(sp = (*Perl_Tstack_base_ptr(my_perl)) + ax - 1); do { Perl_sv_setiv(my_perl,
targ,(IV)((IV)RETVAL)); do { do { if (((targ)->sv_flags & 0x00004000))
Perl_mg_set(my_perl, targ); } while (0); (*++sp = (targ)); } while (0); } while (0);
}
do { const IV tmpXSoff = (1); (*Perl_Tstack_sp_ptr(my_perl)) =
(*Perl_Tstack_base_ptr(my_perl)) + ax + (tmpXSoff - 1); return; } while (0);
}
but the lines numbers in the preprocessed output don't seem to match up.
Martin
--
Martin J. Evans
Easysoft Limited
http://www.easysoft.com