[IronPython] [python] Re: Missing Compiler Flag

Michael Foord fuzzyman at voidspace.org.uk
Fri Sep 21 23:53:26 CEST 2007


Hello Dino,

I think I've got it. With this flag set, the compile function will 
return None *if* an indented line would be valid.

This allows the interactive interpreter to decide which prompt to 
present the user with (and whether to execute the code it has buffered 
or to wait for more input).

For example (from CPython):

PyCF_DONT_IMPLY_DEDENT = 0x200
def _compile(source, filename, symbol):
    return compile(source, filename, symbol, PyCF_DONT_IMPLY_DEDENT)

source = 'def x():\n    print x'
print _compile(source, 'test', 'single')
None

Without the flag set returns a code object.

There is similar code in the DLRConsole but it uses 
"Microsoft.Scripting.SourceCodeUnit" which isn't present in 2.0a4.

All the best,

Michael
http://www.ironpython.info/


Dino Viehland wrote:
> Ok, I closed 12908 as a dup.  If there's no info on it we can always try reverse engineering it (or see if test_codeop fails when we just ignore the flag instead of throwing - that might be the simplest thing to do).
>
> -----Original Message-----
> From: users-bounces at lists.ironpython.com [mailto:users-bounces at lists.ironpython.com] On Behalf Of Michael Foord
> Sent: Friday, September 21, 2007 1:23 PM
> To: Discussion of IronPython
> Subject: Re: [IronPython] [python] Re: Missing Compiler Flag
>
> Dino Viehland wrote:
>   
>> Strangely it doesn't seem to be in the documentation for compile() either :(
>>
>> Do you know what this option does by any chance :) ?
>>
>> I've opened bug #12908
>>     
>
> Great - it can go with 12907. :-)
>
> It is  something to do with dedenting. ;-)
>
> I can't find much about it on the intarwebz. It is defined in
> pythonrun.h and seems to be used in pythonrun.c and it is involved with
> parsing which makes sense.
>
> I'll try asking around. *sigh*
>
> Michael Foord
> http://www.manning.com/foord
>
>   
>> (http://www.codeplex.com/IronPython/WorkItem/View.aspx?WorkItemId=12908) so we at least have it tracked...
>>
>> -----Original Message-----
>> From: users-bounces at lists.ironpython.com [mailto:users-bounces at lists.ironpython.com] On Behalf Of Michael Foord
>> Sent: Friday, September 21, 2007 12:57 PM
>> To: Discussion of IronPython
>> Subject: [IronPython] Missing Compiler Flag
>>
>> Hello all,
>>
>> There's another problem with the interactive interpreter in IronPython
>> (it affects the ability to use the code standard library module).
>>
>> The PyCF_DONT_IMPLY_DEDENT compiler flag is not recognised in IronPython.
>>
>> The flag is defined in the 'codeop' standard library module:
>>
>> PyCF_DONT_IMPLY_DEDENT = 0x200          # Matches pythonrun.h
>>
>> Attempting to use this in IronPython:
>>
>>  >>> compile('print x', 'test', 'single', 0x200, 1)
>> Traceback (most recent call last):
>>   File , line 0, in <stdin>##1
>>   File , line 0, in Compile##4
>> ValueError: unrecognized flags
>>
>> Without this flag the code module can't recognize blocks of code with
>> several indented lines. :-(
>>
>> All the best,
>>
>>
>> Michael Foord
>> http://www.manning.com/foord
>> _______________________________________________
>> Users mailing list
>> Users at lists.ironpython.com
>> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>> _______________________________________________
>> Users mailing list
>> Users at lists.ironpython.com
>> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>>
>>
>>     
>
> _______________________________________________
> Users mailing list
> Users at lists.ironpython.com
> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
> _______________________________________________
> Users mailing list
> Users at lists.ironpython.com
> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>
>   




More information about the Ironpython-users mailing list