View on GitHub


A toy programming language.


This header defines the scope structure, which stores all of the variables used within a given block of code.

Scopes are arranged into a linked list of ancestors, each of which is reference counted. When a scope is popped off the end of the chain, every ancestor scope has it’s reference counter reduced by 1 and, if any reach 0, they are freed.

This is also where Toy’s type system lives.

Defined Functions

Toy_Scope* Toy_pushScope(Toy_Scope* scope)

This function creates a new Toy_scope with scope as it’s ancestor, and returns it.

Toy_Scope* Toy_popScope(Toy_Scope* scope)

This function frees the given scope, and returns it’s ancestor.

Toy_Scope* Toy_copyScope(Toy_Scope* original)

This function copies an existing scope, and returns the copy.

This copies the internal dictionaries, so it can be memory intensive.

bool Toy_declareScopeVariable(Toy_Scope* scope, Toy_Literal key, Toy_Literal type)

This function declares a new variable key within scope, giving it the type of type.

This function returns true on success, otherwise it returns failure (such as if the given key already exists).

bool Toy_isDeclaredScopeVariable(Toy_Scope* scope, Toy_Literal key)

This function checks to see if a given variable with the name key has been previously declared.

bool Toy_setScopeVariable(Toy_Scope* scope, Toy_Literal key, Toy_Literal value, bool constCheck)

This function sets an existing variable named key to the value of value. This function fails if constCheck is true and the given key’s type has the constaant flag set. It also fails if the given key doesn’t exist.

This function returns true on success, otherwise it returns false.

bool Toy_getScopeVariable(Toy_Scope* scope, Toy_Literal key, Toy_Literal* value)

This function sets the literal pointed to by value to equal the variable named key.

This function returns true on success, otherwise it returns false.

Toy_Literal Toy_getScopeType(Toy_Scope* scope, Toy_Literal key)

This function returns a new Toy_Literal representing the type of the variable named key.