Hi,
so in dabusiness.h I changed 

} else {
long v = interpreterProxy->signed32BitValueOf(arg);
if (interpreterProxy->failed())
return PrimErrBadArgument;
*(long *)argvec = v;
argvec += sizeof(long);
}

for

} else {
long v;
sqInt argClass = interpreterProxy->fetchClassOf(arg);
if (argClass == (interpreterProxy->classLargePositiveInteger())) {
v = interpreterProxy->positive32BitValueOf(arg);
} else {
v = interpreterProxy->signed32BitValueOf(arg);
}


if (interpreterProxy->failed())
return PrimErrBadArgument;
*(long *)argvec = v;
argvec += sizeof(long);
}

now it seems to be working... maybe I need extend this for other integer possible values? well, one problem at a time... for now is working, but the Alien Bridge still don't, so I'll continue hacking that :)

Cheers and thanks
Esteban


El 28/12/2010, a las 5:37a.m., Igor Stasenko escribió:


On 28 December 2010 01:54, Esteban Lorenzano <estebanlm@gmail.com> wrote:

Hi,
I'm trying to get the Alien ObjectiveC bridge to work, and I'm having a problem (right now no cog, just cocoa vm 5.7 with "regular" alien, NewspeakI32ABIPlugin), and I'm having a problem on sending a message with this form:
someAlien
primFFICallResult: resultAlien
withArguments: {anAlien. aLargePositiveInteger}
so... it is answering primitiveFail (code 3), because the third argument is bad taken when converting... the primitive does this path:
callIA32IntegralReturn,
...
long v = interpreterProxy->signed32BitValueOf(arg);
...
value = (((byteAt((oop + (BASE_HEADER_SIZE)) + 0)) + ((byteAt((oop + (BASE_HEADER_SIZE)) + 1)) << 8)) + ((byteAt((oop + (BASE_HEADER_SIZE)) + 2)) << 16)) + ((byteAt((oop + (BASE_HEADER_SIZE)) + 3)) << 24);
value here is negative, and of course, it throws an error.
So... anybody has a clue of whats wrong? I know the number is actually a LargePositiveInteger, so it should be ok, and pass... so any idea?

sure, if your largePositiveInteger, which is 32bit unsigned integer,
then

long v = interpreterProxy->signed32BitValueOf(arg);

should be

unsigned long v = interpreterProxy->positive32BitValueOf(arg);

Cheers,
Esteban







--
Best regards,
Igor Stasenko AKA sig.