start:
	say "In CSML you have two types of memory !"

	goto local_variable

local_variable:
	say "You have the local variable"

	say "Local variable can be express as 'do my_value as my_var'"
	say "the variable 'identifier will be accesible only inside the current step'"

	do my_var = 42

	say "This is the value of my_var: {{ my_var }}"

	say "You can assign anything to a variable"

	do {} as my_obj
	do [] as my_vec
	do "" as my_str
	do 42.42 as my_float
	do 42 as my_int
	do true as my_boolean
	do NULL as my_null

	do my_var = {}

	do my_var.insert("my_obj", my_obj)
	do my_var.insert("my_vec", my_vec)
	do my_var.insert("my_str", my_str)
	do my_var.insert("my_float", my_float)
	do my_var.insert("my_int", my_int)
	do my_var.insert("my_boolean", my_boolean)
	do my_var.insert("my_null", my_null)

	foreach (key) in my_var.keys() {
		do result = "{{key}}: {{ my_var[key]}}"

		say result
	}

	say "You can also assign operation to variable"

	do 42 + "42" as my_operation

	say "my_operation: {{my_operation}}"

	goto global_variable

global_variable:
	say "And you have the global variable"

	say "Let's just see that I know what I'm talking about"
	say "If I want to print the value of my_var, assignated at lines 12, what would be the output ?"

	say "my_var: {{my_var}} of type {{my_var.type_of()}}"
	say "Yes it is null, this memory doens't exist anymore !"

	say "Now if you want to assign a variable a value that will exist during the whole lifetime of the process"
	say "You have to use the 'remember' keyword"

	remember my_var = 42

	say "The value of my_var is {{my_var}}"

	goto final

final:
	say "Now that I'm into a new flow"
	say "I can still access the memory of my_var"

	say "The value of my_var is ..."

	say "{{my_var}}"

	say "Hoora, now you know how the memory in CSML works !"

	goto end
