Files
c-prime/source/function.c

112 lines
2.3 KiB
C
Raw Normal View History

2025-11-17 10:28:09 +01:00
#include "function.h"
struct functionLayout * function_getFunctionByName( struct array * functions, char * functionName ) {
int count = array_length( functions );
for (int i = 0; i < count; ++i)
{
struct functionLayout * currentFunction = array_get( functions, i );
if( strcmp( currentFunction->name, functionName ) == 0 ) {
return currentFunction;
}
}
return NULL;
}
char * function_getReturnTypeBySymbol( char * functionName, int * leftSideIsPointer ) {
struct functionLayout * currentFunction = function_getFunctionByName( allFunctions, functionName );
if( currentFunction != NULL ) {
struct array * functionDeclarationParts = text_split( currentFunction->declarationText, " \t" );
*leftSideIsPointer = variable_isPointer( functionDeclarationParts );
return array_get( functionDeclarationParts, 0 );
} else {
return NULL;
}
}
void cloneMethodToFunction( struct method * currentMethod, struct array * functions, char * newName ) {
struct text * newMethodDecleration = text_new( "" );
text_append( newMethodDecleration, currentMethod->returnType );
text_append( newMethodDecleration, " " );
text_append( newMethodDecleration, newName);
struct array * arguments = array_new();
int argumentCount = array_length( currentMethod->arguments );
for ( int k = 1; k < argumentCount; ++k )
{
char * currentArgument = array_get( currentMethod->arguments, k );
array_add( arguments, currentArgument );
}
struct functionLayout * functionInstance = malloc( sizeof( struct functionLayout ) );
functionInstance->name = newName;
functionInstance->declarationText = newMethodDecleration->value;
functionInstance->bodyOriginal = currentMethod->bodyOriginal;
functionInstance->variables = array_new();
functionInstance->body = method_parse( currentMethod->bodyOriginal, functionInstance->variables, functions );//;
functionInstance->arguments = arguments;
functionInstance->lineNumber = -1;
array_add( functions, functionInstance );
}
int functionExists( struct array * functions, char * functionName ) {
int count = array_length( functions );
for (int i = 0; i < count; ++i)
{
struct functionLayout * currentFunction = array_get( functions, i );
if( strcmp( currentFunction->name, functionName ) == 0 ) {
return 1;
}
}
return -1;
}