micropython

docs/assignment.txt

443:583b1de09eec
2011-07-05 Paul Boddie Simplified ObjectSet merging which seemed to be attempting to combine individual values.
     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
    41 
    42   Class assignments are not permitted except during initialisation and hence
    43   employ no unoptimised instruction
    44 
    45 Access types:
    46 
    47   Access to stored value from...    Effect on context   Optimised instruction     Unoptimised instruction
    48   ------------------------------    -----------------   ---------------------     -----------------------
    49   local                             preserved           LoadName
    50   global (module)                   preserved           LoadAddress               LoadAttrIndex
    51   class                             preserved           LoadAddress               LoadAttrIndex
    52   class via instance                -> instance         LoadAddressContext(Cond)  LoadAttrIndexContext(Cond)
    53   instance                          preserved           LoadAttr                  LoadAttrIndex
    54 
    55   Access to a namespace may not preserve the stored context
    56 
    57 Access to class attributes via instances:
    58 
    59   Access to stored value with...    Effect on context
    60   ------------------------------    -----------------
    61   compatible class as context       -> instance
    62   incompatible class as context     preserved
    63   null context                      preserved
    64   other context (instance)          preserved
    65 
    66 Optimisation possibilities for class attribute access via instances:
    67 
    68   Class       Class attribute   Context of attribute  Instruction
    69   -----       ---------------   --------------------  -----------
    70   known       constant          preserved             LoadAddress
    71   known       constant          -> instance           LoadAddressContext
    72   known       not constant      preserved             LoadAddress              (attribute may always be preserved)
    73   known       not constant      -> instance           LoadAddressContext       (attribute may always be overridden)
    74   known       not constant      not known             LoadAddressContextCond   (perform context check)
    75   not known   not known         preserved             LoadAttrIndex            (attribute may have preserved context in all classes)
    76   not known   not known         -> instance           LoadAttrIndexContext     (attribute may have overridden context in all classes)
    77   not known   not known         not known             LoadAttrIndexContextCond (perform context check for class attribute access)
    78 
    79   Since the object table encodes sufficient information (an instance must be
    80   compatible to access the class attribute, and compatibility information is
    81   stored), an explicit compatibility test may not always be required at
    82   run-time