#pragma once

#include "lisp.h"
#include <stdbool.h>

struct function
{
	char *name;
	int nargs; // number of arguments

	union {
		struct value (*def0) ();
		struct value (*def1) (struct value);
		struct value (*def2) (struct value, struct value);
		struct value (*def3) (struct value, struct value, struct value);
		void *code_ptr;
		unsigned long code_addr;
	};

	struct function *prev;
};

struct environment
{
	struct function *first;
};

struct variable
{
	char *name;
	int number;
	struct variable *prev;
};

// local environment
struct local
{
	// temps are accessed at ebp - 8 * (num_vars + temp)
	bool temps[ 64 ];
	int num_vars;
	struct variable *first;
};

// First pass populates local
void firstpass (struct value val, struct environment *env, struct local *local);
// Second pass generates code
void secondpass (struct value val, struct environment *env,
                 struct local *local);
void toplevel (struct value val, struct environment *env);
void compile (struct istream *is);
struct function *find_function (struct environment *env, char *name);
