#pypy.log.28Feb2005

arigohow far are we now?00:00
pedroniswell after00:01
pedronisthe work we did on interpapp00:01
pedronisand my last improvements00:02
pedronison exception handling annotations00:02
pedronisit spew00:02
pedroniss00:02
pedroniscannot follow SomeObject() much rarely00:02
arigooh hoo00:02
pedronisbut now it goes to subtle issues00:02
pedronislike wrap(str)00:02
pedronisgets annotated to W_Object00:03
pedronisbecause the path that considers None00:03
pedronisis also included00:03
arigowhy?00:03
pedronisbecause I presume00:04
pedronisSomeString() is None00:04
pedronisreturn SomeBool()00:04
arigoah, yes I see00:04
pedroniswhich is not wrong in general terms00:04
pedronisbut yes None inclusive or exclusive00:04
arigoalways the same problem indeed00:05
pedroniscan be an issue00:05
arigoanyway W_Object should be a good enough answer for str("x") now00:05
pedronisthen we have an issue00:05
pedroniswith str_w and int_w00:05
pedronisbut that's our fault00:06
pedronisbecause we are wrapping them like all others00:06
pedronismultimethods00:06
pedroniswhich means they also get if  ... is None00:06
pedronisreturn w_None00:06
pedronispath00:06
pedronisbut for them that's wrong00:06
arigoargh I see00:07
pedronisbut if we solve that00:07
pedronisthey should be properly annotated00:07
arigogood00:07
pedronisI checked in a simple test00:07
pedronisthat shows that00:07
pedronistest_annmm00:08
arigo(it would have been more difficult to separate the mms with the previous mm implementation)00:09
pedronisyes00:09
arigoI cannot find test_annmm?00:09
pedronisit's under translator/test00:09
arigooh it's a file name, sorry00:10
pedronisone problem is that the codebasa is huge00:11
pedronisthat means that we can get to a shallow problem00:11
pedronismissing builtin etc00:11
pedronisbefore the significant paths00:11
pedronisof some important00:12
pedronisfunction00:12
pedronishave benn explored00:12
arigoI imagine so00:12
pedronisso the impression is that things have improved a lot00:13
arigoin stdtypedef.py, make_perform_trampoline()00:15
arigotakes a 'allow_NotImplemented_results=False' arg, but is only called once with allow_NotImplemented_results=True?00:16
arigooh sorry00:16
arigoI missed another call from objspace.py.00:16
pedronisyes00:16
pedronisbtw is the call that is wrapping also str_w int_w00:17
pedroniswhich need to be treated a bit differently00:17
arigoalso, None -> w_None isn't really needed for some of the operations like 'setitem'00:17
pedronisyes, I thought about that00:18
pedroniswe could be more precise00:18
pedronisin general00:18
pedronisanother thing is that we need a precise approach about cheating code00:20
pedronisbecause for example sometimes00:20
pedronisit dies 00:20
pedronison sys.exc_info00:20
pedroniscalls inside fake00:20
pedronisor I had to remove by hand00:21
pedronispypy_getudir from sys00:22
pedronisin the new buildcache code00:22
arigopypy_getudir should probably be added by hand from the conftest, instead00:23
arigofor fake.py we might need special tags "annotator, don't look here"00:25
pedroniswe will also have a problem00:26
pedroniswith the compile builtin00:27
pedroniswhich uses python one00:27
arigoare you thinking about a full CPython-independent translation?00:28
pedronisno00:28
pedronisjust that typing00:28
pedronissome costructs is tricky00:29
pedronismy point is not that we cannot assign a type to result00:29
pedronisof cpython compile00:29
pedronisbut that then we use PyCode._from_code00:29
pedronison it00:29
pedroniswhich is marked NOT_RPYTHON00:29
pedronisand the annotator dies on call to NOT_RPYTHON00:30
pedronisstuff00:30
arigoPyCode._from_code() is not NOT_RPYTHON00:30
arigobut its type-checking assertions are too weak00:30
arigolike co_names becomes a list, but we don't know of what00:30
pedronisyes, it also mixing tuple and lists00:31
arigoright00:31
pedroniswich results in SomeObject00:31
pedronisfor the annotator00:31
arigoshouldn't be too hard, e.g.  self.co_names = [str(x) for x in code.co_names]00:31
pedronisyes00:32
arigowith a comment about the str()00:32
pedronisas I said the question is whether there's a way00:32
pedronisto pick smaller subset00:32
pedroniss00:32
pedronisinstead of the whole00:32
pedronisbecause it seems we have a series of more or less shallow problems00:32
pedronisor maybe some serious problems but hidden away00:33
pedronisbut a pile of shallow ones00:33
pedroniss/but/by00:33
arigowe could use special-case tables00:33
arigomanually-specified input and output argument types for a set of functions00:34
arigoe.g. for all the space operations00:34
arigothen we'd be able to annotate the interpreter/ directory alone00:34
pedronisyes00:34
pedronissomething along those line00:34
arigoactually we could have a dummy 'space'00:34
pedronisyes00:34
pedronisI thought about that00:35
pedronison the reverse side00:36
pedronisI'm thinking about how many dependecies00:36
pedronisare there between the space and the interpreter00:36
pedronisa part all the OperationError00:36
pedronisconstructions00:36
arigodependencies should go through space.getexecutioncontext()00:37
arigobut it seems the stdobjspace never calls that00:37
arigoso it's quite possible that we could annotate the stdobjspace alone by not putting any interpreter/typedef in the mm model00:39
arigohum no, they are not in the mm model...00:39
pedronisno00:39
pedronisthey constructed on the fly00:39
pedronison the other hand00:40
pedroniswe have some manual references to Function etc00:40
pedronisin space code00:40
arigoah, right00:41
arigowe cannot really annotate the space without knowing about Functions and Methods, right?00:41
arigounless we don't annotate stdtypedef.py nor the prebuilt type objects, and only start from one of the installed mm entry points00:43
arigothen we'd probably be able to annotate very small bits one at a time00:43
pedronisbut isn't that what the current entry_point is doing00:45
pedronisah, no00:47
arigono because now it uses the type objects' Function entries00:47
arigovia descroperation.py00:47
pedronisyes00:47
arigolet's try with space.MM.mul instead of space.mul...00:47
arigoah, but it's never installed00:48
pedroniswell we could install it manually00:50
pedronisbut it is true that the first space.op00:50
pedroniswould start again from descroperation00:51
pedronisand what it entails00:51
arigothat's a point00:52
pedronisso I agree00:52
pedronisit's probably easier to write a dummy space00:52
pedronisand try only the interpreter00:52
arigowe might try the manually installed entry points with a dummy space...00:53
arigobut let's start with the interpreter :-)00:54
pedroniswell00:54
pedroniswe could probably manage to fake the interpreter00:54
pedronistoo00:54
pedronisalthough it would involved some hacking import manipulations00:54
arigoguess so00:55
_hannes (sckjkn@i3ED6B211.versanet.de) left irc: "utz utz utz"01:25
arigoreading the three commits about generating a temp file or not in test_geninterp.py :-)01:26
arigotoo bad you cannot insert empty commits with the log message "oups!"01:26
pedronisarigo: btw, about the commits01:31
pedronisthe change about how we use __new__ in the python init code01:31
pedronisalso save us from a segfault01:32
pedroniswe spent quite a bit chasing that one01:33
arigowhat change is that?01:34
pedronisyou wrote code that did for new-style classes01:34
pedronisourcls.__new__(orucls)01:35
pedronisand extended it to do01:35
pedronisourcls.__new__(ourcls,state)01:35
pedronisto deal with immutable types01:35
pedronisbut the right thing to do is01:35
pedronisbuiltinbase.__new__(ourcls[,state])01:36
pedronisthe old code ended up calling some of our __new__ functions01:36
pedronisbefore the global constants were set01:36
arigoI see01:36
pedronis=> seg fault !01:36
arigo(I didn't do the ",state" part, though)01:36
pedronisI did it01:37
pedroniss/extended/I extended01:37
arigo:-)01:37
arigoargh01:37
pedroniswell both  old versions01:37
pedroniscould call some of our functions01:37
pedroniswich can potentially access the globals01:37
pedronisand fun follows01:38
arigoindeed01:38
pedronisanyway __new__01:39
pedronisseem the only candidate01:39
pedronisfor this problem01:39
pedronisbut I presume01:39
pedronisthat a class defining __setattr__01:39
pedroniscould end up in the same situation01:39
arigoouack01:39
pedronisalthough we don't have such things01:39
arigowe could do '%s.__dict__[%r] = %s' instead01:40
arigoand hope that there is no __getattribute__01:40
pedroniswell, I don't think right now we should cater to the general case01:41
pedronisbut it is something to keep in minde01:41
arigoI don't think code handling the general case would look sane01:41
pedronisno01:41
arigoI'm not even sure it's possible at all01:41
pedronismy keep in mind01:42
pedronisof in the sense of paying attention01:42
pedronisnot to end up with this problems01:42
arigoyes01:42
pedronisbecause the first time around01:42
pedronisas I said chasing the seg fault01:42
pedroniswas hard01:42
arigoI'm just having fun imagining class X(object): pass; del X.__dict__01:42
arigoI can imagine it was hard to figure out01:42
pedroniswell Christian managed01:43
pedronisto understand that the problem was happening in one of our __new__01:43
pedronisthen I understood how we ended up there01:43
pedronisbut he had to use VC debugger01:43
arigoI guess so01:43
pedronisand wait a lot of time to get an executable to debug01:43
pedronison Linux01:44
pedronisan extension built with tcc and -g01:44
pedronisand a debug Python01:44
pedroniscrashed in the dynamic linking code :(01:44
arigo:-(01:44
pedronisChristian also tried01:44
pedronisthat got the same crash from gdb01:45
pedronisso we also discussed again the issue01:47
pedronisthat we should try to produce code01:47
pedronisthat does not kill our toolchain01:47
arigoyou mean by being too huge?01:48
pedronisyes01:48
arigohum01:49
pedronisgcc dies on it01:49
pedronistcc can compile it01:49
pedronisit seems you cannot debug the result01:49
arigoclearly, separate compilation would be the next step to try01:49
pedronisyes01:52
arigog'nite02:20
pedronisnite02:24
pedronis (~Samuele_P@c-1e8b70d5.022-54-67626719.cust.bredbandsbolaget.se) left irc: "Chatzilla 0.9.66 [Mozilla rv:1.7.5/20041107]"02:24
arigo (~arigo@d83-176-48-217.cust.tele2.ch) left irc: Read error: 110 (Connection timed out)02:42
Continuity (~kittish@host81-155-190-53.range81-155.btcentralplus.com) left irc: "What is this, this face, So murderous in its strangle of branches?"02:55
dialtone (~dialtone@host116-56.pool80117.interbusiness.it) left irc: Read error: 113 (No route to host)03:00
sanxiyn (~tinuviel@218.145.51.39) joined #pypy.05:41
{aqKj (kuzey_ist@HSE-Toronto-ppp169119.sympatico.ca) joined #pypy.06:28
{aqKj (kuzey_ist@HSE-Toronto-ppp169119.sympatico.ca) left #pypy.06:28
idnar (mithrandi@idnar.user) left irc: Read error: 60 (Operation timed out)07:10
sanxiyn (~tinuviel@218.145.51.39) left irc: "Bye"07:57
arigo (~arigo@d212-152-20-194.cust.tele2.ch) joined #pypy.09:50
sanxiyn (~tinuviel@218.145.51.39) joined #pypy.11:09
arigohi seo11:17
sanxiynhi11:17
sanxiynI am trying to comprehend LLVM generator -- it seems to be very well written.11:18
sanxiynShould do complete rewrite of current GenCL.11:19
arigowell, all our Gen* are extremely messy.11:20
sanxiynExcept perhaps GenLLVM. :-)11:20
arigoyes :-)11:20
arigowe need a way to factorize the common code with better abstractions11:20
arigoand looking at GenLLVM might be a good start11:20
sanxiynhttp://rafb.net/paste/results/gMqA5r20.html11:21
sanxiyn(GenLLVM compiles it just fine!)11:21
sanxiynGenerated code includes:11:24
sanxiyn%glb.class.B = type {int*, int, bool}11:24
sanxiyn%glb.class.C = type {int*, %glb.class.B*, int}11:24
sanxiynI am also thinking about compiling CL to Python module, like other Gen* do.11:30
sanxiynAnd tomorrow is a holiday.11:31
arigowhat is the first int* in the type{} declarations?11:35
sanxiynI have no idea.11:46
sanxiyn(After trying to comprehend...)11:46
arigoI'm still trying to install llvm...11:47
arigowhat a huge set of implicit dependencies11:51
sanxiynIt depends on pax, for one.11:51
arigoso I saw11:52
arigobut only to install its include files??11:52
sanxiynI have no idea why LLVM requires that.11:53
arigoI'm still trying to make sense of the big interlinked Makefiles11:53
arigobut maybe I shouldn't try11:53
sanxiynI am lazy, so I used Debian package from http://www.toolchain.org/~ahs3/ :(11:58
arigo/bin/install: invalid option -- C11:59
arigoargh12:00
sanxiynIndeed.12:00
arigodid you get this problem too?12:00
sanxiynNo, I used .deb, but Debian packaing guy experienced it.12:01
arigoah, you got the llvm deb package12:02
arigoI see12:02
sanxiyns/ -C// on llvm/docs/Makefile and llvm/docs/CommandGuide/Makefile.12:02
arigothanks12:02
sanxiyn(That's what Debian package is doing. Yuk.)12:02
arigogenc.py needs two refactorings:12:11
arigoa major cleanup along the lines of genllvm12:11
arigoand the ability to generate smaller .c files,12:11
arigofor separate compilation12:11
arigocurrently we're killing gcc trying to translate PyPy!12:11
sanxiynKilling GCC. Heh.12:12
arigowe're running into the 2GB address space limit, essentially12:12
sanxiynAre there some other LLVM installation headache?12:23
arigono, it's done now12:23
arigoand the translator/llvm tests pass.12:23
sanxiynGood.12:23
arigothe last installation bug was a script calling /bin/gcc directly12:24
arigoeasy to fix.12:24
arigoI tried again to run PyPy under Psyco12:25
arigowith a "filter" that tells Psyco not to compile PyPy's functions marked as NOT_RPYTHON12:25
arigothe results aren't extremely good, I get 2.3 pystones/sec instead of 2.012:26
arigobut at least, memory usage is kept reasonable, which is more than I could have said with older versions of Psyco12:27
sanxiynPyPy has >70000 lines of Python now. (With ~10000 lines of generated *interp.py)12:35
arigoimpressive12:36
ludal (~ludal@logilab.net2.nerim.net) joined #pypy.12:47
idnar (mithy@idnar.user) joined #pypy.12:52
sanxiynIs it okay to babble offtopicities?12:58
sanxiynIt seems not. :-)12:59
sanxiynBye.12:59
sanxiyn (tinuviel@218.145.51.39) left #pypy ("Bye").12:59
arigooups too late12:59
stakkars (~tismer@82.144.60.19) joined #pypy.13:40
arigohi13:41
stakkarshi13:41
Action: arigo -> lunch13:42
idnar (mithy@idnar.user) left irc: "brb, reconnecting"14:19
pedronis (pedronis@ratthing-b246.strakt.com) joined #pypy.14:31
arigo_ (~arigo@d212-152-27-122.cust.tele2.ch) joined #pypy.14:32
idnar (mithy@idnar.user) joined #pypy.14:36
arigo_ (~arigo@d212-152-27-122.cust.tele2.ch) left irc: Client Quit14:36
arigo (~arigo@d212-152-20-194.cust.tele2.ch) left irc: Read error: 110 (Connection timed out)14:36
lac (lac@smartwheels-wlan.strakt.com) joined #pypy.16:03
lac2 (lac@smartwheels.strakt.com) joined #pypy.16:26
Nick change: lac2 -> _lac16:27
Nick change: _lac -> lac-lunch16:27
Nick change: lac-lunch -> lac216:27
idnar (mithy@idnar.user) left irc: "kbye"16:32
lac (lac@smartwheels-wlan.strakt.com) left irc: Read error: 60 (Operation timed out)16:34
Nick change: lac2 -> lac16:38
arigo (~arigo@d212-152-17-32.cust.tele2.ch) joined #pypy.16:47
arigogcc uses a lot of memory to compile an array-of-chars constant { }17:26
arigoI suspect translate_pypy.py's frozen initialization bytecode is what kills gcc at the end17:27
arigoI'm trying to generate a big string literal now instead17:27
pedronisbut it was dying even before the change17:27
stakkarsmay make sense17:27
arigopedronis: yes, but before the change the init func was probably what killed it17:28
arigoone week ago, mem consumption of gcc was around 700MB for a long while and jumped up (and crashed) suddenly at the end17:28
hpk (~hpk@mail.trillke.de) joined #pypy.17:29
arigoI measured that a { } constant of 2 million items uses 359MB of gcc17:29
arigohi!17:29
hpkhi armin, hi all 17:29
hpki am jsut dropping in before i have to pack my computer :-) 17:29
hpki am wondering if we can/want to avoid translating classobjinterp at the moment 17:31
hpki think that translation sees all 7600 lines of it 17:32
arigoapart from the init func, yes17:33
arigoI don't know how integrated old-style classes have become now17:34
pedronisit's a matter of whether setup_old_style_classes() is called or not at the end of initialize17:38
stakkarsyou mean it is incredibly expensive since it generates so much interp code? Not translating it wouldprobably be much smaller,and just 100% slower I guess.17:39
stakkarsIOW translation really only pays off if we drastically simplify the code.17:40
arigopedronis: let me try translate_pypy with a space where setup_old_style_classes() hasn't been called...17:45
arigostakkars: I guess the kind of 'goto'-ish code produced by geninterplevel.py still produce very bad flow graphs when re-read, right?17:46
stakkarsyes, they do. I'm working on getting rid of this.17:47
arigoat which level?17:47
stakkarsAt Python level.17:47
arigoI was thinking about a flowgraph simplification.17:48
arigoah ha, without geninterplevel.py and without the big { } array it compiles in a reasonable time (2-3 mins)17:50
stakkarsthe flowgraphs are simplified.17:55
arigoah?17:55
Action: hpk dared to commit something to multimethod.py 17:56
arigohpk: yes, you added an XXX in a file that now didn't have any :-)17:58
hpkyes, but it may be a shallow XXX :-) 17:58
pedronisconflating functions is always also a delicate thing for the annotator17:59
hpki know17:59
hpkbut in this case i would be surprised if it causes a problem 18:01
arigoactually I'm surprized about the number of duplicate functions it avoids18:01
arigothis might point to a bug somewhere18:01
hpkyes, therefore the XXX 18:01
arigodef __mm_id(arg0, space):18:02
arigo    return id__ANY(space, arg0)18:02
hpki couldn't hunt this down 18:02
stakkarsarigo: well, all simplifications available with flowgraphs are applied. But this does not avoid the goto code.18:02
arigothis source is compiled lots of time18:02
arigostakkars: yes that's what I meant: a new flowgraph simplification should remove the goto variable setting/checking.18:02
stakkarsarigo: don't understand. On what level? I cannot express things without goto in flow-graph language.18:03
arigostrange, it's installing the above two-liner on each of the concrete W_XxxObject classes18:04
stakkarsI just can arrange blocks in a way that they don't need goto.18:04
pedronisarigo: that's normal probably18:04
arigostakkars: I mean that if you take a function from classobjinterp.py18:04
arigostakkars: and run the flow objspace over it again (as translate_pypy will do)18:04
arigostakkars: then the result is ugly18:04
pedronisarigo: is because of the ANY I think18:05
arigostakkars: but it could be simplified18:05
arigostakkars: without changing anything in geninterplevel.py nor classobjinterp.py, just in simplify.py.18:05
arigopedronis: doesn't make much sense, this method should go to the base class only once.18:06
stakkarsarigo: oops? I thought I changed things so that simplify is applied all the time. Maybe I missed something.18:06
pedronisarigo: I don't think so with the current algorithm18:06
arigostakkars: out of us doesn't understand the other18:06
hpkstakkars: i think armin means introducing a new simplification 18:06
pedronisarigo: we don't use subclassing rel much and W_Root/ANY is considered a delegation case18:07
stakkarshpk: ah! That would mean to interpret constant values and to deduce that the gotos are unconditional.18:07
arigopedronis: ah, I see... too bad18:08
arigostakkars: exactly18:11
Continuity (~kittish@host81-153-48-22.range81-153.btcentralplus.com) joined #pypy.18:11
arigopedronis: so we install a failing method on the W_Root, and always the same non-failing method on each of the concrete subclasses...18:11
pedronisyes, that's what happen I think18:12
arigoI guess it's safe to merge these methods as hpk did then18:12
pedronisyes18:13
hpkand if we have cases where such merging is not safe then we should explicitely set specialization by argtypes or so 18:13
arigothe result looks like vtables, each (or most) of the concrete subclasses having the same function in the slot...18:13
arigowhich is exactly how C++ would compile the classes if we had just one method on the base class instead.18:14
stakkarsarigo: what about the duplication of f_xxx and fastf_xxx interfaces? This happens on both levels,one is probablynot necessary?18:17
arigoah, well I don't really know18:17
arigogenc.py doesn't really use its fastf_xxx interface (I've a patch to do that but it's not compatible with USE_TRACE_CALL)18:18
Action: hpk notices that PyPy is only 4659 times slower than CPython on pystone18:18
arigohpk: I even got 15% speed-ups with Psyco this morning :-)18:19
arigowith an extension to only Psyco-compile the functions not marked NOT_RPYTHON...18:19
hpkhehe18:20
Action: hpk continues packing and moving things ... 18:20
_hannes (rrpnpf@i3ED6B20D.versanet.de) joined #pypy.18:23
_hanneshi people18:24
arigohi18:25
stakkarsarigo: well, f_xxx does parameter checking in CPython style. My f_xxx does parameter checking again, using __args__ methods. Something is wrong, here.18:26
stakkarswhy only 15%? Probably too many objects with methods, which cannot be inlined18:28
arigoyes and no...18:28
arigonot sure exactly why 15% only18:28
arigothe C-level f_xxx should probably go away automatically18:28
arigowhen we figure out that direct calls to the C-level fastf_xxx() are possible18:28
arigothen we don't need to generate f_xxx() any more, if it's not referenced any more18:29
arigobut it's a bit more messy in practice because a lot of functions are stored in classes as methods, so the f_xxx() might be hard to get rid of18:29
pedronisyes, not without types18:30
arigoindeed18:31
arigobut then I wouldn't worry too much about it now18:31
Action: arigo plays with simplify.py18:31
stakkarsarigo: goto was really a problem, when I ran flow graphs twice, because it always complained about uninitialized variables. This is why I begun to initialize all the temp variables. If you can teach it to deduce unconditional jumps, this would probably be very fine.18:34
arigooh right18:35
arigomaybe simplify.py is too late, then?18:35
arigothe FlowObjSpace would complain about UnboundLocalError before simplify.py can do something about it...18:36
stakkarssince I didn't want to modify flowgraphs, my approach was to merge blocks into each other. But that cannot be expressedby graphs, right now.18:36
stakkarsarigo: yes. This happens when you run flowing over something that produced such gotos.18:36
stakkarsIt also happens on regular code, btw.18:36
stakkarsWe just happen to not write such code.18:36
arigoI see18:37
stakkarsbut I don't see how to solve this without something like annotation.18:37
stakkars_hannes: hi son18:38
_hanneshi pops18:38
stakkarsarigo: in this simple case, we have constant assignments, which are then switched upon in the big loop. But in general, this could be any expression, and it is not easy to predict whether a variable is uninitialized or not.18:39
arigostakkars: definitely18:40
stakkarsdo you see a way to avoid this, or should I continue with my python level block embedding?18:40
arigothere are ways to avoid this18:41
arigothe question is how difficult they'd be18:41
stakkarsI mean without enforcing annotation.18:41
arigoyes18:42
arigothe FlowObjSpace performs a very limited form of annotation ifself, with its Variable/Constant.18:42
arigothat would be enough in our case18:42
arigoI can think about a quick hack18:43
stakkarsok, it's constant tracking.18:43
arigowhere we somehow force the flowobjspace to fully specialize for the value of 'goto'18:43
arigohe he18:43
stakkarsANother way would be to change the produced code. I could use a different variable for every block. Would that help?18:44
arigono no18:44
stakkarsgoto specialization looksgood, yes.18:44
arigothere are already possible hacks18:44
arigoe.g. in addition to goto in range(N), if you also generate N variables dummy0, ..., dummyN-118:45
arigoand if you arrange for dummyJ to be bound if and only if goto==J18:45
arigothen the FlowObjSpace shouldn't be allowed to merge18:46
stakkarswasn't that what you labelled "no no"?18:47
arigowell, indeed18:47
arigosorry18:48
arigohowever, you probably need the common 'goto' variable too18:48
arigoand what I had in mind was to play tricks with this single variable18:49
arigolike using for block numbers, instead of integers, special objects which the FlowObjSpace knows it must not fold18:49
stakkarssounds promising!18:50
arigoright now, if the objects stored in 'goto' are put as keys in objspace.flow.framestate.UNPICKLE_TAGS, they won't be merged18:51
arigobut it should be done more "officially" I guess.18:52
arigouse complex literals, and say that complex numbers are not to be merged :-)18:53
stakkarswhow! complex goto's is really great :-)18:53
idnar (mithrandi@idnar.user) joined #pypy.19:07
arigostakkars: I checked in a reasonable interface19:11
arigosee SpecTag in framestate.py19:11
arigousing global SpecTag instances and putting them in 'goto' instead of numbers should do the trick.19:19
arigoI was considering an int subclass instead but well.19:20
stakkarsthat means = use some globals label_1 = SpceTag(); label_2 = SpecTag() etc.19:31
arigoyes19:32
stakkarsand then use them with if goto is lable_1:19:32
stakkarsor eq?19:32
arigonot wonderfully nice, but it should do as a proof of concept19:32
arigo'is' is fine19:32
arigoyou can reuse the labels between functions if you like but you don't have to19:33
stakkarsthis also would let me drop initialization of the locals19:33
arigoI think so19:33
ludal (~ludal@logilab.net2.nerim.net) left irc: "Download Gaim: http://gaim.sourceforge.net/"19:59
dialtone (~dialtone@host116-56.pool80117.interbusiness.it) joined #pypy.20:12
Action: pedronis leaving the office20:31
pedronis (pedronis@ratthing-b246.strakt.com) left irc: "ChatZilla 0.9.61 [Mozilla rv:1.7.3/20041007]"20:31
Action: arigo reads the C standard20:49
arigostrange things indeed are found in this weird language20:50
lacwhat are you reading now?21:03
arigothe C99 draft21:03
arigohello /\21:04
arigo / world21:04
laceeee21:04
arigothis is a // comment because of the \21:04
arigoor21:04
arigoprintf("Eh??!\n")21:04
arigoprints  Eh|21:04
arigobecause it's a trigraph21:04
arigo(but sane C compilers like gcc don't enable trigraphs by default)21:05
arigoalso, I had no idea that <% and %> where equivalent to { and }21:05
arigos/where/were21:05
lacwonder how much code would break if they did on one April 1st or so ....21:05
arigoindeed21:06
lacI knew that, because I lived for a long time with a keyboard that didn't have braces.21:06
arigoand %: for # and <: for [21:07
lacThat I had forgotten if I ever knew.21:08
_hannesoO21:13
arigoever less known: literal struct expressions:21:22
arigo(struct point){.x=a, .y=a+2}21:22
arigoas in21:23
arigo  printf("%d\n", sum((struct point){.x=a+1, .y=a+2}));21:23
arigohey, keyword argument passing in C :-)21:23
stakkarsugh21:23
arigothat's new in the C99 standard,  I believe21:23
arigobut gcc accepts it21:24
dialtone (~dialtone@host116-56.pool80117.interbusiness.it) left irc: "Leaving"21:24
pedronis (~Samuele_P@c-1e8b70d5.022-54-67626719.cust.bredbandsbolaget.se) joined #pypy.21:24
dialtone (~dialtone@host116-56.pool80117.interbusiness.it) joined #pypy.21:25
arigo (~arigo@d212-152-17-32.cust.tele2.ch) left irc: "Leaving"22:31
tic (~vision@c-996e73d5.019-35-67626717.cust.bredbandsbolaget.se) left irc: Read error: 54 (Connection reset by peer)22:36
arigo (~arigo@d212-152-17-32.cust.tele2.ch) joined #pypy.22:37
tic (~vision@c-996e73d5.019-35-67626717.cust.bredbandsbolaget.se) joined #pypy.22:38
stakkars (~tismer@82.144.60.19) left irc: Read error: 110 (Connection timed out)22:55
arigo (~arigo@d212-152-17-32.cust.tele2.ch) left irc: "Leaving"23:04
lacsamuele: we just ate dinner at the Greek place that just opened at the Tram stop.23:07
lacOpen until 2200.23:08
lacFood was decent greek souvlaki.23:08
lacLet us hope this place can stay open ...23:08
--- Tue Mar 1 200500:00

Generated by irclog2html.py 2.2 by Marius Gedminas - find it at mg.pov.lt!