Deutsches Simutransforum
Error compiling string buffer - Druckversion

+- Deutsches Simutransforum (https://simutrans-forum.de/mybb)
+-- Forum: Simutrans (https://simutrans-forum.de/mybb/forumdisplay.php?fid=3)
+--- Forum: Wie spiele ich Simutrans? (https://simutrans-forum.de/mybb/forumdisplay.php?fid=6)
+---- Forum: Szenarien (https://simutrans-forum.de/mybb/forumdisplay.php?fid=7)
+---- Thema: Error compiling string buffer (/showthread.php?tid=7199)



Error compiling string buffer - ny911 - 20-02-2013

nightly r6336, pak128 2.2.0 r1142

Das Script (siehe Anhang) lasst sich problemslos starten und die ersten Versuche im Spiel klappen auch. Wenn ich nun das Spiel speicher und dann lade erhalte ich die Fehlermeldung: Error compiling string buffer

Das besondere ist "userdefindstringmethod line = (5) column = (9)"
Dies ist im Kopf des Scripts und hilf mir wenig. Ich konnte den Fehler auf die
Zeilen 123 und 219 zurückführen. Allerdings ist mir nicht klar warum dies nur beim Laden zum Fehler führt.


RE: Error compiling string buffer - Dwachs - 20-02-2013

Ich denke mal der string-buffer ist ein String, der aus der persistent-Tabelle generiert wird, dieser String wird direkt kompiliert und baut damit nach dem Laden die persistent Tabelle wieder zusammen.

Ich wuerde mal darauf tippen, dass in der persistent-Tabelle irgendwas problematisches steht. Kannst du mal mit -debug 2 laufen lassen und dann das Ende vom Log posten?

Edit: sieht so aus, als wuerdest du in einer Tabelle Zahlen als Schluessel verwenden. Da ist wahrscheinlich in der export Funktion irgendwas faul.


- ny911 - 20-02-2013

script.log:
Code:
[Script]: ERROR:        <error>
[Script]: ERROR:        userdefinedstringmethod line = (5) column = (8) : error expected 'IDENTIFIER'
[Script]: ERROR:        </error>

Zitat:als wuerdest du in einer Tabelle Zahlen als Schluessel verwenden
Ja ist richtig. Sind sogar zwei Tabellen. Allerdings tritt der Fehler auch auf, wenn es sich um keine Zahlen im Schlüssel handelt.

Sobald rawset(key, value) im script genutzt taucht der Fehler auf. Habe auch schon die unschöne Alternative tabellenname[key] <- value ausprobiert, erzeugt aber den selben Fehler.


- Dwachs - 20-02-2013

Das ist wahrscheinlich in Fehler in der scneario_base.nut: Tausche mal die Zeilen 132-134
Code:
if (!isarray) {
str += key + " = "
}
aus gegen
Code:
if (!isarray) {
  if (typeof(key)=="string") {
     str += key + " = "
  }
  else {
     str += "[" + key + "] = "
  }
}

Das liegt nicht an rawset etc, sondern daran, dass die save-Routine verbuggt ist.


- ny911 - 20-02-2013

Erzeugt leider:
error cannot brake deref/or comma needed after [exp]=exp slot declaration

Wenn es denn nur an integer key liegt, dürfte der Fehler eigentlich nicht auftauchen wenn man im test den key als .tostring() deklariert. Tut er aber trotzdem.


- Dwachs - 20-02-2013

Ich schaus mir mal an. Sollte eigentlich leicht zu fixen sein.

Edit: Sollte mit r6341 gehen, (scneario_base.nut updaten)


- ny911 - 23-02-2013

in r6343 getestet, funktioniert.

In meinem Script war aber auch ein Fehler, zwei Zeilen höher als vermutet Z110 muss
Code:
h.pos <- { x = position.x , y = position.y }
statt
Code:
h.pos <- position
lauten.


- Dwachs - 23-02-2013

Siehe 'Common pitfalls' Wink Fuer deinen Fall muesste auch
Code:
h.pos = clone position
funktionieren:

http://www.squirrel-lang.org/doc/squirrel3.html#d0e1274