Well I have found the error:

>  private fun getcwd: &char * size -> &char = "getcwd($1,$2)";
>  fun getcwd():string = {
>    var b: array[char,1024]; 
>    var p = getcwd(C_hack::cast[&char] (&b),size 1024);
>    return if C_hack::isNULL p then "" else string p endif; 
>  }

saying:

> SYSTEM FAILURE
> Binding error, cannot find in table: getcwd_mf_1322 index 1322
> 
> Anyhow, the REAL error is not that we can't find this entry in the table,
> since clearly entry 1322 is there, how else would we know its name??


and indeed I'm right. There is a real error in the code above.
C_hack::isNULL is defined by:

  fun isNULL: address -> bool = "(NULL==$1)";
  fun isNULL[t]: ptr[t] -> bool = "(NULL==$1)";
  fun isNULL[t]: cptr[t] -> bool = "(NULL==$1)";
  fun isNULL[t]: gcptr[t] -> bool = "(NULL==$1)";

and we have:


  publish "Abstract type for C pointer"
  pod type ptr[t]= "?1 *";

  publish "Abstract type for C pointer to const"
  pod type cptr[t]="?1 const *";

but the argument is type &char, which is a Felix pointer.

So the real error is simple: overload resolution failed.
This code:

 private fun getcwd: &char * size -> &char = "getcwd($1,$2)";
  fun getcwd():string = {
    var b: array[char,1024]; 
    var p : &char = getcwd(C_hack::cast[&char] (&b),size 1024);
    var q = C_hack::isNULL p;
    return "";
}

has the same error, but gives:

Client Error binding expression ((C_hack)::isNULL p)
CLIENT ERROR
[lookup_qn_with_sig] (Simple module) Unable to resolve overload of 
(C_hack)::isNULL of (&char)
candidates are: {
fun std::C_hack::isNULL[t<3089>]: gcptr[<T3089>] -> bool = "(NULL==$1)"rq<2941>;
  defined at build/release-optimized/lib/std/c_hack.flx: line 93, cols 1 to 49
  with view vs=t ts=<T3090>
fun std::C_hack::isNULL[t<3085>]: cptr[<T3085>] -> bool = "(NULL==$1)"rq<2941>;
  defined at build/release-optimized/lib/std/c_hack.flx: line 92, cols 1 to 48
  with view vs=t ts=<T3086>
fun std::C_hack::isNULL[t<3081>]: ptr[<T3081>] -> bool = "(NULL==$1)"rq<2941>;
  defined at build/release-optimized/lib/std/c_hack.flx: line 91, cols 1 to 47
  with view vs=t ts=<T3082>
fun std::C_hack::isNULL: address -> bool = "(NULL==$1)"rq<2941>;
  defined at build/release-optimized/lib/std/c_hack.flx: line 90, cols 1 to 45
  with view vs= ts=
}
In ./tmp.flx: line 7, cols 13 to 28
6:     var p : &char = getcwd(C_hack::cast[&char] (&b),size 1024);
7:     var q = C_hack::isNULL p;
               ****************

but this:

    return if C_hack::isNULL p then "" else string p endif; 

is throwing Not_found .. on the SAME expression. The only real
difference is that in the second case an initialisation is generated.

Hmm ..

--
john skaller
skal...@users.sourceforge.net





------------------------------------------------------------------------------
Nokia and AT&T present the 2010 Calling All Innovators-North America contest
Create new apps & games for the Nokia N8 for consumers in  U.S. and Canada
$10 million total in prizes - $4M cash, 500 devices, nearly $6M in marketing
Develop with Nokia Qt SDK, Web Runtime, or Java and Publish to Ovi Store 
http://p.sf.net/sfu/nokia-dev2dev
_______________________________________________
Felix-language mailing list
Felix-language@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/felix-language

Reply via email to