Skip to content

Commit 129fa83

Browse files
authored
Merge pull request #123 from DDP-Projekt/byte-datatype
Byte Datentyp
2 parents 874b489 + 2614e40 commit 129fa83

File tree

31 files changed

+663
-243
lines changed

31 files changed

+663
-243
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ Der Changelog von DDP. Sortiert nach Release.
1111

1212
## In Entwicklung
1313

14+
- [Neu] Numerische Datentypen werden in Zuweisungen jetzt automatisch in einander umgewandelt
15+
- [Neu] Es gibt jetzt den Byte Datentyp, der eine natürliche Zahl im Bereich 0 bis einschließlich 255 darstellt
1416
- [Neu] Typanpassende Ausdrücke können nun als Referenzen übergeben werden, solange sie nur Typaliase bzw. Typdefinitionen behandeln
1517
- [Fix] Bug im Kompilierer, bei dem VTables für primitive Typen falsch generiert wurden
1618
- [Fix] Bug in Duden/Listen -> Elementweise_Quotient_Kommazahl wurde in der generischen Implementation behoben

lib/runtime/include/DDP/ddptypes.h

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ static_assert(sizeof(void *) == sizeof(uint8_t *), "sizeof(void*) != sizeof(uint
1616
// typedefs of primitive ddp types
1717
typedef int64_t ddpint;
1818
typedef double ddpfloat;
19+
typedef uint8_t ddpbyte;
1920
typedef bool ddpbool;
2021
typedef int32_t ddpchar; // needs to be 32 bit to hold every possible unicode character
2122

@@ -101,6 +102,19 @@ extern void ddp_free_ddpfloatlist(ddpfloatlist *list);
101102
// deep copies list into ret
102103
extern void ddp_deep_copy_ddpfloatlist(ddpfloatlist *ret, ddpfloatlist *list);
103104

105+
typedef struct {
106+
ddpbyte *arr; // the element array
107+
ddpint len; // the length of the array
108+
ddpint cap; // the capacity of the array
109+
} ddpbytelist;
110+
111+
// allocates a ddpbytelist with count elements
112+
extern void ddp_ddpbytelist_from_constants(ddpbytelist *ret, ddpint count);
113+
// free a ddpbytelist
114+
extern void ddp_free_ddpbytelist(ddpbytelist *list);
115+
// deep copies list into ret
116+
extern void ddp_deep_copy_ddpbytelist(ddpbytelist *ret, ddpbytelist *list);
117+
104118
typedef struct {
105119
ddpbool *arr; // the element array
106120
ddpint len; // the length of the array
@@ -192,6 +206,7 @@ const ddpvtable *ddp_get_generic_vtable(const ddpany *any);
192206

193207
typedef ddpint *ddpintref;
194208
typedef ddpfloat *ddpfloatref;
209+
typedef ddpbyte *ddpbyteref;
195210
typedef ddpbool *ddpboolref;
196211
typedef ddpchar *ddpcharref;
197212
typedef ddpstring *ddpstringref;
@@ -202,13 +217,15 @@ typedef void *ddpgenericref;
202217

203218
typedef ddpintlist *ddpintlistref;
204219
typedef ddpfloatlist *ddpfloatlistref;
220+
typedef ddpbytelist *ddpbytelistref;
205221
typedef ddpboollist *ddpboollistref;
206222
typedef ddpcharlist *ddpcharlistref;
207223
typedef ddpstringlist *ddpstringlistref;
208224
typedef ddpanylist *ddpanylistref;
209225
typedef ddpgenericlist *ddpgenericlistref;
210226

211227
#define DDP_INT_FMT "%lld"
228+
#define DDP_BYTE_FMT "%hhu"
212229
#define DDP_FLOAT_FMT "%.16g"
213230
#define DDP_BOOL_FMT "%d"
214231
#define DDP_CHAR_FMT "%d"

lib/runtime/source/DDP/operators.c

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,21 @@ void ddp_float_to_string(ddpstring *ret, ddpfloat f) {
243243
ret->cap = len + 1;
244244
}
245245

246+
void ddp_byte_to_string(ddpstring *ret, ddpbyte i) {
247+
DDP_DBGLOG("_ddp_byte_to_string: %p", ret);
248+
249+
char buffer[5];
250+
int len = sprintf(buffer, DDP_BYTE_FMT, i);
251+
252+
char *string = DDP_ALLOCATE(char, len + 1); // the char array of the string + null-terminator
253+
memcpy(string, buffer, len);
254+
string[len] = '\0';
255+
256+
// set the string fields
257+
ret->str = string;
258+
ret->cap = len + 1;
259+
}
260+
246261
void ddp_bool_to_string(ddpstring *ret, ddpbool b) {
247262
DDP_DBGLOG("_ddp_bool_to_string: %p", ret);
248263

lib/stdlib/Duden/Ausgabe.ddp

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,15 @@ und kann so benutzt werden:
1616
"Schreibe die Kommazahl <p1>" oder
1717
"Schreibe <p1>"
1818

19+
[
20+
Die Funktion Schreibe_Byte schreibt einen gegebenen Byte (p1) in den Standart Output Stream.
21+
]
22+
Die öffentliche Funktion Schreibe_Byte mit dem Parameter p1 vom Typ Byte, gibt nichts zurück,
23+
ist in "libddpstdlib.a" definiert
24+
und kann so benutzt werden:
25+
"Schreibe den Byte <p1>" oder
26+
"Schreibe <p1>"
27+
1928
[
2029
Die Funktion Schreibe_Wahrheitswert schreibt einen gegebenen Wahrheitswert (p1) in den Standart Output Stream.
2130
]
@@ -71,6 +80,16 @@ Und kann so benutzt werden:
7180
"Schreibe die Kommazahl <p1> auf eine Zeile" oder
7281
"Schreibe <p1> auf eine Zeile"
7382

83+
[
84+
Die Funktion SchreibeZeile_Byte schreibt einen gegebenen Byte (p1) gefolgt von einer neuen Zeile in den Standart Output Stream.
85+
]
86+
Die öffentliche Funktion Schreibe_Zeile_Byte mit dem Parameter p1 vom Typ Byte, gibt nichts zurück, macht:
87+
Schreibe p1.
88+
Schreibe '\n'.
89+
Und kann so benutzt werden:
90+
"Schreibe den Byte <p1> auf eine Zeile" oder
91+
"Schreibe <p1> auf eine Zeile"
92+
7493
[
7594
Die Funktion SchreibeZeile_Wahrheitswert schreibt einen gegebenen Wahrheitswert (p1) gefolgt von einer neuen Zeile in den Standart Output Stream.
7695
]
@@ -129,6 +148,20 @@ Und kann so benutzt werden:
129148
"Schreibe die Kommazahlen Liste <liste> mit dem Seperator <seperator>" oder
130149
"Schreibe <liste> mit dem Seperator <seperator>"
131150

151+
[
152+
Die Funktion Schreibe_Byte_Liste_Getrennt schreibt alle Elemente einer gegebenen Byte Liste (liste) getrennt mit einem Text (seperator) in den Standart Output Stream.
153+
]
154+
Die öffentliche Funktion Schreibe_Byte_Liste_Getrennt mit den Parametern liste und seperator vom Typ Byte Liste und Text, gibt nichts zurück, macht:
155+
Wenn die Länge von liste größer als 0 ist, dann:
156+
Wenn die Länge von liste größer als 1 ist, dann:
157+
Für jede Zahl i von 1 bis die Länge von liste minus 1, mache:
158+
Schreibe (liste an der Stelle i).
159+
Schreibe seperator.
160+
Schreibe (liste an der Stelle (die Länge von liste)).
161+
Und kann so benutzt werden:
162+
"Schreibe die Byte Liste <liste> mit dem Seperator <seperator>" oder
163+
"Schreibe <liste> mit dem Seperator <seperator>"
164+
132165
[
133166
Die Funktion Schreibe_Wahrheitswert_Liste_Getrennt schreibt alle Elemente einer gegebenen Wahrheitswert Liste (liste) getrennt mit einem Text (seperator) in den Standart Output Stream.
134167
]
@@ -189,6 +222,15 @@ Und kann so benutzt werden:
189222
"Schreibe die Kommazahlen Liste <p1>" oder
190223
"Schreibe <p1>"
191224

225+
[
226+
Die Funktion Schreibe_Byte_Liste schreibt alle Elemente einer Byte Liste getrennt mit einem Komma in den Standart Output Stream.
227+
]
228+
Die öffentliche Funktion Schreibe_Byte_Liste mit dem Parameter p1 vom Typ Byte Liste, gibt nichts zurück, macht:
229+
Schreibe p1 mit dem Seperator ", ".
230+
Und kann so benutzt werden:
231+
"Schreibe die Byte Liste <p1>" oder
232+
"Schreibe <p1>"
233+
192234
[
193235
Die Funktion Schreibe_Wahrheitswert_Liste schreibt alle Elemente einer Wahrheitswert Liste getrennt mit einem Komma in den Standart Output Stream.
194236
]
@@ -236,6 +278,16 @@ Und kann so benutzt werden:
236278
"Schreibe die Kommazahlen Liste <p1> auf eine Zeile" oder
237279
"Schreibe <p1> auf eine Zeile"
238280

281+
[
282+
Die Funktion Schreibe_Byte_Liste schreibt alle Elemente einer Byte Liste getrennt mit einem Komma und gefolgt von einer neuen Zeile in den Standart Output Stream.
283+
]
284+
Die öffentliche Funktion Schreibe_Byte_Liste_Zeile mit dem Parameter p1 vom Typ Byte Liste, gibt nichts zurück, macht:
285+
Schreibe p1 mit dem Seperator ", ".
286+
Schreibe '\n'.
287+
Und kann so benutzt werden:
288+
"Schreibe die Byte Liste <p1> auf eine Zeile" oder
289+
"Schreibe <p1> auf eine Zeile"
290+
239291
[
240292
Die Funktion Schreibe_Wahrheitswert_Liste schreibt alle Elemente einer Wahrheitswert Liste getrennt mit einem Komma und gefolgt von einer neuen Zeile in den Standart Output Stream.
241293
]

lib/stdlib/source/DDP/io.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,10 @@ void Schreibe_Kommazahl(ddpfloat p1) {
3737
}
3838
}
3939

40+
void Schreibe_Byte(ddpbyte p1) {
41+
printf(DDP_BYTE_FMT, p1);
42+
}
43+
4044
void Schreibe_Wahrheitswert(ddpbool p1) {
4145
printf(p1 ? "wahr" : "falsch");
4246
}

src/ast/statements.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ type (
4444
Range token.Range
4545
Tok token.Token
4646
Var Assigneable // the variable to assign to
47+
VarType ddptypes.Type // filled in by the typechecker, to keep information about typedefs
4748
Rhs Expression // literal assign value
4849
RhsType ddptypes.Type // filled in by the typechecker, to keep information about typedefs
4950
}

0 commit comments

Comments
 (0)