Problema de checagem de tipos resolvido; mais globais eliminadas; e geracao de grafo...
[toypasc.git] / base.c
blob625c1b1e21127a0b03f97ea05a3980dfb80483af
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4 #include "base.h"
6 Type
7 type_get_from_lexeme(const char *lexeme)
9 if (!strcasecmp (lexeme, "Integer"))
10 return INTEGER;
11 else if (!strcasecmp (lexeme, "Boolean"))
12 return BOOLEAN;
13 else if (!strcasecmp (lexeme, "Char"))
14 return CHAR;
15 else
16 return VOID;
19 char *
20 type_get_lexeme(Type type)
22 switch (type) {
23 case VOID:
24 return "void";
25 case INTEGER:
26 return "Integer";
27 case BOOLEAN:
28 return "Boolean";
29 case CHAR:
30 return "Char";
31 case ERROR:
32 return "Error";
33 default:
34 return "";
38 void
39 value_print(FILE *file, Value *value, Type type)
41 if (type == INTEGER) {
42 fprintf(file, "%d", value->integer);
43 } else if (type == BOOLEAN) {
44 fprintf(file, "%s", value->boolean ? "true" : "false");
45 } else if (type == CHAR) {
46 fprintf(file, "'%c'", value->character);
50 void
51 value_get(Value *value, Type type, void *val)
53 if (value == NULL) {
54 fprintf(stderr, "base.c: value_get: value == NULL\n");
55 exit(1);
58 if (type == INTEGER) {
59 *((int *) val) = value->integer;
60 } else if (type == BOOLEAN) {
61 *((bool *) val) = value->boolean;
62 } else if (type == CHAR) {
63 *((char *) val) = value->character;
64 } else {
65 fprintf(stderr, "base.c: value_get: unknow type\n");
66 exit(1);
70 void
71 value_set(Value *value, Type type, void *val)
73 if (value == NULL) {
74 fprintf(stderr, "base.c: value_set: value == NULL\n");
75 exit(1);
78 if (type == VOID || val == NULL) {
79 value->integer = 0;
80 } else if (type == INTEGER) {
81 value->integer = *((int *) val);
82 } else if (type == BOOLEAN) {
83 value->boolean = *((bool *) val);
84 } else if (type == CHAR) {
85 value->character = *((char *) val);
86 } else {
87 fprintf(stderr, "base.c: value_set: unknow type\n");
88 exit(1);
92 void
93 value_set_from_int(Value *value, int val)
95 value_set(value, INTEGER, VOID(val));
98 void
99 value_set_from_bool(Value *value, bool val)
101 value_set(value, BOOLEAN, VOID(val));
104 void
105 value_set_from_char(Value *value, char val)
107 value_set(value, CHAR, VOID(val));