 # for use with AMD.
 # goes through each value on the export object and
 # if it is a contracted value sets the server name.
-# Similar to "exports" but does the work after values 
+# Similar to "exports" but does the work after values
 # have been added to the object.
 # root.setExported :: ({}, Str) -> {}
 root.setExported = (exportObj, moduleName) ->

    parents.push this

    if not obj instanceof Object
      blame pos, neg, this, obj, parentKs 

    if options.extensible is true and not Object.isExtensible(obj)
      blame pos, neg, "[extensible object]", "[non-extensible object]", parents  

    if options.extensible is false and Object.isExtensible(obj)
      blame pos, neg, "[non-extensible]", "[extensible object]", parents  

    if options.sealed is true and not Object.isSealed(obj)
      blame pos, neg, "[sealed object]", "[non-sealed object]", parents  

    if options.sealed is false and Object.isSealed(obj)
      blame pos, neg, "[non-sealed object]", "[sealed object]", parents  

    if options.frozen is true and not Object.isFrozen(obj)
      blame pos, neg, "[frozen object]", "[non-frozen object]", parents  

    if options.frozen is false and Object.isFrozen(obj)
      blame pos, neg, "[non-frozen object]", "[frozen object]", parents  

    # do some cleaning of the object contract...
    # in particular wrap all object contract in a prop descriptor like object


enabled = true

# contract_orig_map ::
#   set: (Any, OrigMap) -> Undefined
#   get: (Any) -> OrigMap
contract_orig_map = new WeakMap();
