
Blitz Basic internals.

* Language

Declarations:

4 types: Newtype, Function, Var, Array

Forward referencing for NewTypes and Functions is allowed.

Array declarations are through Dim statement.

Var declarations are through Var statement or params.

Only Var declarations may appear in functions.


* Runtime

Newtype objects in BB look like this:

struct BBObj{
	BBObj *curr;
	int ref_cnt;
	BBObj *next,BBObj *prev;
};

When an object is 'used' (for field access or in an expression), it's
curr field should be fetched.

When an object is assigned, prev obj refcnt is decremented, new refcnt
is incremented.

The curr field is 0 if the object has been deleted.

All objects exist in a type list:

struct BBType{
	int obj_size
	BBObj usedList,freeList;
};

An object stays in it's type list as long as it's ref_cnt is >0.
