pas2js - Lässt komische Array Constante durch

Für Fehler in Lazarus, um diese von anderen verifizieren zu lassen.
Antworten
Mathias
Beiträge: 6209
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

pas2js - Lässt komische Array Constante durch

Beitrag von Mathias »

Ich habe solch eine komische Array Constante in einem pas2js Project deklariert.
Zur meier Verwunderung wird dies ohne meckern kompiliert.
Aber das Endprodukt funktioniert erst, wen wen die überflüssigen Klammern weg sind.

Code: Alles auswählen

const
    Vector: array of Double =
    (((-0.4, 0.1, 0.0), (0.4, 0.1, 0.0), (0.0, 0.7, 0.0)));    
Bei einer Linux App, meckert er wie erwartet mit einem Syntax-Fehler.

Ist dies so gewollt, oder ist dies ein Bug ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

PascalDragon
Beiträge: 834
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: pas2js - Lässt komische Array Constante durch

Beitrag von PascalDragon »

Mathias hat geschrieben:
Sa 30. Dez 2023, 16:45
Ist dies so gewollt, oder ist dies ein Bug ?
Ich würde sagen ein Bug. Bitte melde es mit einem kompletten Beispiel in den Issues des pas2js Unterprojekts.
FPC Compiler Entwickler

Mathias
Beiträge: 6209
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: pas2js - Lässt komische Array Constante durch

Beitrag von Mathias »

Ich habe gerade fogendes probiert.

Code: Alles auswählen

const
  Vector: array of double = ((-0.4, 0.1, 0.0), (0.4, 0.1, 0.0), (0.0, 0.7, 0.0));
begin
  Writeln(Vector[0]);
  Writeln(Vector[1]);
  Writeln(Vector[2]);
end.       
Da wird folgendes ausgespuckt.

Code: Alles auswählen

-0.4,0.1,0
0.4,0.1,0
0,0.7,0
Irgendwie fasst er Zahlenreihen zusammen.


Ich habe noch etwas kugligeres probiert, sogar das wird gefressen, der einzige Unterschied, beim 3. Write kommt "undefined".

Code: Alles auswählen

type
  TR=record
    x,y:char;
  end;

const
  Vector: array of TR = ((-0.4, 0.1, 0.0), (0.4, 0.1, 0.0), (0.0, 0.7, 0.0));

begin
  Writeln(Vector[0]);
  Writeln(Vector[1]);
  Writeln(Vector[2].x); 
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Mathias
Beiträge: 6209
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: pas2js - Lässt komische Array Constante durch

Beitrag von Mathias »

Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Mathias
Beiträge: 6209
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: pas2js - Lässt komische Array Constante durch

Beitrag von Mathias »

Ich habe gerade folgendes probiert

Code: Alles auswählen

const
  arr: array of byte = (1, 2.6, 'abc', 'v');
begin
  for i:=0 to Length(arr)-1 do Writeln(arr[i]);  
Und ausgespuckt wird mir folgendes:

Code: Alles auswählen

1
2.6
abc
v
Ich denke, dies könnte damit zusammenhängen, da folgende Deklaration in JavaScript gestattet ist:

Code: Alles auswählen

const person = ["John", "Doe", 46];
Was nach meiner Meinung sicher ein Bug ist, das Pascal hinter dem "of" einen x-beliebigen Typ zulässt.
Sowas wird auch gefressen:

Code: Alles auswählen

const
  arr: array of TDOMParser = (1, 2.6, 'abc', 'v');  
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Mathias
Beiträge: 6209
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: pas2js - Lässt komische Array Constante durch

Beitrag von Mathias »

Wie ein lustiger Code der funktioniert, anscheinend ist Writeln bei pas2js ein Allesfresser.

Code: Alles auswählen

var
  ba: array of boolean = (True, False, True, False, 123, 456);
begin
  writeln(ba);
Die frisst er auch, aber es wird nicht ausgewertet.

Code: Alles auswählen

var
  r: record
    i: integer; s: string; f: double;
  end = (i: 123; s: 'blabla'; f: 12.34);

begin
  writeln(r);  // -> [object Object]
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten