|
@@ -418,6 +418,7 @@ type
|
|
Procedure TestArray_Dynamic;
|
|
Procedure TestArray_Dynamic;
|
|
Procedure TestArray_Dynamic_Nil;
|
|
Procedure TestArray_Dynamic_Nil;
|
|
Procedure TestArray_DynMultiDimensional;
|
|
Procedure TestArray_DynMultiDimensional;
|
|
|
|
+ Procedure TestArray_DynamicAssign;
|
|
Procedure TestArray_StaticInt;
|
|
Procedure TestArray_StaticInt;
|
|
Procedure TestArray_StaticBool;
|
|
Procedure TestArray_StaticBool;
|
|
Procedure TestArray_StaticChar;
|
|
Procedure TestArray_StaticChar;
|
|
@@ -435,6 +436,7 @@ type
|
|
Procedure TestArray_SetLengthProperty;
|
|
Procedure TestArray_SetLengthProperty;
|
|
Procedure TestArray_SetLengthMultiDim;
|
|
Procedure TestArray_SetLengthMultiDim;
|
|
Procedure TestArray_OpenArrayOfString;
|
|
Procedure TestArray_OpenArrayOfString;
|
|
|
|
+ Procedure TestArray_ArrayOfCharAssignString; // ToDo
|
|
Procedure TestArray_ConstRef;
|
|
Procedure TestArray_ConstRef;
|
|
Procedure TestArray_Concat;
|
|
Procedure TestArray_Concat;
|
|
Procedure TestArray_Copy;
|
|
Procedure TestArray_Copy;
|
|
@@ -8523,28 +8525,29 @@ end;
|
|
procedure TTestModule.TestArray_DynMultiDimensional;
|
|
procedure TTestModule.TestArray_DynMultiDimensional;
|
|
begin
|
|
begin
|
|
StartProgram(false);
|
|
StartProgram(false);
|
|
- Add('type');
|
|
|
|
- Add(' TArrayInt = array of longint;');
|
|
|
|
- Add(' TArrayArrayInt = array of TArrayInt;');
|
|
|
|
- Add('var');
|
|
|
|
- Add(' Arr: TArrayInt;');
|
|
|
|
- Add(' Arr2: TArrayArrayInt;');
|
|
|
|
- Add(' i: longint;');
|
|
|
|
- Add('begin');
|
|
|
|
- Add(' arr2:=nil;');
|
|
|
|
- Add(' if arr2=nil then;');
|
|
|
|
- Add(' if nil=arr2 then;');
|
|
|
|
- Add(' i:=low(arr2);');
|
|
|
|
- Add(' i:=low(arr2[1]);');
|
|
|
|
- Add(' i:=high(arr2);');
|
|
|
|
- Add(' i:=high(arr2[2]);');
|
|
|
|
- Add(' arr2[3]:=arr;');
|
|
|
|
- Add(' arr2[4][5]:=i;');
|
|
|
|
- Add(' i:=arr2[6][7];');
|
|
|
|
- Add(' arr2[8,9]:=i;');
|
|
|
|
- Add(' i:=arr2[10,11];');
|
|
|
|
- Add(' SetLength(arr2,14);');
|
|
|
|
- Add(' SetLength(arr2[15],16);');
|
|
|
|
|
|
+ Add([
|
|
|
|
+ 'type',
|
|
|
|
+ ' TArrayInt = array of longint;',
|
|
|
|
+ ' TArrayArrayInt = array of TArrayInt;',
|
|
|
|
+ 'var',
|
|
|
|
+ ' Arr: TArrayInt;',
|
|
|
|
+ ' Arr2: TArrayArrayInt;',
|
|
|
|
+ ' i: longint;',
|
|
|
|
+ 'begin',
|
|
|
|
+ ' arr2:=nil;',
|
|
|
|
+ ' if arr2=nil then;',
|
|
|
|
+ ' if nil=arr2 then;',
|
|
|
|
+ ' i:=low(arr2);',
|
|
|
|
+ ' i:=low(arr2[1]);',
|
|
|
|
+ ' i:=high(arr2);',
|
|
|
|
+ ' i:=high(arr2[2]);',
|
|
|
|
+ ' arr2[3]:=arr;',
|
|
|
|
+ ' arr2[4][5]:=i;',
|
|
|
|
+ ' i:=arr2[6][7];',
|
|
|
|
+ ' arr2[8,9]:=i;',
|
|
|
|
+ ' i:=arr2[10,11];',
|
|
|
|
+ ' SetLength(arr2,14);',
|
|
|
|
+ ' SetLength(arr2[15],16);']);
|
|
ConvertProgram;
|
|
ConvertProgram;
|
|
CheckSource('TestArray_Dynamic',
|
|
CheckSource('TestArray_Dynamic',
|
|
LinesToStr([ // statements
|
|
LinesToStr([ // statements
|
|
@@ -8560,7 +8563,7 @@ begin
|
|
'$mod.i = 0;',
|
|
'$mod.i = 0;',
|
|
'$mod.i = rtl.length($mod.Arr2) - 1;',
|
|
'$mod.i = rtl.length($mod.Arr2) - 1;',
|
|
'$mod.i = rtl.length($mod.Arr2[2]) - 1;',
|
|
'$mod.i = rtl.length($mod.Arr2[2]) - 1;',
|
|
- '$mod.Arr2[3] = $mod.Arr;',
|
|
|
|
|
|
+ '$mod.Arr2[3] = rtl.arrayRef($mod.Arr);',
|
|
'$mod.Arr2[4][5] = $mod.i;',
|
|
'$mod.Arr2[4][5] = $mod.i;',
|
|
'$mod.i = $mod.Arr2[6][7];',
|
|
'$mod.i = $mod.Arr2[6][7];',
|
|
'$mod.Arr2[8][9] = $mod.i;',
|
|
'$mod.Arr2[8][9] = $mod.i;',
|
|
@@ -8570,6 +8573,71 @@ begin
|
|
'']));
|
|
'']));
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
+procedure TTestModule.TestArray_DynamicAssign;
|
|
|
|
+begin
|
|
|
|
+ StartProgram(false);
|
|
|
|
+ Add([
|
|
|
|
+ 'type',
|
|
|
|
+ ' TArrayInt = array of longint;',
|
|
|
|
+ ' TArrayArrayInt = array of TArrayInt;',
|
|
|
|
+ 'procedure Run(a: TArrayInt; const b: TArrayInt; constref c: TArrayInt);',
|
|
|
|
+ 'begin',
|
|
|
|
+ 'end;',
|
|
|
|
+ 'procedure Fly(var a: TArrayInt);',
|
|
|
|
+ 'begin',
|
|
|
|
+ 'end;',
|
|
|
|
+ 'var',
|
|
|
|
+ ' Arr: TArrayInt;',
|
|
|
|
+ ' Arr2: TArrayArrayInt;',
|
|
|
|
+ 'begin',
|
|
|
|
+ ' arr:=nil;',
|
|
|
|
+ ' arr2:=nil;',
|
|
|
|
+ ' arr2[1]:=nil;',
|
|
|
|
+ ' arr2[2]:=arr;',
|
|
|
|
+ ' Run(arr,arr,arr);',
|
|
|
|
+ ' Fly(arr);',
|
|
|
|
+ ' Run(arr2[4],arr2[5],arr2[6]);',
|
|
|
|
+ ' Fly(arr2[7]);',
|
|
|
|
+ '']);
|
|
|
|
+ ConvertProgram;
|
|
|
|
+ CheckSource('TestArray_DynamicAssign',
|
|
|
|
+ LinesToStr([ // statements
|
|
|
|
+ 'this.Run = function (a, b, c) {',
|
|
|
|
+ '};',
|
|
|
|
+ 'this.Fly = function (a) {',
|
|
|
|
+ '};',
|
|
|
|
+ 'this.Arr = [];',
|
|
|
|
+ 'this.Arr2 = [];',
|
|
|
|
+ '']),
|
|
|
|
+ LinesToStr([ // $mod.$main
|
|
|
|
+ '$mod.Arr = [];',
|
|
|
|
+ '$mod.Arr2 = [];',
|
|
|
|
+ '$mod.Arr2[1] = [];',
|
|
|
|
+ '$mod.Arr2[2] = rtl.arrayRef($mod.Arr);',
|
|
|
|
+ '$mod.Run(rtl.arrayRef($mod.Arr), $mod.Arr, $mod.Arr);',
|
|
|
|
+ '$mod.Fly({',
|
|
|
|
+ ' p: $mod,',
|
|
|
|
+ ' get: function () {',
|
|
|
|
+ ' return this.p.Arr;',
|
|
|
|
+ ' },',
|
|
|
|
+ ' set: function (v) {',
|
|
|
|
+ ' this.p.Arr = v;',
|
|
|
|
+ ' }',
|
|
|
|
+ '});',
|
|
|
|
+ '$mod.Run(rtl.arrayRef($mod.Arr2[4]), $mod.Arr2[5], $mod.Arr2[6]);',
|
|
|
|
+ '$mod.Fly({',
|
|
|
|
+ ' a: 7,',
|
|
|
|
+ ' p: $mod.Arr2,',
|
|
|
|
+ ' get: function () {',
|
|
|
|
+ ' return this.p[this.a];',
|
|
|
|
+ ' },',
|
|
|
|
+ ' set: function (v) {',
|
|
|
|
+ ' this.p[this.a] = v;',
|
|
|
|
+ ' }',
|
|
|
|
+ '});',
|
|
|
|
+ '']));
|
|
|
|
+end;
|
|
|
|
+
|
|
procedure TTestModule.TestArray_StaticInt;
|
|
procedure TTestModule.TestArray_StaticInt;
|
|
begin
|
|
begin
|
|
StartProgram(false);
|
|
StartProgram(false);
|
|
@@ -8605,7 +8673,7 @@ begin
|
|
'$mod.i = 2;',
|
|
'$mod.i = 2;',
|
|
'$mod.i = 4;',
|
|
'$mod.i = 4;',
|
|
'$mod.b = $mod.Arr[0] === $mod.Arr[1];',
|
|
'$mod.b = $mod.Arr[0] === $mod.Arr[1];',
|
|
- '$mod.Arr = rtl.arraySetLength(null,0,3).slice(0);',
|
|
|
|
|
|
+ '$mod.Arr = rtl.arraySetLength(null,0,3);',
|
|
'']));
|
|
'']));
|
|
end;
|
|
end;
|
|
|
|
|
|
@@ -8999,10 +9067,10 @@ begin
|
|
LinesToStr([ // statements
|
|
LinesToStr([ // statements
|
|
'this.DoIt = function (vG,vH,vI) {',
|
|
'this.DoIt = function (vG,vH,vI) {',
|
|
' var vJ = [];',
|
|
' var vJ = [];',
|
|
- ' vG = vG;',
|
|
|
|
- ' vJ = vH;',
|
|
|
|
- ' vI.set(vI.get());',
|
|
|
|
- ' $mod.DoIt(vG, vG, {',
|
|
|
|
|
|
+ ' vG = rtl.arrayRef(vG);',
|
|
|
|
+ ' vJ = rtl.arrayRef(vH);',
|
|
|
|
+ ' vI.set(rtl.arrayRef(vI.get()));',
|
|
|
|
+ ' $mod.DoIt(rtl.arrayRef(vG), vG, {',
|
|
' get: function () {',
|
|
' get: function () {',
|
|
' return vG;',
|
|
' return vG;',
|
|
' },',
|
|
' },',
|
|
@@ -9010,7 +9078,7 @@ begin
|
|
' vG = v;',
|
|
' vG = v;',
|
|
' }',
|
|
' }',
|
|
' });',
|
|
' });',
|
|
- ' $mod.DoIt(vH, vH, {',
|
|
|
|
|
|
+ ' $mod.DoIt(rtl.arrayRef(vH), vH, {',
|
|
' get: function () {',
|
|
' get: function () {',
|
|
' return vJ;',
|
|
' return vJ;',
|
|
' },',
|
|
' },',
|
|
@@ -9018,8 +9086,8 @@ begin
|
|
' vJ = v;',
|
|
' vJ = v;',
|
|
' }',
|
|
' }',
|
|
' });',
|
|
' });',
|
|
- ' $mod.DoIt(vI.get(), vI.get(), vI);',
|
|
|
|
- ' $mod.DoIt(vJ, vJ, {',
|
|
|
|
|
|
+ ' $mod.DoIt(rtl.arrayRef(vI.get()), vI.get(), vI);',
|
|
|
|
+ ' $mod.DoIt(rtl.arrayRef(vJ), vJ, {',
|
|
' get: function () {',
|
|
' get: function () {',
|
|
' return vJ;',
|
|
' return vJ;',
|
|
' },',
|
|
' },',
|
|
@@ -9031,7 +9099,7 @@ begin
|
|
'this.i = [];'
|
|
'this.i = [];'
|
|
]),
|
|
]),
|
|
LinesToStr([
|
|
LinesToStr([
|
|
- '$mod.DoIt($mod.i,$mod.i,{',
|
|
|
|
|
|
+ '$mod.DoIt(rtl.arrayRef($mod.i),$mod.i,{',
|
|
' p: $mod,',
|
|
' p: $mod,',
|
|
' get: function () {',
|
|
' get: function () {',
|
|
' return this.p.i;',
|
|
' return this.p.i;',
|
|
@@ -9373,6 +9441,38 @@ begin
|
|
'']));
|
|
'']));
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
+procedure TTestModule.TestArray_ArrayOfCharAssignString;
|
|
|
|
+begin
|
|
|
|
+ exit; // todo
|
|
|
|
+
|
|
|
|
+ StartProgram(false);
|
|
|
|
+ Add([
|
|
|
|
+ 'type TArr = array of char;',
|
|
|
|
+ 'var',
|
|
|
|
+ ' c: char;',
|
|
|
|
+ ' s: string;',
|
|
|
|
+ ' a: TArr;',
|
|
|
|
+ 'procedure Run(const a: array of char);',
|
|
|
|
+ 'begin',
|
|
|
|
+ ' Run(c);',
|
|
|
|
+ //' Run(s);',
|
|
|
|
+ 'end;',
|
|
|
|
+ 'begin',
|
|
|
|
+ //' a:=c;',
|
|
|
|
+ //' a:=s;',
|
|
|
|
+ //' a:=#13;',
|
|
|
|
+ //' a:=''Foo'';',
|
|
|
|
+ //' Run(c);',
|
|
|
|
+ //' Run(s);',
|
|
|
|
+ '']);
|
|
|
|
+ ConvertProgram;
|
|
|
|
+ CheckSource('TestArray_ArrayOfCharAssignString',
|
|
|
|
+ LinesToStr([ // statements
|
|
|
|
+ '']),
|
|
|
|
+ LinesToStr([
|
|
|
|
+ '']));
|
|
|
|
+end;
|
|
|
|
+
|
|
procedure TTestModule.TestArray_ConstRef;
|
|
procedure TTestModule.TestArray_ConstRef;
|
|
begin
|
|
begin
|
|
StartProgram(false);
|
|
StartProgram(false);
|
|
@@ -9748,8 +9848,8 @@ begin
|
|
' integer = longint;',
|
|
' integer = longint;',
|
|
' TArrInt = array of integer;',
|
|
' TArrInt = array of integer;',
|
|
' TArrSet = array of (red,green,blue);',
|
|
' TArrSet = array of (red,green,blue);',
|
|
- 'procedure DoOpenInt(a: array of integer); forward;',
|
|
|
|
- 'procedure DoInt(a: TArrInt);',
|
|
|
|
|
|
+ 'procedure DoOpenInt(const a: array of integer); forward;',
|
|
|
|
+ 'procedure DoInt(const a: TArrInt);',
|
|
'begin',
|
|
'begin',
|
|
' DoInt(a+[1]);',
|
|
' DoInt(a+[1]);',
|
|
' DoInt([1]+a);',
|
|
' DoInt([1]+a);',
|
|
@@ -9757,7 +9857,7 @@ begin
|
|
' DoOpenInt(a+[1]);',
|
|
' DoOpenInt(a+[1]);',
|
|
' DoOpenInt([1]+a);',
|
|
' DoOpenInt([1]+a);',
|
|
'end;',
|
|
'end;',
|
|
- 'procedure DoOpenInt(a: array of integer);',
|
|
|
|
|
|
+ 'procedure DoOpenInt(const a: array of integer);',
|
|
'begin',
|
|
'begin',
|
|
' DoOpenInt(a+[1]);',
|
|
' DoOpenInt(a+[1]);',
|
|
' DoOpenInt([1]+a);',
|
|
' DoOpenInt([1]+a);',
|
|
@@ -9765,7 +9865,7 @@ begin
|
|
' DoInt(a+[1]);',
|
|
' DoInt(a+[1]);',
|
|
' DoInt([1]+a);',
|
|
' DoInt([1]+a);',
|
|
'end;',
|
|
'end;',
|
|
- 'procedure DoSet(a: TArrSet);',
|
|
|
|
|
|
+ 'procedure DoSet(const a: TArrSet);',
|
|
'begin',
|
|
'begin',
|
|
' DoSet(a+[red]);',
|
|
' DoSet(a+[red]);',
|
|
' DoSet([blue]+a);',
|
|
' DoSet([blue]+a);',
|
|
@@ -9844,7 +9944,7 @@ begin
|
|
' integer = longint;',
|
|
' integer = longint;',
|
|
' TArrInt = array of integer;',
|
|
' TArrInt = array of integer;',
|
|
' TArrArrInt = array of TArrInt;',
|
|
' TArrArrInt = array of TArrInt;',
|
|
- 'procedure DoInt(a: TArrArrInt);',
|
|
|
|
|
|
+ 'procedure DoInt(const a: TArrArrInt);',
|
|
'begin',
|
|
'begin',
|
|
' DoInt(a+[[1]]);',
|
|
' DoInt(a+[[1]]);',
|
|
' DoInt([[1]]+a);',
|
|
' DoInt([[1]]+a);',
|
|
@@ -9901,7 +10001,7 @@ begin
|
|
' integer = longint;',
|
|
' integer = longint;',
|
|
' TArrInt = array[1..2] of integer;',
|
|
' TArrInt = array[1..2] of integer;',
|
|
' TArrArrInt = array of TArrInt;',
|
|
' TArrArrInt = array of TArrInt;',
|
|
- 'procedure DoInt(a: TArrArrInt);',
|
|
|
|
|
|
+ 'procedure DoInt(const a: TArrArrInt);',
|
|
'begin',
|
|
'begin',
|
|
' DoInt(a+[[1,2]]);',
|
|
' DoInt(a+[[1,2]]);',
|
|
' DoInt([[1,2]]+a);',
|
|
' DoInt([[1,2]]+a);',
|
|
@@ -12950,6 +13050,8 @@ begin
|
|
Add(' function GetItems: tarray;');
|
|
Add(' function GetItems: tarray;');
|
|
Add(' procedure SetItems(Value: tarray);');
|
|
Add(' procedure SetItems(Value: tarray);');
|
|
Add(' property Items: tarray read getitems write setitems;');
|
|
Add(' property Items: tarray read getitems write setitems;');
|
|
|
|
+ Add(' procedure SetNumbers(const Value: tarray);');
|
|
|
|
+ Add(' property Numbers: tarray write setnumbers;');
|
|
Add(' end;');
|
|
Add(' end;');
|
|
Add('function tobject.getitems: tarray;');
|
|
Add('function tobject.getitems: tarray;');
|
|
Add('begin');
|
|
Add('begin');
|
|
@@ -12968,6 +13070,12 @@ begin
|
|
Add(' Self.Items[9]:=Self.Items[10];');
|
|
Add(' Self.Items[9]:=Self.Items[10];');
|
|
Add(' Items[Items[11]]:=Items[Items[12]];');
|
|
Add(' Items[Items[11]]:=Items[Items[12]];');
|
|
Add('end;');
|
|
Add('end;');
|
|
|
|
+ Add('procedure tobject.SetNumbers(const Value: tarray);');
|
|
|
|
+ Add('begin;');
|
|
|
|
+ Add(' Numbers:=nil;');
|
|
|
|
+ Add(' Numbers:=Value;');
|
|
|
|
+ Add(' Self.Numbers:=Value;');
|
|
|
|
+ Add('end;');
|
|
Add('var Obj: tobject;');
|
|
Add('var Obj: tobject;');
|
|
Add('begin');
|
|
Add('begin');
|
|
Add(' obj.items:=nil;');
|
|
Add(' obj.items:=nil;');
|
|
@@ -12985,14 +13093,14 @@ begin
|
|
' };',
|
|
' };',
|
|
' this.GetItems = function () {',
|
|
' this.GetItems = function () {',
|
|
' var Result = [];',
|
|
' var Result = [];',
|
|
- ' Result = this.FItems;',
|
|
|
|
|
|
+ ' Result = rtl.arrayRef(this.FItems);',
|
|
' return Result;',
|
|
' return Result;',
|
|
' };',
|
|
' };',
|
|
' this.SetItems = function (Value) {',
|
|
' this.SetItems = function (Value) {',
|
|
- ' this.FItems = Value;',
|
|
|
|
|
|
+ ' this.FItems = rtl.arrayRef(Value);',
|
|
' this.FItems = [];',
|
|
' this.FItems = [];',
|
|
' this.SetItems([]);',
|
|
' this.SetItems([]);',
|
|
- ' this.SetItems(this.GetItems());',
|
|
|
|
|
|
+ ' this.SetItems(rtl.arrayRef(this.GetItems()));',
|
|
' this.GetItems()[1] = 2;',
|
|
' this.GetItems()[1] = 2;',
|
|
' this.FItems[3] = this.GetItems()[4];',
|
|
' this.FItems[3] = this.GetItems()[4];',
|
|
' this.GetItems()[5] = this.GetItems()[6];',
|
|
' this.GetItems()[5] = this.GetItems()[6];',
|
|
@@ -13000,6 +13108,11 @@ begin
|
|
' this.GetItems()[9] = this.GetItems()[10];',
|
|
' this.GetItems()[9] = this.GetItems()[10];',
|
|
' this.GetItems()[this.GetItems()[11]] = this.GetItems()[this.GetItems()[12]];',
|
|
' this.GetItems()[this.GetItems()[11]] = this.GetItems()[this.GetItems()[12]];',
|
|
' };',
|
|
' };',
|
|
|
|
+ ' this.SetNumbers = function (Value) {',
|
|
|
|
+ ' this.SetNumbers([]);',
|
|
|
|
+ ' this.SetNumbers(Value);',
|
|
|
|
+ ' this.SetNumbers(Value);',
|
|
|
|
+ ' };',
|
|
'});',
|
|
'});',
|
|
'this.Obj = null;'
|
|
'this.Obj = null;'
|
|
]),
|
|
]),
|
|
@@ -26939,8 +27052,8 @@ begin
|
|
'this.ArrInt = [];',
|
|
'this.ArrInt = [];',
|
|
'']),
|
|
'']),
|
|
LinesToStr([ // $mod.$main
|
|
LinesToStr([ // $mod.$main
|
|
- '$mod.Arr = $mod.TheArray;',
|
|
|
|
- '$mod.TheArray = $mod.Arr;',
|
|
|
|
|
|
+ '$mod.Arr = rtl.arrayRef($mod.TheArray);',
|
|
|
|
+ '$mod.TheArray = rtl.arrayRef($mod.Arr);',
|
|
'$mod.Arr = rtl.arraySetLength($mod.Arr,undefined,2);',
|
|
'$mod.Arr = rtl.arraySetLength($mod.Arr,undefined,2);',
|
|
'$mod.TheArray = rtl.arraySetLength($mod.TheArray,undefined,3);',
|
|
'$mod.TheArray = rtl.arraySetLength($mod.TheArray,undefined,3);',
|
|
'$mod.Arr[4] = $mod.v;',
|
|
'$mod.Arr[4] = $mod.v;',
|
|
@@ -26948,7 +27061,7 @@ begin
|
|
'$mod.Arr[6] = null;',
|
|
'$mod.Arr[6] = null;',
|
|
'$mod.Arr[7] = $mod.TheArray[8];',
|
|
'$mod.Arr[7] = $mod.TheArray[8];',
|
|
'$mod.Arr[0] = rtl.length($mod.TheArray) - 1;',
|
|
'$mod.Arr[0] = rtl.length($mod.TheArray) - 1;',
|
|
- '$mod.Arr = $mod.ArrInt;',
|
|
|
|
|
|
+ '$mod.Arr = rtl.arrayRef($mod.ArrInt);',
|
|
'$mod.ArrInt = $mod.Arr;',
|
|
'$mod.ArrInt = $mod.Arr;',
|
|
'if (rtl.length($mod.TheArray) === 0) ;',
|
|
'if (rtl.length($mod.TheArray) === 0) ;',
|
|
'if (rtl.length($mod.TheArray) === 0) ;',
|
|
'if (rtl.length($mod.TheArray) === 0) ;',
|