Camelia, the Perl 6 bug

IRC log for #parrot, 2012-04-14

Parrot | source cross referenced

| Channels | #parrot index | Today | | Search | Google Search | Plain-Text | summary

All times shown according to UTC.

Time Nick Message
00:13 whiteknight joined #parrot
00:13 whiteknight good evening, #parrot
01:05 dalek Rosella: 7ea6df7 | Whiteknight++ | s (6 files):
01:05 dalek Rosella: [Json] Add a Builder object that traverses the parse and builds output, so we can override the behavior without duplicating the parser
01:05 dalek Rosella: review: https://github.com/Whiteknig​ht/Rosella/commit/7ea6df7768
01:23 dalek Rosella: 0f02ad6 | Whiteknight++ | s (2 files):
01:23 dalek Rosella: [Winxed] Add a header for winxed
01:23 dalek Rosella: review: https://github.com/Whiteknig​ht/Rosella/commit/0f02ad66b4
01:31 cotto ~~
01:33 whiteknight hello cotto
01:40 Kovensky joined #parrot
01:44 dalek ParrotStore: f3bb28e | Whiteknight++ | / (4 files):
01:44 dalek ParrotStore: [Memcached] Break memcached code up into separate files. Add a setup.winxed with basic build rules for memcached lib.
01:44 dalek ParrotStore: review: https://github.com/Whiteknight​/ParrotStore/commit/f3bb28ebde
01:44 dalek ParrotStore: 84a6234 | Whiteknight++ | Makefile:
01:44 dalek ParrotStore: [Makefile] Add a makefile
01:44 dalek ParrotStore: review: https://github.com/Whiteknight​/ParrotStore/commit/84a6234bb6
01:44 dalek ParrotStore: 046e0e3 | Whiteknight++ | memcached.winxed:
01:44 dalek ParrotStore: [Memcached] Remove old test file for memcached bindings
01:44 dalek ParrotStore: review: https://github.com/Whiteknight​/ParrotStore/commit/046e0e3ccc
01:44 dalek ParrotStore: e721e8d | Whiteknight++ | mongodb/ (4 files):
01:44 dalek ParrotStore: [MongoDB] Add in some quick (unbuilt, untested) braindump files for MongoDB bindings
01:44 dalek ParrotStore: review: https://github.com/Whiteknight​/ParrotStore/commit/e721e8db00
01:44 dalek ParrotStore: d1a86c9 | Whiteknight++ | mysql/pmc/ (2 files):
01:44 dalek ParrotStore: [MySql] Quick braindump of bindings for MySql
01:44 dalek ParrotStore: review: https://github.com/Whiteknight​/ParrotStore/commit/d1a86c9be1
01:44 dalek ParrotStore: 25d45b0 | Whiteknight++ | .gitignore:
01:44 dalek ParrotStore: Add a quick .gitignore file
01:44 dalek ParrotStore: review: https://github.com/Whiteknight​/ParrotStore/commit/25d45b0673
01:52 dalek ParrotStore: cb9fbb3 | Whiteknight++ | setup.winxed:
01:52 dalek ParrotStore: [Memcached] Add the memcached .pbc to the install list
01:52 dalek ParrotStore: review: https://github.com/Whiteknight​/ParrotStore/commit/cb9fbb3667
01:53 dalek ParrotStore: 2a1da33 | Whiteknight++ | memcached/Memcached.winxed:
01:53 dalek ParrotStore: [Memcached] Add some TODO notes
01:53 dalek ParrotStore: review: https://github.com/Whiteknight​/ParrotStore/commit/2a1da33bc0
01:54 whiteknight I think that's plenty of work for one night
06:14 bacek joined #parrot
06:48 fperrad joined #parrot
07:39 jsut joined #parrot
08:32 lucian joined #parrot
08:42 Tene joined #parrot
09:00 Tene joined #parrot
09:03 jsut_ joined #parrot
09:24 particle1 joined #parrot
09:28 rich joined #parrot
09:39 particle joined #parrot
10:26 wagle joined #parrot
10:31 whiteknight joined #parrot
10:41 wagle joined #parrot
10:51 whiteknight good morning, #parrot
11:01 JimmyZ joined #parrot
11:25 bluescreen joined #parrot
11:49 rich hi there
11:52 PacoAir joined #parrot
12:05 whiteknight hello rich
12:36 mdupont joined #parrot
12:39 dalek ParrotStore: 2c5fa1d | Whiteknight++ | / (8 files):
12:39 dalek ParrotStore: [MongoDB] Reference the mongodb c driver repo. Several fixes to get the mongodb pmcs to build (untested)
12:39 dalek ParrotStore: review: https://github.com/Whiteknight​/ParrotStore/commit/2c5fa1d2fb
12:55 dalek Rosella: 0ae739c | Whiteknight++ | s (2 files):
12:55 dalek Rosella: [Json] Add a header file to the install
12:55 dalek Rosella: review: https://github.com/Whiteknig​ht/Rosella/commit/0ae739c0d5
13:04 kid51 joined #parrot
13:04 jsut joined #parrot
13:06 JimmyZ joined #parrot
13:50 dalek rakudo/nom: 1fa8fb5 | (Felix Herrmann)++ | src/core/Exception.pm:
13:50 dalek rakudo/nom: Make Exception.Bool return True
13:50 dalek rakudo/nom:
13:50 dalek rakudo/nom: Signed-off-by: Moritz Lenz <moritz@faui2k3.org>
13:51 dalek rakudo/nom: review: https://github.com/rakudo/rakudo/commit/1fa8fb5841
14:11 nine whiteknight: shouldn't Parrot_gc_pool_is_owned(interp, self->pmc_allocator, pmc) return true for all PMCs allocated on the current interp?
14:11 whiteknight nine: yes
14:11 whiteknight nine: you can probably add a shortcircuit (if pmc->orig_interp != interp) return;
14:12 nine whiteknight: it fails even in ./parrot-nqp --target=pir compilers/data_json/JSON.nqp > runtime/parrot/languages/JSON/JSON.pir
14:12 whiteknight hmmmm
14:12 whiteknight and you aren't creating any threads there, right?
14:12 nine I added an assertion to gc_gms_validate_objects right before the PARROT_ASSERT_INTERP
14:12 nine whiteknight: not that I'm aware of
14:13 whiteknight somewhere we're losing a PMC
14:13 whiteknight does the interp keep a reference to the current task, and does that task PMC get marked by GC?
14:13 nine just tried to find out if it's a foreign PMC being put into the GC's object list or if an existing object somehow gets overwritten. This result is unexpected
14:14 whiteknight Right, I think we have to focus on the small amount of code in the main entry way that is changed, since that's the only code that's used in the data_json code
14:23 nine But something's not right here: (void*)pmc is 0x7fffe6f0afe0. self->pmc_allocator->arena_bounds[36496] is 0x7fffe6f0a2b8 and self->pmc_allocator->arena_bounds[36497] is 0x7fffe6f0b2a8
14:23 nine Looks to me like the pointer is within one of the areas of the allocator.
14:26 whiteknight but it has a different orig_interp?
14:27 nine Oh, but it's not at the right position. ((pmc - pool->arena_bounds[36496]) % 48) should be 0. But (0x7fffe6f0afe0 - 0x7fffe6f0a2b8) % 48 is 8
14:27 nine orig_interp is fine in this case
14:28 nine as it would be in a non-threaded test
14:28 nine 48 is the pool's object_size
14:30 nine 8 would be the size of a pointer on my machine. IIRC a PMC header is actually allocated with a pointer in front, so I guess Parrot_gc_pool_is_owned(interp, self->pmc_allocator, ptr) would be the correct variant
14:31 nine And indeed the build now succeeds
14:31 whiteknight hmmm
14:32 nine And in the threaded test, the PMC really seems to belong to the interp's memory pool, but it's orig_interp is different
14:32 nine Seems to indicate that the PMC gets overwritten after being added to the GC's object list
14:35 whiteknight yes, that's what I've been thinking
14:40 nine is there any way to tell gdb that MarkSweep_GC should be the one from gc_gmc.c, not the one from gc_ms2.c?
14:46 jsut_ joined #parrot
14:54 whiteknight nine: It's all done by pointers
14:54 whiteknight interp->gc_private, or something like that
14:55 JimmyZ_ joined #parrot
14:55 nine Yes but since that's a generic pointer I have to cast it. But if I cast it to (MarkSweep_GC*) gdb choses the one from gc_ms2.c. I guess that's the first it finds. Anyway, the first member in both structs is the same
14:56 nine oh
14:58 nine whiteknight: it gets stranger and stranger. Seems like I was wrong. The PMC with the wrong orig_interp really got allocated on orig_interp according to debug output in get_new_pmc_header.
14:58 whiteknight nine: so it get allocated in the correct interp, or in the wrong interp?
15:00 nine whiteknight: it gets allocated on the child thread, but lands in the objects list of the main thread's GC. And it belongs to the main thread's allocator pool.
15:00 dalek Heuristic branch merge: pushed 16 commits to rakudo/nom by jnthn
15:04 whiteknight nine: how does it possibly end up in that list? We've added asserts to all routines that add items to the list
15:05 nine And another correction: it belongs to the child thread's pool. I just put the Parrot_gc_pool_is_owned into the wrong function. So allocation seems to be fine. It just somehow appears on the wrong objects list out of nowhere.
15:09 dalek rakudo/nom: ac083c5 | jnthn++ | docs/ChangeLog:
15:09 dalek rakudo/nom: Fill out ChangeLog a little more.
15:09 dalek rakudo/nom: review: https://github.com/rakudo/rakudo/commit/ac083c5d28
15:12 nine whiteknight: I just went again over gc_gms.c checking all places where objects is accessed. The assertions are everywhere
15:23 nine whiteknight: it only happens if both threads allocate/collect garbage from time to time. They do not have to do it at the same time however. And it does only happen if the main thread is involved. With two child threads allocating/collecting and the main thread just busy waiting it's no problem at all.
15:47 nine whiteknight: with variations in the test program, the foreign PMC it finds is different so it's not related to any specific object. It's just some random PMC appearing in the wrong list.
15:51 benabik ~~
15:59 JimmyZ_ joined #parrot
16:01 JimmyZ joined #parrot
16:54 JimmyZ_ joined #parrot
17:05 whiteknight nine: curiouser and curiouser
17:06 kid51 joined #parrot
17:07 whiteknight Can somebody explain to me why the loadlib_p_s opcode returns undefined when it fails, and there is absolutely no mechanism whatsoever to find out why it failed?
17:07 benabik whiteknight: Didn't you write it?
17:07 benabik Oh.
17:07 whiteknight benabik: no, this is the loadlib opcode, not load_bytecode or load_language
17:08 benabik Yeah, just noticed that.
17:08 whiteknight cotto: ping
17:09 whiteknight That opcode should either throw an exception with the dlerror() text, or we should provide a second op to provide access to that value
17:09 whiteknight because it silently failing, and me having to use a debugger to find out why is not acceptable
17:13 cotto whiteknight, pong
17:13 whiteknight cotto: I'd like to fix the loadlib opcode
17:13 whiteknight when it fails, it returns undef with no information
17:13 whiteknight I think it should either throw an exception with the message from dlerror(), or we should have a separate op to expose that method
17:14 whiteknight you pick, I code
17:14 cotto those sound like a more appropriate way to fail
17:15 cotto have you looked at how much code depends on the current behavior, especially in rakudo?
17:15 cotto Throwing an exception strikes me as the better alternative.
17:27 jashwanth joined #parrot
17:28 bluescreen joined #parrot
17:34 awwaiid joined #parrot
17:48 dalek nqp/cstruct-work: 51a3250 | (Arne Skjærholt)++ | src/6model/reprs/CStruct.c:
17:48 dalek nqp/cstruct-work: Start letting CStruct have CArray members.
17:48 dalek nqp/cstruct-work: review: https://github.com/perl6/nqp/commit/51a3250d24
17:48 dalek nqp/cstruct-work: 6700db0 | (Arne Skjærholt)++ | .gitignore:
17:48 dalek nqp/cstruct-work: Ignore OS X bundles.
17:48 dalek nqp/cstruct-work: review: https://github.com/perl6/nqp/commit/6700db086a
17:53 dalek rakudo/nom: 73ce76a | tadzik++ | lib/Pod/To/Text.pm:
17:53 dalek rakudo/nom: [Pod::To::Text] Print subs and methods prettier
17:53 dalek rakudo/nom:
17:53 dalek rakudo/nom: This delibarately skips invocant and optional named params in method
17:53 dalek rakudo/nom: signature for the sake of readability and the least amount of confusion.
17:53 dalek rakudo/nom:
17:53 dalek rakudo/nom: We're not using simply Sub.perl and Method.perl since they may contain
17:53 dalek rakudo/nom: the source code one day, and we almost certainly don't need that.
17:53 dalek rakudo/nom: review: https://github.com/rakudo/rakudo/commit/73ce76a49a
18:03 whiteknight cotto: I'll send a message to parrot-dev to solicit opinions
18:12 dalek nqp/cstruct-work: 3bde5a3 | (Arne Skjærholt)++ | src/6model/reprs/CStruct.c:
18:12 dalek nqp/cstruct-work: Remove some TODOs since they weren't actually necessary. jnthn++
18:12 dalek nqp/cstruct-work: review: https://github.com/perl6/nqp/commit/3bde5a38df
18:25 cotto whiteknight, good idea
18:48 kid51 joined #parrot
19:05 dalek ParrotStore: 4b278c3 | Whiteknight++ | / (5 files):
19:05 dalek ParrotStore: [MongoDB] Remove the submodule
19:05 dalek ParrotStore: review: https://github.com/Whiteknight​/ParrotStore/commit/4b278c3ffc
19:05 dalek ParrotStore: 3b6ebe4 | Whiteknight++ | / (4 files):
19:05 dalek ParrotStore: [MySQL] Add the mysql pmc to the build. A few fixes so it actually generates the .so and is loadable
19:05 dalek ParrotStore: review: https://github.com/Whiteknight​/ParrotStore/commit/3b6ebe48b8
19:27 kid51 joined #parrot
19:30 dalek rakudo/nom: 03edce1 | moritz++ | docs/running.pod:
19:30 dalek rakudo/nom: document --doc
19:30 dalek rakudo/nom: review: https://github.com/rakudo/rakudo/commit/03edce17cb
19:41 dalek parrot: 18ac2cd | petdance++ | lib/Parrot/Distribution.pm:
19:41 dalek parrot: Properly escape the . in qr/.t/
19:41 dalek parrot: review: https://github.com/parrot/parrot/commit/18ac2cdc8c
19:41 dalek parrot: b878029 | petdance++ | lib/Parrot/ (7 files):
19:41 dalek parrot: removed unnecessary /o flags from regexes
19:41 dalek parrot: review: https://github.com/parrot/parrot/commit/b8780296d6
19:50 contingencyplan joined #parrot
20:02 dalek rakudo/nom: e60c80c | moritz++ | src/core/IO/ArgFiles.pm:
20:02 dalek rakudo/nom: implement ArgFiles.slurp
20:02 dalek rakudo/nom: review: https://github.com/rakudo/rakudo/commit/e60c80c5fc
20:02 dalek rakudo/nom: 9d489dd | moritz++ | src/core/ (2 files):
20:03 dalek rakudo/nom: rename ArgFiles to IO::ArgFiles
20:03 dalek rakudo/nom: review: https://github.com/rakudo/rakudo/commit/9d489dd22c
20:03 dalek rakudo/nom: d9753c1 | moritz++ | src/core/IO (2 files):
20:03 dalek rakudo/nom: implement zero-arg slurp
20:03 dalek rakudo/nom: review: https://github.com/rakudo/rakudo/commit/d9753c1c3c
20:38 dalek rakudo/nom: 2676549 | jnthn++ | / (2 files):
20:38 dalek rakudo/nom: Start to sketch out a PseudoStash that will handle many of the pseudo-packages. Not yet wired up, let alone complete.
20:38 dalek rakudo/nom: review: https://github.com/rakudo/rakudo/commit/2676549540
20:38 dalek rakudo/nom: 1c862bc | jnthn++ | src/Perl6/ (2 files):
20:38 dalek rakudo/nom: Start to clean up indirect lookup handling a little. Also fix a bug in the compile time handling of indirect lookups.
20:38 dalek rakudo/nom: review: https://github.com/rakudo/rakudo/commit/1c862bc2bd
20:38 dalek rakudo/nom: 68df8f5 | jnthn++ | src/ (3 files):
20:38 dalek rakudo/nom: Switch indirect name lookups to use the new root PseudoStash approach. Still much missing in PseudoStash to make that work yet, mind. Also a little more elimination of duplicate logic.
20:38 dalek rakudo/nom: review: https://github.com/rakudo/rakudo/commit/68df8f5ae6
20:38 dalek rakudo/nom: 7f28736 | jnthn++ | src/Perl6/Grammar.pm:
20:38 dalek rakudo/nom: Unbust a typed exception.
20:38 dalek rakudo/nom: review: https://github.com/rakudo/rakudo/commit/7f28736c09
20:38 dalek rakudo/nom: 5a31737 | jnthn++ | src/core/PseudoStash.pm:
20:38 dalek rakudo/nom: Get things like ::('MY::$a') and $::('OUTER::b') working.
20:38 dalek rakudo/nom: review: https://github.com/rakudo/rakudo/commit/5a31737d07
20:38 dalek rakudo/nom: c59411c | jnthn++ | src/ (2 files):
20:38 dalek rakudo/nom: Flesh out pseudo-package handling a bit more. Now all of the interpolated lookup tests that now take a similar code path all pass again (and we should handle a bunch more cases now).
20:38 dalek rakudo/nom: review: https://github.com/rakudo/rakudo/commit/c59411ceee
20:40 mdupont_ joined #parrot
21:00 alvis joined #parrot
21:32 dalek rakudo/nom: b82d905 | jnthn++ | src/Perl6/ (3 files):
21:32 dalek rakudo/nom: Further clean up term:sym<name>, so we don't do any of the reparsing and don't rebuild the LongName object. Since we encounter this rule a fair amount, this seems to improve compilation performance a little.
21:32 dalek rakudo/nom: review: https://github.com/rakudo/rakudo/commit/b82d9053e3
21:57 whiteknight I wish that this MySQL API was just a little bit nicer
22:19 dalek ParrotStore: e0faff7 | Whiteknight++ | mysql/pmc/mysqldbcontext.pmc:
22:19 dalek ParrotStore: [MySQL] small fix so we can connecto to the mysql database and execute queries with no return values
22:19 dalek ParrotStore: review: https://github.com/Whiteknight​/ParrotStore/commit/e0faff76ed
22:19 dalek ParrotStore: de4db04 | Whiteknight++ | mysql/pmc/mysqldbcontext.pmc:
22:19 dalek ParrotStore: [MySQL] Use mysql_real_query instead of the deprecated mysql_query
22:19 dalek ParrotStore: review: https://github.com/Whiteknight​/ParrotStore/commit/de4db04d9b
22:19 dalek ParrotStore: 4c6b989 | Whiteknight++ | / (6 files):
22:19 dalek ParrotStore: [MySQL] Add in MySqlDataTable and MySqlDataRow types. Make sure they build. Untested
22:19 dalek ParrotStore: review: https://github.com/Whiteknight​/ParrotStore/commit/4c6b9898da
22:21 dalek rakudo/nom: 84f4fd4 | jnthn++ | src/Perl6/ (2 files):
22:21 dalek rakudo/nom: Implement ::<$x> style accesses, and make OUTER::<$x>, CALLER::<$x> and MY::<$x> work.
22:21 dalek rakudo/nom: review: https://github.com/rakudo/rakudo/commit/84f4fd40a6
22:21 dalek rakudo/nom: 9b4f785 | jnthn++ | src/core/PseudoStash.pm:
22:21 dalek rakudo/nom: Fix DYNAMIC, so it now basically works.
22:21 dalek rakudo/nom: review: https://github.com/rakudo/rakudo/commit/9b4f785db5
22:42 dalek rakudo/nom: c384ab7 | jnthn++ | src/core/PseudoStash.pm:
22:42 dalek rakudo/nom: First crack at OUR.
22:42 dalek rakudo/nom: review: https://github.com/rakudo/rakudo/commit/c384ab7272
23:45 autark joined #parrot

| Channels | #parrot index | Today | | Search | Google Search | Plain-Text | summary

Parrot | source cross referenced