//
//  EXPBlockElement.h
//  dde
//
//  Created by ashley on 04/05/2008.
//  Copyright 2008 __MyCompanyName__. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "EXPNamedElement.h"
@class EXPSymbolTable;

@interface EXPBlockElement : EXPNamedElement {
	id _enclosingBlock;
	EXPSymbolTable *_symbolTable;
	
	BOOL _hasStatements;

	NSMutableArray *_statements;
	NSMutableArray *_initialisers;
	
	NSMutableArray *_functions;
	NSMutableArray *_dimensions;
	NSMutableArray *_variables;
	NSMutableArray *_parameters;
	NSMutableArray *_auxiliaries;
	NSMutableArray *_tables;
	NSMutableArray *_switches;
	NSMutableArray *_outputters;

	NSMutableDictionary *_options;
	NSMutableDictionary *_names;
}

- (void) setHasStatements:(BOOL)hasStatements;
- (BOOL) hasStatements;

- (id) initWithEnclosingBlock:(id)enclosingBlock;
- (id) enclosingBlock;
- (void) setSymbolTable:(id)symbolTable;
- (id) symbolTable;

- (void) setStatements:(id)statements;
- (void) addStatement:(id)statement error:(id)error;
- (id) statements;

- (void) setInitialisers:(id)initialisers;
- (void) addInitialiser:(id)initialiser error:(id)error;
- (id) initialisers;

- (void) setFunctions:(id)functions;
- (void) addFunction:(id)function error:(id)error;
- (id) functions;

- (void) setDimensions:(id)dimensions;
- (void) addDimension:(id)dimension error:(id)error;
- (id) dimensions;

- (void) setVariables:(id)variables;
- (void) addVariable:(id)variable error:(id)error;
- (id) variables;

- (void) setParameters:(id)parameters;
- (void) addParameter:(id)parameter error:(id)error;
- (id) parameters;

- (void) setAuxiliaries:(id)auxiliaries;
- (void) addAuxiliary:(id)auxiliary error:(id)error;
- (id) auxiliaries;

- (void) setTables:(id)tables;
- (void) addTable:(id)table error:(id)error;
- (id) tables;

- (void) setSwitches:(id)switches;
- (void) addSwitch:(id)swtch error:(id)erro;
- (id) switches;
- (int) nSwitches;

- (void) setOutputters:(id)outputters;
- (void) addOutputter:(id)outputter error:(id)error;
- (id) outputters;

- (void) list;

- (id) option:(NSString *)name;
- (void) setOption:(id) value forName:(NSString *)name;
- (id) options;

- (id) names;
- (id) nameForName:(id)name;

//- (BOOL) compile:(EXPVirtualMachine *)machine error:(EXPError *)err;

@end