Camelia, the Perl 6 bug

IRC log for #parrot, 2011-10-30

Parrot | source cross referenced

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

All times shown according to UTC.

Time Nick Message
00:07 dukeleto whiteknight: have we updated api.yaml with all the changes from the green_threads merge?
00:08 dalek parrot: 6078766 | dukeleto++ | DEPRECATED-branch.pod:
00:08 dalek parrot: Remove DEPRECATED-branch.pod which came in on the green_threads merge
00:08 dalek parrot: review: https://github.com/parrot/parrot/commit/6078766acd
00:49 benabik joined #parrot
01:14 ingy hi dukeleto
01:55 dukeleto ingy: wazzup
01:57 ingy dukeleto: nuttin hunnee
01:57 ingy dukeleto: I volunteered to speak at the Dec pdx.pm
01:58 ingy but I'll get to pdx before then
02:30 dalek parrot-libgit2: 1dfe1d8 | dukeleto++ | / (4 files):
02:30 dalek parrot-libgit2: Get closer to fixing #8
02:30 dalek parrot-libgit2: review: https://github.com/letolabs/pa​rrot-libgit2/commit/1dfe1d8a24
02:34 benabik joined #parrot
03:03 nbrown_ joined #parrot
03:07 contingencyplan joined #parrot
03:07 tewk joined #parrot
03:22 tewk joined #parrot
04:29 tewk joined #parrot
04:41 tewk___ joined #parrot
05:17 benabik joined #parrot
05:21 bubaflub msg dukeleto i have some spare time, i can help with libgit2 if ya need it.  feel free to shoot me an email or message with where you want me to look
05:21 aloha OK. I'll deliver the message.
05:21 benabik ~~
06:33 tewk_ joined #parrot
07:14 dalek rakudo/nom: 36d8299 | moritz++ | tools/build/NQP_REVISION:
07:14 dalek rakudo/nom: bump NQP revision to get a parrot with green threads (just for testing)
07:14 dalek rakudo/nom: review: https://github.com/rakudo/rakudo/commit/36d8299592
09:33 snarkyboojum there is only one test for day04 for advent2010?
09:33 snarkyboojum or one enabled test...
09:35 dalek rakudo/role_diamond: 2f2a5b7 | moritz++ | src/Perl6/Metamodel/RoleToRoleApplier.pm:
09:35 dalek rakudo/role_diamond: try to fix role diamond compsition: a method should never conflicit with itself.
09:35 dalek rakudo/role_diamond:
09:35 dalek rakudo/role_diamond: Regresses the RT #72856 tests in t/spec/S14-roles/composition.t
09:35 dalek rakudo/role_diamond: review: https://github.com/rakudo/rakudo/commit/2f2a5b7203
09:37 snarkyboojum perhaps a requirement for this year's advent calendar would be to write a test suite first *ducks*
09:38 fperrad joined #parrot
09:40 snarkyboojum I wonder if macros will make it into such a thing ;)
10:07 moritz snarkyboojum: (wrong channel, should be #perl6)
10:07 snarkyboojum moritz: whoops
10:07 moritz snarkyboojum: I don't think that adding a barrier to contribution is a good thing
10:15 jsut joined #parrot
10:22 dalek parrot: 874cd8f | moritz++ | MANIFEST:
10:22 dalek parrot: update MANIFEST, DEPRECATED-branch.pod is gone
10:22 dalek parrot: review: https://github.com/parrot/parrot/commit/874cd8f001
10:45 mj41 joined #parrot
10:59 nbrown joined #parrot
11:02 fperrad joined #parrot
11:15 whiteknight joined #parrot
11:25 whiteknight good morning, #parrot
11:31 nine good morning, whiteknight
11:32 whiteknight hello nine. How are you doing today?
11:32 nine Just fine, ready for action
11:33 whiteknight awesome. I like action
11:33 whiteknight you got your new threads branch on github?
11:33 nine I do
11:38 Psyche^ joined #parrot
12:05 dalek nqp/bigint: dfd536f | moritz++ | src/ops/nqp_bigint.ops:
12:05 dalek nqp/bigint: wrap more libTomMath subs in dynops
12:05 dalek nqp/bigint: review: https://github.com/perl6/nqp/commit/dfd536fd25
12:05 dalek nqp/bigint: 93dc058 | moritz++ | src/PAST/NQP.pir:
12:05 dalek nqp/bigint: add nqp::<matop>_I opcodes for bigints
12:05 dalek nqp/bigint: review: https://github.com/perl6/nqp/commit/93dc058e58
12:05 dalek nqp/bigint: 05755ba | moritz++ | src/ (3 files):
12:06 dalek nqp/bigint: add bigint comparison ops; load nqp_bigint_ops by default
12:06 dalek nqp/bigint: review: https://github.com/perl6/nqp/commit/05755ba185
12:06 dalek nqp/bigint: 879b700 | moritz++ | src/NQP/SymbolTable.pm:
12:06 dalek nqp/bigint: set up bigints at startup
12:06 dalek nqp/bigint: review: https://github.com/perl6/nqp/commit/879b700097
12:20 nine whiteknight: I synced my green_threads branch with master and backported the patch moving enable_preemption and enable_scheduling to private flags (slipping in a fix for your codingstd violation)
12:21 nine whiteknight: there's now a Parrot_cx_preemption_enabled for consistency
12:24 dalek nqp/bigint: f3d73f0 | moritz++ | t/nqp/60-bigint.t:
12:24 dalek nqp/bigint: add bigint test file -- 5/9 fail
12:24 dalek nqp/bigint: review: https://github.com/perl6/nqp/commit/f3d73f099d
12:26 dalek nqp/reprapi2: 1167c9f | jnthn++ | src/6model/sixmodelobject.h:
12:26 dalek nqp/reprapi2: Extend the REPR API a little in preparation for supporting inlining of more complex types in objects. Most immediately this is for bigint support, but it's also the basis for compact structs, and later compact arrays and nested structs in NCI.
12:26 dalek nqp/reprapi2: review: https://github.com/perl6/nqp/commit/1167c9ffce
12:26 dalek nqp/reprapi2: adaffcc | jnthn++ | src/ (15 files):
12:26 dalek nqp/reprapi2: First small step of the move to a new REPR API. This splits out instance_of out into allocate and initialize, and starts to make the differentiation between full objects and one object flattened into another's body. Various other updates so we can build/pass NQP test suite still.
12:26 dalek nqp/reprapi2: review: https://github.com/perl6/nqp/commit/adaffcca14
13:22 dalek nqp/bigint: a5a450c | moritz++ | src/ops/nqp_bigint.ops:
13:22 dalek nqp/bigint: save a GCable in nqp_bigint_div, jnthn++
13:22 dalek nqp/bigint: review: https://github.com/perl6/nqp/commit/a5a450c1ab
14:21 bluescreen joined #parrot
14:24 nbezzala joined #parrot
14:27 dalek nqp/reprapi2: bea2110 | jnthn++ | src/ (12 files):
14:27 dalek nqp/reprapi2: This step of the representation refactor switches [get|set]_[int|num|str] over to the new API. We temporarily lose a few error checks, which will get moved elsewhere. Also P6opaque needs further updates to handle these in a more delegatory fashion. Builds and passes NQP tests.
14:27 dalek nqp/reprapi2: review: https://github.com/perl6/nqp/commit/bea211069f
14:36 JimmyZ joined #parrot
14:52 dalek nqp/reprapi2: 4035569 | jnthn++ | src/6model/ (8 files):
14:52 dalek nqp/reprapi2: We'll use a common way, encased by a couple of macros, to flag type-object-ness now. This introduces them and makes a start at ensuring sure we consistently flag type objects as being so.
14:52 dalek nqp/reprapi2: review: https://github.com/perl6/nqp/commit/40355691b4
14:52 dalek nqp/reprapi2: 065622f | jnthn++ | src/ (12 files):
14:52 dalek nqp/reprapi2: Eliminte defined from the REPR API; now it's all done through the IS_CONCRETE macro.
14:52 dalek nqp/reprapi2: review: https://github.com/perl6/nqp/commit/065622fffe
15:04 dalek plumage: 587eea2 | fperrad++ | src/lib/Plumage/NQPUtil.nqp:
15:04 dalek plumage: fix after merge branch 'green_threads'
15:04 dalek plumage: see https://github.com/parrot/parrot/commit/​17a69801199de6171f1163a53650ef4c6ef0693b
15:04 dalek plumage: review: https://github.com/parrot/​plumage/commit/587eea22a4
15:11 dalek nqp/reprapi2: 52e8a70 | jnthn++ | src/ (9 files):
15:11 dalek nqp/reprapi2: Update GC marking to new API. For the representations, this is a simplification; they don't have to duplicate marking the common bits. Some lose their mark routines entirely.
15:11 dalek nqp/reprapi2: review: https://github.com/perl6/nqp/commit/52e8a70b08
15:21 dalek nqp/bigint: b2263f6 | moritz++ | src/ (2 files):
15:21 dalek nqp/bigint: lcm, gcd
15:21 dalek nqp/bigint: review: https://github.com/perl6/nqp/commit/b2263f6dd6
15:21 dalek nqp/bigint: 216ecda | moritz++ | tools/build/Makefile.in:
15:21 dalek nqp/bigint: [build] missing dependency on P6bigint.{c,h}
15:21 dalek nqp/bigint: review: https://github.com/perl6/nqp/commit/216ecdaa09
15:21 dalek nqp/bigint: cbd6c19 | moritz++ | / (2 files):
15:21 dalek nqp/bigint: make P6bigint {set,get}_int accept negative numbers
15:21 dalek nqp/bigint:
15:21 dalek nqp/bigint: For some reason the get_int variant doesn't seem to work (returns only
15:21 dalek nqp/bigint: positive numbers), though I don't understand why
15:21 dalek nqp/bigint: review: https://github.com/perl6/nqp/commit/cbd6c190e7
15:23 dalek nqp/reprapi2: 2c9bafd | jnthn++ | src/ops/nqp.ops:
15:23 dalek nqp/reprapi2: Re-instate the checks to make sure we don't try and unbox type objects, but this time at the op level (so it needn't be factored in to every single repr).
15:23 dalek nqp/reprapi2: review: https://github.com/perl6/nqp/commit/2c9bafd6a4
15:30 dalek nqp/reprapi2: 4f25688 | jnthn++ | src/ (9 files):
15:30 dalek nqp/reprapi2: Rename repr data marking functions to actually be clear about what they do.
15:30 dalek nqp/reprapi2: review: https://github.com/perl6/nqp/commit/4f25688e73
15:33 dalek nqp/bigint: 46221b1 | moritz++ | t/nqp/60-bigint.t:
15:33 dalek nqp/bigint: fix some of the bigint tests
15:33 dalek nqp/bigint: review: https://github.com/perl6/nqp/commit/46221b1630
16:07 dalek nqp/reprapi2: 5cb979a | jnthn++ | src/ (9 files):
16:07 dalek nqp/reprapi2: Replace all value type attribute lookups with a common approach; this means we'll be able to use it for getting hold of more complex nested value types too.
16:07 dalek nqp/reprapi2: review: https://github.com/perl6/nqp/commit/5cb979ac5c
16:07 dalek nqp/reprapi2: fcd3f85 | jnthn++ | src/ops/nqp.ops:
16:08 dalek nqp/reprapi2: Get ops to check they're not looking up attributes in a type object, so we don't have to spread this over all the reprs.
16:08 dalek nqp/reprapi2: review: https://github.com/perl6/nqp/commit/fcd3f85f1b
16:08 dalek nqp/reprapi2: 815ede2 | jnthn++ | src/6model/reprs/ (2 files):
16:08 dalek nqp/reprapi2: Remove a couple of now unrequired checks.
16:08 dalek nqp/reprapi2: review: https://github.com/perl6/nqp/commit/815ede255b
16:10 whiteknight_ joined #parrot
16:11 whiteknight_ good afternoon, #parrot
16:12 nine whiteknight_: good afternoon. Read my message from 12:20 UTC?
16:15 whiteknight_ nine: okay, nice
16:15 whiteknight_ Like I said, flags do save us a pointer dereference. Of course, they're a little bit less obvious and require lots of documentation, etc
16:16 whiteknight_ nine: the Sub PMC is a great example of a PMC that uses flags but they aren't well documented
16:19 nine whiteknight_: do you see any reason why the headerizer would completely ignore this function? http://paste.scsys.co.uk/154970
16:19 whiteknight_ nothing obvious
16:20 whiteknight_ can you try putting a newline between static and PMC*?
16:20 whiteknight_ or moving the * closer to the PMC?
16:20 whiteknight_ (i'm taking wild guesses)
16:21 nine Unfortunately no success. Strangely enough the definition looks almost identical to:
16:21 nine PARROT_CAN_RETURN_NULL
16:21 nine static PMC *
16:21 nine Parrot_thread_make_local_copy(PARROT_INTERP, ARGIN(Parrot_Interp from), ARGIN(PMC *arg))
16:21 nine which was no problem
16:26 nine Oh, I think it's not ignoring the function, but the file
16:29 benabik o/ #parrot
16:31 whiteknight_ nine: if it's ignoring the entire file, that's probably a makefile issue
16:31 nine Good evening, benabik
16:31 whiteknight_ the headerizer rule in the makefile takes a list of .o files from one of the makefile variables
16:33 whiteknight_ hello benabik
16:35 nine whiteknight_: Makefile looks sane, srv/thread.o is listed. But the headerizer can't read it if it's not there because the file does not compile because of the missing forward reference...
16:36 bluescreen joined #parrot
16:37 benabik nine: Add the reference manually and then run headerizer?
16:38 nine benabik: did that just now. It worked in so far as the headerizer processing the file again. But it just removes my manual additions
16:47 whiteknight_ headerizer is a fickle mistress
16:47 whiteknight_ she giveth, and she taketh away
17:55 moritz when is @cc_o_out@ in the parrot Makefile set to something non-empty?
17:56 whiteknight_ moritz: I have no idea. Ask kid51 or Coke
17:57 whiteknight_ all that configure/makefile stuff is like a foreign language to me
18:00 moritz oh
18:00 moritz it's the '-o' that you need tell the compiler where to put files
18:50 dalek nqp/bigint: 2f16a24 | moritz++ | src/6model/reprs/P6bigint.c:
18:50 dalek nqp/bigint: fix C89 violation
18:50 dalek nqp/bigint: review: https://github.com/perl6/nqp/commit/2f16a247cf
18:50 dalek nqp/bigint: 1bede84 | moritz++ | tools/build/Makefile.in:
18:50 dalek nqp/bigint: [build] separate rules for libtommath files
18:50 dalek nqp/bigint:
18:50 dalek nqp/bigint: That way unnecessary rebuilds of .o files are avoided, and we can parallelize
18:50 dalek nqp/bigint: the build process with `make -j3` etc.
18:50 dalek nqp/bigint: review: https://github.com/perl6/nqp/commit/1bede84976
19:07 dalek nqp/bigint: 04fbeb4 | moritz++ | tools/build/Makefile.in:
19:07 dalek nqp/bigint: [build] I should not use variables that I do not understand :-)
19:07 dalek nqp/bigint: review: https://github.com/perl6/nqp/commit/04fbeb4044
19:27 dalek nqp/bigint: 154d613 | moritz++ | src/ops/nqp_bigint.ops:
19:27 dalek nqp/bigint: fix nqp_bigint_to_str (was adding \0 at the end)
19:27 dalek nqp/bigint: review: https://github.com/perl6/nqp/commit/154d613e77
19:42 dalek nqp/reprapi2: b40e7bc | jnthn++ | src/ (10 files):
19:42 dalek nqp/reprapi2: Switch to new API for looking up boxed attributes. Note that P6opaque needs to handle it a bit smarter, but this is a start.
19:42 dalek nqp/reprapi2: review: https://github.com/perl6/nqp/commit/b40e7bc335
19:51 dalek rakudo/role_diamond: 8e75858 | moritz++ | src/Perl6/Metamodel/RoleToRoleApplier.pm:
19:51 dalek rakudo/role_diamond: add missing sigil, jnthn++. Sadly it does not fix the problems with composition.t
19:51 dalek rakudo/role_diamond: review: https://github.com/rakudo/rakudo/commit/8e75858233
20:22 dalek nqp/reprapi2: 0fd5c74 | jnthn++ | src/6model/sixmodelobject.h:
20:22 dalek nqp/reprapi2: Add new copy_to operation to the REPR API.
20:22 dalek nqp/reprapi2: review: https://github.com/perl6/nqp/commit/0fd5c749a9
20:22 dalek nqp/reprapi2: 337cd40 | jnthn++ | src/6model/reprs/ (7 files):
20:22 dalek nqp/reprapi2: Implement copy_to methods for all the reprs; untested.
20:23 dalek nqp/reprapi2: review: https://github.com/perl6/nqp/commit/337cd40935
20:40 NotFound ~~
20:48 cotto ~~
20:55 contingencyplan joined #parrot
20:59 nine benabik: finally I found the source of my headerizer problem
21:00 benabik nine: Oh?
21:00 nine benabik: a single space in an empty line preceeding the function.
21:00 tadzik eek
21:00 benabik ...
21:00 benabik :-P
21:01 nine benabik: the funny thing is that I even configured my vim to mark these in blood red but for some reason it just didn't do it for this file
21:03 nine benabik: should I patch the headerizer to ignore these or at least warn about them? The warning would trigger on quite a few files though
21:05 benabik nine: Feels like a bug in headerizer to me.
21:05 benabik nine: If you can make it work in that case, do it.  :-)
21:05 nine I think it's both a bug in the headerizer and bad style to leave trailing whitespace...
21:06 benabik I think there's supposed to be a test for that in codingstd
21:09 dalek nqp/reprapi2: 0225bd8 | jnthn++ | src/6model/reprs/P6opaque. (2 files):
21:09 dalek nqp/reprapi2: Start refactoring the way P6opaque handles flattened in attributes; mostly this prepares for getting box/unbox righter and storing s-tables of flattened in things.
21:09 dalek nqp/reprapi2: review: https://github.com/perl6/nqp/commit/0225bd8241
21:09 dalek nqp/reprapi2: 648845a | jnthn++ | src/6model/reprs/P6opaque. (2 files):
21:09 dalek nqp/reprapi2: Box/unbox operations in P6opaque now delegate to the representation managing that flattened attribute.
21:09 dalek nqp/reprapi2: review: https://github.com/perl6/nqp/commit/648845a054
21:13 nine benabik: http://paste.scsys.co.uk/155170​?tx=on&amp;submit=Format+it%21
21:13 tadzik this headerizer does not look very whitespace-friendly
21:14 nine tadzik: whitespace is only one of the problems...
21:14 cotto there's a codingstd test for trailing space, but you wouldn't think to run it when debugging headerizer specialness
21:15 cotto *spaces
21:15 nine cotto: I run fulltest before every commit. But I can't test if I cannot compile and cannot compile till the headerizer did its work...
21:15 cotto nine, exactly
21:15 cotto a patch to headerizer wouldn't raise any eyebrows.  everyone gets scars from dealing with it
21:18 cotto +1 if you were annoyed enough to write one
21:19 nine cotto: http://paste.scsys.co.uk/155170​?tx=on&amp;submit=Format+it%21+
21:19 nine cotto: http://paste.scsys.co.uk/155170​?tx=on&amp;submit=Format+it%21
21:24 NotFound -1 for special-casing common mistakes in headerizer.
21:24 NotFound It's already ugly enough.
21:26 nine NotFound: this cost me three hours and a lot of motivation. The trailing space would have been cought later on by a coding std test anyway. Do you really think it's better to waste so much instead of adding a trivial patch to the regex?
21:28 NotFound nine: if you have a time machine and send the patch back in time, fine. If not, your time is already wasted.
21:28 benabik NotFound: So the next person who screws up trailing whitespace can do the same?
21:28 nine NotFound: and you think this will be the only time that someone tries to copy&paste code out of a patch and only removes the +- but forgets about space in the first column?
21:29 NotFound The next person may watse its time because of unexpected consequences of a too quick fix.
21:30 NotFound We all know that headerizer is a ugly beast. IMO, write a better one or leave it alone.
21:30 nine NotFound: I just improved it.
21:32 NotFound It that space is wrong, leaving it pass without any error or warning is not an improvement for me.
21:33 nine NotFound: a better headerizer is one that can deal with more things that C allows. C allows trailing space. My patch allows the headerizer to deal with trailing space.
21:34 nine NotFound: but of course if its more important to you to waste hours and frustrate programmers, feel free to just ignore the patch and keep waiting for a perfect headerizer.
21:34 nine NotFound: I for one will not waste any more time on Parrot today.
21:34 NotFound nine: a generic headerizer for C, maybe. This one is just for parrot.
21:40 nine msg whiteknight sorry for wasting your time with my headerizer problem. Was a trailing space on an empty line and my copy & paste fault. Trivial patch in http://paste.scsys.co.uk/155170​?tx=on&amp;submit=Format+it%21 could have prevented it, but its usefulness for Parrot seems to be controversial.
21:40 aloha OK. I'll deliver the message.
21:56 Coke I don't think letting headerizer ignore coding standard violations is a problem. That's not it's job.
21:56 Coke (didn't read patch)
21:59 nbrown joined #parrot
22:05 dalek nqp/reprapi2: 281bfbf | jnthn++ | src/ (11 files):
22:05 dalek nqp/reprapi2: Make allocate operation more consistent with the rest of the API. Get P6opaque's get_attribute_boxed handle the flattened case (untested yet, but probably rightish).
22:05 dalek nqp/reprapi2: review: https://github.com/perl6/nqp/commit/281bfbfb39
22:05 dalek nqp/reprapi2: 8f536de | jnthn++ | src/ (9 files):
22:05 dalek nqp/reprapi2: Switch binding of natively typed attributes over to the new REPR API. Seems to work fine.
22:05 dalek nqp/reprapi2: review: https://github.com/perl6/nqp/commit/8f536deedb
22:08 NotFound Coke: I'm not going to say even one more word about that.
22:13 dalek parrot: f71e980 | jkeenan++ | src/pmc/task.pmc:
22:13 dalek parrot: [codingstd] No space before open paren.
22:13 dalek parrot: review: https://github.com/parrot/parrot/commit/f71e980ccc
22:17 kid51 joined #parrot
22:18 dalek parrot: 847615f | jkeenan++ | src/pmc/task.pmc:
22:18 dalek parrot: Merge branch 'master' of git@github.com:parrot/parrot
22:18 dalek parrot: review: https://github.com/parrot/parrot/commit/847615f882
22:31 dalek nqp/reprapi2: a76cd8b | jnthn++ | src/ (10 files):
22:31 dalek nqp/reprapi2: Switch normal attribute binding over to the new REPR API.
22:31 dalek nqp/reprapi2: review: https://github.com/perl6/nqp/commit/a76cd8b550
22:37 jsut_ joined #parrot
22:44 dalek nqp/reprapi2: b446492 | jnthn++ | src/ (9 files):
22:44 dalek nqp/reprapi2: Update hint_for for consistency with the rest of the REPR API.
22:44 dalek nqp/reprapi2: review: https://github.com/perl6/nqp/commit/b446492f2b
22:52 whiteknight nine: I configure my editor to automatically remove trailing whitespace when I save a document. Not all editors do that, but I greatly enjoy it
22:53 dalek nqp/reprapi2: 7218de5 | jnthn++ | src/ (9 files):
22:53 dalek nqp/reprapi2: Update is_attribute_initialized to be consist with the rest of the REPR API.
22:53 dalek nqp/reprapi2: review: https://github.com/perl6/nqp/commit/7218de5790
22:54 whiteknight lots of nqp action today
22:56 whiteknight the more important change to headerizer would be to say *why* certain function definitions were rejected. Of course, Headerizer doesn't parse. It uses brain-dead regexes so such diagnostics are not likely
22:56 whiteknight headerizer is what it is, and if we're serious enough about fixing the shortcomings we're going to have to rewrite it eventually
22:56 sorear but we have a C parser now
22:57 whiteknight sorear: for some value of "C parser" and "we have"
22:59 whiteknight the C parser would need to be expanded, would need to be taught a lot more about macros (I can't imagine our current parser is going to handle PARROT_INTERP and ARGIN()/ARGMOD() macros, etc)
22:59 whiteknight or ASSERT_ARGS(), which by convention should *not* be followed by a semicolon unlike most other C statements
23:00 whiteknight (and ASSERT_ARGS is also expected to come before variable declarations, despite C89 requiring that no code comes before the declarations)
23:08 dalek Heuristic branch merge: pushed 17 commits to parrot/threads by Whiteknight
23:08 whiteknight msg nine I am mirroring your threads branch on parrot/parrot. I'll follow along from there.
23:08 aloha OK. I'll deliver the message.
23:22 alester joined #parrot
23:36 rfw joined #parrot

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

Parrot | source cross referenced