Initial commit
This commit is contained in:
112
source/function.c
Normal file
112
source/function.c
Normal file
@@ -0,0 +1,112 @@
|
||||
|
||||
#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;
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user