pike.git/
lib/
master.pike.in
Branch:
Tag:
Non-build tags
All tags
No tags
1998-10-16
1998-10-16 17:32:11 by Henrik Grubbström (Grubba) <grubba@grubba.org>
94257b6c94710f03fec131d94715f07874c691bd (
76
lines) (+
62
/-
14
)
[
Show
|
Annotate
]
Branch:
7.9
Added support for joinnodes.
Rev: lib/master.pike.in:1.32
1:
-
/* $Id: master.pike.in,v 1.
31
1998/
06
/
06
03
:
03
:
23
hubbe
Exp $
+
/* $Id: master.pike.in,v 1.
32
1998/
10
/
16
17
:
32
:
11
grubba
Exp $
* * Master-file for Pike. *
471:
} };
+
class joinnode
+
{
+
class ZERO_TYPE {};
+
array(object|mapping) joined_modules;
+
mapping cache=([]);
+
+
void create(array(object|mapping) _joined_modules)
+
{
+
joined_modules = _joined_modules;
+
}
+
+
object|mapping ind(string index)
+
{
+
array(mixed) res = ({});
+
foreach(joined_modules, object|mapping o) {
+
mixed ret;
+
if (!zero_type(ret = o[index])) {
+
res += ({ ret });
+
}
+
}
+
if (sizeof(res) > 1) {
+
return joinnode(res);
+
} else if (sizeof(res)) {
+
return res[0];
+
}
+
return UNDEFINED;
+
}
+
+
object|mapping `[](string index)
+
{
+
object|mapping ret;
+
if (!zero_type(ret = cache[index])) {
+
if (ret != ZERO_TYPE) {
+
return ret;
+
}
+
return UNDEFINED;
+
}
+
ret = ind(index);
+
if (zero_type(ret)) {
+
cache[index] = ZERO_TYPE;
+
} else {
+
cache[index] = ret;
+
}
+
return ret;
+
}
+
};
+
// Variables mustn't be static to allow for replace_master(). // /grubba 1998-04-10 mapping(string:mixed) fc=([]);
515:
mixed resolv(string identifier, string|void current_file) {
-
mixed
ret;
-
string *tmp,path
;
-
-
if
(
!ret
)
+
array(
mixed
)
tmp = ({})
;
+
foreach(pike_module_path,
string path)
{
-
foreach(pike_module_path, path)
-
{
+
string file=combine_path(path,identifier);
-
if(ret=findmodule(file))
break
;
+
if(
mixed
ret=findmodule(file))
{
+
if (mixed new_ret = ret->_module_value) {
+
ret = new_ret
;
}
-
+
tmp += ({ ret });
}
-
-
if(ret)
-
{
-
if(mixed tmp=ret->_module_value) ret=tmp;
-
return ret;
+
}
-
+
if (sizeof(tmp)) {
+
if (sizeof(tmp) == 1) {
+
return(tmp[0]);
+
}
+
return joinnode(tmp);
+
}
return UNDEFINED; }