           undefined
     args
 
+jsCallMethod = (object, methodName, args) ->
+  (jsCall (jsAccess object, methodName), args)
+
 jsAccess = (lhs, name) ->
   {js: jsAccessTranslate, lhs, name}
 

      else
        compiled =
          if operator.symbol of ctx.macros()
            macroCompile ctx, sortedCall
          else
            callSaturatedKnownCompile ctx, sortedCall
        retrieve call, sortedCall


expressionsCompile = (ctx, list) ->
  expressionCompile ctx, expression for expression in list

macroResultCompile = (ctx, value) ->
  assign = yes
  translated = switch typeof value
    when 'boolean', 'number', 'string' then JSON.stringify value
    when 'object'
      kind = Object.prototype.toString.call(value).slice(8, -1)
      switch kind
        when 'Date' then (jsNew 'Date', [+value])
        when 'RegExp' then (jsNew 'RegExp', [value.source])
        else
          #TODO: rest of immutable
          if Immutable.Iterable.isIterable value
            (jsCallMethod 'Immutable', 'List',
              [(jsCallMethod 'JSON', 'parse', [JSON.stringify(value.toJS())])])
          else
            assign = no
            expressionCompile ctx, value
  if assign
    value = tea: toConstrained typeConstant 'Val'
    assignCompile ctx, value, translated
  else
    translated

tupleCompile = (ctx, form) ->
  elems = _terms form
