anchor.diff:    TDefaultsMap.StaticInstance.AddValue(DefValAttribClass, Value);
   end;
   
  +{ TDefaultValueAttribute }
  +
  +constructor TDefaultValueAttribute.Create(AValueKind : TDefaultValueKind);
  +begin
  +  inherited Create;
  +
  +  FValue := TValue.Empty;
  +  FValueKind := AValueKind;
  +end;
  +
  +function TDefaultValueAttribute.CalculateValue : TValue;
  +begin
  +  with TDefaultsMap.StaticInstance do
  +    if HasValue(Self.GetClassType) then
  +      Result := GetValue(Self.GetClassType)
  +    else
  +      Result := TValue.Empty;
  +end;
  +
  +function TDefaultValueAttribute.GetClassType : TDefaultValueAttributeClass;
  +begin
  +  Pointer(Result) := PPointer(Self)^;
  +end;
  +
  +function TDefaultValueAttribute.GetValue : TValue;
  +begin
  +  Result := TValue.Empty;
  +
  +  case ValueKind of
  +    dvkData:
  +      Result := FValue;
  +    dvkCalculated:
  +      Result := CalculateValue;
  +  else
  +    Assert(False, 'Unhandled default value kind while getting value.');
  +  end;
  +end;
  +
  +{ TDefaultValueAttribute<T> }
  +
  +constructor TDefaultValueAttribute<T>.Create(const AValue : T);
  +begin
  +  inherited Create(dvkData);
  +
  +  FValue := MakeValue(AValue);
  +end;
  +
  +constructor TDefaultValueAttribute<T>.Create;
  +begin
  +  inherited Create(dvkCalculated);
  +end;
  +
  +function TDefaultValueAttribute<T>.MakeValue(const AValue : T) : TValue;
  +begin
  +  Result := TValue.From<T>(AValue);
  +end;
  +
   { TDefaultsMap }
  -
  -procedure TDefaultsMap.AddValue(DefValAttribClass : TDefaultValueAttributeClass; Value : TValue);
  -begin
  -  FInternalMap.Add(DefValAttribClass, Value);
  -end;
   
   constructor TDefaultsMap.Create;
   begin
  
positive.code:   Result := FInternalMap.ContainsKey(DefValAttribClass);
  end;
  
  { TDefaultValueAttribute }
  
  constructor TDefaultValueAttribute.Create(AValueType : TDefaultValueKind);
  begin
    inherited Create;
  
    FValueType := AValueType;
  end;
  
  function TDefaultValueAttribute.GetClassType : TDefaultValueAttributeClass;
  begin
    Pointer(Result) := PPointer(Self)^;
  end;
  
  { TDefaultValueAttribute<T> }
  
  constructor TDefaultValueAttribute<T>.Create(const AValue : T);
  begin
    inherited Create(dvkData);
  
    FValue := AValue;
  end;
  
  constructor TDefaultValueAttribute<T>.Create;
  begin
    inherited Create(dvkCalculated);
  end;
  
  function TDefaultValueAttribute<T>.CalculateValue : T;
    var
      V : TValue;
  begin
    with TDefaultsMap.StaticInstance do
      if HasValue(Self.GetClassType) then
        V := GetValue(Self.GetClassType)
      else
        V := TValue.Empty;
  
    Result := V.AsType<T>;
  end;
  
  function TDefaultValueAttribute<T>.GetValue : T;
  begin
    Result := Default(T);
  
    case ValueKind of
      dvkData:
        Result := FValue;
      dvkCalculated:
        Result := CalculateValue;
    else
      Assert(False, 'Unhandled default value kind while getting value.');
    end;
  end;
  
  initialization
    TDefaultsMap.GetStaticInstance;
  
  
negative.code:   FreeAndNil(FInternalMap);
  
    inherited Destroy;
  end;
  
  procedure TDefaultsMap.AddValue(DefValAttribClass : TDefaultValueAttributeClass; Value : TValue);
  begin
    FInternalMap.Add(DefValAttribClass, Value);
  end;
  
  class procedure TDefaultsMap.FreeStaticInstance;
  