r3wp [groups: 83 posts: 189283]
  • Home
  • Script library
  • AltME Archive
  • Mailing list
  • Articles Index
  • Site search
 

World: r3wp

[Red] Red language group

amacleod
1-Feb-2012
[4703]
Raspberrypi shipping any day now! http://www.raspberrypi.org/Lets 
see Red on it!
PeterWood
1-Feb-2012
[4704]
Oldes: A c-string is a byte-ptr!. It can be cast to an int-ptr! if 
needed.
Dockimbel
2-Feb-2012
[4705]
Kaj: I cannot compile GTK+ examples anymore using the latest GTK+ 
binding version...Where can I find the missing GLib.reds file?
PeterWood
2-Feb-2012
[4706]
Here http://red.esperconsultancy.nl/Red-GLib/info/12c18cb30c?
Dockimbel
2-Feb-2012
[4707x2]
Thanks Peter.
Kaj: I gave a new try on making the GTK+ binding work on Linux/ARM, 
I was able to track the crash up to the call to `gtk-append-container` 
from `gtk-window` function. The argument values passed are:

    window: 0006C000 value: 12

which results in a Runtime Error 1: access violation (segfault)
Oldes
2-Feb-2012
[4709x2]
Kaj: my problem is, that I have a routine: MagickRelinquishMemory 
which should release memory from routines where some returns c-string, 
and some for example pointer to array values... So the best would 
be to accept pointer! with MagickRelinquishMemory, but still to be 
able return just c-string from some routines, if you understand me. 
I know there are workarounds, but it could be quite simple
What about implementing any-pointer! type?
Dockimbel
2-Feb-2012
[4711]
Oldes: why can't use simply use type casting when required?
Oldes
2-Feb-2012
[4712]
and is it possible to cast pointer from c-string?
Dockimbel
2-Feb-2012
[4713x2]
Sure: 

    p: declare int-ptr!
    s: as c-string! p		;-- or use `as-c-string` defined
You can freely cast any pointer type to any other pointer type (struct 
and c-string are part of any-pointer! internal typeset).
Oldes
2-Feb-2012
[4715x2]
I would prefere to be able simply define:   MagickRelinquishMemory: 
"MagickRelinquishMemory" [return: [any-pointer!]] which would accept 
c-string!, struct!, pointer! [byte!], pointer! [integer!] etc..
sorry..   MagickRelinquishMemory: "MagickRelinquishMemory" [resource 
[any-pointer!]]
Dockimbel
2-Feb-2012
[4717x2]
You can already have it: #define any-pointer! byte-ptr!
Ah you want implicit casting...sorry.
Oldes
2-Feb-2012
[4719]
But it's true I can use:
	MagickRelinquishMemory as-c-string query
where query is an array... just it's not so clear
Dockimbel
2-Feb-2012
[4720x2]
You should rather use byte-ptr! (which is more "generic" than c-string!) 
as return type for MagickRelinquishMemory and cast values to byte-ptr! 
when required.
Pull request #201: Oldes, thank you very much for your changes. It 
should be ok now for merging, I will just run a few more tests before 
that.
Kaj
2-Feb-2012
[4722x5]
Oldes, I had the same problem as you with the generic memory freeing 
routine in the C library, so I use this define:
#define free-any	[free as-binary ]
Which uses this in turn:
#define binary!	[pointer! [byte!]]
#define as-binary	[as binary! ]
Instead of pointer! [byte!] you could use byte-ptr! now, as Doc said
Dockimbel
2-Feb-2012
[4727x2]
Enumeration branch from Oldes merged to float-partial branch. Thank 
to Oldes for this nice addition and quality work!
I will update the language spec document to include #enum description.
Kaj
2-Feb-2012
[4729x3]
Kaj: I gave a new try on making the GTK+ binding work on Linux/ARM, 
I was able to track the crash up to the call to `gtk-append-container` 
from `gtk-window` function. The argument values passed are:

    window: 0006C000 value: 12

which results in a Runtime Error 1: access violation (segfault)
Here's the code line:
gtk-append-container  as gtk-container! window  as gtk-widget! value
Dockimbel
2-Feb-2012
[4732]
Also, with this contribution comes an ImageMagick library binding!
Kaj
2-Feb-2012
[4733x2]
Cool :-)
value is supposed to be a widget object, so the 12 is bogus
Dockimbel
2-Feb-2012
[4735]
Good! At least we have a clue to follow.
Kaj
2-Feb-2012
[4736]
What's the source code that generates this?
Dockimbel
2-Feb-2012
[4737]
gtk-view label "Hello, Red/System GTK+ world!"
Kaj
2-Feb-2012
[4738x3]
The code is executed in this case:
either any-struct? type [
	either as-logic value [
That's correct, because the label generates the widget object to 
be added to the window container
Dockimbel
2-Feb-2012
[4741]
Right, I've added a lot of debug logs to GTK to follow the calls...(the 
planned stack trace feature for Red/System is climbing in priority)
Kaj
2-Feb-2012
[4742x3]
So type seems to be correct, but value is not the label object. At 
a guess, could value = type ?
They're set like this, so I expect a bug there:
type: list/type
value: list/value
Dockimbel
2-Feb-2012
[4745]
Right, I need to check the generated code for that part...
Kaj
2-Feb-2012
[4746]
Guessing further, did you maybe swap type and value in the struct 
when adding 64 bits floats?
Dockimbel
2-Feb-2012
[4747x5]
Yes I have, but the bug is older than that change.
And the swapping should be transparent.
I think there's definitely a stack offsetting bug in the ARM backend 
for typed/variadic functions.
Kaj, I've been able to reproduce a similar behavior (having 12 in 
list/value instead of an address) using a small program, I'm analyzing 
it right now.
I have fixed the bug (issue with variadic function's return value), 
but it is still crashing. It seems the real issue is that callbacks 
are not stable on ARM...I haven't found the time to properly test 
them, so I'll need to do it now. Fortunately, Andreas has joined 
the bug hunting party. :-)
Kaj
3-Feb-2012
[4752]
Good progress