forked from RohacekD/IFJ2015
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathvariable.c
52 lines (50 loc) · 1.32 KB
/
variable.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include "variable.h"
#include "error.h"
#include <stdlib.h>
#include <stdio.h>
void variableCreate(tVariablePtr* var, tVariableType type) {
//alokace promenne
tVariablePtr v = (tVariablePtr) malloc(sizeof(struct tVariableStr));
if(!v){
FatalError(99, ERR_MESSAGES[ERR_ALLOC]);
}
//urceni typu
v->type = type;
//pokud je stringova alokujeme pamet pro string
if(type==VAR_TYPE_STRING) {
if(strInit(&v->data.stringVal)) //str init vraci 0 pri uspechu protoze str.c psal idiot
FatalError(99, ERR_MESSAGES[ERR_ALLOC]);
}
//kazda promenna je na zacatku neinicializovana
v->init = false;
*var = v;
}
void variableDelete(void* var) {
//pokud je promenna stringova musime dealokovat string
if (((tVariablePtr)var)->type == VAR_TYPE_STRING) {
strFree(&((tVariablePtr)var)->data.stringVal);
}
//smazeme samotnou promennou
free(((tVariablePtr)var));
//debug info
// printf("Mazu promennou %d\n",((tVariablePtr)var)->data.intVal);
}
tVariableType tTabSymToVarNotatation(tTabSymVarDataType type) {
switch (type) {
case TAB_SYM_VAR_INTEGER:
return VAR_TYPE_INT;
break;
case TAB_SYM_VAR_DOUBLE:
return VAR_TYPE_DOUBLE;
break;
case TAB_SYM_VAR_STRING:
return VAR_TYPE_STRING;
break;
case TAB_SYM_VAR_BOOLEAN:
return VAR_TYPE_BOOL;
break;
default:
break;
}
return 42;
}