         return @list()
       else #atom
         return @atom()
-    else if @expects '(', false #calling function
+    else if @expects '(', false #calling function or special form
       return @call_fun()
     else #atom
       return @atom()


class CallFun
  constructor: (@funname, @args) ->

class Parser
  constructor: ->

    @forwards '('
    args = []
    funname = @fun_name()

    isSP = SpecialForm.NAMES.indexOf(funname) != -1
    until @expects ')', false
      @skip()
      args.push if isSP then @list() else @expr()

    @forwards ')'

    klass = if isSP then SpecialForm else CallFun
    return new klass(funname, args)

  expr: ->
    if @expects "'", false #value
