You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
List<VariableDeclaration> localVariables =List.of(newVariableDeclaration[] {localVarYDecl}); // Liste der lokalen Variablen
173
171
174
172
// Function erstellen
175
-
Function func1 =newFunction("func1", "func1", body, parameterArguments, localVariables); // Funktion erzeugen
176
-
builder.addFunction(func1); // Function dem CBuilder übergeben
173
+
Function func1 =newFunction("func1", body, parameterArguments, localVariables);// Funktion erzeugen
174
+
builder.addFunction(func1); // Function dem CBuilder übergeben
177
175
```
178
176
179
177
```java
@@ -326,28 +324,29 @@ Beim Methodenaufruf darf `self` aber nicht in der Parameterliste vorkommen. (Sta
326
324
Methoden, die nicht umgesetzt werden müssen, haben kein `self`.)
327
325
328
326
Methoden haben zwei Methodennamen. Der Parameter `funcName` im `Function`-Konstruktor
329
-
entspricht dem Funktionsnamen im Python-Code. Über diesen Namen werden die Methoden im
330
-
jeweiligen Scope aufgelöst. Da Methoden vom CBuilder als normale C-Funktion im globalen
331
-
Scope angelegt werden, müssen sie noch einen im gesamten Programm eindeutigen (internen)
332
-
Namen bekommen, der über den Parameter `uniqueName` im `Function`-Konstruktor festgelegt
333
-
wird. (Dennoch können Methoden nicht als normale Funktionen aufgerufen werden, sondern immer
334
-
nur über den Kontext ihrer Klasse.) Beim Überschreiben von Methoden muss der `funcName`
335
-
entsprechend identisch sein (und `uniqueName` muss variieren).
327
+
entspricht dem Funktions-/Methodennamen im Python-Code. Über diesen Namen werden die
328
+
Methoden im jeweiligen Scope aufgelöst. Da Methoden vom CBuilder als normale C-Funktion im
329
+
globalen Scope angelegt werden, müssen sie noch einen im gesamten Programm eindeutigen
330
+
(internen) Namen bekommen, der mit der Methode `Function#createUniqueCName()` festgelegt
331
+
wird - diese Methode wird automatisch vom Konstruktor von `MPyClass` aufgerufen. (Dennoch
332
+
können Methoden nicht als normale Funktionen aufgerufen werden, sondern immer nur über den
333
+
Kontext ihrer Klasse.) Beim Überschreiben von Methoden muss der `funcName` entsprechend
334
+
identisch sein.
336
335
337
336
*Anmerkung*: Der Parameter `classAttributes` im Konstruktor von `MPyClass` wird nur für
338
337
statische Attribute verwendet und kann ignoriert werden, da statische Attribute hier nicht
339
338
zum geforderten Sprachumfang gehören. Sie können hier einfach ein `Map.of()` übergeben.
340
339
341
340
```java
342
341
// Methode "__init__(self)" anlegen
343
-
Statement simpleSuperCall =newSuperCall(List.of()); // Aufruf von Super
344
-
List<Statement> initBody =List.of(newStatement[] { simpleSuperCall }); // Body der Methode: super() kommt als erstes Statement
345
-
List<Argument> initParamList =List.of(newArgument[] {newArgument("self", 0)}); // Parameterliste für "__init__" erstellen
346
-
Function methodInit =newFunction("__init__", "__init_11", initBody, initParamList, List.of()); // Methode "__init__(self)" erstellen; Name im C-Scope: "__init_11" (willkürlich, aber eindeutig im Programm)
342
+
Statement simpleSuperCall =newSuperCall(List.of()); // Aufruf von Super
343
+
List<Statement> initBody =List.of(newStatement[] { simpleSuperCall }); // Body der Methode: super() kommt als erstes Statement
344
+
List<Argument> initParamList =List.of(newArgument[] {newArgument("self", 0)}); // Parameterliste für "__init__" erstellen
345
+
Function methodInit =newFunction("__init__", initBody, initParamList, List.of()); // Methode "__init__(self)" erstellen
Function methodFooA =newFunction("foo", "foo12", List.of(), fooParamList, List.of()); // Methode "foo" mit leerem Body; Name im C-Scope: "foo12" (willkürlich, aber eindeutig im Programm)
349
+
Function methodFooA =newFunction("foo", List.of(), fooParamList, List.of()); // Methode "foo" mit leerem Body
351
350
352
351
// Klasse "A" anlegen: Erbt implizit von __MPyType_Object
353
352
List<Function> functionListA =List.of(newFunction[] { methodInit, methodFooA }); // Liste der Methoden in A
@@ -382,13 +381,13 @@ Für die Vererbung werden die bereits bekannten Elemente verwendet.
0 commit comments