-
Notifications
You must be signed in to change notification settings - Fork 1
GooBugs
Deprecated!
Go to http://djundjun.ai.mit.edu/mantis/ to make a bug report.
Any suggestions on what we should actually do vis a vis bug reports? Although the wiki approach is intriguing (and I know whoever posted these did so because we don't have a proper bug setup), I fear we probably should move to a real bug system. Bugzilla seems like the top-of-the-head guess, but I think it's somewhat ugly and possibly overkill. My only other experience has been with some weird commercial program used by a startup I worked at though, so I'm not sure what else is available especially in terms of web tools. Andrew.
GooSuspectedBugs - Place for things that might be bugs but need to be tested / researched more.
Goo 133
If a macro doesn't match exactly, it returns #f instead of giving an error or doing something remotely helpful. Probably what's happening in the bug below.
macro-expand always returns #f
empty does not return singletons
(== (empty <vec>) (empty <vec>))
Is false, indicating that you get a different vec for each one. The desired behavior is that they return the same vec.
str-tab table may fill up and give "ERROR: The table is totally full this shouldn't happen" message, instead of expanding the table.
I changed line 192 in tab.goo from
(if (> (%count table)
to
(if (>= (%count table)
and it looks like that fixed it. It seems plausible at least... But I didn't bother to look at the code at all.
Goo 131
,top command broken
special forms produce a rather odd error when evaluated
goo/user 0<= dc ERROR: No applicable methods error when calling #{Gen ast-evaluate (<any>)} on (#{<module-binding> .... ?several more lines here
pop! produces range-error for vec
len-setter produces a range-error
pow should use contagious-call
flo version of pow always returns 1.0
should use C3 cpl algorithm
class-descendents works like class-children
Adding a property to a class once the class has been used as the ancestor of another class causes infinite loop segfaulting
Once you write to the new property that is. Observe:
(dc <a> (<any>)) (dp foo (<a> => <any>)) (dc <b> (<a>)) (dp bar (<a> => <any>)) (dm cause-death () (def b (new <b>)) (set (bar b) 1) (msg out "DIE DIE DIE! %=\n" b) ) goo/user 0<= (cause-death) Process goo segmentation fault
This is a horribly, horribly, horribly painful bug. It makes a lot of sense once you figure out what the cause is given the internal class layouts and such, but DAMN, it took forever to track down. Anywho, it was brought about by some mild refactoring gone wrong, where I didn't properly transform a 'dp' statement. This seriously needs to be addressed.
instantiating a class with no superclasses
goo/user 0<= (dc foo ()) goo/user 0=> #f goo/user 0<= (new foo)
result: segfaults
user solution: You should be putting <any> as the superclass
dev solution: an error and/or warning should be given, with automatic insertion of <any> if this isn't a fatal error.
integer division
goo/user 0<= (/ 4 2)
result: segfaults
Automatic contagion for division was not correctly implemented. The result should be no applicable method. A short term fix has been checked into cvs, and hopefully we can get a new build up soon. For those who absolutely must have division, you will note that I added the following to src/goo/math.goo
(dm / (x|<int> y|<int> => <int>) (%ib (%it/ (%iu x) (%iu y))))
The longterm solution to this would be to fill out the math library to include ratio's to correctly represent the result.
Your short term options are to:
Add that into src/goo/math.goo, preferably after (dm * (x|<int>... and rebuild goo. (Make sure GOO_ROOT and GOO_BUILD_ROOT are correct, then do (use eval/g2c) followed by (g2c-goo) ) Theoretically you can type ",in goo/math", execute the dm above, then do ",in goo/user" to get back into the proper package space. Maybe add something to your user patches file... I'm not sure if the ,in stuff works in there though. I just threw up my build of g2c (aka goo) at httphttp://www.ai.mit.edu/projects/dynlangs/goo/files/g2c-div-fix.tgz. That's just the binary, built on x86 linux. It has some other changes made since the public release; I don't think it breaks anything, although you will note some messages about dependencies (perhaps) if you use bindings before they are defined, but inside of functions so no one actually cares. Andrew (and Jonathan)
using strings as collection keys
goo/user 0<= (col <col> "foo")
result: no applicable method for fab.
user solution: You want to use a str-tab. Ex of how to create one:
(fab <str-tab> 0)
mini-example:
(col <str-tab> "foo" "bar")