package main

import "core:fmt"

/*
some comments in odin can
 /* be nested! */
and it should still work
*/

Data :: struct {
	c: complex64,
	q: quaternion256,
}

/* some other comment */

E :: enum(u32) {
	First,
	Second,
	Third,
}

E_Set :: distinct bit_set[E; u32]

foo_int :: proc(x: int) -> bool {
	return false
}

foo_float :: proc(f: f32) -> bool {
	return true
}

foo_en :: proc(e: E) -> bool {
	return e == .Third
}

foo :: proc{foo_int, foo_float, foo_en}

SOME_CONSTANT :: #config(COMMAND_LINE_ARG, 3)
main :: proc() {
	loc := #caller_location

	m: map[string]struct{}
	da: [dynamic]f64

	len(da)
	cap(da)

	foo(32)

	#panic("oof")

	y := &da
	y^ = make([dynamic]f64, 100)
	defer delete(da)

	x := []int{1, 2, 3, 4}
	for v, i in x {
		fmt.println(i, "-", v)
	}

	z := E_Set{.First, .Second}
	z2 := E_Set{.Third}

	assert(z | z2 == {.First, .Second, .Third})
}

@(test)
a_test_proc :: proc(t: ^testing.T) {
	value: int
	value = 3
	testing.errnof("a format: %s", value)
}

@(disable = LOG_LEVEL >= .Debug)
debug_thing :: proc(x, y, z: int) {
	fmt.println(x, y, z)
}

@private
program := `
foo :: proc() {
	fmt.println("hellope!")
}
`

@(private = "file")
pkg: int