Problem beim Auflösen verschachtelter Makros

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Regenduft
Beiträge: 574
Registriert: 25.03.2008 15:07
Wohnort: THE LÄÄÄND!

Problem beim Auflösen verschachtelter Makros

Beitrag von Regenduft »

Hi liebe Leute,

folgende Situation: Ein Makro wird aufgelöst. Das Ergebnis ist ein weiteres Makro. Dieses "weitere Makro" sollte wieder aufgelöst werden, was aber nicht funktioniert (siehe Quelltext für genaue Fehlermeldung).

Ist dieses Verhalten so gewollt, ist das ein Bug oder begehe ich einfach einen Denkfehler? Hat da jemand eine Ahnung?

Aus dem Bauch heraus würde ich behaupten, dass ich mit PB 4.xx bereits Code in diesem Stil verwendet hatte und dass dieser keine Probleme machte.

Code: Alles auswählen

Macro a(foo)
  foo()
EndMacro

Macro b()
  Debug "Vor der Auflösung erscheint folgender Makro-Fehler:"
  Debug "[de] Line 10: b() ist keine Function, Array, Makro oder LinkedList"
  Debug "[en] Line 10: b() is Not a function, Array, List, Map Or Macro"
EndMacro

a(b)
PureBasic 5.73 LTE x86/x64 | Windows 7 (x64)
Benutzeravatar
cxAlex
Beiträge: 2111
Registriert: 26.06.2008 10:42

Re: Problem beim Auflösen verschachtelter Makros

Beitrag von cxAlex »

Ich wage zu behaupten irgendwann im englischen Forum mal ein Statement gelesen zu haben dass das gewollt nicht funktioniert, bin mir aber nicht sicher.
Allerdings würde sich so eine endlose Rekursion im Makro erzeugen lassen wenn das so funktionieren würde:

Code: Alles auswählen

Macro a(foo)
  foo()
EndMacro

Macro b()
 a(b)
EndMacro

b()
Was ja bei

Code: Alles auswählen

Macro x()
  x()
EndMacro
x()
auch vom Compiler bemängelt wird, eventuell schaltet sich hier ein Schutz - Mechanismus ein?

Gruß, Alex
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

Bild

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7039
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Problem beim Auflösen verschachtelter Makros

Beitrag von STARGÅTE »

Scheint irgendwie an den Klammern zu liegen.
Denn sowohl

Code: Alles auswählen

Macro a(foo)
  foo
EndMacro
Macro b()
;...
EndMacro
a(b())
als auch

Code: Alles auswählen

Macro a(foo)
  foo
EndMacro
Macro b
;...
EndMacro
a(b)
funktioniert.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Regenduft
Beiträge: 574
Registriert: 25.03.2008 15:07
Wohnort: THE LÄÄÄND!

Re: Problem beim Auflösen verschachtelter Makros

Beitrag von Regenduft »

Danke euch zwei für die schnellen Antworten mitten in der Nacht! :allright:
Das ist mir jetzt erst bewusst geworden, dass ich die Klammern beim Isolieren des Problems vergessen hatte.

Die Klammern scheinen übrigens nicht das einzige Problem zu sein, sondern "Wortgrenzen" im Allgemeinen, denn auch die Verwendung von "#" als Verkettungszeichen macht anscheinend Probleme. Das spricht doch dann eigentlich für einen Bug, oder? (Lieber auf Nummer sicher gehen bevor ich ins Offizielle poste...)

Code: Alles auswählen

Macro a(foo)
  x#foo
EndMacro
Macro xb
  ;...
EndMacro
a(b)
PureBasic 5.73 LTE x86/x64 | Windows 7 (x64)
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8838
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Problem beim Auflösen verschachtelter Makros

Beitrag von NicTheQuick »

Der passenden Thread im englischen Forum war von mir: Nested Macros
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7039
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Problem beim Auflösen verschachtelter Makros

Beitrag von STARGÅTE »

@NicTheQuick:
Ne das ist was anderes.
Hier geht es ja darum, das Macros einzeln definiert wurden dann eigentlich normal ersetzt werden sollten.
Bei deinem Thema ging es ja darum, das ein macro erst zu Kompilerzeiten gebaut wird.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Regenduft
Beiträge: 574
Registriert: 25.03.2008 15:07
Wohnort: THE LÄÄÄND!

Re: Problem beim Auflösen verschachtelter Makros

Beitrag von Regenduft »

Die "Nested Macros" à la NicTheQuick hatten (leider) noch nie funktioniert.

Die "Pseudo-nested Macros" (also mehrere verschachtelte aber nacheinander aufgelöste Makros - eigene Wortschöpfung) hatten früher aber funktioniert! Ich habe gerade nochmal einen alten (verworfenen) Code rausgekramt, wo ich das so gemacht hatte (und es mit ziemlicher Sicherheit früher funktionierte).

Hat jemand evtl. die Möglichkeit das ganze mal geschwind mit PB 4.xx zu testen?
(Kann ich hier gerade leider nicht selbst machen und in ein paar Stunden geht's wieder in die internetlose Reha-Klinik... Held gesucht! :mrgreen:)

EDIT: Hatte ich wohl Pech und die PB-Nachtschicht ist schon heim gegangen. :wink: Wenn es sich bei dem Problem wirklich um einen Bug handelt wäre es nett, wenn jemand das ins offizielle Forum posten kann! (Danke schonmal!)
PureBasic 5.73 LTE x86/x64 | Windows 7 (x64)
Antworten