SFILE				read source file

PARSER				parse & compile SFILE
	SFILE --> CODE
		  CLASS_INTER

INTER
	eval(SFILE)		parse, compile, and evaluate input
				(uses PARSER, ENGINE)

CODE				interpreter meta instructions
	ARRAY{$OP}

ENGINE				stack, execute instructions
	eval(CODE)
	enter(ROUTINE)		execute interpreted routine, called recursively

OP				opcodes
	OP_CALL_DYN		dynamically dispatched call of interpreted or compiled code
	OP_CALL_SELF		statically dispatched call, interpreted code only
	OP_CALL_VOID_COMPILED/INTERPRETED	newwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww

	OP_GET_LOCAL		-1 is self, 0 is first argument, etc, followed by locals

MG_CLASS			
	call(ENGINE,OP_CALL_DYN)	
				dynamically dispatched call
				typecase self = ENGINE.get(OP.argno)
				when CALL_INTER then 
					self.call(...),	use OP.feature as cache
				when INT ...
					calling compiled code, use OP.cache
					raise #ERROR_CALL if no match
	call_void				newwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
	locate(SIG):INT
	init

CLASS_INTER			interpreted class
	attrs,shareds		data
	pub_feat, priv_feat: FMAP{IDENT_SIG,FEATURE}
				features of this class

FEATURE
	ROUTINE
	CONSTANT
	ATTR_R/W
	SHARED_R/W

IDENT_SIG			signatures for interpreted routines

SIG				signatures for compiled routines

TYPE				class name manager

SYSTEM


---------------------------------------------
proposed changes:

0)
get class_id of compiled classes from tags.h & SYS::str_for_tp

1)
call_dyn		dynamically dispatched calls (compiled + interpreted)
call_void		XXX::foo, #XXX (compiled + interpreted)
call_self		statically dispatched calls (interpreted only)

2)
CLASS_INTER -->
	CLASS_INTER	definition: delete attrs, reintroduce register
	CLASS_INST	instance

class CLASS_INST is
   readonly def: CLASS_INTER;		-- class definition
   private attrs: ARRAY{$OB};		-- attribute values
   set_attr/get_attr

   declare_attr is
      -- modify def and re-register --> new instances are changed
      -- modify attrs (size) --> only this instance is changed!
      -- alternative:
		include from ARRAY{$OB} (faster)
		declare_attr returns instance of modified class
		[ how handle in load? ]
   end;
end;


3)
eval OP_CALL_DYN: protect statement outside loop!
