77
88namespace EigerLang . Execution . BuiltInTypes ;
99
10+ using System . Text ;
11+
1012class Array : Value
1113{
12- public Value [ ] array ;
14+ public List < Value > array ;
1315
14- public Array ( string fn , int ln , int ps , Value [ ] array ) : base ( fn , ln , ps )
16+ public Array ( string fn , int ln , int ps , List < Value > array ) : base ( fn , ln , ps )
1517 {
1618 this . array = array ;
17- this . filename = fn ;
18- this . line = ln ;
19- this . pos = ps ;
2019 }
2120
2221 public override Value AddedTo ( object other )
2322 {
2423 if ( other is Array arr )
2524 {
26- return new Array ( filename , line , pos , [ .. array , .. arr . array ] ) ;
25+ var newArr = new List < Value > ( array . Count + arr . array . Count ) ;
26+ newArr . AddRange ( array ) ;
27+ newArr . AddRange ( arr . array ) ;
28+ return new Array ( filename , line , pos , newArr ) ;
2729 }
2830 else
2931 {
30- return new Array ( filename , line , pos , [ .. array , ( Value ) other ] ) ;
32+ var newArr = new List < Value > ( array . Count + 1 ) ;
33+ newArr . AddRange ( array ) ;
34+ newArr . Add ( ( Value ) other ) ;
35+ return new Array ( filename , line , pos , newArr ) ;
3136 }
3237 }
3338
3439 public override Boolean ComparisonEqeq ( object other )
3540 {
3641 if ( other is Array arr )
3742 {
38- return new Boolean ( filename , line , pos , arr . array . Length == array . Length && arr . array . SequenceEqual ( array ) ) ;
39- }
40- else
41- {
42- return new Boolean ( filename , line , pos , false ) ;
43+ return new Boolean ( filename , line , pos , arr . array . Count == array . Count && arr . array . SequenceEqual ( array ) ) ;
4344 }
45+ return new Boolean ( filename , line , pos , false ) ;
4446 }
4547
4648 public override Boolean ComparisonNeqeq ( object other )
@@ -49,53 +51,53 @@ public override Boolean ComparisonNeqeq(object other)
4951 {
5052 return new Boolean ( filename , line , pos , ! arr . array . SequenceEqual ( array ) ) ;
5153 }
52- else
53- {
54- return new Boolean ( filename , line , pos , true ) ;
55- }
54+ return new Boolean ( filename , line , pos , true ) ;
5655 }
5756
58- public override Value GetIndex ( int idx )
57+ private void ValidateIndex ( int idx )
5958 {
60- if ( idx < 0 || idx >= array . Length )
59+ if ( idx < 0 || idx >= array . Count )
6160 throw new EigerError ( filename , line , pos , "Index outside of bounds" , EigerError . ErrorType . IndexError ) ;
62- return array [ idx ] ;
6361 }
6462
65- public override Value GetAttr ( ASTNode attr )
63+ public override Value GetIndex ( int idx )
6664 {
67- if ( attr . value == "type" )
68- {
69- return new String ( filename , line , pos , "array" ) ;
70- }
71- return base . GetAttr ( attr ) ;
65+ ValidateIndex ( idx ) ;
66+ return array [ idx ] ;
7267 }
7368
7469 public override void SetIndex ( int idx , Value val )
7570 {
76- if ( idx < 0 || idx >= array . Length )
77- throw new EigerError ( filename , line , pos , "Index outside of bounds" , EigerError . ErrorType . IndexError ) ;
71+ ValidateIndex ( idx ) ;
7872 val . modifiers = array [ idx ] . modifiers ;
7973 array [ idx ] = val ;
8074 }
8175
8276 public override Value GetLength ( )
8377 {
84- return new Number ( filename , line , pos , array . Length ) ;
78+ return new Number ( filename , line , pos , array . Count ) ;
79+ }
80+
81+ public override Value GetAttr ( ASTNode attr )
82+ {
83+ if ( attr . value == "type" )
84+ {
85+ return new String ( filename , line , pos , "array" ) ;
86+ }
87+ return base . GetAttr ( attr ) ;
8588 }
8689
8790 public override string ToString ( )
8891 {
89- string strep = "[" ;
90- for ( int i = 0 ; i < array . Length ; i ++ )
92+ var sb = new StringBuilder ( ) ;
93+ sb . Append ( '[' ) ;
94+ for ( int i = 0 ; i < array . Count ; i ++ )
9195 {
92- strep += array [ i ] . ToString ( ) ;
93- if ( i != array . Length - 1 )
94- {
95- strep += ", " ;
96- }
96+ sb . Append ( array [ i ] . ToString ( ) ) ;
97+ if ( i != array . Count - 1 )
98+ sb . Append ( ", " ) ;
9799 }
98- strep += "]" ;
99- return strep ;
100+ sb . Append ( ']' ) ;
101+ return sb . ToString ( ) ;
100102 }
101- }
103+ }
0 commit comments