|
|
|
#include <stdlib.h>
|
|
|
|
|
|
|
|
#include "functions.h"
|
|
|
|
#include "../linked_list/linked_list.h"
|
|
|
|
#include "../linked_list/linked_list.c"
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Creates a function.
|
|
|
|
*
|
|
|
|
* @param char * to the name of the function
|
|
|
|
* @param nodeInfo * to statement list
|
|
|
|
* @return nodeInfo * to head
|
|
|
|
*/
|
|
|
|
node_info *create_function(char *pName, node_info *pStmts) {
|
|
|
|
|
|
|
|
node_info *newNode = malloc(sizeof(node_info));
|
|
|
|
newNode->type = FUNCTION;
|
|
|
|
newNode->name = pName;
|
|
|
|
newNode->_function_body = malloc(sizeof(node_info));
|
|
|
|
newNode->_function_body->next = copy_linked_list(pStmts);
|
|
|
|
_free_linked_list(pStmts);
|
|
|
|
return newNode;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Creates a function
|
|
|
|
*
|
|
|
|
* @param name of the function
|
|
|
|
* @return a node_info pointer to the head of the function
|
|
|
|
*/
|
|
|
|
node_info *create_function_call(char *pName) {
|
|
|
|
|
|
|
|
node_info *newNode = malloc(sizeof(node_info));
|
|
|
|
newNode->type = FUNCTION_CALL;
|
|
|
|
newNode->name = pName;
|
|
|
|
newNode->next = NULL;
|
|
|
|
return newNode;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Creates a linked list inside of a linked list
|
|
|
|
*
|
|
|
|
* @param new_statement_list to be appended to list
|
|
|
|
* @param statement_head of linked list to append to
|
|
|
|
*/
|
|
|
|
node_info *create_compound_statement(node_info *new_statement_list, node_info *statement_head) {
|
|
|
|
|
|
|
|
if(statement_head == NULL) {
|
|
|
|
statement_head = malloc(sizeof(node_info));
|
|
|
|
|
|
|
|
node_info *newNode = malloc(sizeof(node_info));
|
|
|
|
|
|
|
|
statement_head->opperation = 5;
|
|
|
|
statement_head->next = new_statement_list;
|
|
|
|
statement_head->next->next = NULL;
|
|
|
|
statement_head->statement_list = NULL;
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
node_info *p = statement_head; //make a temp of list head, so we can traverse it.
|
|
|
|
//TODO update with doubly linked list
|
|
|
|
while(p->statement_list != NULL)
|
|
|
|
p = p->statement_list;
|
|
|
|
|
|
|
|
p->next = malloc(sizeof(node_info));
|
|
|
|
p->next = new_statement_list;
|
|
|
|
p->next->next = NULL;
|
|
|
|
|
|
|
|
}
|
|
|
|
return statement_head;
|
|
|
|
|
|
|
|
}
|