     if decl
       @body.expressions.unshift new Assign (new Value (new Literal name), [new Access new Literal 'name']), (new Literal "'#{name}'")
     @body.expressions.push lname
-    @body.expressions.unshift(new Value(new Literal "'use strict'")) if @strict
+    @body.expressions.unshift @directives...
     @addBoundFunctions o
 
     call  = Closure.wrap @body

          if node instanceof Value and node.isObject(true)
            exps[i] = @addProperties node, name, o
        child.expressions = exps = flatten exps
  
  checkStrict: ->
    for node,i in @body.expressions when node not instanceof Comment
      return unless node instanceof Value
      return unless /^['"]use strict['"]$/.test node.unwrapAll().value
      @body.expressions.splice i,1
      return @strict = yes

  # Make sure that a constructor is defined for the class, and properly
  # configured.

  isComplex      : -> @hasProperties() or @base.isComplex()
  isAssignable   : -> @hasProperties() or @base.isAssignable()
  isSimpleNumber : -> @base instanceof Literal and SIMPLENUM.test @base.value
  isString       : -> @base instanceof Literal and IS_STRING.test @base.value
  isAtomic       : ->
    for node in @properties.concat @base
      return no if node.soak or node instanceof Call
