Skip to content
  • Damien George's avatar
    py/repl: Generalise REPL autocomplete to use qstr probing. · 165aab12
    Damien George authored
    This patch changes the way REPL autocomplete finds matches.  It now probes
    the target object for all qstrs via mp_load_method_maybe to look for a
    match with the given input string.  Similar to how the builtin dir()
    function works, this new algorithm now find all methods and instances of
    user-defined classes including attributes of their parent classes.  This
    helps a lot at the REPL prompt for user-discovery and to autocomplete names
    even for classes that are derived.
    
    The downside is that this new algorithm is slower than the previous one,
    and in particular will be slower the more qstrs there are in the system.
    But because REPL autocomplete is primarily used in an interactive way it is
    not that important to make it fast, as long as it is "fast enough" compared
    to human reaction.
    
    On a slow microcontroller (CPU running at 16MHz) the autocomplete time for
    a list of 35 names in the outer namespace (pressing tab at a bare prompt)
    takes about 160ms with this algorithm, compared to about 40ms for the
    previous implementation (this time includes the actual printing of the
    names as well).  This time of 160ms is very reasonable especially given the
    new functionality of listing all the names.
    
    This patch also decreases code size by:
    
       bare-arm:    +0
    minimal x86:  -128
       unix x64:  -128
    unix nanbox:  -224
          stm32:   -88
         cc3200:   -80
        esp8266:   -92
          esp32:   -84
    165aab12