[00:36] pedronis (~Samuele_P@c-3c8b70d5.022-54-67626719.cust.bredbandsbolaget.se) left irc: "Chatzilla 0.9.67 [Firefox 1.0.2/20050317]"
----- silence for 3 hr and 5 minutes ----- [03:41] dialtone (~dialtone@host111-56.pool80117.interbusiness.it) left irc: Read error: 60 (Operation timed out)
----- silence for 3 hr and 33 minutes ----- [07:14] idnar (mithrandi@idnar.user) left irc: Read error: 110 (Connection timed out)
----- silence for 41 minutes ----- [07:55] sanxiyn (~tinuviel@211.104.100.115) joined #pypy.
[07:55] Gerald (~bear@dialin-212-144-180-010.arcor-ip.net) joined #pypy.
[07:56] Nick change: Gerald -> Gromit_
[07:57] Nick change: Gromit_ -> Gromit
----- silence for 49 minutes ----- [08:46] sanxiyn (~tinuviel@211.104.100.115) left irc: "Bye"
----- silence for 40 minutes ----- [09:26] idnar (mithy@idnar.user) joined #pypy.
----- silence for 58 minutes ----- [10:24] arigo (~arigo@stups.cs.uni-duesseldorf.de) joined #pypy.
----- silence for 28 minutes ----- [10:52] ludal (~ludal@logilab.net2.nerim.net) joined #pypy.
----- silence for 27 minutes ----- [11:19] arre (ac@ratthing-b3fa.strakt.com) joined #pypy.
----- silence for 45 minutes ----- [12:04] Gromit (~bear@dialin-212-144-180-010.arcor-ip.net) left irc: Read error: 110 (Connection timed out)
[12:18] dialtone (~dialtone@host111-56.pool80117.interbusiness.it) joined #pypy.
----- silence for 1 hr and 7 minutes ----- [13:25] aadi (~aditya@202.153.40.2) joined #pypy.
[13:25] aadi (aditya@202.153.40.2) left #pypy.
----- silence for 1 hr and 3 minutes ----- [14:28] cfbolz (~bolz@zenon.physi.uni-heidelberg.de) joined #pypy.
----- silence for 44 minutes ----- [15:12] pedronis (pedronis@ratthing-b246.strakt.com) joined #pypy.
[15:14] <pedronis> arigo: hi
[15:15] <arigo> hi
[15:15] <cfbolz> hi
[15:15] <pedronis> I'm looking at my idea of producing a set of small snippets showing how we expect arithmetic to work
[15:15] <arigo> ok
[15:16] <pedronis> I'm looking at test_ctrans.test_int_overflow
[15:16] <pedronis> that code will not overflow if not translated
[15:17] arre (ac@ratthing-b3fa.strakt.com) left irc: "using sirc version 2.211+KSIRC/1.3.11"
[15:17] <arigo> yes, well, that test is more an internal test for genc
[15:17] <arigo> the input argument is a long that is too long
[15:18] <pedronis> I see
[15:18] <pedronis> what is expected if we pass just sys.maxint
[15:19] <arigo> that's a more interesting question
[15:19] <pedronis> yes
[15:19] <arigo> i don't know
[15:19] <pedronis> we know that we expect:
[15:19] <pedronis> def f(n):
[15:20] <pedronis> n = r_int(n)
[15:20] <pedronis> try:
[15:20] <pedronis> n+r_int(1)
[15:20] <pedronis> except OverflowError:
[15:20] <pedronis> return 'overflow'
[15:20] <pedronis> return 'overflow' # indented
[15:21] <pedronis> to return 'overflow'
[15:21] <pedronis> both with translation and without
[15:21] <arigo> yes
[15:23] <pedronis> it is sane that unguarded operation and operations not r_int, should not overflow or the behavior is undefined
[15:23] <pedronis> not using
[15:24] <arigo> it's at least what we had in mind -- now is it sane?
[15:25] <pedronis> yes
[15:26] <arigo> ok :-)
[15:26] <pedronis> I mean, yes, it's what we had in mind
[15:26] <arigo> aaaah
[15:27] <arigo> anyway, what about unsigned integer arithmetic?
[15:28] <pedronis> well, the issue is not only what is sane but what we can make work similarly before and after translation
[15:28] <arigo> ok
[15:31] <pedronis> for example, what about the new hash_String
[15:32] <arigo> ok we can be more precise then
[15:32] <pedronis> it is assuming that with masking you can do overflow-free signed arithmetic wich is ok
[15:32] <pedronis> unless you mix r_int in the mix
[15:33] <pedronis> wich would make things explode
[15:33] <arigo> yes, we can say that unguarded arithmetic guarantees that the last int-sized bits are correct
[15:33] <arigo> we can't use r_int here,
[15:33] <arigo> if we wanted to use something it would be an explicitely wrap-around class
[15:34] <pedronis> I know but are we sure that r_int will not propagate in strange ways and bite us
[15:34] <arigo> hum, the question is about the r_int semantics after translation
[15:35] <pedronis> well, it's a question also about them before
[15:35] <pedronis> translation
[15:35] <arigo> are r_int operations guaranteed to throw OverflowErrors, or do they have to be guarded just like int operations?
[15:35] <pedronis> ideally they would have to be guarded but it is hard to get that behavior before translation
[15:35] <arigo> for before translation, it's easier: just make sure your code is sane, and test it thouroughly
[15:36] <pedronis> that's a possible approach, but we need to be more careful that we have been so far
[15:37] <pedronis> that's means r_int means signed and is basically erased at translation
[15:37] <arigo> yes
[15:38] <arigo> I agree it's a bit difficult to have a behavior that is exactly the same before and after translatiotn
[15:38] <pedronis> yes, but having fragments that show what to expect should be useful
[15:39] <arigo> we "might" consider hacking around the warnings module
[15:39] <arigo> to throw a real OverflowError if we see in sys._getframe() that there is a handler... hum.
[15:39] <pedronis> the there's an handler is possible but not trivial
[15:39] <arigo> I know, I'm more wondering if it's sane or not
[15:40] <pedronis> well, if we have this difference it just means that we have to be careful
[15:40] <pedronis> especially not to propaget r_int around without knowing
[15:41] <arigo> alternatively, we could use some more explicit code
[15:42] <arigo> e.g. instead of try: z=x+y except OverflowError:
[15:42] <arigo> use z=x+y; if overflowed(z):
[15:42] <arigo> with overflowed = lambda x: isinstance(x, long)
[15:43] <arigo> or some intermediate solution like
[15:43] <arigo> try: z=overflowing(x+y) except OverflowError:
[15:43] <pedronis> yes
[15:44] <pedronis> it would help getting similar behavior before and after translation
[15:44] <arigo> definitely
[15:44] <pedronis> so we would not need r_int anymore
[15:45] <pedronis> but use that or masking
[15:45] <pedronis> depending on what we want
[15:45] <arigo> yes
[15:45] <pedronis> Ok
[15:45] <pedronis> what about unsigned arithmetic
[15:45] <arigo> what about unsigned arithmetic
[15:46] <pedronis> :)
[15:47] <arigo> we could try to do the same and get rid of r_uint
[15:47] <arigo> I don't think we need overflow detection in this case
[15:47] <arigo> only masking.
[15:47] <arigo> that's what r_uint is doing, at least.
[15:48] <pedronis> yes
[15:48] <pedronis> but what should be a marker for unsigned number
[15:48] <pedronis> long?
[15:48] <arigo> hum
[15:49] <arigo> if we translate to C, it doesn't matter, but in general it does matter
[15:50] <arigo> well no, even in C it's unclear
[15:50] <pedronis> yes, it probably matters also were have to do conversions
[15:51] <arigo> maybe we keep r_uint then
[15:52] <pedronis> given that a signed "overflowing" operation would give a long, it seems we cannot just use that
[15:52] <pedronis> so yes, it seems we need some other marker
[15:54] <arigo> so we have to be careful that r_uint doesn't propagate too much
[15:54] <arigo> but that's ok
[15:55] <pedronis> is less of an issue because it does not raise exceptions
[15:55] <pedronis> but indeed what should signed+unsigned do
[15:55] <arigo> -> unsigned
[15:55] <arigo> r_uint is a marker that should propagate, I think
[15:56] <pedronis> ok
[15:57] <arigo> it would be nice if int(r_uint(-1)) == -1
[15:58] <pedronis> yes
[15:59] <pedronis> I see that the annotator already has unsigned = unsigned1 or unsigned2
[15:59] <arigo> yes.
[16:00] <arigo> I just wrote a def __int__() for class r_uint, it seems to be called when we do int(r_uint(-1))
[16:00] <arigo> so we can officialize this behavior both before and after translation
[16:01] <pedronis> yes
[16:03] <arigo> ok so we get rid of r_int and replace it with a pair of functions:
[16:03] <arigo> intmask(n) (already there)
[16:03] <arigo> ovfchecking(n) ?
[16:03] <pedronis> yes
[16:04] <pedronis> I would go for the throwing exception route
[16:04] <arigo> def ovfchecking(n):
[16:05] <arigo> n = int(n)
[16:05] <arigo> if isinstance(n, long):
[16:05] <arigo> raise OverflowError, "you loose"
[16:05] <arigo> return n
[16:05] <pedronis> yes
[16:05] <arigo> IOW exactly the previous behavior of int()
[16:05] <pedronis> what about an unexpected ovfnchecking of a r_uint
[16:06] <arigo> er
[16:06] <arigo> AssertionError?
[16:06] <pedronis> I think so
[16:06] <arigo> intmask() should work, though, ok?
[16:06] <pedronis> yes
[16:07] <arigo> it's even cleaner than doing int() to get back an int from a r_uint
[16:08] <arigo> I'd even say that using int() is confusing, given that the numeric value might change on CPython
[16:08] <pedronis> yes
[16:09] <arigo> we (= I) should write a few lines to pypy-dev before we do that, as Christian is not reading right now :-)
[16:09] <arigo> it's also a good habit to write a few lines after IRC discussions in general
[16:10] <pedronis> ok
[16:25] <arigo> wait a minute
[16:26] <arigo> should ovfchecked(x+y) only be used directly within an OverflowError handled?
[16:26] <arigo> handler?
[16:26] <pedronis> probably yes
[16:27] <arigo> would it be a no-op for the translator, then?
[16:27] <pedronis> basically yes, but the translator could check the graphs to see that the rule is respected
[16:28] <arigo> my concern is if the try: except OverflowError also contains another arithmetic operation by error
[16:29] <pedronis> it will not be protected?
[16:29] <pedronis> but we have the same issue now
[16:29] <arigo> well, yes
[16:30] <arigo> the safest solution would be to have the rule that only ovfchecked itself can raise OverflowError,
[16:30] <arigo> and that it should be syntactically ovfchecked(x <op> y)
[16:30] <arigo> i.e. protect exactly one operation
[16:30] <pedronis> well that the pattern I had in minde
[16:30] <pedronis> but can we check that it is respected?
[16:30] <arigo> if we enforce this as a rule, we don't need to use implicit exceptions in the flow graph
[16:31] <arigo> it's probably easy to check it, yes
[16:31] <pedronis> in the flow graph?
[16:31] <arigo> yes, look at the block operations, simple_call(ovfchecked, z) should always follow "z = <op>(x,y)"
[16:32] <pedronis> yes but if you had more operations inside the call?
[16:32] <arigo> I thought about enforcing ovfchecked(variable op variable)
[16:33] <arigo> a bit of a hack, but more convenient than a family of functions ovf_add() ovf_sub() etc.
[16:34] <arigo> er, actually, no
[16:34] <arigo> ovfchecked(expr op expr) would also work
[16:34] <pedronis> yes, that was my point
[16:34] <arigo> because it would end in "z=op(x,y)" "simple_call(ovfchecked, z)"
[16:34] <arigo> that's fine, then
[16:35] <arigo> it's meant to check only that operation, not the other ones
[16:35] <arigo> ah I see your point: ovfchecked(x+y+z) would not do the same thing before and after translation
[16:35] <pedronis> but is the overflow flag preserved
[16:36] <pedronis> yes, in the graph you don't see what expression the call was really guarding
[16:36] <pedronis> unless you look at the names of variables (very hackish)
[16:36] <arigo> ok
[16:38] <arigo> the name ovfchecked() is misleading
[16:38] <arigo> it should be int_or_crash(x) or something
[16:39] <arigo> well the point is that ovfchecked(x+y+z) still behaves differently before and after translation
[16:40] <pedronis> yes
[16:40] <arigo> before translation it checks that the result is within bounds
[16:40] <arigo> after translation you can get an OverflowError for the intermediate result
[16:41] <arigo> ovf(operator.add, x, y)
[16:41] <arigo> ?
[16:41] <pedronis> well, we still want to write more or less natural code
[16:42] <hpk> ovf("x+y") :-)
[16:42] <arigo> hpk: go away :-)
[16:43] <arigo> ovf+(x,y)
[16:43] <arigo> hack hack hack
[16:43] <pedronis> yes, there a way to preserve where a try block starts into the graph
[16:44] <hpk> well, regarding hacks one could do:
[16:44] <pedronis> oops, isn't there a way ...
[16:44] <hpk> ovf(x+y)
[16:44] <hpk> and apply py.test assertion tricks while running on PyPy and doing nothing for translation
[16:44] <hpk> (sorry, running on Python i meant)
[16:45] <arigo> hpk: actually on Python just checking if the result is a long is enough
[16:45] <arigo> pedronis: for our goal, what about
[16:45] <arigo> z = x+y
[16:45] <arigo> if ovf(z): ...
[16:46] <arigo> it's more natural to ask "what operation is that enclosing then"
[16:46] <arigo> and find the answer "the last one" in the doc
[16:46] <arigo> rather than writing ovf(x+y+z) and having surprizes
[16:47] <pedronis> but our try except are all about only the last operation after translation?
[16:47] <arigo> yes
[16:47] <arigo> I think so
[16:47] <pedronis> so it's a general problem
[16:47] <arigo> they are mainly in intobject.py, no?
[16:47] <pedronis> yes
[16:47] <pedronis> but what about
[16:47] <pedronis> try:
[16:47] <pedronis> f()
[16:47] <pedronis> g()
[16:47] <pedronis> except ...:
[16:49] <pedronis> I think we are assuming a model where we can know that there was an exception
[16:49] <pedronis> but many translato will only guard the g call?
[16:49] <arigo> no
[16:50] <arigo> the abstract interpretation approach forces us to raise exceptions around just in case, while flow-objspace-ing
[16:50] <arigo> but all simple_call operations do that
[16:50] <pedronis> I see, I'm having one of those, confused by moving parts moments
[16:51] <arigo> it's always been this way about that, but I see what you mean :-)
[16:53] Action: hpk pokes arigo to write some documentation about exceptions handling for flow/annotation/backends
[16:54] <arigo> this point is actually documented in controlflow.txt
[16:54] <arigo> but not the full story, I agree
[16:54] <pedronis> I see
[16:55] <pedronis> try:
[16:55] <pedronis> x+y
[16:55] <pedronis> x+z
[16:55] <pedronis> except OverflowError:
[16:55] <pedronis> ...
[16:55] <pedronis> produces something sensible
[16:55] <arigo> yes
[16:55] <pedronis> the problem is making it behave the same way before and after translation
[16:55] <arigo> precisely
[16:56] <arigo> we can say that the above code snippet is no longer valid Python code,
[16:56] <arigo> given that OverflowError shouldn't be generated any more,
[16:56] <arigo> and then really use something else than exceptions for overflow detection
[16:57] <pedronis> yes
[16:58] <arigo> in this case, the sensible way to write it is
[16:58] <arigo> z = x+y
[16:58] <arigo> if ovf(z):
[16:58] <arigo> or if you prefer
[16:58] <arigo> try:
[16:59] <arigo> z = x+y
[16:59] <arigo> check(z)
[16:59] <arigo> except OverflowError:
[16:59] <pedronis> but is harder to translate
[16:59] <arigo> no, that's easy
[17:00] <pedronis> you ignore the check and use ther curent semantics?
[17:00] <arigo> we should probably even write something like
[17:00] <arigo> z = x+y; check(z)
[17:00] <arigo> and say that check() only guarantees checking the last operation
[17:00] <hpk> would be nice if we could say: z=x+y ; check()
[17:00] <hpk> to make it more obvious
[17:00] <arigo> no, the check() can raise OverflowError, but the x+y doesn't raise implicitely
[17:01] <arigo> hpk: :-)
[17:01] <hpk> i's a bit like checking the overflow bit on some machine register
[17:01] <arigo> how do you make it reasonably work on CPython?
[17:01] <pedronis> well, it's easy to translate if you have an overflow flag, no?
[17:02] <pedronis> but not without
[17:02] <arigo> no:
[17:02] <arigo> the block operations will be exactly z = op(x,y); simple_call(check, z)
[17:02] <arigo> or in the hpk proposal
[17:02] <arigo> the block operations will be exactly z = op(x,y); simple_call(check)
[17:03] <arigo> you can figure this out and replace it with a single operation, z = ovf_add(x,y) for example
[17:03] <pedronis> I see
[17:04] <pedronis> but thinking you can check for ovf(x+y+z)
[17:04] <arigo> that's why check() with no arg would be better (even if more magic)
[17:05] <hpk> hum, i think that doing: z = ovfchecked(x+y)
[17:05] <pedronis> but is more complicated
[17:05] <hpk> should be able to check that it's argument came from a reasonable simple operation
[17:05] <hpk> and for translation it can be easily special cased
[17:05] <arigo> hpk: do you have an inspect.getsource() hack in mind?
[17:05] <pedronis> we thought that we cannot distinguish ovf(x+y+z) from z1 = y+z; ovf(y+z1)
[17:06] <hpk> arigo: yes, nothing too hard, it shoudl fit on one screen
[17:06] <arigo> :-)
[17:06] <arigo> I'm fine with that, I guess :-)
[17:07] <hpk> no at python runtime, ovfchecked would indeed get the caller frame, get the source, find the argument, parse it to an AST and do some assertions
[17:07] <hpk> (that was to samuele)
[17:07] <arigo> or simply say that the line must match a basic re
[17:07] <hpk> i am doing similar things with rlcompleter2 :-)
[17:08] <arigo> ident = ovfchecked(ident op ident)
[17:08] <hpk> well, what about "ovfchecked(f(....x+y+z))" ?
[17:08] <arigo> no no
[17:08] <arigo> because it's ambiguous then, if the + inside are also ovfchecked or not
[17:08] <pedronis> hpk: no, is not that we want to support those
[17:08] <pedronis> but we want a way to be sure they are not used
[17:08] <hpk> ah ok, well, whatever, there should be a resonable sane nicely-testable solution
[17:08] <arigo> I guess so
[17:09] <hpk> it's not that everybody tries hard all the time to abuse ovfchecked
[17:09] <arigo> it's probably enough to check that wherever "ovfchecked(" appears, it's followed by "ident op ident)"
[17:10] <arigo> hpk: maybe it could lead to hard-to-debug surprizes later
[17:10] <hpk> yes, ident op ident sounds reasonable
[17:10] <arigo> use the tokenizer, maybe (inspect.py uses it too for similar things)
[17:11] <pedronis> but in this model + alone would not generate an implicit OverflowError anymore, right?
[17:12] <hpk> right
[17:12] <pedronis> only the combination + & check
[17:12] <hpk> do you fear proliferation of ovfchecks everywhere?
[17:12] <arigo> pedronis: yes.
[17:13] <arigo> hpk: I don't think that's a problem indeed
[17:13] <pedronis> no, just trying to be on the same page
[17:13] <pedronis> I'm just thinking that we could keep the old model because once there's a try we could distringuish the various cases we don't want
[17:14] <pedronis> but it is indeed more complicated
[17:15] <hpk> i like the new model much more, i think
[17:15] <arigo> it's more explicit
[17:16] <hpk> and it is easier to see how it relates to translation, actually
[17:17] <pedronis> well, it matches better the fact that now CPython does not raise OverflowExceptions anymore
[17:17] <arigo> yes
[17:19] <arigo> last question
[17:19] <arigo> space.uint_w() ?
[17:20] <pedronis> it would return a r_uint
[17:20] <arigo> would that be a new space operation that we need?
[17:20] <pedronis> I think so
[17:20] <pedronis> has CPython something like that?
[17:21] <arigo> yes, it has tons of stuff
[17:21] <arigo> also returning long long, unsigned long long, etc.
[17:21] <pedronis> the ParseArg string specifier etc
[17:21] <hpk> hey, that would probably resolve the 're' related unsingned int issues nicely
[17:22] <arigo> yes, that's what I have in mind
[17:22] <pedronis> yup
[17:22] <pedronis> well, what should it do with an int
[17:23] <arigo> couldn't we have a more generic way to get a look at the content of a long
[17:24] <pedronis> ?
[17:24] <arigo> space.integral_numeric_value_w()
[17:24] <arigo> returns a sign and a list of r_uint, or something like that
[17:25] <pedronis> I see a canonical form
[17:25] <arigo> yes
[17:25] <arigo> or else
[17:25] <arigo> space.peek_at_integer_w(w_obj, offset) -> int
[17:26] <arigo> or rather -> r_uint
[17:26] <arigo> I guess we can do the same with a combination of space.rshift() and space.and_() and space.int_w()
[17:27] <pedronis> yes, but such an interface is useful too
[17:27] <pedronis> do you propose to have that and no uint_w?
[17:27] <pedronis> or both?
[17:27] <arigo> only that, but then maybe uint_w() can be added in BaseObjSpace generically
[17:28] <pedronis> is uint_w on an int meaningful?
[17:28] <arigo> only if it is >= 0
[17:29] <pedronis> ok
[17:29] <arigo> I think
[17:29] <arigo> yes
[17:30] <pedronis> well, I expect all of this to become more concretely relevant when you interface with C libraries
[17:30] <arigo> yes
[17:30] <arigo> ...let's do the primitive uint_w for now
[17:30] <arigo> easily changed
[17:30] <pedronis> yep
[17:34] <arigo> ...there is a Complex.py somewhere in CPython?
[17:35] <arigo> Demo/classes/Complex.py, indeed.
[17:41] <cfbolz> hi! I'm trying to get somewhere with targetpypy1. What are all those SomeImpossibleValue(benign=False) attributes of W_Root? Can I ignore these?
[17:42] <arigo> impossible attributes :-)
[17:42] <arigo> yes they should be ignored
[17:42] <cfbolz> good.
[17:43] <arigo> they are methods, actually :-(
[17:44] <cfbolz> yes, I saw that.
[17:44] <arigo> but never called in targetpypy1
[17:44] <cfbolz> ah
[17:44] <arigo> I'm a bit afraid about the full targetpypy, where the methods will be all needed
[17:44] <cfbolz> why?
[17:44] <arigo> it's the multimethod dispatch mecanism
[17:45] <arigo> it creates (and needs) lots of methods
[17:45] <cfbolz> I haven't looked into that, yet.
[17:46] <cfbolz> the implementation of multimethods, I mean.
[17:47] <cfbolz> the rest of targetpypy1 seems actually doable with a few hacks. There are relatively few SomeObjects
[17:47] <cfbolz> in llvm I mean
[17:49] <pedronis> len(dir(W_StringObject)) ~ 560
[17:49] <cfbolz> ouch. and most of it are methods?
[17:49] <pedronis> well, yes, but it could be worse
[17:50] <cfbolz> right. Any ideas what I could do about longs?
[17:51] <cfbolz> I guess I could just use ints for now and hope that the result always fits.
[17:51] <pedronis> dir considers all parent classes, some Gui toolkits, I think, are also in the hundreds of methods
[17:52] <hpk> zope2 has >1000 methods on some of its objects
[17:52] <cfbolz> yes, but they don't want to translate it :-)
[17:53] <hpk> who knows
[17:53] <hpk> :-)
[17:53] <cfbolz> Some c++ frameworks are even more horrible.
[17:55] <pedronis> as I said, it's still not totally unreasonable
[17:56] <cfbolz> I didn't say so :-)
[18:01] <arigo> :-)
[18:03] <cfbolz> ouch. my long substitute has to support type, right?
[18:03] <cfbolz> i mean the function type of course
[18:05] ludal (~ludal@logilab.net2.nerim.net) left irc: "Download Gaim: http://gaim.sourceforge.net/"
[18:05] <pedronis> well it somehow a bug if we have code that tries uses type unless it is can be statically inferred or is about some of our own classes
[18:07] <pedronis> OTOH I'm pretty sure we have code like that
[18:07] <cfbolz> yes, but long using long *is* kind of a bug anyway, isn't it?
[18:07] <cfbolz> long --> code
[18:07] CLI (opera@86.125.128.38) joined #pypy.
[18:07] <CLI> This is the Batroom?
[18:08] <pedronis> yes long using long is cheating
[18:08] <arigo> CLI: I guess not
[18:08] <pedronis> and wrap(SomeObject) has that problem too
[18:09] <CLI> Why not? is called pypy
[18:09] <pedronis> that means the places where wrap cannot be specialized for a precise type
[18:09] <cfbolz> pedronis: so someone has to write a long subsitute in Python at some point?
[18:09] <pedronis> yes
[18:10] <cfbolz> using lists of ints or something like that
[18:10] CLI (opera@86.125.128.38) left irc: Read error: 54 (Connection reset by peer)
[18:18] tic (~vision@c-996e73d5.019-35-67626717.cust.bredbandsbolaget.se) left irc: Read error: 113 (No route to host)
[18:20] <cfbolz> ok, I'm going home now. See you
[18:20] <arigo> see you
[18:22] cfbolz (~bolz@zenon.physi.uni-heidelberg.de) left irc: "Leaving"
[18:24] <pedronis> arigo: is it up to the typer do detect the op ovfchecked pattern? erasing it is not that meanigful with PyObjects around
[18:26] <arigo> probably
[18:26] tic (~vision@c-996e73d5.019-35-67626717.cust.bredbandsbolaget.se) joined #pypy.
[18:38] <pedronis> arigo: after removing the lines that setup OverflowError as an implicit exception, all tests still pass
[18:38] <arigo> meaning that no test checked that
[18:39] <pedronis> yes
[18:39] <pedronis> but also that nothing depends on that so far
[18:39] <arigo> I see
[18:40] <pedronis> well, I don't know about llvm stuff
[18:40] <pedronis> anyway we need new tests about the behaviors we want in any case
[18:41] <arigo> indeed
[18:42] <arigo> did I mention everything in the mail to pypy-dev?
[18:42] <pedronis> I think so
[18:42] <arigo> should be a good base for tests
[18:42] <pedronis> yes
[18:44] <pedronis> btw should we move restricted_int outside of std?
[18:44] <arigo> I think so
[18:45] <pedronis> maybe rename it rarith or something like that?
[18:45] <pedronis> that's not so important
[18:45] <arigo> maybe but it took me time to parse 'rarith' :-)
[18:46] <pedronis> :)
[18:46] <pedronis> to tool?
[18:46] <arigo> ok
[18:47] <pedronis> although I notice that tool is a bit of a mess
[18:47] <pedronis> (umph)
[18:47] <arigo> :-)
[18:48] <pedronis> at some point we need to clean up there
[18:48] <pedronis> and maybe hava a util vs tool directory
[18:49] <pedronis> the other place would be interpreter
[18:50] <arigo> argh
[18:50] <pedronis> what's up?
[18:50] <arigo> there should be a place for top-level scripts like py.py
[18:50] <arigo> "argh" was about stuffing rarith into interpreter
[18:51] <pedronis> well, that was just the other option
[18:51] <pedronis> sofar things like it are in tool
[18:51] <pedronis> but tool is a bit of a mess becaue there are tools (some broken) there
[18:51] <pedronis> and utility libraries
[18:52] <arigo> yes
[18:52] <arigo> tool vs util would be nice
[18:52] <pedronis> yes
[19:01] idnar (mithy@idnar.user) left irc: Nick collision from services.
[19:01] idnar_ (mithrandi@idnar.user) joined #pypy.
[19:01] idnar (mithy@idnar.user) joined #pypy.
----- silence for 42 minutes ----- [19:43] Gromit (~bear@dialin-212-144-177-093.arcor-ip.net) joined #pypy.
[19:44] idnar (mithy@idnar.user) left irc: Nick collision from services.
[19:44] idnar (mithy@idnar.user) joined #pypy.
[19:44] idnar (mithy@idnar.user) left irc: Nick collision from services.
[19:54] Nick change: idnar_ -> idnar
----- silence for 35 minutes ----- [20:29] Gromit (~bear@dialin-212-144-177-093.arcor-ip.net) left irc: "Client Exiting"
----- silence for 1 hr and 7 minutes ----- [21:36] Action: pedronis leaving
[21:40] pedronis (pedronis@ratthing-b246.strakt.com) left irc: Remote closed the connection
----- silence for 49 minutes ----- [22:29] pedronis (~Samuele_P@c-0c8b70d5.022-54-67626719.cust.bredbandsbolaget.se) joined #pypy.
----- silence for 41 minutes ----- [23:10] <arigo> pedronis: the tests look good
[23:10] <pedronis> ok
[23:11] <pedronis> we may want to extract them also as functions such that we can reuse them
[23:11] <pedronis> to check translation
[23:11] <arigo> I see
----- silence for 29 minutes ----- [23:40] _hannes (hxptid@i528C1099.versanet.de) joined #pypy.
[23:41] Nick change: dialtone -> papa
[23:42] Nick change: papa -> pope
[23:42] Nick change: pope -> dialtone
[00:00] --- Sat Apr 9 2005