@@ -150,19 +150,29 @@ static void No_Nones_Or_Logic(REBVAL *arg) {
150
150
}
151
151
// Find a datatype in block:
152
152
else if (IS_DATATYPE (target ) || IS_TYPESET (target )) {
153
- for (; index >= start && index < end ; index += skip ) {
154
- value = BLK_SKIP (series , index );
155
- // Used if's so we can trace it...
156
- if (IS_DATATYPE (target )) {
157
- if ((REBINT )VAL_TYPE (value ) == VAL_DATATYPE (target )) return index ;
158
- if (IS_DATATYPE (value ) && VAL_DATATYPE (value ) == VAL_DATATYPE (target )) return index ;
153
+ if (flags & AM_FIND_ONLY ) {
154
+ // not checking value types, only if value and target are really same
155
+ for (; index >= start && index < end ; index += skip ) {
156
+ value = BLK_SKIP (series , index );
157
+ if (VAL_TYPE (value ) == VAL_TYPE (target )) {
158
+ if (IS_DATATYPE (target ) && VAL_DATATYPE (value ) == VAL_DATATYPE (target )) return index ;
159
+ else if EQUAL_TYPESET (value , target )
160
+ return index ;
161
+ }
162
+ if (flags & AM_FIND_MATCH ) break ;
159
163
}
160
- if (IS_TYPESET (target )) {
161
- if (TYPE_CHECK (target , VAL_TYPE (value ))) return index ;
162
- //if (IS_DATATYPE(value) && TYPE_CHECK(target, VAL_DATATYPE(value))) return index; //@@ issues/256
163
- if (IS_TYPESET (value ) && EQUAL_TYPESET (value , target )) return index ;
164
+ } else {
165
+ for (; index >= start && index < end ; index += skip ) {
166
+ value = BLK_SKIP (series , index );
167
+ // Used if's so we can trace it...
168
+ if (IS_DATATYPE (target )) {
169
+ if ((REBINT )VAL_TYPE (value ) == VAL_DATATYPE (target ))
170
+ return index ;
171
+ }
172
+ else if (TYPE_CHECK (target , VAL_TYPE (value )))
173
+ return index ;
174
+ if (flags & AM_FIND_MATCH ) break ;
164
175
}
165
- if (flags & AM_FIND_MATCH ) break ;
166
176
}
167
177
return NOT_FOUND ;
168
178
}
0 commit comments