# comment before a ...

###
... block comment.
###


  # comment
func = ->
# comment
  false
  false   # comment
  false

# comment
  true

switch 'string'
  # comment
  when false then something()
  # comment
  when null
    somethingElse()

->
  code()
  # comment

ok func()

func
func
# Line3

obj = {
# comment
  # comment
    # comment
  one: 1
# comment
  two: 2
    # comment
}

result = if true # comment
  false

ok not result

result = if false
  false
else # comment
  45

ok result is 45


test =
  'test ' +
  'test ' + # comment
  'test'

ok test is 'test test test'

###
  This is a here-comment.
  Kind of like a heredoc.
###

func = ->
  ###
  Another block comment.
  ###
  code

func = ->
  one = ->
    two = ->
      three = ->
  ###
  block.
  ###
  four = ->

fn1 = ->
  oneLevel = null
###
This isn't fine.
###

ok ok

obj = {
  a: 'b'
  ###
  comment
  ###
  c: 'd'
}

# Spaced comments in if / elses.
result = if false
  1

# comment
else if false
  2

# comment
else
  3

ok result is 3


result = switch 'z'
  when 'z' then 7
# comment
ok result is 7


# Trailing-line comment before an outdent.
func = ->
  if true
    true # comment
  7

ok func() is 7


# Trailing herecomment in a function.
fn = ->
  code
  ###
  debug code commented
  ###

fn2 = ->


class A
  b: ->

  ###
  Comment
  ###
  c: ->

ok A.prototype.c instanceof Function

class A
  ###
  Comment
  ###
  b: ->
  c: ->

ok A.prototype.b instanceof Function
