[IronPython] [python] Re: Missing Compiler Flag

Michael Foord fuzzyman at voidspace.org.uk
Sat Sep 22 00:05:11 CEST 2007


Michael Foord wrote:
> 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.
>   

*so*... compile only returns a code object if the source code is 
complete. An indented code block is only complete when there is a dedent 
that completes the block.

PyCF_DONT_IMPLY_DEDENT is a 'parser flag' which says "don't imply a 
dedent at the end of a block until we actually get an explicit dedent".

All the best,

Michael
http://www.ironpython.info/




> 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
>>
>>   
>>     
>
> _______________________________________________
> 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