micropython

docs/assignment.txt

530:0f9aa4c4d92c
2012-06-09 Paul Boddie Added an __iter__ method for strings.
     1 Object contexts:
     2 
     3   Object      Context
     4   ------      -------
     5   function    overridable
     6   method      defining/originating class
     7   class       null
     8   instance    self
     9   module      null
    10 
    11 Assignment types:
    12 
    13   Assignment of stored value to...  Effect on context
    14   --------------------------------  -----------------
    15   local                             preserved
    16   global (module)                   preserved
    17   class                             overridden (if overridable)
    18   instance                          preserved
    19 
    20   Assignment to a namespace preserves the context except for some class
    21   assignments
    22 
    23 Assigning to classes:
    24 
    25   Assignment of...                  Effect on context
    26   ----------------                  -----------------
    27   function (overridable context)    overridden by class (becomes method)
    28   method (existing context)         preserved
    29   class (null context)              preserved
    30   instance (self context)           preserved
    31   module (null context)             preserved
    32 
    33 With run-time restrictions on assignment targets:
    34 
    35   Assignment of stored value to...  Effect on context   Optimised instruction   Unoptimised instruction
    36   --------------------------------  -----------------   ---------------------   -----------------------
    37   local                             preserved           StoreName
    38   global (module)                   preserved           StoreAddress            StoreAttrIndex
    39   instance                          preserved           StoreAttr               StoreAttrIndex
    40   class                             -> class            StoreAddressContext	StoreAttrIndex
    41 
    42   Assignment of new class attributes is only permitted during initialisation
    43 
    44 Access types:
    45 
    46   Access to stored value from...    Effect on context   Optimised instruction     Unoptimised instruction
    47   ------------------------------    -----------------   ---------------------     -----------------------
    48   local                             preserved           LoadName
    49   global (module)                   preserved           LoadAddress               LoadAttrIndex
    50   class                             preserved           LoadAddress               LoadAttrIndex
    51   class via instance                -> instance         LoadAddressContext(Cond)  LoadAttrIndexContext(Cond)
    52   instance                          preserved           LoadAttr                  LoadAttrIndex
    53 
    54   Access to a namespace may not preserve the stored context
    55 
    56 Access to class attributes via instances:
    57 
    58   Access to stored value with...    Effect on context
    59   ------------------------------    -----------------
    60   compatible class as context       -> instance
    61   incompatible class as context     preserved
    62   null context                      preserved
    63   other context (instance)          preserved
    64 
    65 Optimisation possibilities for class attribute access via instances:
    66 
    67   Class       Class attribute   Context of attribute  Instruction
    68   -----       ---------------   --------------------  -----------
    69   known       constant          preserved             LoadAddress
    70   known       constant          -> instance           LoadAddressContext
    71   known       not constant      preserved             LoadAddress              (attribute may always be preserved)
    72   known       not constant      -> instance           LoadAddressContext       (attribute may always be overridden)
    73   known       not constant      not known             LoadAddressContextCond   (perform context check)
    74   not known   not known         preserved             LoadAttrIndex            (attribute may have preserved context in all classes)
    75   not known   not known         -> instance           LoadAttrIndexContext     (attribute may have overridden context in all classes)
    76   not known   not known         not known             LoadAttrIndexContextCond (perform context check for class attribute access)
    77 
    78   Since the object table encodes sufficient information (an instance must be
    79   compatible to access the class attribute, and compatibility information is
    80   stored), an explicit compatibility test may not always be required at
    81   run-time