class Hello
	new: (@test, @world) =>
		print "creating object.."
	hello: =>
		print @test, @world
	__tostring: => "hello world"

x = Hello 1,2
x\hello()

print x

class Simple
	cool: => print "cool"

class Yikes extends Simple
	new: => print "created hello"

x = Yikes()
x\cool()


class Hi
	new: (arg) =>
		print "init arg", arg

	cool: (num) =>
		print "num", num


class Simple extends Hi
	new: => super "man"
	cool: => super 120302

x = Simple()
x\cool()

print x.__class == Simple


class Okay
	-- what is going on
	something: 20323
	-- yeaha


class Biggie extends Okay
	something: =>
		super 1,2,3,4
		super.something another_self, 1,2,3,4
		assert super == Okay


class Yeah
	okay: =>
		super\something 1,2,3,4


class What
	something: => print "val:", @val

class Hello extends What
	val: 2323
	something: => super\something

with Hello!
	x = \something!
	print x
	x!

class CoolSuper
	hi: =>
		super(1,2,3,4) 1,2,3,4
		super.something 1,2,3,4
		_ = super.something(1,2,3,4).world
		super\yeah"world".okay hi, hi, hi
		_ = something.super
		_ = super.super.super.super
		_ = super\hello
		nil


-- selfing
x = @hello
x = @@hello

@hello "world"
@@hello "world"

@@one @@two(4,5) @three, @four

xx = (@hello, @@world, cool) ->


-- class properties
class ClassMan
	@yeah: 343
	blue: =>
	@hello: 3434, @world: 23423
	green: =>
	@red: =>


x = @
y = @@

@ something

@@ something

@ = @ + @ / @

@ = 343
@.hello 2,3,4

_ = hello[@].world


class Whacko
	_ = @hello
	if something
		print "hello world"

	hello = "world"
	@another = "day"

	print "yeah" if something -- this is briken


print "hello"

yyy = ->
	class Cool
		_ = nil


--

class a.b.c.D
	_ = nil


class a.b["hello"]
	_ = nil

class (-> require "moon")!.Something extends Hello.World
	_ = nil

--

a = class
b = class Something
c = class Something extends Hello
d = class extends World

print (class WhatsUp).__name

--

global ^
class Something
	_ = nil


--

-- hoisting
class Something
	val = 23
	{:insert} = table
	new: => print insert, val -- prints nil 23

--

class X
	new: hi


--

class Cool extends Thing
	dang: =>
		{
			hello: -> super!
			world: -> super.one
		}

-- 

class Whack extends Thing
	dang: do_something =>
		super!

---

class Wowha extends Thing
	@butt: ->
		super!
		_ = super.hello
		super\hello!
		super\hello


	@zone: cool {
		->
			super!
			_ = super.hello
			super\hello!
			super\hello
	}

do
	class Test
		new: => @@if = true
		@do: => 1
		test: => @@if and @@do!
	test = Test!
	test\test!

do
	class Test
		new: => @if = true
		do: => 1
		test: => @if and @do!
	test = Test!
	test\test!

class extends lapis.Application
	"/": => json: { status: true }

class A using B, C, D, {value: 123}

class Example
	@field1 = 1
	@field2 = @field1 + 1

class Foo
	new: (x) => @x = x
	<mul>: (y) => @x * y
	<"dsd-dsd">: 123
	:add
	:<add>

nil