summaryrefslogtreecommitdiff
path: root/minie
diff options
context:
space:
mode:
authorAndreas Baumann <mail@andreasbaumann.cc>2019-01-18 19:55:34 +0100
committerAndreas Baumann <mail@andreasbaumann.cc>2019-01-18 19:55:34 +0100
commit8186616a41e730aeda49c82309aaafa0134dd03d (patch)
tree4496911d798313aee5cf5d05109075093dacb0b5 /minie
parent73c17bbef59ebe9860195fb8de6b24915a538d98 (diff)
downloadcompilertests-8186616a41e730aeda49c82309aaafa0134dd03d.tar.gz
compilertests-8186616a41e730aeda49c82309aaafa0134dd03d.tar.bz2
added system.getchar
Diffstat (limited to 'minie')
-rw-r--r--minie/e2c.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/minie/e2c.c b/minie/e2c.c
index c6c4bfa..ad4b03c 100644
--- a/minie/e2c.c
+++ b/minie/e2c.c
@@ -681,18 +681,16 @@ static void register_internal_functions( void )
/* register compiler-internal functions */
type.type = TYPE_FUNCTION;
type.details.function.len = 1;
- type.details.function.params[0] = (Type *)&type.details.function.data;
+ type.details.function.params[0] = (Type *)type.details.function.data;
type.details.function.params[0]->type = TYPE_ARRAY;
type.details.function.return_value = (Type *)( type.details.function.data + sizeof( Type ) );
type.details.function.return_value->type = TYPE_INTEGER;
- printf( "%p %p %p %x\n", (void *)&type.details.function.data, (void *)type.details.function.params[0],
- (void *)type.details.function.return_value, sizeof( Type ) );
type.details.function.internal = 1;
insert_symbol( type, "length" );
type.type = TYPE_FUNCTION;
type.details.function.len = 1;
- type.details.function.params[0] = (Type *)&type.details.function.data;
+ type.details.function.params[0] = (Type *)type.details.function.data;
type.details.function.params[0]->type = TYPE_INTEGER;
type.details.function.return_value = (Type *)( type.details.function.data + sizeof( Type ) );
type.details.function.return_value->type = TYPE_CHAR;
@@ -702,6 +700,8 @@ static void register_internal_functions( void )
/* register functions in module system, should be outside in the stage-1 compiler */
type.type = TYPE_FUNCTION;
type.details.function.len = 0;
+ type.details.function.return_value = (Type *)type.details.function.data;
+ type.details.function.return_value->type = TYPE_CHAR;
type.details.function.internal = 1;
insert_symbol( type, "system.readchar" );
}
@@ -995,6 +995,11 @@ static void parameterList( void )
}
sym = getSym( );
if( sym == S_rparen ) {
+ if( strcmp( funcName, "system.readchar" ) == 0 ) {
+ emit( "getc( )" );
+ sym = getSym( );
+ return;
+ }
emit( "%s( )", funcName );
sym = getSym( );
return;