         # aSerialized and src[v] isnt vAttr.value:
         #  the parametric type object(options) do not need the defaults value.
         # but the mergeOptions need all attriubtes!!
-        if !isFunction(vAttr.assign) or !vAttr.assign(dest, src, v)
-          dest[v] = src[v]
+        if !isFunction(vAttr.assign) or !vAttr.assign(dest, src, vValue, v)
+          dest[v] = vValue
     return dest
   isOriginal: (aObject)->
     result = true

###
module.exports = class AbstractTypeAttributes
  merge: (attrs)->
    for k,v of attrs
      @[k] = v
    return
  _initialize: (aOptions)-> @merge(aOptions)
  initialize: (aOptions)->

      continue if v in aExclude
      #continue if aSerialized and (k[0] is '$')
      vAttr = @[k]
      vValue = src[v] || src[k]
      if k is 'name'
        dest.name = vValue if vValue and vValue isnt dest.name
      else if vValue isnt undefined
        if @Type and vAttr.type? and vValue? and vValue isnt vAttr.value
          vType = @Type vAttr.type
          if vType and not vType.isValid vValue
            k = "assign attribute '#{v}' error"
            if vType.errors.length
              k += ": the value #{vValue}"
              for v in vType.errors
                k += "\n #{v.name}: #{v.message}"
              dest.errors = vType.errors if dest.errors
