diff options
author | Andreas Baumann <mail@andreasbaumann.cc> | 2019-01-18 19:55:34 +0100 |
---|---|---|
committer | Andreas Baumann <mail@andreasbaumann.cc> | 2019-01-18 19:55:34 +0100 |
commit | 8186616a41e730aeda49c82309aaafa0134dd03d (patch) | |
tree | 4496911d798313aee5cf5d05109075093dacb0b5 /minie | |
parent | 73c17bbef59ebe9860195fb8de6b24915a538d98 (diff) | |
download | compilertests-8186616a41e730aeda49c82309aaafa0134dd03d.tar.gz compilertests-8186616a41e730aeda49c82309aaafa0134dd03d.tar.bz2 |
added system.getchar
Diffstat (limited to 'minie')
-rw-r--r-- | minie/e2c.c | 13 |
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; |