|
Lhogho
0.0.027
|
Data Structures | |
| struct | stats_t |
| statistics structure More... | |
Defines | |
| #define | EXE_EXT "" |
| default extension for executable files | |
| #define | EXE_EXT2 ".run" |
| alternative extension for executable files used to avoid overwriting the source file | |
Functions | |
| void | init_options () |
| initializes the Options module | |
| void | finit_options () |
| finalizes the Options module | |
| void | set_options (int argc, char *argv[]) |
| sets options from command-line parameters | |
| void | output_compiler_name (int show_help) |
| outputs the name of the compier | |
| void | dump_statistics () |
| dump statistics | |
Variables | |
| int | option_turned_on [OPTIONS_COUNT] |
| Values for options. | |
| int | option_dump_ast |
| int | option_make_executable |
| int | option_make_executable_compiler |
| int | option_case_insensitive |
| int | option_traditional |
| int | option_memory_statistics |
| int | option_detailed_memory_statistics |
| int | option_variables |
| int | option_user_variables |
| int | option_assembler |
| int | option_runtime |
| char * | option_compiler_filename |
| ASCII name of current compiler. | |
| chars_t | option_compiler_filename_chars |
| name of current compiler | |
| char * | option_source_filename |
| ASCII name of current source file. | |
| chars_t | option_source_filename_chars |
| name of current source file | |
| int | standalone |
| indicate using of standalone compiler (i.e. -x option) | |
| atom_t | standalone_arguments |
| list of command-line arguments | |
| int | stats_allocs |
| statistics for usage of ALLOC and DEALLOC | |
| stats_t | stats [MAX_ID] |
| statistics for each type of atoms | |
Names of compiler options | |
| #define | OPTION_HELP option_turned_on[0] |
| option "-h" and "--help" print this help message | |
| #define | OPTION_MAKE_EXECUTABLE option_turned_on[1] |
| option "-x" and "--executable" create executable file | |
| #define | OPTION_MAKE_EXECUTABLE_COMPILER option_turned_on[2] |
| option "-xc" and "--executable-compiler" generate executable compiler | |
| #define | OPTION_CASE_INSENSITIVE option_turned_on[3] |
| option "-ci" and "--case-insensitive" switch to case-insensitive mode | |
| #define | OPTION_TRADITIONAL option_turned_on[4] |
| option "-t" and "--traditional" switch to traditional mode | |
| #define | OPTION_ASSEMBLER option_turned_on[5] |
| option "-Za" and "--Zassembler" dump assembler code | |
| #define | OPTION_MEMORY_STATISTICS option_turned_on[6] |
| option "-Zm" and "--Zmemory" dump short memory statistics | |
| #define | OPTION_DETAILED_MEMORY_STATISTICS option_turned_on[7] |
| option "-Zmad" and "--Zmemory-all-details" dump detailed memory statistics | |
| #define | OPTION_RUNTIME option_turned_on[8] |
| option "-Zrt" and "--Zrun-time" dump evaluations at runtime | |
| #define | OPTION_DUMP_AST option_turned_on[9] |
| option "-Zt" and "--Ztree" dump abstract syntax trees | |
| #define | OPTION_VARIABLES option_turned_on[10] |
| option "-Zv" and "--Zvariables" dump created variables | |
| #define | OPTION_USER_VARIABLES option_turned_on[11] |
| option "-Zuv" and "--Zuser-variables" dump user variables | |
| #define | FIRST_BASIC_OPTION 0 |
| #define | LAST_BASIC_OPTION 4 |
| #define | FIRST_ADVANCED_OPTION 5 |
| #define | LAST_ADVANCED_OPTION 11 |
| #define | OPTIONS_COUNT (LAST_ADVANCED_OPTION-FIRST_BASIC_OPTION+1) |
| #define | OPTIONS_SUPPORTED_COUNT OPTIONS_COUNT |
Memory tracing | |
| #define | ALLOC(size) alloc(size) |
| allocate memory | |
| #define | REALLOC(ptr, size) |
| reallocate memory | |
| #define | XALLOC(size) xalloc(size) |
| allocate executable memory | |
| #define | DEALLOC(ptr) dealloc(ptr) |
| deallocate memory | |
| void * | alloc (int size) |
| allocates dynamic memory | |
| void * | reallocate (void *ptr, int size) |
| void * | xalloc (int size) |
| void | dealloc (void *ptr) |
| deallocates dynamic memory | |
| #define OPTION_HELP option_turned_on[0] |
| #define OPTION_MAKE_EXECUTABLE option_turned_on[1] |
| #define OPTION_MAKE_EXECUTABLE_COMPILER option_turned_on[2] |
| #define OPTION_CASE_INSENSITIVE option_turned_on[3] |
| #define OPTION_TRADITIONAL option_turned_on[4] |
| #define OPTION_ASSEMBLER option_turned_on[5] |
| #define OPTION_MEMORY_STATISTICS option_turned_on[6] |
| #define OPTION_RUNTIME option_turned_on[8] |
| #define OPTION_DUMP_AST option_turned_on[9] |
| #define OPTION_VARIABLES option_turned_on[10] |
| #define OPTION_USER_VARIABLES option_turned_on[11] |
| #define FIRST_BASIC_OPTION 0 |
| #define LAST_BASIC_OPTION 4 |
| #define FIRST_ADVANCED_OPTION 5 |
| #define LAST_ADVANCED_OPTION 11 |
| #define OPTIONS_COUNT (LAST_ADVANCED_OPTION-FIRST_BASIC_OPTION+1) |
| #define OPTIONS_SUPPORTED_COUNT OPTIONS_COUNT |
| #define EXE_EXT "" |
| #define EXE_EXT2 ".run" |
| #define REALLOC | ( | ptr, | |
| size | |||
| ) |
reallocate(ptr, \ size)
| void init_options | ( | ) |
Initalizes options with their default values.
| void finit_options | ( | ) |
Dumps statistics if -Zm option was switched on
{
int j;
for( j = 0; j<4; j++ )
{
DEUSE(option_texts[j][i]);
}
}
DEUSE( standalone_arguments );
DEALLOC( option_compiler_filename );
DEALLOC( option_compiler_filename_chars );
if( option_source_filename_chars )
{
DEALLOC( option_source_filename_chars );
}
#ifdef ADVANCED
int stats_used=0;
if( OPTION_DETAILED_MEMORY_STATISTICS )
{
dump_statistics();
}
if( OPTION_MEMORY_STATISTICS )
{
for( i=MIN_ID; i<MAX_ID; i++ )
stats_used += stats[i].allocs-stats[i].deallocs;
PRINT("{MEM#%d:%d}\n",stats_used,stats_allocs);
}
#endif //ADVANCED
}
| void set_options | ( | int | argc, |
| char * | argv[] | ||
| ) |
| argc | argc parameter from the main function |
| argv | argv parameter from the main function |
Reads options from the argv array and sets appropriate parameters.
{ // standalone mode -- collect arguments in a list
for( argc--,argv++; argc--; argv++ )
{
atom_t word = decode_word( (unsigned char*)*argv, strlen(*argv), 0 );
append( word, &standalone_arguments, &last );
}
}
else
{ // compiler mode -- process options till file name and then collect arguments
for( argc--,argv++; argc--; argv++ )
{
if( option_source_filename_chars )
{
atom_t word = decode_word( (unsigned char*)*argv, strlen(*argv), 0 );
append ( word, &standalone_arguments, &last );
}
else
{
int found = 0;
chars_t option = UNFILENAME(*argv);
int len = STRLEN(option);
int i;
for( i=0; i<OPTIONS_SUPPORTED_COUNT; i++ )
{
int j;
for( j=0; j<4; j++ )
{
if( len==LENGTH(option_texts[j][i]) )
{
if( same_strings(1,option,STRING(option_texts[j][i]),len) )
{
found = 1;
option_turned_on[i] = 1;
break;
}
}
}
}
DEALLOC( option );
if( OPTION_HELP )
{
output_compiler_name( 1 );
exit(0);
}
if( found ) continue;
// check for invalid option or second file name
if( **argv=='-' )
{
chars_t name = UNFILENAME(*argv); // has ALLOC inside
atom_t word = new_word( name, UNKNOWN );
atom_t err = new_error( ERROR_UNKNOWN_OPTION, word );
dumpln( err );
DEUSE( word );
DEALLOC( name );
continue;
}
// set file name
option_source_filename = *argv;
option_source_filename_chars = UNFILENAME(*argv);
}
} // for
}
}
| void output_compiler_name | ( | int | show_help | ) |
| show_help | if set also output commandline options |
Outputs the name of the compiler, its language, its platform and build date. If show_help is not zero, output a list of command-line options
{
dump( CAR(t) ); t = CDR(t); // Usage
int i;
for( i=0; i<OPTIONS_COUNT; i++ )
{
int len;
if( i==FIRST_ADVANCED_OPTION )
{
#ifndef ADVANCED
t = CDR(t);
#endif
dumpln( CAR(t) ); t = CDR(t); // options
}
// show short version
len = LENGTH(option_texts[0][i]);
outter( TEXT(" "), -1 );
dump( option_texts[0][i] );
for( ; len<6; len++ ) outter( TEXT(" "), -1 );
// show long version
len = LENGTH(option_texts[2][i]);
if( len )
{
dump( option_texts[2][i] );
}
else
{
len = LENGTH(option_texts[1][i]);
dump( option_texts[1][i] );
}
for( ; len<30; len++ ) outter( TEXT(" "), -1 );
// show description
dumpln( option_texts[3][i] );
}
}
DEUSE( texts );
DEUSE( help_texts );
}
| void dump_statistics | ( | ) |
Dumps statistics of memory usage
{
stats_used += stats[i].allocs-stats[i].deallocs;
if( stats[i].allocs )
{
PRINT(" %10s %8d %8d %8d %8d\n",
id_names[i],
stats[i].max,
stats[i].allocs,
stats[i].deallocs,
stats[i].allocs-stats[i].deallocs );
}
}
PRINT(" %39s\n","----------------");
PRINT(" %30s %8d\n","Used",stats_used);
PRINT(" %30s %8d\n","Free",stats_free);
PRINT(" %39s\n","----------------");
PRINT(" %30s %8d\n","OS alloc balance",stats_allocs);
}
#endif
| size | size of memory (in bytes) to allocate |
This function is used to allocate memory. Depending on the existence of DEBUG_HEAP symbol it either just allocates memory or allocates and dump on the screen allocation data.
{ dumpln(error_texts[ERROR_OUT_OF_MEM]); exit(1); }
#ifdef ADVANCED
stats_allocs++;
#endif
return buffer;
}
void* reallocate(void * mem, int size)
| void* reallocate | ( | void * | ptr, |
| int | size | ||
| ) |
{ dumpln(error_texts[ERROR_OUT_OF_MEM]); exit(1); }
return buffer;
}
void* xalloc( int size )
{ dumpln(error_texts[ERROR_OUT_OF_MEM]); exit(1); }
#ifdef ADVANCED
stats_allocs++;
#endif
return buffer;
}
void dealloc( void* ptr )
{
| ptr | pointer to the memory to deallocate |
This function is used to deallocate memory. Depending on the existence of DEBUG_HEAP symbol it either just deallocates memory or deallocates and dumps on the screen deallocation data.
| int option_dump_ast |
| int option_variables |
| int option_assembler |
| int option_runtime |
| char* option_compiler_filename |
| char* option_source_filename |
| int standalone |
| int stats_allocs |