[Python-Dev] Switch statement

Fredrik Lundh fredrik at pythonware.com
Sat Jun 24 19:04:50 CEST 2006


Guido van Rossum wrote:

 >> just map
>>
>>      switch EXPR:
>>      case E1:
>>          ...
>>      case in E2:
>>          ...
>>      else:
>>          ...
>>
>> to
>>
>>      VAR = EXPR
>>      if VAR == E1:
>>          ...
>>      elif VAR in E2:
>>          ...
>>      else:
>>          ...
>>
>> where VAR is a temporary variable, and case and case-in clauses can be
>> freely mixed, and leave the rest to the code generator.  (we could even
>> allow "switch EXPR [as VAR]" to match a certain other sugar construct).
> 
> This used to be my position. I switched after considering the
> alternatives for what should happen if either the switch expression or
> one or more of the case expressions is unhashable.

I don't see this as much of a problem, really: we can simply restrict 
the optimization to well-known data types ("homogenous" switches using 
integers or strings should cover 99.9% of all practical cases), and then 
add an opcode that checks uses a separate dispatch object to check if 
fast dispatch is possible, and place that before an ordinary if/elif 
sequence.

the dispatch object is created when the function object is created, 
along with default values and statics.  if fast dispatch cannot be used 
for a function instance, the dispatch object is set to None, and the 
dispatch opcode turns into a NOP.

(each switch statement should of course have it's own dispatch object).

</F>



More information about the Python-Dev mailing list