/// CODE /// func __getindex( index : int32 ) : T { if( index < 0 || index >= m_size ) { WARNING( "array index out of bounds" ); return T(); } return m_data[ index ]; } /// OUTPUT /// FUNC (struct=6 op=30 opsub=0 tt=75) { name = 'data1.__getindex' orig_datatype = 'T' datatype = '' orig_typeinfo: IDENT (struct=12 op=1 opsub=0 tt=78) name = 'T' typeinfo: params: ARG (struct=2 op=10 opsub=0 tt=78) { name = 'index' orig_datatype = 'int32' datatype = '' orig_typeinfo: IDENT (struct=12 op=1 opsub=0 tt=78) name = 'int32' typeinfo: value: } code: BLOCK (struct=4 op=21 opsub=0 tt=75) { locals: code: { IF/ELSE (struct=9 op=22 opsub=0 tt=75) { test: || (struct=7 op=4 opsub=0 tt=226) { arg: { < (struct=7 op=4 opsub=0 tt=206) { arg: { IDENT (struct=12 op=1 opsub=0 tt=78) name = 'index' uint8(0) (struct=13 op=3 opsub=0 tt=86) } } >= (struct=7 op=4 opsub=0 tt=205) { arg: { IDENT (struct=12 op=1 opsub=0 tt=78) name = 'index' IDENT (struct=12 op=1 opsub=0 tt=78) name = 'm_size' } } } } ontrue: BLOCK (struct=4 op=21 opsub=0 tt=78) { locals: code: { FCALL (struct=7 op=6 opsub=0 tt=40) { arg: { IDENT (struct=12 op=1 opsub=0 tt=78) name = 'WARNING' EXPR_LIST (struct=7 op=15 opsub=0 tt=40) { arg: str(array index out of bounds) (struct=13 op=3 opsub=0 tt=83) } } } RETURN (struct=7 op=18 opsub=0 tt=78) { arg: FCALL (struct=7 op=6 opsub=0 tt=40) { arg: { IDENT (struct=12 op=1 opsub=0 tt=78) name = 'T' EXPR_LIST (struct=7 op=15 opsub=0 tt=40) { arg: } } } } } } onfalse: } RETURN (struct=7 op=18 opsub=0 tt=78) { arg: INDEX (struct=7 op=7 opsub=0 tt=91) { arg: { IDENT (struct=12 op=1 opsub=0 tt=78) name = 'm_data' IDENT (struct=12 op=1 opsub=0 tt=78) name = 'index' } } } } } bytecode: DECLARG index [11] IF CONST 0 [25] : 00 LT 1 [28] <= index [11], 0 [25] GTEQ <> 2 [29] <= index [11], m_size [13] BLN_OR 3 [30] <= 1 [28], 2 [29] DO FCALL <> 4 [31] <= func:WARNING [14] args(0): FCALL <> 5 [32] <= func:T [12] args(0): RETURN 5 [32] ENDO RETURN [0] }