#parrot Parrot 0.6.1 "Bird of Paradise" Released | parrotcode.org
Set by moderator on 17 April 2008.
00:16 liona29 joined 00:46 teknomunk joined
dalek r27025 | infinoid++ | trunk: 00:48
: [C++]
: * Fix up nci_test.c so the linker symbols aren't mangled. This fixes
: some tests when building with g++.
: * Fix up c_indent.t to ignore stuff in an #ifdef __cplusplus. (This
: means an extern "C" won't throw off the indentation.)
diff: www.parrotvm.org/svn/parrot/revision?rev=27025
r27026 | infinoid++ | trunk: 01:01
: [src] g++ errors out when you do an uncasted void* pointer assignment.
: So, add a cast.
diff: www.parrotvm.org/svn/parrot/revision?rev=27026
Coke (slots) current is at six. 01:11
things still in flux until monday, however.
Infinoid ok, thanks 01:15
Coke msg pmichaud en.wikipedia.org/wiki/Perl_6#Implementations has what I think mis-statements about rakudo. I can fix it if you give me verbage. (or, since it's wikipedia, you know...) 01:24
purl Message for pmichaud stored.
01:30 slightlyoff joined
Infinoid hmm. it would be really nice if tools/build/vtable_h.pl had a way to specify that the "self" argument (the PMC*) was const. 01:58
I'm pretty sure (for example) "isa" doesn't modify the invocant, and having to add a cast to explicitly downgrade the const-ness is just ugly. 01:59
with gcc, its not such a big deal. with g++, it is. 02:02
gcc says: src/key.c:448: warning: passing argument 2 of 'key->vtable->isa' discards qualifiers from pointer target type 02:03
g++ says: src/key.c:448: error: invalid conversion from 'const PMC*' to 'PMC*'
02:13 kid51 joined
Infinoid ooh, Parrot::Vtable has attr parsing. I might be able to hack constness in. 02:19
02:29 tetragon joined
Infinoid amazingly enough, this actually appears to work. 03:27
nopaste "Infinoid" at 75.31.89.233 pasted "const vtable methods (diff)" (115 lines) at nopaste.snit.ch/12723
03:31 AndyA joined
kid51 Do you expect to be making further changes on that over night? If not, I'll try it on Darwin tomorrow. 03:33
PerlJam greetings
Infinoid I'm not sure. I'm trying to reduce the amount of ugly manual casting to downgrade const-ness. 03:34
kid51 k
kid51 must sleep
purl $kid51->sleep(8 * 3600);
Infinoid if this seems like the right approach, I may be consting a bunch more methods 03:35
oh well.
03:42 chromatic joined
chromatic +1 to consting 03:42
I've always wanted to fix the coding standard violations of the pointer smackdab up against the type, but I haven't done that yet either.
dalek r27027 | infinoid++ | trunk: 03:46
: [rakudo] Functions which modify data probably shouldn't declare that
: data as 'const' and then cast around it afterwards...
diff: www.parrotvm.org/svn/parrot/revision?rev=27027
Infinoid chromatic: does nopaste.snit.ch/12723 look like the right approach? 03:47
03:47 tetragon joined
chromatic It looks reasonable. 03:48
Infinoid this is all just yak shaving because I hate using casts to downgrade const-ness. (It's an indication that there's too little or too much consting somewhere else.)
chromatic I'm not sure if :const is screechingly obvious in its implications however. 03:49
Infinoid I considered using a PARROT_CONST marker or somesuch, but then it looked too much like the return value was const
chromatic I can see that.
Infinoid I'm open to suggestions...
chromatic I keep trying to read it as :pure
Infinoid hmm, that works. 03:50
chromatic Andy L tried slapping more const on the vtable entries, but Allison was concerned about Liskov, in the sense that we don't always know what child PMCs will do with these entries. 03:51
I like the idea of being very strict by default and loosening when necessary though.
Infinoid yeah. I figured isa() was pretty safe, in terms of side effects
chromatic Agreed; low risk on this one. 03:52
Infinoid the nice thing is, when you add it to a naughty method, gcc starts emitting warnings as the const contract is broken 03:53
chromatic Yeah. We should clean up the existing warnings, where possible.
Infinoid for instance, a couple of those isa() methods call the get_string() method, which isn't const
chromatic I hope to fix the warnings in optimized mode here shortly.
Infinoid well, should I apply this? Or post it to RT/list for discussion? 03:55
chromatic Up to you. 03:56
If you're going to be around tomorrow, we can back it out if necessary.
Infinoid I'll be around all weekend
do you want me to rename the attribute?
chromatic I can't see any reason it won't work though; if we have const problems on any compiler on any platform, we'll have seen them elsewhere.
Infinoid plus, in terms of release cycle, this is The Week To Break Things.
chromatic Where does the 'const' go, on SELF or on something else? 03:57
Infinoid correct
const PMC *pmc 03:58
chromatic My only better idea is :const_self
s/better/other/
Infinoid I don't have a problem with that. I started out with :const_invocant, and then decided it was too spammy. 03:59
chromatic :const is fine with me. 04:01
Nice work.
Infinoid ok, I'll check this in with the attribute named :const. thanks!
dalek r27028 | infinoid++ | trunk: 04:13
: [PMC] Add a :const attribute to methods (vtable methods and otherwise),
: which marks SELF as const. Hopefully this will let us reduce the amount
: of casting we end up doing, to "fix" const-downgrade warnings.
: The "isa" vtable method is my first victim. This is tangentially
: related to RT #52874 (which had a const-downgrade cast patch).
diff: www.parrotvm.org/svn/parrot/revision?rev=27028
PerlJam This perl 6 (rakudo) program behaves in a strange manner: nopaste.snit.ch/12720 04:17
It seems like this is a bug in assign, but I'm not sure if it's Perl6Str's fault or parrot's 04:18
Infinoid maybe it's a CoW failure? 04:31
PerlJam That's what I was thinking, but I know absolutely nothing about cow 04:32
Infinoid a failure to do CoW, that is
I don't know anything about how parrot does it either
nice find tho :)
can you post it to RT? 04:34
PerlJam I guess. I'd rather fix it. But I'm too tired to think very well right now. 04:38
dalek r27029 | infinoid++ | trunk: 04:46
: [PMC] constify the vtable get_class() method.
diff: www.parrotvm.org/svn/parrot/revision?rev=27029
04:59 Psyche^ joined
nopaste "chromatic" at 63.105.17.30 pasted "Fix COW Problem in increment/decrement for Perl6Str PMC" (82 lines) at nopaste.snit.ch/12724 05:13
chromatic_away This'd be easier if there were a Parrot_unmake_COW which returned the modified string pointer; less code moving around. 05:15
It'd be harder to get this wrong, too.
Even a macro of some kind, which checked the COW flag.... 05:16
05:21 camgirl29 joined 06:46 markus joined 07:37 darbelo joined 08:06 slightlyoff_ joined 08:10 markus_ joined 08:15 anna30 joined 08:45 IllvilJa joined 09:03 wknight8111 joined
dalek r27030 | jonathan++ | trunk: 09:45
: [rakudo] Make .= really work properly when used in declarations, and add an optimization so we don't emit a type check when doing an assignment to a variable we can statically determine is untyped.
diff: www.parrotvm.org/svn/parrot/revision?rev=27030
09:47 darbelo left 09:53 barney joined 10:43 ruoso joined
rotty barney: did you get an answer from fperrad? 10:44
barney rotty: yes, I think I forwarded it to you 11:09
rotty i
11:09 cotto_work joined
rotty checks his mbox 11:09
barney Donnerstag, 21:33 11:12
11:22 iblechbot joined 11:27 davidfetter joined 11:34 lola22 joined 11:37 kid51 joined 11:51 rdice joined 11:52 wknight8111 joined 12:09 liona29 joined
dalek r27031 | bernhard++ | trunk: 12:17
: Let P::T::Harness honor the 'files' import-option,
: when there is no '--files' commandline option.
: Add a harness for compilers/nqp/bootstrap.
diff: www.parrotvm.org/svn/parrot/revision?rev=27031
r27032 | bernhard++ | trunk: 12:19
: Let SVN ignore generated files in runtime/parrot/library/NCI/
diff: www.parrotvm.org/svn/parrot/revision?rev=27032
barney broke Eclectus testing in r27031 12:43
dalek r27033 | bernhard++ | trunk: 12:48
: [Eclectus]
: Remove Eclectus from unified languages testing, 12:49
: make 'cd eclectus && make test' work again.
diff: www.parrotvm.org/svn/parrot/revision?rev=27033
Infinoid is VTABLE_get_string constable? (is it free of side effects?) 13:04
barney I can imagine that there are side effects, like for Random PMC 13:08
Infinoid nice example, but that still doesn't modify the PMC 13:10
13:11 jq joined
Infinoid know of any pmcs which do local caching of stringification, or something like that? 13:11
barney I've never seen that, but IMHO it should be possible 13:13
Infinoid you're right. and that means nothing that calls VTABLE_get_string should be constable 13:14
barney If you put it that way, it sounds bad 13:15
Infinoid I've consted isa(), get_class(), and I'm working on name() and type() 13:17
but I'm not really sure this is the right approach, because some of those call get_string()
dalek r27034 | bernhard++ | trunk:
: [Eclectus]
: Use 'case' in order to switch between implementations.
diff: www.parrotvm.org/svn/parrot/revision?rev=27034
13:19 askie joined
barney Sounds like a design issue. 13:24
13:24 tetragon joined 13:49 jq joined
dalek r27035 | fperrad++ | trunk: 13:50
: [opengl]
: - fix openGL config on MinGW32
diff: www.parrotvm.org/svn/parrot/revision?rev=27035
14:05 jq joined 14:27 bpphillips-1 joined 14:38 tetragon joined
dalek r27036 | jkeenan++ | trunk: 14:43
: Refactor preparatory code found in lib/Parrot/Configure/Options/Test.pm into
: lib/Parrot/Configure/Options/Test/Prepare.pm. carp instead of dying silently
: when config step class lacks corresponding test files (incorporating Geoffrey
: Broadwell's patch in rt.perl.org/rt3/Ticket/Display.html?id=53034).
: Make changes needed in Configure.pl, t/configure/025-options_test.t and
: t/configure/026-options_test.t. Add t/configure/049-options_test.t to test
: previously untested branches and regexes.
diff: www.parrotvm.org/svn/parrot/revision?rev=27036
r27037 | jkeenan++ | trunk: 14:46
: Correct name of newly added test file.
diff: www.parrotvm.org/svn/parrot/revision?rev=27037
Infinoid any lua experts around? 15:08
how does one tell string_from_cstring() whether or not to free() the cstring when garbage collection occurs? 15:24
15:28 lichtkind joined
nopaste "Infinoid" at 75.31.89.233 pasted "Remove a hack from LUA that was causing lots of crashes and failing tests. Won't the GC take care of this?" (15 lines) at nopaste.snit.ch/12725 15:29
dalek r27038 | infinoid++ | trunk: 15:36
: [Lua] Checking pointers for 8 digits of hex only works on 32 bit platforms.
: Adjust regexes to get 3 such tests passing on linux/amd64.
diff: www.parrotvm.org/svn/parrot/revision?rev=27038
15:42 cognominal joined 15:44 AndyA joined
cognominal jonathan++ 15:47
16:07 Theory joined 16:11 markus_ joined
Infinoid (note for the logs: my above nopaste has been posted to RT as #53072.) 16:33
cognominal bots shoud give a link for RT nodes :( 16:36
tetragon Is there any preferred way to temporarily set a cflag, with the duration being a single configure test?
Infinoid cognominal: wknight8111 has a bot that does exactly that, and I've written a botnix module that we can plug into dalek to do it too 16:38
nopaste "Infinoid" at 75.31.89.233 pasted "plugin for dalek: modules/local/rtlink.pm" (24 lines) at nopaste.snit.ch/12727 16:40
cognominal does anyone know how one can access vtable method attributes like :const ? 16:42
dalek is written in perl 5 or use parrot?
Infinoid dalek is written in perl 5.
cognominal yea, i see your paste
Infinoid cognominal: access :const from where? 16:43
cognominal in pir, suppose I get the pmc of the said method...
Infinoid hmm. I don't know if pmc2c stores that stuff for later introspection 16:44
cognominal well, I don't have a use for it rigt now. Also I suppose there is a perl way from the perl5 toolchain
I suppose it will be useful from the interpretor to run a restricted parrot for security reason 16:45
Infinoid the code within pmc2c can use it, yes
there's really 2 :const attributes I added in www.parrotvm.org/svn/parrot/revision?rev=27028 - one for vtable.tbl and one for methods within .pmc files
cognominal I have seen your patches so it made me think. 16:46
Infinoid ok
16:46 particle joined
Infinoid interesting thought regarding the security 16:47
cognominal I thought that was one of the reason to get this flags on the first place so the necesity of introspection 16:48
Infinoid my motivation was just fixing some gcc warnings that turn into errors when you use g++
cognominal but I did not find anything, not that I searched hard.
I hate bureaucracy but I noted that rt is also a tool of social engineering, A ticket that is immediately dismissed by the one in charge of the code , get the users to bark. But yes, he is right. I need that. And eventually, if no one side with me, I now I am probably wrong 16:52
"but yes he is right" # that should have been quoted 16:53
Infinoid Andy Bach's email sig cracks me up. "The bureaucracy is expanding to meet the needs of an expanding bureaucracy." 16:55
cognominal: hmm. did we ever get anywhere with that compilers/imcc/imcc.l stuff? I would have tried to fix it, but I am clueless about flex and REJECT :( 17:00
cognominal ho, I should get back to that. The REJECT was only to factorie the error message. That was silly because it complicated the test stuff
One put the error message instead of the REJECT and that is done. 17:01
And you suppress some of your test correction because they are not need anymore. 17:02
Do you need a patch? 17:03
Infinoid please, thanks
cognominal ok
Infinoid cognominal++ 17:06
cognominal sorry for the botched job 17:07
Infinoid, do you have the RT number?
Infinoid oh... 17:08
#52858
cognominal thx 17:09
tetragon kid51: I got the readline configure step to fail gracefully on my darwin box when it could only find editline. Unfortunately, it's not in the most elegant of states 17:23
dalek r27039 | jkeenan++ | trunk:
: Add tests to cover previously untested methods, branches or circumstances.
diff: www.parrotvm.org/svn/parrot/revision?rev=27039
kid51 Can you paste a patch? 17:25
Or post it to the RT ticket we have open on that?
tetragon I was wondering if there is an elegant way to set a temporary flag 17:26
kid51 The flags, IMHO, are rather messy now. So I suspect 'temporary' flags would not be the way to go -- but this is not my area of expertise. 17:27
tetragon Right now I grab the old set, save it, tack on my temporary ones and restore after the build 17:28
kid51 Why don't you post that in the ticket. That grab/save/append/restore mechanism may be helpful in other places. 17:29
dalek r27040 | chromatic++ | trunk: 17:31
: [include] Added Parrot_unCOW_string macro to perform copy-on-impending-write in
: place and, most importantly, return the STRING pointer. This allows the use of
: the macro in assignments, instead of calling Parrot_unmake_COW() directly.
: The name of this macro could be better, and it might go in a better header, but
: this will work for now.
diff: www.parrotvm.org/svn/parrot/revision?rev=27040
tetragon I've attached it to #52212 17:33
The reason the modified flags are 'libs' is so that I know it comes after the previously set "-undefined dynamic_lookup" 17:35
kid51 I have to go now, but I will look at it later today or tomorrow. 17:40
dalek r27041 | chromatic++ | trunk: 17:42
: [Rakudo] Fixed Perl6Str increment/decrement to respect STRING copy on write.
: (Reported by PerlJam; confirmed by Infinoid).
diff: www.parrotvm.org/svn/parrot/revision?rev=27041
17:44 paula35 joined 17:45 IllvilJa joined
nopaste "cognominal" at 82.67.232.89 pasted "#52858: "$" vars in PASM don't work, but aren't disallowed either" (67 lines) at nopaste.snit.ch/12728 18:10
cognominal Infinoid. my corrected patch
18:13 mj41 joined 18:21 jan joined
dalek r27042 | infinoid++ | trunk: 18:24
: [Lua] Remove some conditional freeing of non-freeable resources; let the GC
: sort it out. This fixes lots of lua tests, and resolves RT#53072.
: chromatic++ for the review.
diff: www.parrotvm.org/svn/parrot/revision?rev=27042
Infinoid cognominal: thanks, trying it now 18:27
cognominal don't forget to run flex
Infinoid do I need to give it any arguments? "flex compilers/imcc/imcc.l" doesn't seem to do anything. 18:32
oh, -d -o 18:34
(testing now) 18:38
18:44 markus joined
Infinoid removed hard tabs, trying again... 18:45
cognominal arf, I though I had emacs configured against hard tabs :( 18:49
sorry 18:50
Infinoid no big deal, this is what codingstd tests are for :) 18:51
18:54 Limbic_Region joined
dalek r27043 | infinoid++ | trunk: 18:55
: [IMCC] Disallow "$" vars in PASM mode.
: This resolves RT #52858. rgrjr++ reported it, cognominal++ fixed it.
diff: www.parrotvm.org/svn/parrot/revision?rev=27043
cognominal Infinoid++ comitted it :) 18:56
Infinoid eh, committing is easy. thanks for fixing it! 19:07
19:15 peeps joined
cotto_home is the schedule for the pre-YAPC::NA hackathon known? 19:16
19:23 liona29 joined 19:54 DarkWolf84 joined 20:11 ambs joined
ambs HI, folks 20:13
who is playing with OpenGL? 20:14
20:34 Limbic_Region joined 20:42 particl1 joined
ambs hmms 20:58
Infinoid, you the openGL guy? :) 20:59
Infinoid I checked it in, and tested it on linux/amd64 21:04
but the patch came from Geoffrey Broadwell <geoff@broadwell.org>
ambs well, I'm submitting bug reports
Infinoid great! how badly does it break? 21:05
ambs somebody will look into them :D
detection, for now
nothing too bad
Infinoid ok, thanks 21:06
ah, you're right, I see that error outside of X too 21:10
21:13 diakopter joined
ambs Infinoid, it is not critical, but it would be nice to solve :) 21:13
21:14 kid51 joined
Infinoid ambs: yeah. I'm just staring at www.parrotvm.org/svn/parrot/revision?rev=27035 21:14
seems not everyone needs a $DISPLAY variable 21:15
ambs (loading)
Infinoid so if we can figure out a way to detect those who do, we can check and barf early, or do a link-only test, or something
ambs let me see what is compiled and run 21:16
glutInit...
glutInit will initialize the GLUT library and negotiate a session with the window system. During this process, glutInit may cause the termination of the GLUT program with an error message to the user if GLUT cannot be properly initialized. Examples of this situation include the failure to connect to the window system, the lack of window system support for OpenGL, and invalid command line options. 21:17
glutInit
Infinoid ok. well, we can check for the existence of glutInit without actually calling it... maybe just check non-NULLness of its pointer 21:18
ambs yes 21:19
or chose anoter function to test
:)
nopaste "Infinoid" at 75.31.89.233 pasted "Patch to detect OpenGL successfully even without X" (16 lines) at nopaste.snit.ch/12729 21:20
Infinoid well, I haven't ever done any opengl programming, but glutInit() sounds sufficiently important to me :) 21:21
ambs testing
yes, that I agree :-P
Determining if your platform supports OpenGL...................yes, GLUT 4. 21:22
now let me make
and make test
purl More like "make fail"
Infinoid thanks, purl
ambs it seems to be all working. 21:25
Infinoid I don't think anything opengl-related runs as part of the test suite. there's an examples/opengl/ that I hand-tested with 21:26
ambs yeah, but that one fails open display, and that failure is normal and expected :D
Infinoid, I think you can apply the patch and close the ticket ;) 21:27
Infinoid thanks, I will as soon as this test completes momentarily 21:28
ambs ;)
I need to get out. See you tomorrow :)
dalek r27044 | infinoid++ | trunk: 21:32
: [config] The OpenGL configuration test called glutInit(), which requires
: a $DISPLAY environment variable (on X-based platforms, at least.) Fix
: things to do a link-only test, which works fine without X running.
: This fixes #53084; ambs++ for reporting it.
diff: www.parrotvm.org/svn/parrot/revision?rev=27044
21:34 camgirl29 joined 21:48 paula35 joined
dalek r27045 | infinoid++ | pdd13pbc: 22:10
: Create a dummy packfile.pmc with stub methods as specified in PDD13.
diff: www.parrotvm.org/svn/parrot/revision?rev=27045
Infinoid 10 commits in less than 24 hours. \\o/
22:12 iblechbot joined
dalek r27046 | infinoid++ | pdd13pbc: 22:52
: Create dummy FackfileSegment (abstract) and PackfileDirectory (container)
: classes, with stub methods as defined by PDD13.
diff: www.parrotvm.org/svn/parrot/revision?rev=27046
Infinoid jonathan: PDD13 doesn't specify the size of the "words" accessed by RawSegment.pmc. Native INTVAL-sized words? Or something more specific? 22:57
also, thinking of naming it packfilerawsegment.pmc, rather than just rawsegment.pmc, to be consistent with the rest.
dalek r27047 | jkeenan++ | trunk: 23:02
: Edit some comments so that they pass t/codingstd/perlcritic.t policy
: Bangs::ProhibitFlagComments.
diff: www.parrotvm.org/svn/parrot/revision?rev=27047
23:02 tetragon joined
Infinoid r27046.logentry =~ s/Fack/Pack/ 23:07
23:18 particle joined
dalek r27048 | jkeenan++ | trunk: 23:20
: Add tests. Here, case where --without-opengl is specified on command line.
diff: www.parrotvm.org/svn/parrot/revision?rev=27048
kid51 Infinoid: ping 23:22
Infinoid kid51: hi! 23:26
kid51 You know about OpenGL? What would be sufficient to prove someone had installed it? 23:27
config/auto/opengl.pm has this comment: Mindlessly morphed from readline ... may need to be fixed 23:28
... referring to getting it from Fink and macports ... and later on Win32.
Infinoid currently, being able to compile config/auto/opengl/opengl.in and link it against -lglut -lGLU -lGL 23:29
kid51 In Fink, I see these packages: glut and glut-shlibs 23:30
In Macports: trac.macports.org/projects/macports...t/Portfile
shorten kid51's url is at xrl.us/bjkce
kid51 But I get the feeling that that's not all that's needed. 23:31
(I don't have opengl installed anywhere.)
Infinoid glut should depend on the rest of opengl 23:32
glut-shlibs sounds like it has libglut.so
Coke cotto_home: (schedule for pre-YAPC::NA hackathon) no, not yet. I'll be there, whenever it is. 23:34
kid51 See code coverage for auto::opengl: thenceforward.net/parrot/coverage/c...gl-pm.html
shorten kid51's url is at xrl.us/bjkci
dalek r27049 | infinoid++ | trunk: 23:35
: opengl detection test file: fix the following warning:
: opengl.c: In function 'main':
: opengl.c:14: warning: the address of 'glutInit', will always evaluate as 'true'
diff: www.parrotvm.org/svn/parrot/revision?rev=27049
tetragon Incidentally, I can get the test for opengl to build on a more vanilla OS X by simply changing it from GL/glut.h to GLUT/glut.h 23:37
OS X splits OpenGL between two system frameworks, OpenGL and GLUT 23:38
Infinoid hmm
tetragon And it builds and links correctly without any compiler flags
Infinoid after that last checkin, it builds cleanly for me with: g++ -O2 -Wall -o opengl opengl.c -lglut -lGLU -lGL 23:39
and prints: "4"
tetragon It prints "5" for me 23:40
g++ main.c
No flags, opengl.in renamed to main.c
Infinoid interesting
tetragon It's doing dynamic lookup
The moment I start pointing it at libraries, the build starts failing 23:41
tetragon goes and looks up the framework gcc flags
Infinoid opens an opengl detection ticket and sees if he can get the original submitter to have a look 23:43
tetragon g++ main.c -framework GLUT
It then explicitly links against glut
Infinoid are there multiple implementations of the same API to choose from? 23:44
tetragon Don't think so on my box
I also have some GL headers in /usr/X11 23:47
Infinoid they very likely put those in there for reverse compatibility with the mess libGL has been making of unix for the last 10 years or so.
tetragon Both my Tiger and Leopard Macs give 5 as that version 23:48
The difference between 4 and 5 (according to the header file) is 5 added glutGetProcAddress 23:49
Infinoid ok. I've created #53088 and pinged (pung?) Geoff Broadwell about it 23:51
he was hoping for more testing, looks like he's got it.
kid51 And I'm supplying the usual tests of the Perl 5 code. 23:55
Infinoid oh, and also, what's the story with readline? I've been meaning to look at it because it fails to detect with g++
dalek r27050 | jkeenan++ | trunk: 23:57
: Add test file to test internal methods and subroutines in auto::opengl.
diff: www.parrotvm.org/svn/parrot/revision?rev=27050
Infinoid kid51++
tetragon Hrm... Looks like there's a difference in name mangling
Works the moment I put the externs in an 'extern "C"' block 23:58