четверг, 7 апреля 2016 г.

#1218. Скрипты. Правила. Итераторы. Лямбды. Списки. Добавление элементов. Продолжение темы

INTERFACE FUNCTION MakeConstants:
  STRING IN aName
  ^ IN aLambda
 aName nil MakeParam: ( 
   IN aMade
  aMade -> Stereotype := st_Constants
  aMade aLambda DO
 )
 >>> Result 
; // MakeConstants:
  
INTERFACE FUNCTION MakeConstant:
  STRING IN aName
  PRINTABLE IN aValue
  ^ IN aLambda
 aName nil MakeParam: ( 
   IN aMade
  aMade -> Class := class_Attribute
  aMade -> 'extprop:pas:Value' := aValue
  aMade aLambda DO
 )
 >>> Result 
; // MakeConstant:

elem_iterator ConstantsEx
 Cached:
 (
  Self .Constants
  
  RULES
   ( Self .IsTypedef )
    begin
     VAR l_OtherEnum
     Self .MainAncestor >>> l_OtherEnum
     RULES
      ( l_OtherEnum .IsEnum )
       RULES
        ( Self .Name l_OtherEnum .Name == )
         RULES
          ( l_OtherEnum .Attributes .CountIt > 0 )
           begin
            VAR l_ConstantsName
            [ Self .Name '_' l_OtherEnum .Name '_' 'Constants' ] strings:Cat >>> l_ConstantsName
            .join>
            [
             l_ConstantsName MakeConstants: (
               IN aConstants
              aConstants -> %SUM := ( [ 'Алиасы для значений ' l_OtherEnum .Parent .Name '.' l_OtherEnum .Name ] strings:Cat )
              aConstants -> Visibility := PublicAccess
              aConstants -> Attributes := [
               l_OtherEnum .Attributes .for> (
                 IN anItem
                anItem .Name 'XXX' MakeConstant: (
                  IN aConstant
                ) // MakeConstant:
               ) // l_OtherEnum .Attributes .for>
              ] // aConstants -> Attributes
             ) // MakeConstants:
            ] // .join>
           end // ( l_OtherEnum .Attributes .CountIt > 0 )
         ; // RULES
       ; // RULES
     ; // RULES
    end // ( Self .IsTypedef )
  ; // RULES
 )
 >>> Result
; // ConstantsEx

Комментариев нет:

Отправить комментарий