@@ -1109,15 +1109,20 @@ class Eval {
11091109 }
11101110
11111111 public function readArrayAddress ( value : Value , index : Int ) {
1112- return switch ( value .v ) {
1113- case VArray (t ,len ,_ ,ptr ) if ( index >= 0 && index < len ):
1114- var content = readPointer ( ptr . offset ( align . ptr * 2 )) ;
1112+ switch ( value .v ) {
1113+ case VArray (t ,len ,_ ,ptr ) if ( index >= 0 && index < len && ptr != null ):
1114+ var content = ptr ;
11151115 var offset = align .typeSize (t ) * index ;
1116- if ( t .isPtr () ) offset + = sizeofVArray ;
1116+ if ( readType (ptr ).match (HArray ) ) {
1117+ offset + = sizeofVArray ;
1118+ } else {
1119+ content = readPointer (ptr .offset (align .ptr * 2 ));
1120+ if ( t .isPtr () ) offset + = sizeofVArray ; // ArrayBytes
1121+ }
11171122 return AAddr (content .offset (offset ),t );
11181123 default :
1119- return ANone ;
11201124 }
1125+ return ANone ;
11211126 }
11221127
11231128 function valueCast ( p : Pointer , t : HLType ) : Value {
@@ -1212,6 +1217,11 @@ class Eval {
12121217 v = VEnum (c .name ,[for ( a in c .params ) readVal (p .offset (a .offset ),a .t )], p );
12131218 case HAbstract (" hl_int64_map" ):
12141219 v = makeMap (p , HI64 );
1220+ case HArray :
1221+ var type = readType (p .offset (align .ptr ));
1222+ var length = readI32 (p .offset (align .ptr * 2 ));
1223+ var size = align .typeSize (type );
1224+ v = VArray (type , length , function (i ) return readVal (p .offset (sizeofVArray + i * size ), type ), p );
12151225 default :
12161226 }
12171227 return { v : v , t : t };
0 commit comments