summaryrefslogtreecommitdiff
path: root/load.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-03-08 23:54:41 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-03-08 23:54:41 +0000
commit1b7143309b7570dd41a3d311f193f5d382d10996 (patch)
tree307637c6bfb0137eb55f0b31f9ba2103fee7e57a /load.c
parent8237581a2eb4ea5bfd38a2f0ebfb54110704235c (diff)
load.c: move loop invariant condition
* load.c (rb_feature_p): move this_feature_index condition which is loop invariant. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@39645 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'load.c')
-rw-r--r--load.c70
1 files changed, 36 insertions, 34 deletions
diff --git a/load.c b/load.c
index 6785419f5d..df20181732 100644
--- a/load.c
+++ b/load.c
@@ -406,40 +406,42 @@ rb_feature_p(const char *feature, const char *ext, int rb, int expanded, const c
or ends in '/'. This includes both match forms above, as well
as any distractors, so we may ignore all other entries in `features`.
*/
- for (i = 0; !NIL_P(this_feature_index); i++) {
- VALUE entry;
- long index;
- if (RB_TYPE_P(this_feature_index, T_ARRAY)) {
- if (i >= RARRAY_LEN(this_feature_index)) break;
- entry = RARRAY_PTR(this_feature_index)[i];
- }
- else {
- if (i > 0) break;
- entry = this_feature_index;
- }
- index = FIX2LONG(entry);
-
- v = RARRAY_PTR(features)[index];
- f = StringValuePtr(v);
- if ((n = RSTRING_LEN(v)) < len) continue;
- if (strncmp(f, feature, len) != 0) {
- if (expanded) continue;
- if (!load_path) load_path = rb_get_expanded_load_path();
- if (!(p = loaded_feature_path(f, n, feature, len, type, load_path)))
- continue;
- expanded = 1;
- f += RSTRING_LEN(p) + 1;
- }
- if (!*(e = f + len)) {
- if (ext) continue;
- return 'u';
- }
- if (*e != '.') continue;
- if ((!rb || !ext) && (IS_SOEXT(e) || IS_DLEXT(e))) {
- return 's';
- }
- if ((rb || !ext) && (IS_RBEXT(e))) {
- return 'r';
+ if (!NIL_P(this_feature_index)) {
+ for (i = 0; ; i++) {
+ VALUE entry;
+ long index;
+ if (RB_TYPE_P(this_feature_index, T_ARRAY)) {
+ if (i >= RARRAY_LEN(this_feature_index)) break;
+ entry = RARRAY_PTR(this_feature_index)[i];
+ }
+ else {
+ if (i > 0) break;
+ entry = this_feature_index;
+ }
+ index = FIX2LONG(entry);
+
+ v = RARRAY_PTR(features)[index];
+ f = StringValuePtr(v);
+ if ((n = RSTRING_LEN(v)) < len) continue;
+ if (strncmp(f, feature, len) != 0) {
+ if (expanded) continue;
+ if (!load_path) load_path = rb_get_expanded_load_path();
+ if (!(p = loaded_feature_path(f, n, feature, len, type, load_path)))
+ continue;
+ expanded = 1;
+ f += RSTRING_LEN(p) + 1;
+ }
+ if (!*(e = f + len)) {
+ if (ext) continue;
+ return 'u';
+ }
+ if (*e != '.') continue;
+ if ((!rb || !ext) && (IS_SOEXT(e) || IS_DLEXT(e))) {
+ return 's';
+ }
+ if ((rb || !ext) && (IS_RBEXT(e))) {
+ return 'r';
+ }
}
}