ec9446 | 2002-05-01 | Martin Stjernholm | |
|
2f520e | 2002-04-28 | Martin Nilsson | |
|
59e32d | 2002-06-01 | Martin Nilsson | |
|
2f520e | 2002-04-28 | Martin Nilsson | |
|
c896b4 | 1998-04-29 | Henrik Grubbström (Grubba) | |
|
a580e1 | 2000-09-27 | Fredrik Hübinette (Hubbe) | | #pike __REAL_VERSION__
|
0fcf0c | 2004-03-05 | Martin Nilsson | |
|
2f520e | 2002-04-28 | Martin Nilsson | |
|
d5e23b | 2008-06-01 | Henrik Grubbström (Grubba) | |
|
2f520e | 2002-04-28 | Martin Nilsson | |
|
bec57d | 1999-09-06 | Fredrik Hübinette (Hubbe) | | #define PIKE_AUTORELOAD
|
2f520e | 2002-04-28 | Martin Nilsson | | #define GETCWD_CACHE
|
99b473 | 2009-06-04 | Per Hedbor | |
|
2f520e | 2002-04-28 | Martin Nilsson | |
|
77e4f2 | 2002-07-09 | Martin Nilsson | |
|
2f520e | 2002-04-28 | Martin Nilsson | | #undef PIKE_MODULE_RELOC
#ifndef PIKE_WARNINGS
|
51a8f4 | 2002-05-15 | Henrik Grubbström (Grubba) | | #define PIKE_WARNINGS 1
|
2f520e | 2002-04-28 | Martin Nilsson | | #endif /* PIKE_WARNINGS */
|
bec57d | 1999-09-06 | Fredrik Hübinette (Hubbe) | |
|
c896b4 | 1998-04-29 | Henrik Grubbström (Grubba) | |
#if !defined(BT_MAX_STRING_LEN) || (BT_MAX_STRING_LEN <= 0)
#undef BT_MAX_STRING_LEN
|
a85820 | 1999-10-15 | Fredrik Hübinette (Hubbe) | | #define BT_MAX_STRING_LEN 200
|
c896b4 | 1998-04-29 | Henrik Grubbström (Grubba) | | #endif /* !defined(BT_MAX_STRING_LEN) || (BT_MAX_STRING_LEN <= 0) */
|
d4fd0a | 1999-12-06 | Henrik Grubbström (Grubba) | | constant bt_max_string_len = BT_MAX_STRING_LEN;
|
6df5a5 | 2001-11-07 | Martin Nilsson | |
|
8a4985 | 2002-03-10 | Martin Stjernholm | |
|
6df5a5 | 2001-11-07 | Martin Nilsson | |
|
97e5c7 | 2001-07-28 | Martin Nilsson | |
|
401fa0 | 2002-12-02 | Martin Stjernholm | |
|
e115cb | 1999-12-09 | Henrik Grubbström (Grubba) | | #ifndef OUT_OF_DATE_WARNING
#define OUT_OF_DATE_WARNING 1
#endif /* OUT_OF_DATE_WARNING */
constant out_of_date_warning = OUT_OF_DATE_WARNING;
|
83ccb4 | 2004-04-11 | Henrik Grubbström (Grubba) | |
|
1813e8 | 2013-03-16 | Chris Angelico | | #if defined(__NT__) || defined(__amigaos__) || defined(__OS2__)
|
929cf7 | 2003-08-19 | Martin Nilsson | | #define PATH_SEPARATOR ";"
#else
#define PATH_SEPARATOR ":"
#endif
|
61b41f | 2003-12-18 | Marcus Comstedt | | #ifdef __amigaos__
#define UPDIR "/"
#else
#define UPDIR "../"
#endif
|
6df5a5 | 2001-11-07 | Martin Nilsson | |
|
97e5c7 | 2001-07-28 | Martin Nilsson | |
|
2f520e | 2002-04-28 | Martin Nilsson | |
int want_warnings = PIKE_WARNINGS;
|
df2c63 | 2000-08-02 | Henrik Grubbström (Grubba) | |
|
2f520e | 2002-04-28 | Martin Nilsson | |
int compat_major=-1;
|
4839dd | 2001-09-02 | Marcus Comstedt | |
|
2f520e | 2002-04-28 | Martin Nilsson | |
int compat_minor=-1;
|
f6da7b | 2004-06-27 | Martin Nilsson | |
int show_if_constant_errors = 0;
|
2f520e | 2002-04-28 | Martin Nilsson | |
|
b01e7e | 2010-07-29 | Martin Stjernholm | | int is_pike_master = 0;
|
2f520e | 2002-04-28 | Martin Nilsson | |
|
677d26 | 2003-11-14 | Martin Stjernholm | |
|
7d016d | 2008-03-26 | Henrik Grubbström (Grubba) | | private object(_static_modules.Builtin) Builtin = _static_modules.Builtin();
|
59db4f | 2013-06-11 | Martin Nilsson | | private constant Files = _static_modules._Stdio;
|
677d26 | 2003-11-14 | Martin Stjernholm | |
#define Stat Files.Stat
|
2f520e | 2002-04-28 | Martin Nilsson | | #define capitalize(X) (upper_case((X)[..0])+(X)[1..])
|
7d016d | 2008-03-26 | Henrik Grubbström (Grubba) | | #define trim_all_whites(X) (Builtin.string_trim_all_whites (X))
|
c896b4 | 1998-04-29 | Henrik Grubbström (Grubba) | |
|
d4140e | 2004-07-04 | Stephen R. van den Berg | | private function write = Files()->_stdout->write;
private function werror = Files()->_stderr->write;
|
e3276e | 2004-07-04 | Stephen R. van den Berg | |
|
6857b1 | 2008-10-12 | Martin Stjernholm | |
constant pike_cycle_depth = 0;
|
0e22d1 | 2011-09-11 | Martin Stjernholm | |
#if defined (RESOLV_DEBUG) || defined (RECUR_COMPILE_DEBUG)
|
3d21a6 | 2003-03-27 | Martin Stjernholm | |
#if constant (thread_local)
|
0e22d1 | 2011-09-11 | Martin Stjernholm | | protected object _msg_depth = thread_local();
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | |
|
0e22d1 | 2011-09-11 | Martin Stjernholm | | #define GET_MSG_DEPTH (_msg_depth && _msg_depth->get())
#define INC_MSG_DEPTH() (_msg_depth && _msg_depth->set (_msg_depth->get() + 1))
#define DEC_MSG_DEPTH() (_msg_depth && _msg_depth->set (_msg_depth->get() - 1))
|
3d21a6 | 2003-03-27 | Martin Stjernholm | | #else
|
0e22d1 | 2011-09-11 | Martin Stjernholm | | protected int _msg_depth;
#define GET_MSG_DEPTH _msg_depth
#define INC_MSG_DEPTH() (++_msg_depth)
#define DEC_MSG_DEPTH() (--_msg_depth)
|
3d21a6 | 2003-03-27 | Martin Stjernholm | | #endif
|
0e22d1 | 2011-09-11 | Martin Stjernholm | | #endif
#ifdef RESOLV_DEBUG
#define GET_RESOLV_MSG_DEPTH GET_MSG_DEPTH
|
3054c0 | 2013-05-16 | Arne Goedeke | | #define INC_RESOLV_MSG_DEPTH() INC_MSG_DEPTH()
#define DEC_RESOLV_MSG_DEPTH() DEC_MSG_DEPTH()
|
0e22d1 | 2011-09-11 | Martin Stjernholm | |
|
075a2e | 2008-08-31 | Henrik Grubbström (Grubba) | | void resolv_debug (sprintf_format fmt, sprintf_args... args)
|
3d21a6 | 2003-03-27 | Martin Stjernholm | | {
string pad = " " * GET_RESOLV_MSG_DEPTH;
if (sizeof (args)) fmt = sprintf (fmt, @args);
if (fmt[-1] == '\n')
|
35320b | 2004-10-30 | Martin Stjernholm | | fmt = pad + replace (fmt[..<1], "\n", "\n" + pad) + "\n";
|
3d21a6 | 2003-03-27 | Martin Stjernholm | | else
fmt = pad + replace (fmt, "\n", "\n" + pad);
|
774933 | 2004-12-27 | Henrik Grubbström (Grubba) | | if (!werror) werror = Files()->_stderr->write;
|
3d21a6 | 2003-03-27 | Martin Stjernholm | | werror (fmt);
}
#else // !RESOLV_DEBUG
#define INC_RESOLV_MSG_DEPTH() 0
#define DEC_RESOLV_MSG_DEPTH() 0
#define resolv_debug(X...) do {} while (0)
#endif // !RESOLV_DEBUG
|
075a2e | 2008-08-31 | Henrik Grubbström (Grubba) | | constant no_value = (<>);
constant NoValue = typeof (no_value);
|
b78402 | 2008-05-28 | Henrik Grubbström (Grubba) | |
|
e3ba08 | 2008-09-14 | Henrik Grubbström (Grubba) | |
|
87ce12 | 2008-05-29 | Henrik Grubbström (Grubba) | |
|
4ee6a6 | 2008-09-13 | Henrik Grubbström (Grubba) | |
|
e3ba08 | 2008-09-14 | Henrik Grubbström (Grubba) | |
|
87ce12 | 2008-05-29 | Henrik Grubbström (Grubba) | |
|
21c85e | 2008-06-01 | Henrik Grubbström (Grubba) | |
|
87ce12 | 2008-05-29 | Henrik Grubbström (Grubba) | |
|
21c85e | 2008-06-01 | Henrik Grubbström (Grubba) | |
|
e3ba08 | 2008-09-14 | Henrik Grubbström (Grubba) | | protected class Pike_0_5_master
|
b78402 | 2008-05-28 | Henrik Grubbström (Grubba) | | {
string describe_backtrace(array(mixed) trace);
object low_cast_to_object(string oname, string current_file);
|
87ce12 | 2008-05-29 | Henrik Grubbström (Grubba) | | extern array(string) pike_include_path;
|
e3ba08 | 2008-09-14 | Henrik Grubbström (Grubba) | | string pike_library_path =
|
5667ee | 2009-03-05 | Henrik Grubbström (Grubba) | | #if "#lib_prefix#"[0]!='#'
"#lib_prefix#"
|
e3ba08 | 2008-09-14 | Henrik Grubbström (Grubba) | | #else
|
7729db | 2010-11-19 | Henrik Grubbström (Grubba) | | dirname(__FILE__)
|
e3ba08 | 2008-09-14 | Henrik Grubbström (Grubba) | | #endif
;
|
87ce12 | 2008-05-29 | Henrik Grubbström (Grubba) | | extern array(string) pike_module_path;
extern array(string) pike_program_path;
|
b78402 | 2008-05-28 | Henrik Grubbström (Grubba) | | #ifdef GETCWD_CACHE
|
87ce12 | 2008-05-29 | Henrik Grubbström (Grubba) | | extern string current_path;
|
b78402 | 2008-05-28 | Henrik Grubbström (Grubba) | | int cd(string s);
string getcwd();
#endif
string combine_path_with_cwd(string path);
#ifdef FILE_STAT_CACHE
|
87ce12 | 2008-05-29 | Henrik Grubbström (Grubba) | | extern int invalidate_time;
|
6f8918 | 2008-05-29 | Henrik Grubbström (Grubba) | | extern mapping(string:multiset(string)) dir_cache;
|
0217a6 | 2009-06-10 | Henrik Grubbström (Grubba) | | #endif
|
6f8918 | 2008-05-29 | Henrik Grubbström (Grubba) | | local array(mixed) master_file_stat(string x)
{
|
863582 | 2008-05-29 | Henrik Grubbström (Grubba) | | Stat st = global::master_file_stat(x);
return st && (array)st;
|
6f8918 | 2008-05-29 | Henrik Grubbström (Grubba) | | }
|
fc2a32 | 2008-06-07 | Henrik Grubbström (Grubba) | |
|
49c1bc | 2008-06-07 | Henrik Grubbström (Grubba) | |
|
fc2a32 | 2008-06-07 | Henrik Grubbström (Grubba) | |
|
49c1bc | 2008-06-07 | Henrik Grubbström (Grubba) | |
string|mapping(string:string) getenv(string|void s);
void putenv(string|void varname, string|void value);
|
35f51c | 2008-06-28 | Martin Nilsson | | protected mapping(string:array(string)) compat_environment;
protected mapping(string:array(string)) compat_environment_copy;
|
fc2a32 | 2008-06-07 | Henrik Grubbström (Grubba) | |
|
49c1bc | 2008-06-07 | Henrik Grubbström (Grubba) | | #pragma no_deprecation_warnings
local __deprecated__(mapping(string:array(string))) `environment()
|
fc2a32 | 2008-06-07 | Henrik Grubbström (Grubba) | | {
|
49c1bc | 2008-06-07 | Henrik Grubbström (Grubba) | | if (compat_environment) return compat_environment;
compat_environment_copy = ([]);
|
fc2a32 | 2008-06-07 | Henrik Grubbström (Grubba) | | #ifdef __NT__
|
49c1bc | 2008-06-07 | Henrik Grubbström (Grubba) | |
foreach((array(array(string)))Builtin._getenv(), array(string) pair) {
compat_environment_copy[lower_case(pair[0])] = pair;
}
#else
foreach((array(array(string)))getenv(), array(string) pair) {
compat_environment_copy[pair[0]] = pair;
}
|
fc2a32 | 2008-06-07 | Henrik Grubbström (Grubba) | | #endif
|
49c1bc | 2008-06-07 | Henrik Grubbström (Grubba) | | return compat_environment = copy_value(compat_environment_copy);
|
fc2a32 | 2008-06-07 | Henrik Grubbström (Grubba) | | }
|
49c1bc | 2008-06-07 | Henrik Grubbström (Grubba) | | local void `environment=(__deprecated__(mapping(string:array(string)))
new_env)
|
fc2a32 | 2008-06-07 | Henrik Grubbström (Grubba) | | {
|
49c1bc | 2008-06-07 | Henrik Grubbström (Grubba) | | compat_environment = new_env;
|
0f189b | 2008-06-07 | Henrik Grubbström (Grubba) | | if (!new_env)
compat_environment_copy = 0;
else if (!compat_environment_copy)
compat_environment_copy = ([]);
|
fc2a32 | 2008-06-07 | Henrik Grubbström (Grubba) | | }
|
49c1bc | 2008-06-07 | Henrik Grubbström (Grubba) | | #pragma deprecation_warnings
|
fc2a32 | 2008-06-07 | Henrik Grubbström (Grubba) | |
|
b78402 | 2008-05-28 | Henrik Grubbström (Grubba) | | void add_include_path(string tmp);
void remove_include_path(string tmp);
void add_module_path(string tmp);
void remove_module_path(string tmp);
void add_program_path(string tmp);
void remove_program_path(string tmp);
mapping(string:program|NoValue) programs;
program cast_to_program(string pname, string current_file);
void handle_error(array(mixed) trace);
|
21c85e | 2008-06-01 | Henrik Grubbström (Grubba) | |
|
6f8918 | 2008-05-29 | Henrik Grubbström (Grubba) | | local __deprecated__ object new(mixed prog, mixed ... args)
|
b78402 | 2008-05-28 | Henrik Grubbström (Grubba) | | {
if(stringp(prog))
prog=cast_to_program(prog,backtrace()[-2][0]);
return prog(@args);
}
|
21c85e | 2008-06-01 | Henrik Grubbström (Grubba) | |
|
b78402 | 2008-05-28 | Henrik Grubbström (Grubba) | | void create();
program handle_inherit(string pname, string current_file);
|
87ce12 | 2008-05-29 | Henrik Grubbström (Grubba) | | extern mapping(program:object) objects;
|
b78402 | 2008-05-28 | Henrik Grubbström (Grubba) | | object low_cast_to_object(string oname, string current_file);
object cast_to_object(string oname, string current_file);
class dirnode {};
object findmodule(string fullname);
|
e3ba08 | 2008-09-14 | Henrik Grubbström (Grubba) | | local protected object Pike_0_5_compat_handler;
|
b78402 | 2008-05-28 | Henrik Grubbström (Grubba) | | local mixed resolv(string identifier, string|void current_file)
{
|
e3ba08 | 2008-09-14 | Henrik Grubbström (Grubba) | | if (!Pike_0_5_compat_handler) {
Pike_0_5_compat_handler = global::get_compilation_handler(0, 5);
|
b78402 | 2008-05-28 | Henrik Grubbström (Grubba) | | }
|
e3ba08 | 2008-09-14 | Henrik Grubbström (Grubba) | | return Pike_0_5_compat_handler->resolv(identifier, current_file);
|
b78402 | 2008-05-28 | Henrik Grubbström (Grubba) | | }
|
87ce12 | 2008-05-29 | Henrik Grubbström (Grubba) | | extern string _master_file_name;
|
b78402 | 2008-05-28 | Henrik Grubbström (Grubba) | | void _main(array(string) orig_argv, array(string) env);
|
87ce12 | 2008-05-29 | Henrik Grubbström (Grubba) | | extern mixed inhibit_compile_errors;
|
6f8918 | 2008-05-29 | Henrik Grubbström (Grubba) | | void set_inhibit_compile_errors(mixed f);
|
b78402 | 2008-05-28 | Henrik Grubbström (Grubba) | | string trim_file_name(string s);
void compile_error(string file,int line,string err);
string handle_include(string f, string current_file, int local_include);
|
6f8918 | 2008-05-29 | Henrik Grubbström (Grubba) | | local __deprecated__ string stupid_describe(mixed m)
|
87ce12 | 2008-05-29 | Henrik Grubbström (Grubba) | | {
switch(string typ=sprintf("%t",m))
{
case "int":
case "float":
return (string)m;
case "string":
if(sizeof(m) < BT_MAX_STRING_LEN)
{
string t = sprintf("%O", m);
if (sizeof(t) < (BT_MAX_STRING_LEN + 2)) {
return t;
}
t = 0;
}
case "array":
case "mapping":
case "multiset":
return typ+"["+sizeof(m)+"]";
default:
return typ;
}
}
|
e3ba08 | 2008-09-14 | Henrik Grubbström (Grubba) | | string describe_backtrace(array(mixed) trace);
object get_compat_master(int major, int minor)
{
if (!major && (minor < 6))
return this_program::this;
return get_compat_master(major, minor);
}
}
protected class Pike_0_6_master
{
inherit Pike_0_5_master;
int is_absolute_path(string p);
array(string) explode_path(string p);
string dirname(string x);
string basename(string x);
object low_cast_to_object(string oname, string current_file);
#pragma no_deprecation_warnings
|
a41ee6 | 2008-09-14 | Henrik Grubbström (Grubba) | | private __deprecated__(string) pike_library_path =
(__deprecated__(string))Pike_0_5_master::pike_library_path;
|
e3ba08 | 2008-09-14 | Henrik Grubbström (Grubba) | | #pragma deprecation_warnings
extern int want_warnings;
program compile_string(string data, void|string name);
program compile_file(string file);
#if constant(_static_modules.Builtin.mutex)
extern object compilation_mutex;
#endif
local constant mkmultiset = predef::mkmultiset;
local __deprecated__(function) clone = new;
constant master_efuns = ({});
class joinnode {};
extern mapping(string:mixed) fc;
mixed handle_import(string what, string|void current_file);
local protected object Pike_0_6_compat_handler;
local mixed resolv(string identifier, string|void current_file)
{
if (!Pike_0_6_compat_handler) {
Pike_0_6_compat_handler = global::get_compilation_handler(0, 6);
}
return Pike_0_6_compat_handler->resolv(identifier, current_file);
}
extern string _pike_file_name;
void compile_warning(string file,int line,string err);
string read_include(string f);
|
b78402 | 2008-05-28 | Henrik Grubbström (Grubba) | | string describe_program(program p);
string describe_backtrace(array(mixed) trace);
class Codec {};
|
6f8918 | 2008-05-29 | Henrik Grubbström (Grubba) | |
|
4ee6a6 | 2008-09-13 | Henrik Grubbström (Grubba) | | object get_compat_master(int major, int minor)
{
|
e3ba08 | 2008-09-14 | Henrik Grubbström (Grubba) | | if (!major && (minor < 6))
return Pike_0_5_master::get_compat_master(major, minor);
|
4ee6a6 | 2008-09-13 | Henrik Grubbström (Grubba) | | if (!major && (minor < 7))
return this_program::this;
return get_compat_master(major, minor);
}
|
e3ba08 | 2008-09-14 | Henrik Grubbström (Grubba) | |
|
6f8918 | 2008-05-29 | Henrik Grubbström (Grubba) | | }
|
d5e23b | 2008-06-01 | Henrik Grubbström (Grubba) | |
|
4ee6a6 | 2008-09-13 | Henrik Grubbström (Grubba) | |
|
d5e23b | 2008-06-01 | Henrik Grubbström (Grubba) | |
|
21c85e | 2008-06-01 | Henrik Grubbström (Grubba) | |
|
d5e23b | 2008-06-01 | Henrik Grubbström (Grubba) | |
|
21c85e | 2008-06-01 | Henrik Grubbström (Grubba) | |
|
6f8918 | 2008-05-29 | Henrik Grubbström (Grubba) | | class Pike_7_0_master
{
inherit Pike_0_6_master;
constant bt_max_string_len = 1;
constant out_of_date_warning = 1;
#ifdef PIKE_FAKEROOT
extern object o;
string fakeroot(string s);
#endif
#ifdef PIKE_AUTORELOAD
extern int autoreload_on;
extern int newest;
|
a41ee6 | 2008-09-14 | Henrik Grubbström (Grubba) | | extern mapping(string:int) load_time;
|
6f8918 | 2008-05-29 | Henrik Grubbström (Grubba) | | #endif
string master_read_file();
string normalize_path(string X);
|
a41ee6 | 2008-09-14 | Henrik Grubbström (Grubba) | | array(string) query_precompiled_names(string fname);
|
6f8918 | 2008-05-29 | Henrik Grubbström (Grubba) | | program cast_to_program(string pname, string current_file,
object|void handler);
void handle_error(array(mixed)|object trace);
|
35f51c | 2008-06-28 | Martin Nilsson | | protected private constant mkmultiset = mkmultiset;
|
6f8918 | 2008-05-29 | Henrik Grubbström (Grubba) | | program handle_inherit(string pname, string current_file, object|void handler);
mixed handle_import(string what, string|void current_file, object|void handler);
mixed resolv_base(string identifier, string|void current_file);
extern mapping resolv_cache;
|
35f51c | 2008-06-28 | Martin Nilsson | | local protected object Pike_7_0_compat_handler;
|
6f8918 | 2008-05-29 | Henrik Grubbström (Grubba) | | local mixed resolv(string identifier, string|void current_file)
{
if (!Pike_7_0_compat_handler) {
Pike_7_0_compat_handler = global::get_compilation_handler(7, 0);
}
return Pike_7_0_compat_handler->resolv(identifier, current_file);
}
mixed get_inhibit_compile_errors();
string decode_charset(string data, string charset);
local __deprecated__(int) clipped=0;
local __deprecated__(int) canclip=0;
#pragma no_deprecation_warnings
local __deprecated__ string stupid_describe(mixed m, int maxlen)
{
string typ;
if (catch (typ=sprintf("%t",m)))
typ = "object";
switch(typ)
{
case "int":
case "float":
return (string)m;
case "string":
canclip++;
if(sizeof(m) < maxlen)
{
string t = sprintf("%O", m);
if (sizeof(t) < (maxlen + 2)) {
return t;
}
t = 0;
}
clipped++;
if(maxlen>10)
{
return sprintf("%O+[%d]",m[..maxlen-5],sizeof(m)-(maxlen-5));
}else{
return "string["+sizeof(m)+"]";
}
case "array":
if(!sizeof(m)) return "({})";
if(maxlen<5)
{
clipped++;
return "array["+sizeof(m)+"]";
}
canclip++;
return "({" + stupid_describe_comma_list(m,maxlen-2) +"})";
case "mapping":
if(!sizeof(m)) return "([])";
return "mapping["+sizeof(m)+"]";
case "multiset":
if(!sizeof(m)) return "(<>)";
return "multiset["+sizeof(m)+"]";
case "function":
if(string tmp=describe_program(m)) return tmp;
if(object o=function_object(m))
return (describe_object(o)||"")+"->"+function_name(m);
else {
string tmp;
if (catch (tmp = function_name(m)))
return "function";
return tmp || "function";
}
case "program":
if(string tmp=describe_program(m)) return tmp;
return typ;
default:
if (objectp(m))
if(string tmp=describe_object(m)) return tmp;
return typ;
}
}
local __deprecated__ string stupid_describe_comma_list(array x, int maxlen)
{
string ret="";
if(!sizeof(x)) return "";
if(maxlen<0) return ",,,"+sizeof(x);
int clip=min(maxlen/2,sizeof(x));
int len=maxlen;
int done=0;
while(1)
{
array(string) z=allocate(clip);
array(int) isclipped=allocate(clip);
array(int) clippable=allocate(clip);
for(int e=0;e<clip;e++)
{
clipped=0;
canclip=0;
z[e]=stupid_describe(x[e],len);
isclipped[e]=clipped;
clippable[e]=canclip;
}
while(1)
{
string ret = z[..clip-1]*",";
if(done || sizeof(ret)<=maxlen+1)
{
int tmp=sizeof(x)-clip-1;
clipped=`+(0,@isclipped);
if(tmp>=0)
{
clipped++;
ret+=",,,"+tmp;
}
canclip++;
return ret;
}
int last_newlen=len;
int newlen;
int clipsuggest;
while(1)
{
int smallsize=0;
int num_large=0;
clipsuggest=0;
for(int e=0;e<clip;e++)
{
if((sizeof(z[e])>=last_newlen || isclipped[e]) && clippable[e])
num_large++;
else
smallsize+=sizeof(z[e]);
if(num_large * 15 + smallsize < maxlen) clipsuggest=e+1;
}
newlen=num_large ? (maxlen-smallsize)/num_large : 0;
if(newlen<8 || newlen >= last_newlen) break;
last_newlen=newlen;
}
if(newlen < 8 && clip)
{
clip-= (clip/4) || 1;
if(clip > clipsuggest) clip=clipsuggest;
}else{
len=newlen;
done++;
break;
}
}
}
return ret;
}
#pragma deprecation_warnings
string describe_object(object o);
string describe_backtrace(array(mixed) trace, void|int linewidth);
string describe_error(mixed trace);
object get_compat_master(int major, int minor)
{
|
4ee6a6 | 2008-09-13 | Henrik Grubbström (Grubba) | | if (!major && (minor < 7))
return Pike_0_6_master::get_compat_master(major, minor);
if ((major < 7) || ((major == 7) && !minor))
return this_program::this;
return get_compat_master(major, minor);
|
6f8918 | 2008-05-29 | Henrik Grubbström (Grubba) | | }
|
a41ee6 | 2008-09-14 | Henrik Grubbström (Grubba) | |
|
b78402 | 2008-05-28 | Henrik Grubbström (Grubba) | | }
|
d5e23b | 2008-06-01 | Henrik Grubbström (Grubba) | |
|
4ee6a6 | 2008-09-13 | Henrik Grubbström (Grubba) | |
|
d5e23b | 2008-06-01 | Henrik Grubbström (Grubba) | |
|
21c85e | 2008-06-01 | Henrik Grubbström (Grubba) | |
|
d5e23b | 2008-06-01 | Henrik Grubbström (Grubba) | |
|
21c85e | 2008-06-01 | Henrik Grubbström (Grubba) | |
|
35f51c | 2008-06-28 | Martin Nilsson | | protected class Pike_7_2_master
|
6f8918 | 2008-05-29 | Henrik Grubbström (Grubba) | | {
inherit Pike_7_0_master;
#ifdef PIKE_MODULE_RELOC
string relocate_module(string s);
string unrelocate_module(string s);
#endif
extern int compat_major;
extern int compat_minor;
Stat master_file_stat(string x);
object low_cast_to_object(string oname, string current_file,
object|void current_handler);
object findmodule(string fullname, object|void handler);
|
e3d6bd | 2008-09-14 | Henrik Grubbström (Grubba) | | extern multiset no_resolv;
extern string ver;
mapping get_default_module();
|
35f51c | 2008-06-28 | Martin Nilsson | | local protected object Pike_7_2_compat_handler;
|
6f8918 | 2008-05-29 | Henrik Grubbström (Grubba) | | local mixed resolv(string identifier, string|void current_file)
{
if (!Pike_7_2_compat_handler) {
Pike_7_2_compat_handler = global::get_compilation_handler(7, 2);
}
return Pike_7_2_compat_handler->resolv(identifier, current_file);
}
void runtime_warning(string where, string what, mixed ... args);
|
35f51c | 2008-06-28 | Martin Nilsson | | protected int clipped;
protected int canclip;
protected string stupid_describe(mixed m, int maxlen);
protected string stupid_describe_comma_list(array x, int maxlen);
|
6f8918 | 2008-05-29 | Henrik Grubbström (Grubba) | | class Describer {};
string describe_function(function f);
class CompatResolver {};
|
075a2e | 2008-08-31 | Henrik Grubbström (Grubba) | | int(0..1) asyncp();
|
6f8918 | 2008-05-29 | Henrik Grubbström (Grubba) | | class Version {};
extern object currentversion;
extern mapping(object:object) compat_handler_cache;
object get_compilation_handler(int major, int minor);
|
4ee6a6 | 2008-09-13 | Henrik Grubbström (Grubba) | | string _sprintf(int|void t);
|
6f8918 | 2008-05-29 | Henrik Grubbström (Grubba) | | object get_compat_master(int major, int minor)
{
|
4ee6a6 | 2008-09-13 | Henrik Grubbström (Grubba) | | if ((major < 7) || ((major == 7) && (minor < 1)))
return Pike_7_0_master::get_compat_master(major, minor);
if ((major == 7) && (minor < 3))
return this_program::this;
return get_compat_master(major, minor);
|
6f8918 | 2008-05-29 | Henrik Grubbström (Grubba) | | }
|
e3d6bd | 2008-09-14 | Henrik Grubbström (Grubba) | |
|
6f8918 | 2008-05-29 | Henrik Grubbström (Grubba) | | }
|
d5e23b | 2008-06-01 | Henrik Grubbström (Grubba) | |
|
4ee6a6 | 2008-09-13 | Henrik Grubbström (Grubba) | |
|
d5e23b | 2008-06-01 | Henrik Grubbström (Grubba) | |
|
21c85e | 2008-06-01 | Henrik Grubbström (Grubba) | |
|
d5e23b | 2008-06-01 | Henrik Grubbström (Grubba) | |
|
21c85e | 2008-06-01 | Henrik Grubbström (Grubba) | |
|
35f51c | 2008-06-28 | Martin Nilsson | | protected class Pike_7_4_master
|
6f8918 | 2008-05-29 | Henrik Grubbström (Grubba) | | {
inherit Pike_7_2_master;
|
075a2e | 2008-08-31 | Henrik Grubbström (Grubba) | | #ifdef RESOLV_DEBUG
void resolv_debug (sprintf_format fmt, sprintf_args... args);
#endif
void error(sprintf_format f, sprintf_args ... args);
|
05658f | 2008-09-14 | Henrik Grubbström (Grubba) | | #ifdef GETCWD_CACHE
protected extern string current_path;
#endif
|
075a2e | 2008-08-31 | Henrik Grubbström (Grubba) | | constant no_value = (<>);
constant NoValue = typeof (no_value);
string programs_reverse_lookup (program prog);
program objects_reverse_lookup (object obj);
string fc_reverse_lookup (object obj);
|
e3d6bd | 2008-09-14 | Henrik Grubbström (Grubba) | | private local __deprecated__ object new(mixed prog, mixed ... args){}
|
075a2e | 2008-08-31 | Henrik Grubbström (Grubba) | | private local __deprecated__(function) clone = new;
void unregister(program p);
program low_cast_to_program(string pname,
string current_file,
object|void handler,
void|int mkobj);
extern string include_prefix;
|
05658f | 2008-09-14 | Henrik Grubbström (Grubba) | | extern mapping(string:string) predefines;
|
7729db | 2010-11-19 | Henrik Grubbström (Grubba) | |
|
05658f | 2008-09-14 | Henrik Grubbström (Grubba) | | extern CompatResolver parent_resolver;
|
69fbcc | 2008-08-30 | Marcus Comstedt | | void add_predefine (string name, string value);
void remove_predefine (string name);
mapping get_predefines();
|
075a2e | 2008-08-31 | Henrik Grubbström (Grubba) | | #if constant(thread_create)
object backend_thread();
#endif
function(string:string) set_trim_file_name_callback(function(string:string) s);
int compile_exception (array|object trace);
string program_path_to_name ( string path,
void|string module_prefix,
void|string module_suffix,
void|string object_suffix );
string describe_module(object|program mod, array(object)|void ret_obj);
string describe_program(program|function p);
class Encoder {};
class Decoder {};
|
05658f | 2008-09-14 | Henrik Grubbström (Grubba) | | extern mapping(string:Codec) codecs;
Codec get_codec(string|void fname, int|void mkobj);
extern mixed encoded;
string|array nameof (mixed what, void|array(object) module_object);
mixed encode_object(object x);
extern string fname;
extern int mkobj;
object __register_new_program(program p);
object objectof (string|array what);
function functionof (string|array what);
program programof (string|array what);
void decode_object(object o, mixed data);
|
075a2e | 2008-08-31 | Henrik Grubbström (Grubba) | | string _sprintf(int t);
|
05658f | 2008-09-14 | Henrik Grubbström (Grubba) | | local protected object Pike_7_4_compat_handler;
|
6f8918 | 2008-05-29 | Henrik Grubbström (Grubba) | | local mixed resolv(string identifier, string|void current_file)
{
if (!Pike_7_4_compat_handler) {
Pike_7_4_compat_handler = global::get_compilation_handler(7, 4);
}
return Pike_7_4_compat_handler->resolv(identifier, current_file);
}
object get_compat_master(int major, int minor)
{
|
4ee6a6 | 2008-09-13 | Henrik Grubbström (Grubba) | | if ((major < 7) || ((major == 7) && (minor < 3)))
return Pike_7_2_master::get_compat_master(major, minor);
if ((major == 7) && (minor < 5))
return this_program::this;
return get_compat_master(major, minor);
|
6f8918 | 2008-05-29 | Henrik Grubbström (Grubba) | | }
|
05658f | 2008-09-14 | Henrik Grubbström (Grubba) | |
|
6f8918 | 2008-05-29 | Henrik Grubbström (Grubba) | | }
|
d5e23b | 2008-06-01 | Henrik Grubbström (Grubba) | |
|
4ee6a6 | 2008-09-13 | Henrik Grubbström (Grubba) | |
|
d5e23b | 2008-06-01 | Henrik Grubbström (Grubba) | |
|
21c85e | 2008-06-01 | Henrik Grubbström (Grubba) | |
|
d5e23b | 2008-06-01 | Henrik Grubbström (Grubba) | |
|
21c85e | 2008-06-01 | Henrik Grubbström (Grubba) | |
|
35f51c | 2008-06-28 | Martin Nilsson | | protected class Pike_7_6_master
|
6f8918 | 2008-05-29 | Henrik Grubbström (Grubba) | | {
inherit Pike_7_4_master;
|
7729db | 2010-11-19 | Henrik Grubbström (Grubba) | |
extern int show_if_constant_errors;
protected void create();
extern mapping(string:string) initial_predefines;
extern joinnode root_module;
extern mapping(object:joinnode) handler_root_modules;
extern array(string) system_module_path;
protected extern CompatResolver parent_resolver;
protected extern mapping resolv_cache;
extern CompatResolver fallback_resolver;
joinnode get_root_module(object|void current_handler);
class Pike06Resolver {}
|
35f51c | 2008-06-28 | Martin Nilsson | | local protected object Pike_7_6_compat_handler;
|
7729db | 2010-11-19 | Henrik Grubbström (Grubba) | | local mixed resolv_or_error(string identifier, string|void current_file,
void|object current_handler)
{
if (!Pike_7_6_compat_handler) {
Pike_7_6_compat_handler = global::get_compilation_handler(7, 6);
}
return Pike_7_6_compat_handler->resolv_or_error(identifier, current_file,
current_handler);
}
|
6f8918 | 2008-05-29 | Henrik Grubbström (Grubba) | | local mixed resolv(string identifier, string|void current_file)
{
if (!Pike_7_6_compat_handler) {
Pike_7_6_compat_handler = global::get_compilation_handler(7, 6);
}
return Pike_7_6_compat_handler->resolv(identifier, current_file);
}
|
b3926d | 2008-06-05 | Martin Stjernholm | | array get_backtrace (object|array err);
|
6f8918 | 2008-05-29 | Henrik Grubbström (Grubba) | | object get_compat_master(int major, int minor)
{
|
4ee6a6 | 2008-09-13 | Henrik Grubbström (Grubba) | | if ((major < 7) || ((major == 7) && (minor < 5)))
return Pike_7_4_master::get_compat_master(major, minor);
if ((major == 7) && (minor < 7))
return this_program::this;
return get_compat_master(major, minor);
|
6f8918 | 2008-05-29 | Henrik Grubbström (Grubba) | | }
|
7729db | 2010-11-19 | Henrik Grubbström (Grubba) | |
|
6f8918 | 2008-05-29 | Henrik Grubbström (Grubba) | | }
|
0e2616 | 2010-12-23 | Henrik Grubbström (Grubba) | |
protected class Pike_7_8_master
{
inherit Pike_7_6_master;
local protected object Pike_7_8_compat_handler;
local mixed resolv_or_error(string identifier, string|void current_file,
void|object current_handler)
{
if (!Pike_7_8_compat_handler) {
Pike_7_8_compat_handler = global::get_compilation_handler(7, 8);
}
return Pike_7_8_compat_handler->resolv_or_error(identifier, current_file,
current_handler);
}
local mixed resolv(string identifier, string|void current_file)
{
if (!Pike_7_8_compat_handler) {
Pike_7_8_compat_handler = global::get_compilation_handler(7, 8);
}
return Pike_7_8_compat_handler->resolv(identifier, current_file);
}
object get_compat_master(int major, int minor)
{
if ((major < 7) || ((major == 7) && (minor < 7)))
return Pike_7_6_master::get_compat_master(major, minor);
if ((major == 7) && (minor < 9))
return this_program::this;
return get_compat_master(major, minor);
}
}
|
d5e23b | 2008-06-01 | Henrik Grubbström (Grubba) | |
|
0e2616 | 2010-12-23 | Henrik Grubbström (Grubba) | | protected inherit Pike_7_8_master;
|
b78402 | 2008-05-28 | Henrik Grubbström (Grubba) | |
|
4f64a5 | 2002-05-22 | Martin Nilsson | |
|
01f7f3 | 2002-05-22 | Johan Sundström | |
|
e5ef06 | 2003-04-01 | Martin Nilsson | |
|
075a2e | 2008-08-31 | Henrik Grubbström (Grubba) | | void error(sprintf_format f, sprintf_args ... args) {
|
4f64a5 | 2002-05-22 | Martin Nilsson | | if (sizeof(args)) f = sprintf(f, @args);
|
35320b | 2004-10-30 | Martin Stjernholm | | throw( ({ f, backtrace()[..<1] }) );
|
4f64a5 | 2002-05-22 | Martin Nilsson | | }
|
6df5a5 | 2001-11-07 | Martin Nilsson | |
|
26f3da | 2000-07-11 | Fredrik Hübinette (Hubbe) | | #ifdef PIKE_FAKEROOT
object o;
string fakeroot(string s)
{
string tmp1=combine_path_with_cwd(s);
#ifdef PIKE_FAKEROOT_OMIT
|
929cf7 | 2003-08-19 | Martin Nilsson | | foreach(PIKE_FAKEROOT_OMIT/PATH_SEPARATOR, string x)
|
26f3da | 2000-07-11 | Fredrik Hübinette (Hubbe) | | if(glob(x,tmp1))
return s;
#endif
return PIKE_FAKEROOT+tmp1;
}
#else
#define fakeroot(X) X
|
2f520e | 2002-04-28 | Martin Nilsson | | #endif // PIKE_FAKEROOT
|
26f3da | 2000-07-11 | Fredrik Hübinette (Hubbe) | |
|
4839dd | 2001-09-02 | Marcus Comstedt | | #ifdef PIKE_MODULE_RELOC
string relocate_module(string s)
{
|
57b52d | 2003-05-31 | Martin Stjernholm | | if(s == "/${PIKE_MODULE_PATH}" || has_prefix (s, "/${PIKE_MODULE_PATH}/")) {
|
4839dd | 2001-09-02 | Marcus Comstedt | | string tmp = s[21..];
foreach(pike_module_path, string path) {
string s2 = fakeroot(sizeof(tmp)? combine_path(path, tmp) : path);
if(master_file_stat(s2))
return s2;
}
}
return fakeroot(s);
}
string unrelocate_module(string s)
{
|
57b52d | 2003-05-31 | Martin Stjernholm | | if(s == "/${PIKE_MODULE_PATH}" || has_prefix (s, "/${PIKE_MODULE_PATH}/"))
|
4839dd | 2001-09-02 | Marcus Comstedt | | return s;
foreach(pike_module_path, string path)
if(s == path)
return "/${PIKE_MODULE_PATH}";
else {
|
57b52d | 2003-05-31 | Martin Stjernholm | | path = combine_path(path, "");
if(has_prefix (s, path))
return "/${PIKE_MODULE_PATH}/"+s[sizeof(path)..];
|
4839dd | 2001-09-02 | Marcus Comstedt | | }
|
57b52d | 2003-05-31 | Martin Stjernholm | |
foreach(pike_module_path, string path) {
|
61b41f | 2003-12-18 | Marcus Comstedt | | path = combine_path(path, UPDIR, "");
|
57b52d | 2003-05-31 | Martin Stjernholm | | if(has_prefix (s, path))
|
61b41f | 2003-12-18 | Marcus Comstedt | | return "/${PIKE_MODULE_PATH}/"+UPDIR+s[sizeof(path)..];
|
57b52d | 2003-05-31 | Martin Stjernholm | | }
|
4839dd | 2001-09-02 | Marcus Comstedt | | return s;
}
|
57b52d | 2003-05-31 | Martin Stjernholm | |
|
4839dd | 2001-09-02 | Marcus Comstedt | | #ifdef fakeroot
#undef fakeroot
#endif
#define fakeroot relocate_module
|
2f520e | 2002-04-28 | Martin Nilsson | | #endif // PIKE_MODULE_RELOC
|
4839dd | 2001-09-02 | Marcus Comstedt | |
|
26f3da | 2000-07-11 | Fredrik Hübinette (Hubbe) | |
|
b07e96 | 2001-07-27 | Martin Nilsson | |
|
8f4569 | 2001-01-14 | Henrik Grubbström (Grubba) | |
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | int is_absolute_path(string p)
{
|
61b41f | 2003-12-18 | Marcus Comstedt | | #ifdef __amigaos__
|
fbc9e3 | 2004-01-12 | Marcus Comstedt | | #define IS_ABSOLUTE_PATH(X) (search((X),":")>0)
|
61b41f | 2003-12-18 | Marcus Comstedt | | return IS_ABSOLUTE_PATH(p);
#else
|
1813e8 | 2013-03-16 | Chris Angelico | | #if defined(__NT__) || defined(__OS2__)
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | p=replace(p,"\\","/");
|
e49e54 | 2001-01-22 | Fredrik Hübinette (Hubbe) | | if(sscanf(p,"%[a-zA-Z]:%*c",string s)==2 && sizeof(s)==1)
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | return 1;
|
471ed9 | 1998-04-24 | Fredrik Hübinette (Hubbe) | | #define IS_ABSOLUTE_PATH is_absolute_path
#else
|
39033d | 2003-04-10 | Martin Stjernholm | | #define IS_ABSOLUTE_PATH(X) has_prefix((X),"/")
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | #endif
|
39033d | 2003-04-10 | Martin Stjernholm | | return has_prefix(p,"/");
|
61b41f | 2003-12-18 | Marcus Comstedt | | #endif
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | }
|
1813e8 | 2013-03-16 | Chris Angelico | | #if defined(__NT__) || defined(__OS2__)
|
4619bd | 2002-07-29 | Martin Nilsson | | #define EXPLODE_PATH(X) (replace((X),"\\","/")/"/")
#else
#define EXPLODE_PATH(X) ((X)/"/")
#endif
|
b07e96 | 2001-07-27 | Martin Nilsson | |
|
8f4569 | 2001-01-14 | Henrik Grubbström (Grubba) | |
|
0dd3c2 | 2004-01-12 | Marcus Comstedt | |
|
8f4569 | 2001-01-14 | Henrik Grubbström (Grubba) | |
|
bbf470 | 2000-04-10 | Henrik Grubbström (Grubba) | | array(string) explode_path(string p)
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | {
|
0dd3c2 | 2004-01-12 | Marcus Comstedt | | #ifdef __amigaos__
int colon = search(reverse(p), ":");
if(colon >= 0)
|
35320b | 2004-10-30 | Martin Stjernholm | | return ({ p[..<colon] }) + explode_path(p[<colon+1..]);
|
0dd3c2 | 2004-01-12 | Marcus Comstedt | | array(string) r = p/"/";
|
35320b | 2004-10-30 | Martin Stjernholm | | return replace(r[..<1], "", "/")+r[<0..];
|
0dd3c2 | 2004-01-12 | Marcus Comstedt | | #else
array(string) r = EXPLODE_PATH(p);
if(r[0] == "" && sizeof(p))
r[0] = "/";
return r;
#endif
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | }
|
b07e96 | 2001-07-27 | Martin Nilsson | |
|
77e4f2 | 2002-07-09 | Martin Nilsson | |
|
943ea8 | 2003-12-19 | Marcus Comstedt | |
|
77e4f2 | 2002-07-09 | Martin Nilsson | |
|
8f4569 | 2001-01-14 | Henrik Grubbström (Grubba) | |
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | string dirname(string x)
{
|
77e4f2 | 2002-07-09 | Martin Nilsson | | if(x=="") return "";
|
aea4b4 | 2003-12-19 | Marcus Comstedt | | #ifdef __amigaos__
array(string) tmp=x/":";
array(string) tmp2=tmp[-1]/"/";
|
35320b | 2004-10-30 | Martin Stjernholm | | tmp[-1]=tmp2[..<1]*"/";
|
2510d4 | 2003-12-19 | Marcus Comstedt | | if(sizeof(tmp2) >= 2 && tmp2[-2]=="") tmp[-1]+="/";
|
aea4b4 | 2003-12-19 | Marcus Comstedt | | return tmp*":";
#else
|
afa129 | 2000-02-19 | Martin Nilsson | | array(string) tmp=EXPLODE_PATH(x);
|
bd2208 | 2002-07-29 | Martin Nilsson | | if(x[0]=='/' && sizeof(tmp)<3) return "/";
|
35320b | 2004-10-30 | Martin Stjernholm | | return tmp[..<1]*"/";
|
aea4b4 | 2003-12-19 | Marcus Comstedt | | #endif
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | }
|
b07e96 | 2001-07-27 | Martin Nilsson | |
|
8f4569 | 2001-01-14 | Henrik Grubbström (Grubba) | |
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | string basename(string x)
{
|
aea4b4 | 2003-12-19 | Marcus Comstedt | | #ifdef __amigaos__
return ((x/":")[-1]/"/")[-1];
#define BASENAME(X) ((((X)/":")[-1]/"/")[-1])
#else
|
afa129 | 2000-02-19 | Martin Nilsson | | array(string) tmp=EXPLODE_PATH(x);
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | return tmp[-1];
|
471ed9 | 1998-04-24 | Fredrik Hübinette (Hubbe) | | #define BASENAME(X) (EXPLODE_PATH(X)[-1])
|
aea4b4 | 2003-12-19 | Marcus Comstedt | | #endif
}
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | |
|
bec57d | 1999-09-06 | Fredrik Hübinette (Hubbe) | | #ifdef PIKE_AUTORELOAD
int autoreload_on;
int newest;
#define AUTORELOAD_BEGIN() \
int ___newest=newest; \
newest=0
|
1a03e7 | 2005-11-09 | Henrik Grubbström (Grubba) | | #define AUTORELOAD_CHECK_FILE(X) do { \
if(autoreload_on) \
if(Stat s=master_file_stat(X)) \
if(s->mtime>newest) newest=[int]s->mtime; \
} while(0)
|
e15f7f | 2009-04-25 | Martin Stjernholm | | #define AUTORELOAD_CHECK_PRECOMPILED_FILE(X) do { \
if(autoreload_on) { \
int mtime = get_precompiled_mtime (X); \
if (mtime >= 0 && mtime > newest) \
if(s->mtime>newest) newest=[int]s->mtime; \
} \
} while(0)
|
57b52d | 2003-05-31 | Martin Stjernholm | | #define AUTORELOAD_FINISH(VAR, CACHE, FILE) \
if(autoreload_on) { \
mixed val = CACHE[FILE]; \
|
1a03e7 | 2005-11-09 | Henrik Grubbström (Grubba) | | if(!zero_type (val) && val != no_value && \
newest <= load_time[FILE]) { \
|
57b52d | 2003-05-31 | Martin Stjernholm | | VAR = val; \
} \
} \
|
1a03e7 | 2005-11-09 | Henrik Grubbström (Grubba) | | load_time[FILE] = newest; \
|
57b52d | 2003-05-31 | Martin Stjernholm | | if(___newest > newest) newest=___newest;
|
bec57d | 1999-09-06 | Fredrik Hübinette (Hubbe) | |
mapping(string:int) load_time=([]);
#else
#define AUTORELOAD_CHECK_FILE(X)
#define AUTORELOAD_BEGIN()
#define AUTORELOAD_FINISH(VAR,CACHE,FILE)
|
2f520e | 2002-04-28 | Martin Nilsson | | #endif // PIKE_AUTORELOAD
|
a20af6 | 2000-09-26 | Fredrik Hübinette (Hubbe) | |
|
b07e96 | 2001-07-27 | Martin Nilsson | |
|
56cd00 | 2001-10-28 | Martin Nilsson | |
|
e5ef06 | 2003-04-01 | Martin Nilsson | |
|
8f4569 | 2001-01-14 | Henrik Grubbström (Grubba) | |
|
e5ef06 | 2003-04-01 | Martin Nilsson | |
|
8f4569 | 2001-01-14 | Henrik Grubbström (Grubba) | |
program compile_string(string source, void|string filename,
|
c2e10c | 2003-11-18 | Martin Stjernholm | | object|void handler,
void|program p,
|
f6da7b | 2004-06-27 | Martin Nilsson | | void|object o,
void|int _show_if_constant_errors)
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | {
|
0e22d1 | 2011-09-11 | Martin Stjernholm | | #ifdef RECUR_COMPILE_DEBUG
werror ("%*s>>> compile_string %O\n", GET_MSG_DEPTH, "", filename);
INC_MSG_DEPTH();
#endif
|
6f46aa | 2007-06-12 | Martin Bähr | | program ret = compile(cpp(source, filename||"-", 1, handler,
|
f6da7b | 2004-06-27 | Martin Nilsson | | compat_major, compat_minor,
(zero_type(_show_if_constant_errors)?
show_if_constant_errors:
_show_if_constant_errors)),
|
a20af6 | 2000-09-26 | Fredrik Hübinette (Hubbe) | | handler,
compat_major,
|
c2e10c | 2003-11-18 | Martin Stjernholm | | compat_minor,
p,
o);
|
b73c65 | 2007-06-13 | Martin Bähr | | if (source_cache)
source_cache[ret] = source;
|
0e22d1 | 2011-09-11 | Martin Stjernholm | | #ifdef RECUR_COMPILE_DEBUG
DEC_MSG_DEPTH();
werror ("%*s<<< compile_string %O\n", GET_MSG_DEPTH, "", filename);
#endif
|
6f46aa | 2007-06-12 | Martin Bähr | | return ret;
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | }
|
97e5c7 | 2001-07-28 | Martin Nilsson | |
|
d8a6fc | 2000-03-25 | Fredrik Hübinette (Hubbe) | | string master_read_file(string file)
{
|
677d26 | 2003-11-14 | Martin Stjernholm | | object o=Files()->Fd();
|
da2448 | 2002-05-24 | Martin Nilsson | | if( ([function(string, string : int)]o->open)(fakeroot(file),"r") )
return ([function(void : string)]o->read)();
|
d8a6fc | 2000-03-25 | Fredrik Hübinette (Hubbe) | | return 0;
}
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | #ifdef GETCWD_CACHE
|
35f51c | 2008-06-28 | Martin Nilsson | | protected string current_path;
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | int cd(string s)
{
current_path=0;
return predef::cd(s);
}
string getcwd()
{
return current_path || (current_path=predef::getcwd());
}
|
2f520e | 2002-04-28 | Martin Nilsson | | #endif // GETCWD_CACHE
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | |
|
15af9c | 2003-12-19 | Marcus Comstedt | | string combine_path_with_cwd(string ... paths)
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | {
|
15af9c | 2003-12-19 | Marcus Comstedt | | return combine_path(IS_ABSOLUTE_PATH(paths[0])?"":getcwd(),@paths);
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | }
#ifdef FILE_STAT_CACHE
#define FILE_STAT_CACHE_TIME 20
int invalidate_time;
mapping(string:multiset(string)) dir_cache = ([]);
|
8ac7b0 | 2004-12-26 | Per Hedbor | |
|
774933 | 2004-12-27 | Henrik Grubbström (Grubba) | | array(string) master_get_dir(string|void x)
|
8ac7b0 | 2004-12-26 | Per Hedbor | | {
|
774933 | 2004-12-27 | Henrik Grubbström (Grubba) | | return get_dir(x);
|
8ac7b0 | 2004-12-26 | Per Hedbor | | }
|
61a424 | 2000-08-27 | Mirar (Pontus Hagland) | | Stat master_file_stat(string x)
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | {
|
da2448 | 2002-05-24 | Martin Nilsson | | string dir = combine_path_with_cwd(x);
string file = BASENAME(dir);
dir = dirname(dir);
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | |
if(time() > invalidate_time)
{
|
da2448 | 2002-05-24 | Martin Nilsson | | dir_cache = ([]);
invalidate_time = time()+FILE_STAT_CACHE_TIME;
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | }
|
da2448 | 2002-05-24 | Martin Nilsson | |
multiset(string) d = dir_cache[dir];
if( zero_type(d) )
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | {
|
8ac7b0 | 2004-12-26 | Per Hedbor | | array(string) tmp = master_get_dir(dir);
|
da2448 | 2002-05-24 | Martin Nilsson | | if(tmp)
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | {
|
fc398b | 2001-05-31 | Fredrik Hübinette (Hubbe) | | #ifdef __NT__
|
da2448 | 2002-05-24 | Martin Nilsson | | tmp = map(tmp, lower_case);
|
fc398b | 2001-05-31 | Fredrik Hübinette (Hubbe) | | #endif
|
99b473 | 2009-06-04 | Per Hedbor | | d = dir_cache[dir] = (multiset)tmp;
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | }
|
da2448 | 2002-05-24 | Martin Nilsson | | else
dir_cache[dir]=0;
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | }
|
eba023 | 2004-01-13 | Martin Nilsson | |
|
fc398b | 2001-05-31 | Fredrik Hübinette (Hubbe) | | #ifdef __NT__
|
da2448 | 2002-05-24 | Martin Nilsson | | file = lower_case(file);
|
fc398b | 2001-05-31 | Fredrik Hübinette (Hubbe) | | #endif
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | if(d && !d[file]) return 0;
return predef::file_stat(x);
}
#else
|
0217a6 | 2009-06-10 | Henrik Grubbström (Grubba) | | constant master_file_stat = predef::file_stat;
constant master_get_dir = predef::get_dir;
|
2f520e | 2002-04-28 | Martin Nilsson | | #endif // FILE_STAT_CACHE
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | |
|
b3926d | 2008-06-05 | Martin Stjernholm | |
|
35f51c | 2008-06-28 | Martin Nilsson | | protected mapping(string:string) environment;
|
b3926d | 2008-06-05 | Martin Stjernholm | |
#ifdef __NT__
|
35f51c | 2008-06-28 | Martin Nilsson | | protected void set_lc_env (mapping(string:string) env)
|
b3926d | 2008-06-05 | Martin Stjernholm | | {
environment = ([]);
foreach (env; string var; string val)
environment[lower_case (var)] = val;
}
#endif
|
43293b | 2002-12-30 | Henrik Grubbström (Grubba) | |
|
0866bf | 2013-06-16 | Henrik Grubbström (Grubba) | |
|
43293b | 2002-12-30 | Henrik Grubbström (Grubba) | |
|
0866bf | 2013-06-16 | Henrik Grubbström (Grubba) | |
|
b3926d | 2008-06-05 | Martin Stjernholm | |
|
43293b | 2002-12-30 | Henrik Grubbström (Grubba) | |
|
b3926d | 2008-06-05 | Martin Stjernholm | |
|
512843 | 2008-06-02 | Martin Stjernholm | |
|
b3926d | 2008-06-05 | Martin Stjernholm | |
|
0866bf | 2013-06-16 | Henrik Grubbström (Grubba) | | mapping(string:string) getenv (void|int force_update)
|
b3926d | 2008-06-05 | Martin Stjernholm | | {
|
0866bf | 2013-06-16 | Henrik Grubbström (Grubba) | | mapping(string:string) res;
|
b3926d | 2008-06-05 | Martin Stjernholm | |
|
0866bf | 2013-06-16 | Henrik Grubbström (Grubba) | | if (force_update) {
res = Builtin._getenv();
|
b3926d | 2008-06-05 | Martin Stjernholm | | #ifdef __NT__
|
0866bf | 2013-06-16 | Henrik Grubbström (Grubba) | | set_lc_env (res);
#else
environment = res + ([]);
|
b3926d | 2008-06-05 | Martin Stjernholm | | #endif
|
0866bf | 2013-06-16 | Henrik Grubbström (Grubba) | |
compat_environment = compat_environment_copy = 0;
}
|
49c1bc | 2008-06-07 | Henrik Grubbström (Grubba) | |
|
0866bf | 2013-06-16 | Henrik Grubbström (Grubba) | | else {
if (compat_environment &&
!equal(compat_environment, compat_environment_copy)) {
foreach(compat_environment; string varname; array(string) pair) {
if (!equal(pair, compat_environment_copy[varname])) {
putenv(pair[0], pair[1]);
}
}
foreach(compat_environment_copy; string varname; array(string) pair) {
if (!compat_environment[varname]) {
putenv(pair[0]);
}
|
49c1bc | 2008-06-07 | Henrik Grubbström (Grubba) | | }
}
|
0866bf | 2013-06-16 | Henrik Grubbström (Grubba) | | #ifdef __NT__
res = Builtin._getenv();
if (!environment) set_lc_env (res);
#else
if (!environment) environment = Builtin._getenv();
res = environment + ([]);
#endif
|
b3926d | 2008-06-05 | Martin Stjernholm | | }
|
0866bf | 2013-06-16 | Henrik Grubbström (Grubba) | | return res;
}
|
fc398b | 2001-05-31 | Fredrik Hübinette (Hubbe) | |
|
0866bf | 2013-06-16 | Henrik Grubbström (Grubba) | |
variant string getenv (string varname, void|int force_update)
{
if (!environment || force_update) {
|
b3926d | 2008-06-05 | Martin Stjernholm | | #ifdef __NT__
|
0866bf | 2013-06-16 | Henrik Grubbström (Grubba) | | set_lc_env (Builtin._getenv());
|
b3926d | 2008-06-05 | Martin Stjernholm | | #else
|
0866bf | 2013-06-16 | Henrik Grubbström (Grubba) | | environment = Builtin._getenv();
|
b3926d | 2008-06-05 | Martin Stjernholm | | #endif
|
0866bf | 2013-06-16 | Henrik Grubbström (Grubba) | |
compat_environment = compat_environment_copy = 0;
}
|
b3926d | 2008-06-05 | Martin Stjernholm | |
#ifdef __NT__
|
0866bf | 2013-06-16 | Henrik Grubbström (Grubba) | | varname = lower_case(varname);
|
b3926d | 2008-06-05 | Martin Stjernholm | | #endif
|
0866bf | 2013-06-16 | Henrik Grubbström (Grubba) | | if (compat_environment) {
array(string) res;
if (!equal(res = compat_environment[varname],
compat_environment_copy[varname])) {
putenv(varname, res && res[1]);
}
|
b3926d | 2008-06-05 | Martin Stjernholm | | }
|
0866bf | 2013-06-16 | Henrik Grubbström (Grubba) | |
return environment[varname];
|
b3926d | 2008-06-05 | Martin Stjernholm | | }
void putenv (string varname, void|string value)
|
8f4569 | 2001-01-14 | Henrik Grubbström (Grubba) | |
|
b3926d | 2008-06-05 | Martin Stjernholm | |
|
1ff0cb | 2008-06-10 | Martin Stjernholm | |
|
8f4569 | 2001-01-14 | Henrik Grubbström (Grubba) | |
|
b3926d | 2008-06-05 | Martin Stjernholm | |
|
8f4569 | 2001-01-14 | Henrik Grubbström (Grubba) | |
|
b3926d | 2008-06-05 | Martin Stjernholm | |
|
a71f83 | 2001-11-13 | Tomas Nilsson | |
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | {
|
b3926d | 2008-06-05 | Martin Stjernholm | | Builtin._putenv (varname, value);
|
49c1bc | 2008-06-07 | Henrik Grubbström (Grubba) | | if (compat_environment) {
string lvarname = varname;
#ifdef __NT__
lvarname = lower_case(varname);
#endif
if (value) {
compat_environment[lvarname] =
(compat_environment_copy[lvarname] = ({ varname, value })) + ({});
} else {
m_delete(compat_environment, lvarname);
m_delete(compat_environment_copy, lvarname);
}
}
|
b3926d | 2008-06-05 | Martin Stjernholm | | if (environment) {
|
a71f83 | 2001-11-13 | Tomas Nilsson | | #ifdef __NT__
|
b3926d | 2008-06-05 | Martin Stjernholm | | varname = lower_case (varname);
|
a71f83 | 2001-11-13 | Tomas Nilsson | | #endif
|
b3926d | 2008-06-05 | Martin Stjernholm | | if (value) environment[varname] = value;
else m_delete (environment, varname);
}
|
df2c63 | 2000-08-02 | Henrik Grubbström (Grubba) | | }
|
fc398b | 2001-05-31 | Fredrik Hübinette (Hubbe) | |
|
b07e96 | 2001-07-27 | Martin Nilsson | |
|
fc398b | 2001-05-31 | Fredrik Hübinette (Hubbe) | |
|
e5ef06 | 2003-04-01 | Martin Nilsson | |
|
fc398b | 2001-05-31 | Fredrik Hübinette (Hubbe) | |
program compile_file(string filename,
object|void handler,
void|program p,
void|object o)
{
AUTORELOAD_CHECK_FILE(filename);
|
026659 | 2007-06-13 | Martin Bähr | | return compile(cpp(master_read_file(filename),
|
fc398b | 2001-05-31 | Fredrik Hübinette (Hubbe) | | filename,
1,
handler,
compat_major,
compat_minor),
handler,
compat_major,
compat_minor,
p,
o);
}
|
b07e96 | 2001-07-27 | Martin Nilsson | |
|
c57eda | 2001-08-29 | Martin Nilsson | |
|
c2d49b | 2002-02-14 | Martin Nilsson | |
|
c57eda | 2001-08-29 | Martin Nilsson | | string normalize_path( string path )
|
4c3f7d | 2000-04-13 | Per Hedbor | | {
#ifndef __NT__
|
c57eda | 2001-08-29 | Martin Nilsson | | return path;
|
4c3f7d | 2000-04-13 | Per Hedbor | | #else
|
c57eda | 2001-08-29 | Martin Nilsson | | return replace(path,"\\","/");
|
4c3f7d | 2000-04-13 | Per Hedbor | | #endif
}
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | |
|
43293b | 2002-12-30 | Henrik Grubbström (Grubba) | |
|
39979e | 2004-09-06 | Martin Stjernholm | |
|
43293b | 2002-12-30 | Henrik Grubbström (Grubba) | |
|
39979e | 2004-09-06 | Martin Stjernholm | |
|
e61706 | 2004-01-08 | Martin Nilsson | | mapping(string:program|NoValue) programs=(["/master":this_program]);
|
b73c65 | 2007-06-13 | Martin Bähr | | mapping(program:object) documentation = ([]);
mapping(program:string) source_cache;
|
57b52d | 2003-05-31 | Martin Stjernholm | |
mapping (program:object|NoValue) objects=([
|
e61706 | 2004-01-08 | Martin Nilsson | | this_program : this,
|
83da8e | 2008-05-14 | Henrik Grubbström (Grubba) | | object_program(_static_modules): _static_modules,
|
57b52d | 2003-05-31 | Martin Stjernholm | | ]);
mapping(string:object|NoValue) fc=([]);
|
fb847c | 2004-06-17 | Martin Stjernholm | |
|
57b52d | 2003-05-31 | Martin Stjernholm | |
|
35f51c | 2008-06-28 | Martin Nilsson | | protected mapping(program:string) rev_programs = ([]);
protected mapping(object:program) rev_objects = ([]);
protected mapping(mixed:string) rev_fc = ([]);
|
57b52d | 2003-05-31 | Martin Stjernholm | |
string programs_reverse_lookup (program prog)
{
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | |
if (!rev_programs) return UNDEFINED;
|
57b52d | 2003-05-31 | Martin Stjernholm | | if (sizeof (rev_programs) < sizeof (programs)) {
foreach (programs; string path; program|NoValue prog)
if (prog == no_value)
m_delete (programs, path);
else
rev_programs[prog] = path;
}
return rev_programs[prog];
}
program objects_reverse_lookup (object obj)
|
1d918a | 2007-12-27 | Martin Nilsson | |
|
57b52d | 2003-05-31 | Martin Stjernholm | | {
if (sizeof (rev_objects) < sizeof (objects)) {
foreach (objects; program prog; object|NoValue obj)
if (obj == no_value)
|
ca1e63 | 2005-11-14 | Martin Nilsson | | m_delete (rev_objects, obj);
|
57b52d | 2003-05-31 | Martin Stjernholm | | else
rev_objects[obj] = prog;
}
return rev_objects[obj];
}
string fc_reverse_lookup (object obj)
{
if (sizeof (rev_fc) < sizeof (fc)) {
foreach (fc; string path; mixed obj)
if (obj == no_value)
m_delete (fc, obj);
else
rev_fc[obj] = path;
}
return rev_fc[obj];
}
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | |
|
6d926c | 1999-11-26 | Henrik Grubbström (Grubba) | | array(string) query_precompiled_names(string fname)
|
e15f7f | 2009-04-25 | Martin Stjernholm | |
|
6d926c | 1999-11-26 | Henrik Grubbström (Grubba) | | {
|
8a4985 | 2002-03-10 | Martin Stjernholm | | #ifdef PRECOMPILED_SEARCH_MORE
fname = fakeroot (fname);
foreach (pike_module_path, string path)
if (has_prefix (fname, path))
return map (pike_module_path, `+, "/", fname[sizeof (path)..], ".o");
#endif
|
6d926c | 1999-11-26 | Henrik Grubbström (Grubba) | | return ({ fname + ".o" });
}
|
e15f7f | 2009-04-25 | Martin Stjernholm | | int get_precompiled_mtime (string id)
{
Stat s = master_file_stat (fakeroot (id));
return s && s->isreg ? s->mtime : -1;
}
string read_precompiled (string id)
{
return master_read_file (id);
}
|
35f51c | 2008-06-28 | Martin Nilsson | | protected class CompileCallbackError
|
677d26 | 2003-11-14 | Martin Stjernholm | | {
|
729acf | 2008-05-30 | Martin Stjernholm | | inherit _static_modules.Builtin.GenericError;
|
677d26 | 2003-11-14 | Martin Stjernholm | | constant is_generic_error = 1;
constant is_compile_callback_error = 1;
|
729acf | 2008-05-30 | Martin Stjernholm | | constant is_cpp_or_compilation_error = 1;
|
677d26 | 2003-11-14 | Martin Stjernholm | | }
|
35f51c | 2008-06-28 | Martin Nilsson | | protected void compile_cb_error (string msg, mixed ... args)
|
677d26 | 2003-11-14 | Martin Stjernholm | |
{
if (sizeof (args)) msg = sprintf (msg, @args);
|
35320b | 2004-10-30 | Martin Stjernholm | | throw (CompileCallbackError (msg, backtrace()[..<1]));
|
677d26 | 2003-11-14 | Martin Stjernholm | | }
|
35f51c | 2008-06-28 | Martin Nilsson | | protected void compile_cb_rethrow (object|array err)
|
677d26 | 2003-11-14 | Martin Stjernholm | |
{
array bt;
if (array|object e = catch (bt = get_backtrace (err)))
handle_error (e);
|
86e66a | 2010-05-06 | Henrik Grubbström (Grubba) | | throw (CompileCallbackError (call_describe_error (err), bt));
|
677d26 | 2003-11-14 | Martin Stjernholm | | }
|
35f51c | 2008-06-28 | Martin Nilsson | | protected void call_compile_warning (object handler, string file,
|
14cf19 | 2008-08-14 | Martin Stjernholm | | string msg, mixed ... args)
|
677d26 | 2003-11-14 | Martin Stjernholm | | {
if (sizeof (args)) msg = sprintf (msg, @args);
msg = trim_all_whites (msg);
if (handler && handler->compile_warning)
handler->compile_warning (file, 0, msg);
|
ad356c | 2009-12-28 | Martin Stjernholm | | else if (master()->compile_warning)
master()->compile_warning (file, 0, msg);
|
677d26 | 2003-11-14 | Martin Stjernholm | | else
compile_warning (file, 0, msg);
}
|
633019 | 2000-02-10 | Fredrik Hübinette (Hubbe) | | #if constant(_static_modules.Builtin.mutex)
#define THREADED
|
7d016d | 2008-03-26 | Henrik Grubbström (Grubba) | | _static_modules.Builtin.mutex compilation_mutex = Builtin.mutex();
|
633019 | 2000-02-10 | Fredrik Hübinette (Hubbe) | | #endif
|
61fdd7 | 2006-01-21 | Henrik Grubbström (Grubba) | | #ifdef __NT__
#define FIX_CASE(X) lower_case(X)
#else
#define FIX_CASE(X) (X)
#endif /* __NT__ */
|
35f51c | 2008-06-28 | Martin Nilsson | | protected string base_from_filename(string fname)
|
61fdd7 | 2006-01-21 | Henrik Grubbström (Grubba) | | {
string low_name = FIX_CASE(fname);
if (has_prefix(low_name, ".#")) return 0;
if (has_suffix(low_name, ".pike") ||
has_suffix(low_name, ".pmod")) {
|
8a531a | 2006-11-04 | Martin Nilsson | | return fname[..<5];
|
61fdd7 | 2006-01-21 | Henrik Grubbström (Grubba) | | }
if (has_suffix(low_name, ".so")) {
|
8a531a | 2006-11-04 | Martin Nilsson | | return fname[..<3];
|
61fdd7 | 2006-01-21 | Henrik Grubbström (Grubba) | | }
return 0;
}
|
35f51c | 2008-06-28 | Martin Nilsson | | protected int prio_from_filename(string fname)
|
61fdd7 | 2006-01-21 | Henrik Grubbström (Grubba) | | {
fname = FIX_CASE(fname);
if (has_suffix(fname, ".pmod")) return 3;
if (has_suffix(fname, ".so")) return 2;
if (has_suffix(fname, ".pike")) return 1;
return 0;
}
|
026659 | 2007-06-13 | Martin Bähr | |
|
1a84e5 | 2007-06-26 | Henrik Grubbström (Grubba) | | array(string) module_defined(object|program mod)
|
026659 | 2007-06-13 | Martin Bähr | | {
array files = ({});
|
1a84e5 | 2007-06-26 | Henrik Grubbström (Grubba) | | if (programp(mod))
|
7d016d | 2008-03-26 | Henrik Grubbström (Grubba) | | return ({ Builtin.program_defined([program]mod) });
|
9ef8fe | 2007-06-23 | Martin Bähr | |
array mods;
|
026659 | 2007-06-13 | Martin Bähr | | if (mod->is_resolv_joinnode)
mods = mod->joined_modules;
else
mods = ({ mod });
foreach (mods;; object mod)
|
6f46aa | 2007-06-12 | Martin Bähr | | {
|
026659 | 2007-06-13 | Martin Bähr | | if (mod->is_resolv_dirnode)
|
7d016d | 2008-03-26 | Henrik Grubbström (Grubba) | | files += ({ Builtin.program_defined(object_program(mod->module)) });
|
6f46aa | 2007-06-12 | Martin Bähr | | else
|
7d016d | 2008-03-26 | Henrik Grubbström (Grubba) | | files += ({ Builtin.program_defined(object_program(mod)) });
|
6f46aa | 2007-06-12 | Martin Bähr | | }
|
026659 | 2007-06-13 | Martin Bähr | | return files;
|
c47588 | 2007-06-11 | Martin Bähr | | }
|
b73c65 | 2007-06-13 | Martin Bähr | |
void enable_source_cache()
{
|
64ec5b | 2007-06-13 | Martin Bähr | | if (!source_cache)
source_cache = ([]);
|
b73c65 | 2007-06-13 | Martin Bähr | | }
|
c47588 | 2007-06-11 | Martin Bähr | |
object show_doc(program|object|function obj)
{
object doc_extractor = main_resolv("Tools.AutoDoc.PikeExtractor.extractClass");
string child;
program prog;
|
026659 | 2007-06-13 | Martin Bähr | |
|
c47588 | 2007-06-11 | Martin Bähr | | if (programp(obj))
prog = obj;
if (functionp(obj))
{
prog = function_program(obj);
|
6f46aa | 2007-06-12 | Martin Bähr | | child = ((describe_function(obj)||"")/"->")[-1];
|
c47588 | 2007-06-11 | Martin Bähr | | }
if (objectp(obj))
{
if (obj->is_resolv_joinnode)
obj = obj->joined_modules[0];
if (obj->is_resolv_dirnode)
prog = object_program(obj->module);
|
19d942 | 2007-06-19 | Martin Bähr | | else
prog = object_program(obj);
|
c47588 | 2007-06-11 | Martin Bähr | | }
|
026659 | 2007-06-13 | Martin Bähr | |
|
19d942 | 2007-06-19 | Martin Bähr | | if (prog && !documentation[prog] && doc_extractor)
|
c47588 | 2007-06-11 | Martin Bähr | | {
|
b73c65 | 2007-06-13 | Martin Bähr | | string source;
|
19d942 | 2007-06-19 | Martin Bähr | | if (source_cache && source_cache[prog])
|
b73c65 | 2007-06-13 | Martin Bähr | | source = source_cache[prog];
|
19d942 | 2007-06-19 | Martin Bähr | | else
|
9ef8fe | 2007-06-23 | Martin Bähr | | {
|
7d016d | 2008-03-26 | Henrik Grubbström (Grubba) | | array sourceref = array_sscanf(Builtin.program_defined(prog),
|
9ef8fe | 2007-06-23 | Martin Bähr | | "%s%[:]%[0-9]");
source = master_read_file(sourceref[0]);
if (sizeof(sourceref[1]) && sizeof(sourceref[2]))
{
if (programp(prog))
child = ((describe_program(prog)||"")/".")[-1];
}
}
|
19d942 | 2007-06-19 | Martin Bähr | |
|
b73c65 | 2007-06-13 | Martin Bähr | | if (source)
{
catch
{
documentation[prog] = doc_extractor(source, sprintf("%O", prog));
};
}
|
c47588 | 2007-06-11 | Martin Bähr | | }
|
026659 | 2007-06-13 | Martin Bähr | |
|
b73c65 | 2007-06-13 | Martin Bähr | | if (documentation[prog])
|
c47588 | 2007-06-11 | Martin Bähr | | {
if (child)
|
9ef8fe | 2007-06-23 | Martin Bähr | | return documentation[prog]->findObject(child)||documentation[prog]->findChild(child);
|
c47588 | 2007-06-11 | Martin Bähr | | else
|
b73c65 | 2007-06-13 | Martin Bähr | | return documentation[prog];
|
c47588 | 2007-06-11 | Martin Bähr | | }
}
|
86e66a | 2010-05-06 | Henrik Grubbström (Grubba) | |
protected string call_describe_backtrace(array(mixed) trace,
void|int linewidth)
{
return (all_constants()["describe_backtrace"]||describe_backtrace)
(trace, linewidth);
}
protected string call_describe_error(mixed err)
{
return (all_constants()["describe_error"]||describe_error)(err);
}
|
c47588 | 2007-06-11 | Martin Bähr | |
|
35f51c | 2008-06-28 | Martin Nilsson | | protected program low_findprog(string pname,
|
14cf19 | 2008-08-14 | Martin Stjernholm | | string ext,
object|void handler,
void|int mkobj)
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | {
program ret;
|
61a424 | 2000-08-27 | Mirar (Pontus Hagland) | | Stat s;
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | string fname=pname+ext;
|
bec57d | 1999-09-06 | Fredrik Hübinette (Hubbe) | |
|
68b7a2 | 2003-09-19 | Henrik Grubbström (Grubba) | | resolv_debug("low_findprog(%O, %O, %O, %O)\n",
pname, ext, handler, mkobj);
|
633019 | 2000-02-10 | Fredrik Hübinette (Hubbe) | | #ifdef THREADED
|
3b1142 | 2000-02-13 | Henrik Grubbström (Grubba) | | object key;
|
4c0d09 | 2010-03-03 | Martin Stjernholm | |
|
098c8a | 2000-03-30 | Henrik Grubbström (Grubba) | | mixed err = catch {
|
3b1142 | 2000-02-13 | Henrik Grubbström (Grubba) | | key=compilation_mutex->lock(2);
};
|
4c0d09 | 2010-03-03 | Martin Stjernholm | | if (err && !has_suffix (err[0], "when threads are disabled!"))
throw (err);
|
633019 | 2000-02-10 | Fredrik Hübinette (Hubbe) | | #endif
|
4839dd | 2001-09-02 | Marcus Comstedt | | #ifdef PIKE_MODULE_RELOC
fname = unrelocate_module(fname);
#endif
|
41ee48 | 2000-02-28 | Fredrik Hübinette (Hubbe) | | #ifdef __NT__
|
aedfbc | 2004-01-12 | Martin Nilsson | |
|
41ee48 | 2000-02-28 | Fredrik Hübinette (Hubbe) | | if(getenv("OSTYPE")=="cygwin32")
{
string tmp=fname[..1];
if((tmp=="//" || tmp=="\\\\") && (fname[3]=='/' || fname[3]=='\\'))
{
if(!master_file_stat(fname))
{
fname=fname[2..2]+":"+fname[3..];
}
}
}
#endif
|
68065f | 2003-05-28 | Johan Sundström | | if( (s=master_file_stat(fakeroot(fname))) && s->isreg )
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | {
|
1a03e7 | 2005-11-09 | Henrik Grubbström (Grubba) | | #ifdef PIKE_AUTORELOAD
if(!autoreload_on || load_time[fname] >= s->mtime)
#endif
{
if(!zero_type (ret=programs[fname]) && ret != no_value) {
resolv_debug ("low_findprog %s: returning cached (no autoreload)\n", fname);
return ret;
}
}
|
bec57d | 1999-09-06 | Fredrik Hübinette (Hubbe) | | AUTORELOAD_BEGIN();
|
14fc64 | 1999-11-26 | Henrik Grubbström (Grubba) | |
|
6e2ebb | 1999-12-28 | Martin Stjernholm | | #ifdef PIKE_AUTORELOAD
|
1a03e7 | 2005-11-09 | Henrik Grubbström (Grubba) | | if (load_time[fname] >= s->mtime)
|
57b52d | 2003-05-31 | Martin Stjernholm | | if (!zero_type (ret=programs[fname]) && ret != no_value) {
|
3d21a6 | 2003-03-27 | Martin Stjernholm | | resolv_debug ("low_findprog %s: returning cached (autoreload)\n", fname);
|
401fa0 | 2002-12-02 | Martin Stjernholm | | return ret;
}
|
6e2ebb | 1999-12-28 | Martin Stjernholm | | #endif
|
14fc64 | 1999-11-26 | Henrik Grubbström (Grubba) | |
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | switch(ext)
{
case "":
case ".pike":
|
6d926c | 1999-11-26 | Henrik Grubbström (Grubba) | | foreach(query_precompiled_names(fname), string oname) {
|
e15f7f | 2009-04-25 | Martin Stjernholm | | int o_mtime = get_precompiled_mtime (oname);
if (o_mtime >= 0) {
if (o_mtime >= s->mtime) {
|
6d926c | 1999-11-26 | Henrik Grubbström (Grubba) | | mixed err=catch {
|
87ce12 | 2008-05-29 | Henrik Grubbström (Grubba) | | object|program decoded;
|
e15f7f | 2009-04-25 | Martin Stjernholm | | AUTORELOAD_CHECK_PRECOMPILED_FILE (oname);
|
3d21a6 | 2003-03-27 | Martin Stjernholm | | resolv_debug ("low_findprog %s: decoding dumped\n", fname);
INC_RESOLV_MSG_DEPTH();
|
e15f7f | 2009-04-25 | Martin Stjernholm | | decoded = decode_value(read_precompiled (oname),
|
87ce12 | 2008-05-29 | Henrik Grubbström (Grubba) | | (handler && handler->get_codec ||
get_codec)(fname, mkobj, handler));
|
3d21a6 | 2003-03-27 | Martin Stjernholm | | DEC_RESOLV_MSG_DEPTH();
resolv_debug ("low_findprog %s: dump decode ok\n", fname);
|
87ce12 | 2008-05-29 | Henrik Grubbström (Grubba) | | if (decoded && decoded->this_program_does_not_exist) {
|
9d0e94 | 2005-04-15 | Henrik Grubbström (Grubba) | | resolv_debug ("low_findprog %s: program claims not to exist\n",
fname);
return programs[fname] = 0;
}
else {
|
87ce12 | 2008-05-29 | Henrik Grubbström (Grubba) | | if (objectp(decoded)) {
resolv_debug("low_findprog %s: decoded object %O\n",
fname, decoded);
objects[ret = object_program(decoded)] = decoded;
} else {
ret = decoded;
}
|
9d0e94 | 2005-04-15 | Henrik Grubbström (Grubba) | | resolv_debug("low_findprog %s: returning %O\n", fname, ret);
return programs[fname]=ret;
}
|
6d926c | 1999-11-26 | Henrik Grubbström (Grubba) | | };
|
3d21a6 | 2003-03-27 | Martin Stjernholm | | DEC_RESOLV_MSG_DEPTH();
resolv_debug ("low_findprog %s: dump decode failed\n", fname);
|
57b52d | 2003-05-31 | Martin Stjernholm | | programs[fname] = no_value;
|
677d26 | 2003-11-14 | Martin Stjernholm | | call_compile_warning (handler, oname,
|
86e66a | 2010-05-06 | Henrik Grubbström (Grubba) | | "Decode failed: " +
call_describe_error(err));
|
3abf3f | 2008-05-26 | Henrik Grubbström (Grubba) | |
|
e115cb | 1999-12-09 | Henrik Grubbström (Grubba) | | } else if (out_of_date_warning) {
|
677d26 | 2003-11-14 | Martin Stjernholm | | call_compile_warning (handler, oname,
"Compiled file is out of date");
|
10e16f | 1999-11-04 | Henrik Grubbström (Grubba) | | }
|
b08596 | 1998-05-19 | Fredrik Hübinette (Hubbe) | | }
|
471ed9 | 1998-04-24 | Fredrik Hübinette (Hubbe) | | }
|
eba023 | 2004-01-13 | Martin Nilsson | |
|
3d21a6 | 2003-03-27 | Martin Stjernholm | | resolv_debug ("low_findprog %s: compiling, mkobj: %O\n", fname, mkobj);
INC_RESOLV_MSG_DEPTH();
|
401fa0 | 2002-12-02 | Martin Stjernholm | | programs[fname]=ret=__empty_program(0, fname);
|
c2e10c | 2003-11-18 | Martin Stjernholm | | AUTORELOAD_CHECK_FILE (fname);
string src;
if (array|object err = catch (src = master_read_file (fname))) {
DEC_RESOLV_MSG_DEPTH();
resolv_debug ("low_findprog %s: failed to read file\n", fname);
objects[ret] = no_value;
ret=programs[fname]=0;
compile_cb_rethrow (err);
}
|
aa68b1 | 2001-03-19 | Fredrik Hübinette (Hubbe) | | if ( mixed e=catch {
|
c2e10c | 2003-11-18 | Martin Stjernholm | | ret=compile_string(src, fname, handler,
ret,
mkobj? (objects[ret]=__null_program()) : 0);
} )
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | {
|
3d21a6 | 2003-03-27 | Martin Stjernholm | | DEC_RESOLV_MSG_DEPTH();
resolv_debug ("low_findprog %s: compilation failed\n", fname);
|
57b52d | 2003-05-31 | Martin Stjernholm | | objects[ret] = no_value;
|
ab9d67 | 2003-03-08 | Henrik Grubbström (Grubba) | | ret=programs[fname]=0;
|
c46d68 | 2000-01-05 | Martin Stjernholm | | throw(e);
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | }
|
3d21a6 | 2003-03-27 | Martin Stjernholm | | DEC_RESOLV_MSG_DEPTH();
resolv_debug ("low_findprog %s: compilation ok\n", fname);
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | break;
|
20b522 | 2004-03-22 | Martin Stjernholm | |
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | #if constant(load_module)
case ".so":
|
caa322 | 1998-04-15 | Henrik Grubbström (Grubba) | | if (fname == "") {
|
20b522 | 2004-03-22 | Martin Stjernholm | | werror( "low_findprog(%O, %O) => load_module(\"\")\n"
|
86e66a | 2010-05-06 | Henrik Grubbström (Grubba) | | "%s\n", pname, ext, call_describe_backtrace(backtrace()) );
|
caa322 | 1998-04-15 | Henrik Grubbström (Grubba) | | }
|
26f3da | 2000-07-11 | Fredrik Hübinette (Hubbe) | |
|
c2e10c | 2003-11-18 | Martin Stjernholm | | if (array|object err = catch (ret = load_module(fakeroot(fname)))) {
DEC_RESOLV_MSG_DEPTH();
resolv_debug ("low_findprog %s: failed to load binary\n", fname);
objects[ret] = no_value;
ret=programs[fname]=0;
|
d58c97 | 2004-04-18 | Martin Stjernholm | | if (objectp (err) && err->is_module_load_error)
|
20b522 | 2004-03-22 | Martin Stjernholm | |
call_compile_warning (handler, fname,
|
d58c97 | 2004-04-18 | Martin Stjernholm | | "Failed to load library: %s\n", err->reason);
|
20b522 | 2004-03-22 | Martin Stjernholm | | else
compile_cb_rethrow (err);
|
c2e10c | 2003-11-18 | Martin Stjernholm | | }
|
20b522 | 2004-03-22 | Martin Stjernholm | | else
resolv_debug ("low_findprog %s: loaded binary\n", fname);
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | #endif /* load_module */
}
|
bec57d | 1999-09-06 | Fredrik Hübinette (Hubbe) | |
AUTORELOAD_FINISH(ret,programs,fname);
|
6e2ebb | 1999-12-28 | Martin Stjernholm | |
|
0453bf | 2004-03-22 | Martin Stjernholm | | if (ret && ret->this_program_does_not_exist) {
resolv_debug ("low_findprog %s: program says it doesn't exist\n", fname);
return programs[fname] = 0;
}
else {
resolv_debug("low_findprog %s: returning %O\n", fname, ret);
return programs[fname]=ret;
}
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | }
|
0453bf | 2004-03-22 | Martin Stjernholm | |
|
3d21a6 | 2003-03-27 | Martin Stjernholm | | resolv_debug ("low_findprog %s: file not found\n", fname);
|
6e2ebb | 1999-12-28 | Martin Stjernholm | | return 0;
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | }
|
eaa4da | 2001-10-04 | Fredrik Hübinette (Hubbe) | |
|
a002d3 | 2002-03-01 | Martin Stjernholm | |
|
eaa4da | 2001-10-04 | Fredrik Hübinette (Hubbe) | |
void unregister(program p)
{
|
87ce12 | 2008-05-29 | Henrik Grubbström (Grubba) | |
|
fb847c | 2004-06-17 | Martin Stjernholm | | if(string fname=rev_programs[p] || search(programs,p)) {
|
359329 | 2003-09-08 | Henrik Grubbström (Grubba) | | resolv_debug("unregister %s\n", fname);
|
fb847c | 2004-06-17 | Martin Stjernholm | | if (m_delete (rev_programs, p))
m_delete (programs, fname);
else
programs[fname] = no_value;
|
548e83 | 2011-03-13 | Martin Stjernholm | | string name = program_path_to_name (fname);
mixed n = has_value (name, ".") ?
resolv ((name / ".")[..<1] * ".") :
get_root_module();
if (objectp (n) && (n->is_resolv_dirnode || n->is_resolv_joinnode))
n->delete_value (p);
|
a002d3 | 2002-03-01 | Martin Stjernholm | | fname = dirname (fname);
|
57b52d | 2003-05-31 | Martin Stjernholm | | if ( fname!="" && objectp (n = fc[fname]) )
|
548e83 | 2011-03-13 | Martin Stjernholm | | if (n->is_resolv_dirnode)
|
1997b3 | 2005-07-13 | Henrik Grubbström (Grubba) | | n->delete_value (p);
|
a002d3 | 2002-03-01 | Martin Stjernholm | | }
|
fb847c | 2004-06-17 | Martin Stjernholm | |
|
87ce12 | 2008-05-29 | Henrik Grubbström (Grubba) | | object o = m_delete(objects, p);
|
fb847c | 2004-06-17 | Martin Stjernholm | | if (objectp (o)) {
|
87ce12 | 2008-05-29 | Henrik Grubbström (Grubba) | | m_delete(rev_objects, o);
|
fb847c | 2004-06-17 | Martin Stjernholm | | }
|
c6cf60 | 2001-12-13 | Martin Stjernholm | | foreach (fc; string name; mixed mod)
if (objectp(mod) && object_program(mod) == p)
|
fb847c | 2004-06-17 | Martin Stjernholm | | if (m_delete (rev_fc, mod))
m_delete (fc, name);
else
fc[name] = no_value;
|
14cf19 | 2008-08-14 | Martin Stjernholm | |
|
548e83 | 2011-03-13 | Martin Stjernholm | |
|
eaa4da | 2001-10-04 | Fredrik Hübinette (Hubbe) | | }
|
35f51c | 2008-06-28 | Martin Nilsson | | protected program findprog(string pname,
|
14cf19 | 2008-08-14 | Martin Stjernholm | | string ext,
object|void handler,
void|int mkobj)
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | {
switch(ext)
{
case ".pike":
case ".so":
|
aa68b1 | 2001-03-19 | Fredrik Hübinette (Hubbe) | | return low_findprog(pname,ext,handler, mkobj);
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | |
default:
pname+=ext;
return
|
aa68b1 | 2001-03-19 | Fredrik Hübinette (Hubbe) | | low_findprog(pname,"", handler, mkobj) ||
low_findprog(pname,".pike", handler, mkobj) ||
low_findprog(pname,".so", handler, mkobj);
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | }
}
|
aa68b1 | 2001-03-19 | Fredrik Hübinette (Hubbe) | | program low_cast_to_program(string pname,
string current_file,
object|void handler,
void|int mkobj)
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | {
string ext;
string nname;
|
7d016d | 2008-03-26 | Henrik Grubbström (Grubba) | |
|
34241f | 2001-05-24 | Henrik Grubbström (Grubba) | |
|
15af9c | 2003-12-19 | Marcus Comstedt | | if(sscanf(reverse(BASENAME(pname)),"%s.%s",ext, nname))
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | {
ext="."+reverse(ext);
|
35320b | 2004-10-30 | Martin Stjernholm | | pname=pname[..<sizeof(ext)];
|
2f520e | 2002-04-28 | Martin Nilsson | | }
else {
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | ext="";
}
|
2f520e | 2002-04-28 | Martin Nilsson | |
|
471ed9 | 1998-04-24 | Fredrik Hübinette (Hubbe) | | if(IS_ABSOLUTE_PATH(pname))
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | {
|
57b52d | 2003-05-31 | Martin Stjernholm | | program|NoValue prog = programs[pname];
|
c47588 | 2007-06-11 | Martin Bähr | | if ((!zero_type(prog)) && (prog != no_value))
{
return prog;
}
|
61b41f | 2003-12-18 | Marcus Comstedt | | pname=combine_path("",pname);
|
aa68b1 | 2001-03-19 | Fredrik Hübinette (Hubbe) | | return findprog(pname,ext,handler,mkobj);
|
2f520e | 2002-04-28 | Martin Nilsson | | }
else {
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | string cwd;
if(current_file)
{
|
2f520e | 2002-04-28 | Martin Nilsson | | cwd=dirname(current_file);
}
else {
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | cwd=getcwd();
}
|
aa68b1 | 2001-03-19 | Fredrik Hübinette (Hubbe) | | if(program ret=findprog(combine_path(cwd,pname),ext,handler,mkobj))
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | return ret;
foreach(pike_program_path, string path)
|
aa68b1 | 2001-03-19 | Fredrik Hübinette (Hubbe) | | if(program ret=findprog(combine_path(path,pname),ext,handler,mkobj))
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | return ret;
return 0;
}
}
|
aa68b1 | 2001-03-19 | Fredrik Hübinette (Hubbe) | |
|
97e5c7 | 2001-07-28 | Martin Nilsson | |
|
aa68b1 | 2001-03-19 | Fredrik Hübinette (Hubbe) | | program cast_to_program(string pname,
string current_file,
object|void handler)
{
|
3d21a6 | 2003-03-27 | Martin Stjernholm | | resolv_debug ("cast_to_program(%O, %O)\n", pname, current_file);
INC_RESOLV_MSG_DEPTH();
program ret = low_cast_to_program(pname, current_file, handler);
DEC_RESOLV_MSG_DEPTH();
resolv_debug ("cast_to_program(%O, %O) => %O\n", pname, current_file, ret);
|
677d26 | 2003-11-14 | Martin Stjernholm | | if (programp (ret)) return ret;
error("Cast %O to program failed%s.\n",
pname,
(current_file && current_file!="-") ? sprintf(" in %O",current_file) : "");
|
aa68b1 | 2001-03-19 | Fredrik Hübinette (Hubbe) | | }
|
97e5c7 | 2001-07-28 | Martin Nilsson | |
|
aa8410 | 2003-12-06 | Martin Nilsson | | void handle_error(array|object trace)
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | {
|
9d0e94 | 2005-04-15 | Henrik Grubbström (Grubba) | |
|
62e87b | 1998-04-14 | Fredrik Hübinette (Hubbe) | | if(mixed x=catch {
|
86e66a | 2010-05-06 | Henrik Grubbström (Grubba) | | werror(call_describe_backtrace(trace));
|
d28a71 | 2001-07-02 | Henrik Grubbström (Grubba) | | }) {
|
9f7109 | 2000-11-20 | Martin Stjernholm | |
|
62e87b | 1998-04-14 | Fredrik Hübinette (Hubbe) | | werror("Error in handle_error in master object:\n");
|
9f7109 | 2000-11-20 | Martin Stjernholm | | if(catch {
|
9d0e94 | 2005-04-15 | Henrik Grubbström (Grubba) | |
|
d28a71 | 2001-07-02 | Henrik Grubbström (Grubba) | | catch {
if (catch {
|
da2448 | 2002-05-24 | Martin Nilsson | | string msg = [string]x[0];
array bt = [array]x[1];
|
9d0e94 | 2005-04-15 | Henrik Grubbström (Grubba) | | werror("%s", msg);
werror("%O\n", bt);
|
d28a71 | 2001-07-02 | Henrik Grubbström (Grubba) | | }) {
werror("%O\n", x);
}
};
werror("Original error:\n"
"%O\n", trace);
|
aa73fc | 1999-10-21 | Fredrik Hübinette (Hubbe) | | }) {
werror("sprintf() failed to write error.\n");
}
|
62e87b | 1998-04-14 | Fredrik Hübinette (Hubbe) | | }
|
9d0e94 | 2005-04-15 | Henrik Grubbström (Grubba) | |
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | }
|
c5cc2d | 1998-04-29 | Henrik Grubbström (Grubba) | |
constant master_efuns = ({
|
4f64a5 | 2002-05-22 | Martin Nilsson | | "error",
|
c5cc2d | 1998-04-29 | Henrik Grubbström (Grubba) | | "basename",
"dirname",
"is_absolute_path",
"explode_path",
"compile_string",
"compile_file",
"add_include_path",
"remove_include_path",
"add_module_path",
"remove_module_path",
"add_program_path",
"remove_program_path",
"describe_backtrace",
|
a66ff2 | 2000-01-11 | Martin Stjernholm | | "describe_error",
|
677d26 | 2003-11-14 | Martin Stjernholm | | "get_backtrace",
|
4c3f7d | 2000-04-13 | Per Hedbor | | "normalize_path",
|
fb2dc0 | 2005-03-14 | Per Hedbor | | "bool",
"true",
"false",
|
c5cc2d | 1998-04-29 | Henrik Grubbström (Grubba) | | "getenv",
"putenv",
#ifdef GETCWD_CACHE
"cd",
"getcwd",
#endif
});
|
fb2dc0 | 2005-03-14 | Per Hedbor | | enum bool { false=0, true=1 };
|
901ce2 | 2008-06-29 | Marcus Agehall | |
|
28c538 | 2002-09-09 | Marcus Comstedt | | string include_prefix;
|
e54fbc | 2006-04-22 | Henrik Grubbström (Grubba) | |
string doc_prefix;
|
116cf5 | 2008-06-29 | Marcus Agehall | |
string cflags;
|
901ce2 | 2008-06-29 | Marcus Agehall | | string ldflags;
|
7a90f1 | 2003-01-26 | Martin Nilsson | |
|
e37819 | 2003-01-20 | Martin Nilsson | |
|
7a90f1 | 2003-01-26 | Martin Nilsson | |
|
e37819 | 2003-01-20 | Martin Nilsson | |
|
d4140e | 2004-07-04 | Stephen R. van den Berg | |
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | |
|
35f51c | 2008-06-28 | Martin Nilsson | | protected void create()
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | {
|
906612 | 2002-11-28 | Martin Nilsson | | foreach(master_efuns, string e)
|
fb2dc0 | 2005-03-14 | Per Hedbor | | if (!zero_type(this[e]))
|
e61706 | 2004-01-08 | Martin Nilsson | | add_constant(e, this[e]);
|
906612 | 2002-11-28 | Martin Nilsson | | else
error("Function %O is missing from master.pike.\n", e);
|
c5cc2d | 1998-04-29 | Henrik Grubbström (Grubba) | |
|
1554cc | 2007-09-03 | Henrik Grubbström (Grubba) | | add_constant("__dirnode", dirnode);
add_constant("__joinnode", joinnode);
|
c5cc2d | 1998-04-29 | Henrik Grubbström (Grubba) | | add_constant("strlen", sizeof);
|
d4140e | 2004-07-04 | Stephen R. van den Berg | | add_constant("write", write);
add_constant("werror", werror);
|
b85b13 | 2004-12-26 | Per Hedbor | |
add_constant("get_dir", master_get_dir );
add_constant("file_stat", lambda( string f, int|void d ) { return file_stat(f,d);} );
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | |
|
677d26 | 2003-11-14 | Martin Stjernholm | | #define CO(X) add_constant(#X,Builtin.__backend->X)
|
87f908 | 2001-03-12 | Fredrik Hübinette (Hubbe) | | CO(call_out);
CO(_do_call_outs);
CO(find_call_out);
CO(remove_call_out);
CO(call_out_info);
|
5667ee | 2009-03-05 | Henrik Grubbström (Grubba) | | #if "#share_prefix#"[0]!='#'
|
2d8c83 | 2003-08-11 | Henrik Grubbström (Grubba) | |
|
5667ee | 2009-03-05 | Henrik Grubbström (Grubba) | | add_include_path("#share_prefix#/include");
add_module_path("#share_prefix#/modules");
|
e37a3e | 1999-10-09 | Fredrik Hübinette (Hubbe) | | #endif
|
5667ee | 2009-03-05 | Henrik Grubbström (Grubba) | | #if "#lib_prefix#"[0]!='#'
|
e37a3e | 1999-10-09 | Fredrik Hübinette (Hubbe) | |
|
5667ee | 2009-03-05 | Henrik Grubbström (Grubba) | | add_include_path("#lib_prefix#/include");
add_module_path("#lib_prefix#/modules");
|
e37a3e | 1999-10-09 | Fredrik Hübinette (Hubbe) | | #endif
|
28c538 | 2002-09-09 | Marcus Comstedt | |
|
5667ee | 2009-03-05 | Henrik Grubbström (Grubba) | | #if "#cflags# "[0]!='#'
cflags = "#cflags#";
|
901ce2 | 2008-06-29 | Marcus Agehall | | #endif
|
5667ee | 2009-03-05 | Henrik Grubbström (Grubba) | | #if "#ldflags# "[0]!='#'
ldflags = "#ldflags#";
|
901ce2 | 2008-06-29 | Marcus Agehall | | #endif
|
5667ee | 2009-03-05 | Henrik Grubbström (Grubba) | | #if "#include_prefix#"[0]!='#'
include_prefix = "#include_prefix#";
|
907cf8 | 2008-06-29 | Marcus Agehall | | cflags = (cflags || "") + " -I" + dirname(include_prefix);
|
e54fbc | 2006-04-22 | Henrik Grubbström (Grubba) | | #endif
|
901ce2 | 2008-06-29 | Marcus Agehall | |
|
5667ee | 2009-03-05 | Henrik Grubbström (Grubba) | | #if "#doc_prefix#"[0]!='#'
doc_prefix = "#doc_prefix#";
|
28c538 | 2002-09-09 | Marcus Comstedt | | #endif
|
110ff8 | 2007-01-24 | H. William Welliver III | |
#if constant(__embedded_resource_directory)
add_include_path(__embedded_resource_directory + "/lib/include");
add_module_path(__embedded_resource_directory + "/lib/modules");
|
98ed48 | 2007-07-31 | H. William Welliver III | | add_module_path(__embedded_resource_directory + "/" + replace(uname()->machine, " ", "_") + "/modules");
|
110ff8 | 2007-01-24 | H. William Welliver III | | #endif
|
041825 | 2003-10-30 | H. William Welliver III | | system_module_path=pike_module_path;
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | }
|
97e5c7 | 2001-07-28 | Martin Nilsson | |
|
10e16f | 1999-11-04 | Henrik Grubbström (Grubba) | | program handle_inherit(string pname, string current_file, object|void handler)
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | {
|
3d21a6 | 2003-03-27 | Martin Stjernholm | | resolv_debug ("handle_inherit(%O, %O)\n", pname, current_file);
INC_RESOLV_MSG_DEPTH();
|
677d26 | 2003-11-14 | Martin Stjernholm | | program ret = cast_to_program(pname, current_file, handler);
|
3d21a6 | 2003-03-27 | Martin Stjernholm | | DEC_RESOLV_MSG_DEPTH();
resolv_debug ("handle_inherit(%O, %O) => %O\n", pname, current_file, ret);
return ret;
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | }
|
34241f | 2001-05-24 | Henrik Grubbström (Grubba) | | object low_cast_to_object(string oname, string current_file,
object|void current_handler)
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | {
program p;
object o;
|
34241f | 2001-05-24 | Henrik Grubbström (Grubba) | | p = low_cast_to_program(oname, current_file, current_handler, 1);
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | if(!p) return 0;
|
80f714 | 2003-02-27 | Henrik Grubbström (Grubba) | |
|
401fa0 | 2002-12-02 | Martin Stjernholm | | if(!objectp (o=objects[p])) o=objects[p]=p();
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | return o;
}
|
97e5c7 | 2001-07-28 | Martin Nilsson | |
|
aa8410 | 2003-12-06 | Martin Nilsson | | object cast_to_object(string oname, string current_file,
object|void current_handler)
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | {
|
3d21a6 | 2003-03-27 | Martin Stjernholm | | resolv_debug ("cast_to_object(%O, %O)\n", oname, current_file);
INC_RESOLV_MSG_DEPTH();
|
aa8410 | 2003-12-06 | Martin Nilsson | | object o = low_cast_to_object(oname, current_file, current_handler);
|
3d21a6 | 2003-03-27 | Martin Stjernholm | | DEC_RESOLV_MSG_DEPTH();
resolv_debug ("cast_to_object(%O, %O) => %O\n", oname, current_file, o);
|
401fa0 | 2002-12-02 | Martin Stjernholm | | if (objectp (o)) return o;
|
677d26 | 2003-11-14 | Martin Stjernholm | | error("Cast %O to object failed%s.\n",
oname,
(current_file && current_file!="-") ? sprintf(" in %O",current_file) : "");
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | }
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | |
|
35f51c | 2008-06-28 | Martin Nilsson | | protected class ZERO_TYPE {};
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | |
|
35f51c | 2008-06-28 | Martin Nilsson | | protected object Unicode;
|
7d016d | 2008-03-26 | Henrik Grubbström (Grubba) | |
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | |
|
1a03d1 | 2011-02-27 | Martin Nilsson | | class dirnode (string dirname, object|void compilation_handler,
string|void name)
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | {
|
1997b3 | 2005-07-13 | Henrik Grubbström (Grubba) | | constant is_resolv_dirnode = 1;
|
401fa0 | 2002-12-02 | Martin Stjernholm | |
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | mixed module;
|
098c8a | 2000-03-30 | Henrik Grubbström (Grubba) | | mapping(string:mixed) cache=([]);
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | mapping(string:array(string)) file_paths = ([]);
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | |
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | #ifdef __NT__
#define FIX_CASE(X) lower_case(X)
#else
#define FIX_CASE(X) (X)
#endif /* __NT__ */
|
35f51c | 2008-06-28 | Martin Nilsson | | protected string base_from_filename(string fname)
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | {
|
4885f1 | 2003-09-19 | Henrik Grubbström (Grubba) | | string low_name = FIX_CASE(fname);
|
58eb13 | 2008-03-20 | Henrik Grubbström (Grubba) | | catch {
low_name = utf8_to_string(low_name);
|
236a4a | 2008-03-27 | Henrik Grubbström (Grubba) | | if (Builtin.string_width(low_name) > 8) {
|
7d016d | 2008-03-26 | Henrik Grubbström (Grubba) | |
if (!Unicode) {
Unicode = resolv("Unicode");
}
low_name = Unicode.normalize(low_name, "NFC");
}
|
58eb13 | 2008-03-20 | Henrik Grubbström (Grubba) | | };
|
4885f1 | 2003-09-19 | Henrik Grubbström (Grubba) | | if (has_prefix(low_name, ".#")) return 0;
if (has_suffix(low_name, ".pike") ||
has_suffix(low_name, ".pmod")) {
|
35320b | 2004-10-30 | Martin Stjernholm | | return fname[..<5];
|
eaa4da | 2001-10-04 | Fredrik Hübinette (Hubbe) | | }
|
4885f1 | 2003-09-19 | Henrik Grubbström (Grubba) | | if (has_suffix(low_name, ".so")) {
|
35320b | 2004-10-30 | Martin Stjernholm | | return fname[..<3];
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | }
return 0;
}
|
35f51c | 2008-06-28 | Martin Nilsson | | protected int prio_from_filename(string fname)
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | {
fname = FIX_CASE(fname);
if (has_suffix(fname, ".pmod")) return 3;
if (has_suffix(fname, ".so")) return 2;
if (has_suffix(fname, ".pike")) return 1;
|
eaa4da | 2001-10-04 | Fredrik Hübinette (Hubbe) | |
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | |
return 0;
}
|
1a03d1 | 2011-02-27 | Martin Nilsson | | protected void create()
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | {
|
1a03d1 | 2011-02-27 | Martin Nilsson | | resolv_debug ("dirnode(%O,%O) created with name %O\n", dirname,
compilation_handler, name);
|
e61706 | 2004-01-08 | Martin Nilsson | | fc[dirname]=this;
|
1a03d1 | 2011-02-27 | Martin Nilsson | | array(string) files = sort(master_get_dir(dirname)||({}));
if (!sizeof(dirname)) return;
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | array(string) bases = map(files, base_from_filename);
files = filter(files, bases);
bases = filter(bases, bases);
resolv_debug("dirnode(%O,%O) got %d files.\n",
|
1a03d1 | 2011-02-27 | Martin Nilsson | | dirname, compilation_handler, sizeof(bases));
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | if (!sizeof(files)) return;
foreach(files; int no; string fname) {
fname = combine_path(dirname, fname);
string base = bases[no];
if (base == "module") {
module = module_checker();
}
array(string) paths = file_paths[base];
if (!paths) {
file_paths[base] = ({ fname });
continue;
}
int prio = prio_from_filename(fname);
int index;
foreach(paths; index; string other_fname) {
if (prio_from_filename(other_fname) <= prio) break;
}
file_paths[base] = paths[..index-1] + ({ fname }) + paths[index..];
|
e37819 | 2003-01-20 | Martin Nilsson | | }
}
|
14bb59 | 2000-05-06 | Fredrik Hübinette (Hubbe) | | class module_checker
{
|
47ba5a | 2013-06-03 | Martin Nilsson | | protected int `!()
|
14bb59 | 2000-05-06 | Fredrik Hübinette (Hubbe) | | {
|
3d21a6 | 2003-03-27 | Martin Stjernholm | | resolv_debug ("dirnode(%O)->module_checker()->`!()\n",dirname);
|
80f714 | 2003-02-27 | Henrik Grubbström (Grubba) | |
|
5a847a | 2008-01-04 | Henrik Grubbström (Grubba) | | if (mixed err = catch {
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | |
if (module = cache["module"] || low_ind("module", 1)) {
|
80f714 | 2003-02-27 | Henrik Grubbström (Grubba) | | |
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | * this).
|
80f714 | 2003-02-27 | Henrik Grubbström (Grubba) | | */
cache=([]);
_cache_full=0;
}
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | resolv_debug("dirnode(%O)->module_checker()->`!() => %s\n",
dirname, !module ? "doesn't exist" : "exists");
|
3d21a6 | 2003-03-27 | Martin Stjernholm | | return !module;
|
80f714 | 2003-02-27 | Henrik Grubbström (Grubba) | | }) {
|
86e66a | 2010-05-06 | Henrik Grubbström (Grubba) | |
|
4ce983 | 2003-06-05 | Martin Stjernholm | |
|
80f714 | 2003-02-27 | Henrik Grubbström (Grubba) | |
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | resolv_debug("dirnode(%O)->module_checker()->`!() => failure, doesn't exist\n",
dirname);
|
80f714 | 2003-02-27 | Henrik Grubbström (Grubba) | | return 1;
|
eaa4da | 2001-10-04 | Fredrik Hübinette (Hubbe) | | }
|
14bb59 | 2000-05-06 | Fredrik Hübinette (Hubbe) | | }
|
52c579 | 2000-05-23 | Fredrik Hübinette (Hubbe) | |
|
47ba5a | 2013-06-03 | Martin Nilsson | | protected mixed `[](string index)
|
cd9971 | 2001-11-09 | Martin Stjernholm | | {
|
3d21a6 | 2003-03-27 | Martin Stjernholm | | resolv_debug ("dirnode(%O)->module_checker()[%O] => %O\n",
dirname, index, module && module[index]);
return module && module[index];
|
eaa4da | 2001-10-04 | Fredrik Hübinette (Hubbe) | | }
|
47ba5a | 2013-06-03 | Martin Nilsson | | protected array(string) _indices() { if(module) return indices(module); }
protected array _values() { if(module) return values(module); }
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | }
|
35f51c | 2008-06-28 | Martin Nilsson | | protected mixed low_ind(string index, int(0..1)|void set_module)
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | {
array(string) paths;
|
fea47d | 2011-04-10 | Marcus Comstedt | | INC_RESOLV_MSG_DEPTH();
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | if (!(paths = file_paths[index])) {
DEC_RESOLV_MSG_DEPTH();
resolv_debug("dirnode(%O)->ind(%O) => no file match\n",
dirname, index);
return UNDEFINED;
}
foreach(paths, string fname) {
resolv_debug("dirnode(%O)->ind(%O) Trying file %O...\n",
dirname, index, fname);
Stat stat = master_file_stat(fakeroot(fname));
if (!stat) {
resolv_debug("dirnode(%O)->ind(%O) file %O disappeared!\n",
dirname, index, fname);
continue;
}
if (has_suffix(fname, ".pmod")) {
if (stat->isdir) {
|
048845 | 2008-02-07 | Martin Stjernholm | | if (dirnode n = fc[fname]) {
resolv_debug("dirnode(%O)->ind(%O) => found subdirectory %O, "
"returning old dirnode\n", dirname, index, fname);
return n;
}
resolv_debug("dirnode(%O)->ind(%O) => found subdirectory %O, "
"creating new dirnode\n", dirname, index, fname);
|
9dcabf | 2009-04-25 | Martin Stjernholm | | return fc[fname] = dirnode(fname, compilation_handler,
name && (name == "predef::" ?
index : name + "." + index));
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | }
resolv_debug("dirnode(%O)->ind(%O) casting (object)%O\n",
dirname, index, fname);
mixed ret;
|
87ce12 | 2008-05-29 | Henrik Grubbström (Grubba) | | if (ret = catch {
if (objectp(ret = low_cast_to_object(fname, 0, compilation_handler))) {
if (set_module) module = ret;
if(mixed tmp=ret->_module_value) ret=tmp;
DEC_RESOLV_MSG_DEPTH();
resolv_debug("dirnode(%O)->ind(%O) => found submodule %O:%O\n",
dirname, index, fname, ret);
return ret;
}
}) {
resolv_debug("dirnode(%O)->ind(%O) ==> Cast to object failed: %s\n",
|
86e66a | 2010-05-06 | Henrik Grubbström (Grubba) | | dirname, index, call_describe_backtrace(ret));
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | }
} else {
resolv_debug("dirnode(%O)->ind(%O) casting (program)%O\n",
dirname, index, fname);
|
fd0fd7 | 2004-04-17 | Marcus Comstedt | | program|object ret;
|
677d26 | 2003-11-14 | Martin Stjernholm | | if (ret = low_cast_to_program(fname, 0, compilation_handler)) {
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | DEC_RESOLV_MSG_DEPTH();
resolv_debug("dirnode(%O)->ind(%O) => found subprogram %O:%O\n",
dirname, index, fname, ret);
|
fd0fd7 | 2004-04-17 | Marcus Comstedt | | #if constant(load_module)
if (has_suffix(fname, ".so")) {
|
8c201a | 2004-04-17 | Marcus Comstedt | | if (!ret->_module_value) {
object o;
if(!objectp (o=objects[ret])) o=objects[ret]=ret();
ret = o;
}
|
fd0fd7 | 2004-04-17 | Marcus Comstedt | | if(mixed tmp=ret->_module_value) ret=tmp;
}
#endif
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | return ret;
}
}
resolv_debug("dirnode(%O)->ind(%O) => failure for file %O\n",
dirname, index, fname);
}
resolv_debug("dirnode(%O)->ind(%O) => UNDEFINED\n",
dirname, index);
return UNDEFINED;
}
|
35f51c | 2008-06-28 | Martin Nilsson | | protected mixed ind(string index)
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | {
|
3d21a6 | 2003-03-27 | Martin Stjernholm | | resolv_debug ("dirnode(%O)->ind(%O)\n", dirname, index);
INC_RESOLV_MSG_DEPTH();
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | if (_cache_full) {
DEC_RESOLV_MSG_DEPTH();
resolv_debug("dirnode(%O)->ind(%O) => cache_full %O\n",
dirname, index, cache[index]);
return cache[index];
}
|
3d21a6 | 2003-03-27 | Martin Stjernholm | | if(module)
|
e11883 | 1999-12-22 | Per Hedbor | | {
|
cd9971 | 2001-11-09 | Martin Stjernholm | | mixed o;
|
eaa4da | 2001-10-04 | Fredrik Hübinette (Hubbe) | |
|
aa68b1 | 2001-03-19 | Fredrik Hübinette (Hubbe) | | if(!zero_type(o=module[index]))
{
|
3d21a6 | 2003-03-27 | Martin Stjernholm | | DEC_RESOLV_MSG_DEPTH();
resolv_debug ("dirnode(%O)->ind(%O) => found %O\n",
dirname, index, o);
|
aa68b1 | 2001-03-19 | Fredrik Hübinette (Hubbe) | | return o;
}
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | resolv_debug ("dirnode(%O)->ind(%O) => not found in module\n",
dirname, index);
|
a2faf6 | 1999-12-01 | Martin Stjernholm | | }
|
4ce983 | 2003-06-05 | Martin Stjernholm | | else
resolv_debug ("dirnode(%O)->ind(%O) => no module\n", dirname, index);
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | |
|
fea47d | 2011-04-10 | Marcus Comstedt | | DEC_RESOLV_MSG_DEPTH();
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | return low_ind(index);
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | }
|
47ba5a | 2013-06-03 | Martin Nilsson | | protected mixed `[](string index)
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | {
mixed ret;
|
eaa4da | 2001-10-04 | Fredrik Hübinette (Hubbe) | | #ifdef MODULE_TRACE
|
e37819 | 2003-01-20 | Martin Nilsson | | werror("%*nDirnode(%O) cache[%O] ?????\n",
sizeof(backtrace()),dirname,index);
|
eaa4da | 2001-10-04 | Fredrik Hübinette (Hubbe) | | #endif
if(!zero_type(ret=cache[index]))
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | {
|
eaa4da | 2001-10-04 | Fredrik Hübinette (Hubbe) | | #ifdef MODULE_TRACE
|
3d21a6 | 2003-03-27 | Martin Stjernholm | | werror("%*nDirnode(%O) cache[%O] => %O%s\n",
|
ab9d67 | 2003-03-08 | Henrik Grubbström (Grubba) | | sizeof(backtrace()),dirname,index, ret,
(ret != ZERO_TYPE)?"":" (zero_type)");
|
eaa4da | 2001-10-04 | Fredrik Hübinette (Hubbe) | | #endif
|
cd9971 | 2001-11-09 | Martin Stjernholm | | if (ret != ZERO_TYPE) return ret;
|
ab9d67 | 2003-03-08 | Henrik Grubbström (Grubba) | | #ifdef MODULE_TRACE
werror("%*nDirnode(%O) ZERO_TYPE!\n",
sizeof(backtrace()),dirname);
#endif
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | return UNDEFINED;
}
|
1997b3 | 2005-07-13 | Henrik Grubbström (Grubba) | | ret=ind(index);
|
dd7d45 | 2002-12-09 | Martin Stjernholm | |
|
ab9d67 | 2003-03-08 | Henrik Grubbström (Grubba) | | if(ret == predef::__placeholder_object) {
#ifdef MODULE_TRACE
werror("%*nDirnode(%O) PLACE_HOLDER.\n",
sizeof(backtrace()),dirname);
#endif
return ret;
}
|
dd7d45 | 2002-12-09 | Martin Stjernholm | |
|
cd9971 | 2001-11-09 | Martin Stjernholm | | cache[index] = zero_type(ret) ? ZERO_TYPE : ret;
return ret;
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | }
|
3e4b81 | 1998-10-16 | Henrik Grubbström (Grubba) | |
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | mixed safe_index(string index)
{
mixed err;
|
3abf3f | 2008-05-26 | Henrik Grubbström (Grubba) | | resolv_debug ("dirnode(%O): %O...\n", dirname, index);
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | if (err = catch { return `[](index); }) {
|
677d26 | 2003-11-14 | Martin Stjernholm | | call_compile_warning (compilation_handler,
dirname+"."+fname,
|
86e66a | 2010-05-06 | Henrik Grubbström (Grubba) | | "Compilation failed: " +
call_describe_error(err));
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | }
return UNDEFINED;
}
|
35f51c | 2008-06-28 | Martin Nilsson | | protected int(0..1) _cache_full;
|
3e4b81 | 1998-10-16 | Henrik Grubbström (Grubba) | | void fill_cache()
{
|
3d21a6 | 2003-03-27 | Martin Stjernholm | | #if 0
|
86e66a | 2010-05-06 | Henrik Grubbström (Grubba) | | werror(call_describe_backtrace(({ sprintf("Filling cache in dirnode %O\n",
dirname),
backtrace() })));
|
3d21a6 | 2003-03-27 | Martin Stjernholm | | #endif
|
3e4b81 | 1998-10-16 | Henrik Grubbström (Grubba) | | if (_cache_full) {
return;
}
|
3abf3f | 2008-05-26 | Henrik Grubbström (Grubba) | | resolv_debug ("dirnode(%O) => Filling cache...\n", dirname);
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | |
|
677d26 | 2003-11-14 | Martin Stjernholm | |
|
3e4b81 | 1998-10-16 | Henrik Grubbström (Grubba) | | if (module) {
|
3abf3f | 2008-05-26 | Henrik Grubbström (Grubba) | | resolv_debug("dirnode(%O): module: %O, indices:%{%O, %}\n",
dirname, module, indices(module));
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | map(indices(module), safe_index);
|
3e4b81 | 1998-10-16 | Henrik Grubbström (Grubba) | | }
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | map(indices(file_paths), safe_index);
|
3abf3f | 2008-05-26 | Henrik Grubbström (Grubba) | | _cache_full = (object_program(module) != __null_program);
resolv_debug ("dirnode(%O) => Cache %s.\n", dirname,
_cache_full?"full":"partially filled");
|
3e4b81 | 1998-10-16 | Henrik Grubbström (Grubba) | | }
|
e37819 | 2003-01-20 | Martin Nilsson | |
|
47ba5a | 2013-06-03 | Martin Nilsson | | protected protected array(string) _indices()
|
3e4b81 | 1998-10-16 | Henrik Grubbström (Grubba) | | {
fill_cache();
|
eb801d | 2003-06-05 | Martin Stjernholm | |
return filter (indices (cache), map (values (cache), `!=, ZERO_TYPE));
|
3e4b81 | 1998-10-16 | Henrik Grubbström (Grubba) | | }
|
e37819 | 2003-01-20 | Martin Nilsson | |
|
47ba5a | 2013-06-03 | Martin Nilsson | | protected protected array(mixed) _values()
|
3e4b81 | 1998-10-16 | Henrik Grubbström (Grubba) | | {
fill_cache();
|
cd9971 | 2001-11-09 | Martin Stjernholm | | return values(cache) - ({ZERO_TYPE});
|
3e4b81 | 1998-10-16 | Henrik Grubbström (Grubba) | | }
|
52c579 | 2000-05-23 | Fredrik Hübinette (Hubbe) | |
|
a002d3 | 2002-03-01 | Martin Stjernholm | | void delete_value (mixed val)
{
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | if (string name = search (cache, val)) {
|
a002d3 | 2002-03-01 | Martin Stjernholm | | m_delete (cache, name);
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | _cache_full = 0;
}
|
a002d3 | 2002-03-01 | Martin Stjernholm | | }
|
35f51c | 2008-06-28 | Martin Nilsson | | protected int(0..) _sizeof() {
|
e37819 | 2003-01-20 | Martin Nilsson | | return sizeof(_values());
}
|
35f51c | 2008-06-28 | Martin Nilsson | | protected string _sprintf(int as)
|
e37819 | 2003-01-20 | Martin Nilsson | | {
|
9dcabf | 2009-04-25 | Martin Stjernholm | | return as=='O' && (name || sprintf("master()->dirnode(%O:%O)",
dirname, module && module));
|
e37819 | 2003-01-20 | Martin Nilsson | | }
}
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | |
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | |
|
1a03d1 | 2011-02-27 | Martin Nilsson | | class joinnode (array(object|mapping) joined_modules,
object|void compilation_handler,
joinnode|mapping(mixed:int(0..0))|void fallback_module,
string|void name)
|
94257b | 1998-10-16 | Henrik Grubbström (Grubba) | | {
|
1997b3 | 2005-07-13 | Henrik Grubbström (Grubba) | | constant is_resolv_joinnode = 1;
|
9dcabf | 2009-04-25 | Martin Stjernholm | |
|
098c8a | 2000-03-30 | Henrik Grubbström (Grubba) | | mapping(string:mixed) cache=([]);
|
94257b | 1998-10-16 | Henrik Grubbström (Grubba) | |
|
1a03d1 | 2011-02-27 | Martin Nilsson | | protected string _sprintf(int as)
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | {
|
9dcabf | 2009-04-25 | Martin Stjernholm | | if (as != 'O') return 0;
if (name) {
if (has_value (name, "|"))
return "joinnode(" + name + ")";
else
return name;
}
else
return sprintf("master()->joinnode(%O)", joined_modules);
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | }
|
52c579 | 2000-05-23 | Fredrik Hübinette (Hubbe) | |
|
1a03d1 | 2011-02-27 | Martin Nilsson | | protected void create()
|
94257b | 1998-10-16 | Henrik Grubbström (Grubba) | | {
|
eb6f0e | 2011-02-28 | Henrik Grubbström (Grubba) | | if( !fallback_module ) {
|
1a03d1 | 2011-02-27 | Martin Nilsson | | fallback_module = ([]);
|
eb6f0e | 2011-02-28 | Henrik Grubbström (Grubba) | | }
|
9dcabf | 2009-04-25 | Martin Stjernholm | |
|
1a03d1 | 2011-02-27 | Martin Nilsson | | if (!name)
{
|
9dcabf | 2009-04-25 | Martin Stjernholm | | mapping(string:int(1..1)) names = ([]);
|
1a03d1 | 2011-02-27 | Martin Nilsson | | foreach (joined_modules, object|mapping m) {
if (objectp (m) && stringp (m->name))
|
9dcabf | 2009-04-25 | Martin Stjernholm | | names[m->name] = 1;
}
if (sizeof (names))
|
1a03d1 | 2011-02-27 | Martin Nilsson | | name = sort (indices (names)) * "|";
|
9dcabf | 2009-04-25 | Martin Stjernholm | | }
resolv_debug ("joinnode(%O) created with name %O\n", joined_modules, name);
|
94257b | 1998-10-16 | Henrik Grubbström (Grubba) | | }
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | void add_path(string path)
{
path = combine_path(getcwd(), path);
dirnode node = fc[path] ||
|
9dcabf | 2009-04-25 | Martin Stjernholm | | (fc[path] = dirnode(path, compilation_handler,
name && !has_value (name, "|") && name));
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | if (sizeof(joined_modules) &&
joined_modules[0] == node) return;
joined_modules = ({ node }) + (joined_modules - ({ node }));
|
db6eae | 2009-07-17 | Henrik Grubbström (Grubba) | | cache = ([]);
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | }
void rem_path(string path)
{
path = combine_path(getcwd(), path);
joined_modules = filter(joined_modules,
lambda(dirnode node) {
return !objectp(node) ||
!node->is_resolv_dirnode ||
(node->dirname != path);
});
|
db6eae | 2009-07-17 | Henrik Grubbström (Grubba) | | cache = ([]);
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | }
|
35f51c | 2008-06-28 | Martin Nilsson | | protected mixed ind(string index)
|
94257b | 1998-10-16 | Henrik Grubbström (Grubba) | | {
|
3d21a6 | 2003-03-27 | Martin Stjernholm | | resolv_debug ("joinnode(%O)->ind(%O)\n", joined_modules, index);
INC_RESOLV_MSG_DEPTH();
|
94257b | 1998-10-16 | Henrik Grubbström (Grubba) | | array(mixed) res = ({});
|
ca051c | 1999-11-23 | Per Hedbor | | foreach(joined_modules, object|mapping o)
{
|
94257b | 1998-10-16 | Henrik Grubbström (Grubba) | | mixed ret;
|
ca051c | 1999-11-23 | Per Hedbor | | if (!zero_type(ret = o[index]))
{
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | if (objectp(ret) &&
|
3ad5d6 | 2000-05-13 | Martin Stjernholm | | (ret->is_resolv_dirnode || ret->is_resolv_joinnode))
|
ca051c | 1999-11-23 | Per Hedbor | | {
|
8b307e | 1998-10-17 | Henrik Grubbström (Grubba) | |
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | res += ({ ret });
} else {
|
3d21a6 | 2003-03-27 | Martin Stjernholm | | DEC_RESOLV_MSG_DEPTH();
resolv_debug ("joinnode(%O)->ind(%O) => found %O\n",
joined_modules, index, ret);
|
ca051c | 1999-11-23 | Per Hedbor | | return (ret);
|
8b307e | 1998-10-17 | Henrik Grubbström (Grubba) | | }
|
94257b | 1998-10-16 | Henrik Grubbström (Grubba) | | }
}
|
3d21a6 | 2003-03-27 | Martin Stjernholm | |
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | if (sizeof(res)) {
|
3d21a6 | 2003-03-27 | Martin Stjernholm | | DEC_RESOLV_MSG_DEPTH();
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | resolv_debug("joinnode(%O)->ind(%O) => new joinnode, fallback: %O\n",
joined_modules, index, fallback_module[index]);
|
9dcabf | 2009-04-25 | Martin Stjernholm | | return joinnode(res, compilation_handler, fallback_module[index],
name && !has_value (name, "|") &&
(name == "predef::" ? index : name + "." + index));
|
3d21a6 | 2003-03-27 | Martin Stjernholm | | }
DEC_RESOLV_MSG_DEPTH();
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | resolv_debug ("joinnode(%O)->ind(%O) => not found. Trying fallback %O\n",
joined_modules, index, fallback_module);
return fallback_module[index];
|
94257b | 1998-10-16 | Henrik Grubbström (Grubba) | | }
|
47ba5a | 2013-06-03 | Martin Nilsson | | protected mixed `[](string index)
|
94257b | 1998-10-16 | Henrik Grubbström (Grubba) | | {
|
098c8a | 2000-03-30 | Henrik Grubbström (Grubba) | | mixed ret;
|
94257b | 1998-10-16 | Henrik Grubbström (Grubba) | | if (!zero_type(ret = cache[index])) {
if (ret != ZERO_TYPE) {
return ret;
}
return UNDEFINED;
}
|
1997b3 | 2005-07-13 | Henrik Grubbström (Grubba) | | ret = ind(index);
|
dd7d45 | 2002-12-09 | Martin Stjernholm | |
if(ret == predef::__placeholder_object) return ret;
|
94257b | 1998-10-16 | Henrik Grubbström (Grubba) | | if (zero_type(ret)) {
cache[index] = ZERO_TYPE;
} else {
cache[index] = ret;
}
return ret;
}
|
eb801d | 2003-06-05 | Martin Stjernholm | |
|
35f51c | 2008-06-28 | Martin Nilsson | | protected int _cache_full;
|
eb801d | 2003-06-05 | Martin Stjernholm | |
|
3e4b81 | 1998-10-16 | Henrik Grubbström (Grubba) | | void fill_cache()
{
|
3d21a6 | 2003-03-27 | Martin Stjernholm | | #if 0
|
86e66a | 2010-05-06 | Henrik Grubbström (Grubba) | | werror(call_describe_backtrace(({ "Filling cache in joinnode\n",
backtrace() })));
|
3d21a6 | 2003-03-27 | Martin Stjernholm | | #endif
|
3e4b81 | 1998-10-16 | Henrik Grubbström (Grubba) | | if (_cache_full) {
return;
}
|
c08426 | 2000-02-04 | Henrik Grubbström (Grubba) | | foreach(joined_modules, object|mapping|program o) {
|
3e4b81 | 1998-10-16 | Henrik Grubbström (Grubba) | | foreach(indices(o), string index) {
if (zero_type(cache[index])) {
`[](index);
}
}
}
|
a16503 | 2003-09-19 | Henrik Grubbström (Grubba) | | foreach(indices(fallback_module), string index) {
`[](index);
}
|
3e4b81 | 1998-10-16 | Henrik Grubbström (Grubba) | | _cache_full = 1;
}
|
eb801d | 2003-06-05 | Martin Stjernholm | |
|
47ba5a | 2013-06-03 | Martin Nilsson | | protected array(string) _indices()
|
3e4b81 | 1998-10-16 | Henrik Grubbström (Grubba) | | {
fill_cache();
|
eb801d | 2003-06-05 | Martin Stjernholm | |
return filter (indices (cache), map (values (cache), `!=, ZERO_TYPE));
|
3e4b81 | 1998-10-16 | Henrik Grubbström (Grubba) | | }
|
eb801d | 2003-06-05 | Martin Stjernholm | |
|
47ba5a | 2013-06-03 | Martin Nilsson | | protected array(mixed) _values()
|
3e4b81 | 1998-10-16 | Henrik Grubbström (Grubba) | | {
fill_cache();
|
cd9971 | 2001-11-09 | Martin Stjernholm | | return values(cache) - ({ZERO_TYPE});
|
3e4b81 | 1998-10-16 | Henrik Grubbström (Grubba) | | }
|
a002d3 | 2002-03-01 | Martin Stjernholm | |
void delete_value (mixed val)
{
if (string name = search (cache, val))
m_delete (cache, name);
for (int i = 0; i < sizeof (joined_modules); i++) {
object|mapping|program o = joined_modules[i];
if (o == val) {
joined_modules = joined_modules[..i - 1] + joined_modules[i + 1..];
i--;
}
else if (objectp (o) && (o->is_resolv_dirnode || o->is_resolv_joinnode))
|
1997b3 | 2005-07-13 | Henrik Grubbström (Grubba) | | o->delete_value (val);
|
a002d3 | 2002-03-01 | Martin Stjernholm | | else if (string name = mappingp (o) && search (o, val))
m_delete (o, name);
}
}
|
94257b | 1998-10-16 | Henrik Grubbström (Grubba) | |
|
47ba5a | 2013-06-03 | Martin Nilsson | | protected int `== (mixed other)
|
4ce983 | 2003-06-05 | Martin Stjernholm | | {
|
34bf8a | 2010-06-16 | Henrik Grubbström (Grubba) | | return objectp (other) && (other->is_resolv_joinnode == 1) &&
|
1997b3 | 2005-07-13 | Henrik Grubbström (Grubba) | | equal (mkmultiset (joined_modules), mkmultiset (other->joined_modules));
|
4ce983 | 2003-06-05 | Martin Stjernholm | | }
|
57b52d | 2003-05-31 | Martin Stjernholm | | array(object) _encode()
{
return joined_modules;
}
void _decode (array(object) joined_modules)
{
this_program::joined_modules = joined_modules;
}
|
14cf19 | 2008-08-14 | Martin Stjernholm | | }
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | |
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | joinnode handle_import(string path, string|void current_file,
|
14cf19 | 2008-08-14 | Martin Stjernholm | | object|void current_handler)
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | {
|
5dd183 | 2003-12-18 | Marcus Comstedt | | #ifdef __amigaos__
if(path == ".")
path = "";
#endif
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | if(current_file)
{
|
15af9c | 2003-12-19 | Marcus Comstedt | | path = combine_path_with_cwd(dirname(current_file), path);
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | } else {
path = combine_path_with_cwd(path);
}
#if 0
if (module_node_cache[current_handler]) {
if (module_node_cache[current_handler][path]) {
return module_node_cache[current_handler][path];
}
} else {
module_node_cache[current_handler] = ([]);
}
module_node node = module_node_cache[current_handler][path] =
module_node("import::"+path, 0, current_handler);
#endif /* 0 */
joinnode node = joinnode(({}), current_handler);
#ifdef PIKE_MODULE_RELOC
if(path == "/${PIKE_MODULE_PATH}" ||
has_prefix(path, "/${PIKE_MODULE_PATH}/")) {
string tmp = path[21..];
foreach(pike_module_path, string prefix) {
|
1997b3 | 2005-07-13 | Henrik Grubbström (Grubba) | | node->add_path(sizeof(tmp)? combine_path(prefix, tmp) : prefix);
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | }
} else
#endif /* PIKE_MODULE_RELOC */
|
1997b3 | 2005-07-13 | Henrik Grubbström (Grubba) | | node->add_path(path);
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | return node;
}
|
9dcabf | 2009-04-25 | Martin Stjernholm | | program|object findmodule(string fullname, object|void handler,
void|string name)
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | {
|
359329 | 2003-09-08 | Henrik Grubbström (Grubba) | | program|object o;
|
57b52d | 2003-05-31 | Martin Stjernholm | |
|
3d21a6 | 2003-03-27 | Martin Stjernholm | | resolv_debug ("findmodule(%O)\n", fullname);
|
57b52d | 2003-05-31 | Martin Stjernholm | | if(!zero_type(o=fc[fullname]) && o != no_value)
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | {
|
359329 | 2003-09-08 | Henrik Grubbström (Grubba) | | if (objectp(o) || programp(o) || o != 0) {
|
3d21a6 | 2003-03-27 | Martin Stjernholm | | resolv_debug ("findmodule(%O) => found %O (cached)\n", fullname, o);
return o;
}
resolv_debug ("findmodule(%O) => not found (cached)\n", fullname);
return UNDEFINED;
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | }
|
89b716 | 2007-11-15 | Martin Stjernholm | | if(Stat stat=master_file_stat(fakeroot(fullname)))
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | {
|
68065f | 2003-05-28 | Johan Sundström | | if(stat->isdir)
{
|
3d21a6 | 2003-03-27 | Martin Stjernholm | | resolv_debug ("findmodule(%O) => new dirnode\n", fullname);
|
9dcabf | 2009-04-25 | Martin Stjernholm | | return fc[fullname] = dirnode(fullname, handler, name);
|
89b716 | 2007-11-15 | Martin Stjernholm | | }
#if constant (load_module)
else if (has_suffix (fullname, ".so")) {
o = fc[fullname] = low_cast_to_object(fullname, "/.", handler);
DEC_RESOLV_MSG_DEPTH();
resolv_debug ("findmodule(%O) => got .so object %O\n", fullname, o);
return o;
|
3d21a6 | 2003-03-27 | Martin Stjernholm | | }
|
89b716 | 2007-11-15 | Martin Stjernholm | | #endif
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | }
|
3d21a6 | 2003-03-27 | Martin Stjernholm | | INC_RESOLV_MSG_DEPTH();
|
89b716 | 2007-11-15 | Martin Stjernholm | | if(objectp (o = low_cast_to_object(fullname, "/.", handler))) {
|
3d21a6 | 2003-03-27 | Martin Stjernholm | | DEC_RESOLV_MSG_DEPTH();
resolv_debug ("findmodule(%O) => got object %O\n", fullname, o);
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | return fc[fullname]=o;
|
3d21a6 | 2003-03-27 | Martin Stjernholm | | }
|
eba023 | 2004-01-13 | Martin Nilsson | |
|
677d26 | 2003-11-14 | Martin Stjernholm | | if (programp (o = low_cast_to_program(fullname, "/.", handler))) {
|
359329 | 2003-09-08 | Henrik Grubbström (Grubba) | | DEC_RESOLV_MSG_DEPTH();
resolv_debug ("findmodule(%O) => got .pike program %O\n", fullname, o);
return fc[fullname] = o;
}
|
3d21a6 | 2003-03-27 | Martin Stjernholm | | DEC_RESOLV_MSG_DEPTH();
resolv_debug ("findmodule(%O) => not found\n", fullname);
|
401fa0 | 2002-12-02 | Martin Stjernholm | | return fc[fullname] = 0;
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | }
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | #if 0
|
10e16f | 1999-11-04 | Henrik Grubbström (Grubba) | | mixed handle_import(string what, string|void current_file, object|void handler)
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | {
|
afa129 | 2000-02-19 | Martin Nilsson | | string path;
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | if(current_file)
{
|
15af9c | 2003-12-19 | Marcus Comstedt | | path = combine_path_with_cwd(dirname(current_file), what);
|
57b1af | 2001-12-13 | Henrik Grubbström (Grubba) | | } else {
path = combine_path_with_cwd(what);
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | }
|
57b52d | 2003-05-31 | Martin Stjernholm | |
#if 0
|
34241f | 2001-05-24 | Henrik Grubbström (Grubba) | | if (handler) {
|
3d21a6 | 2003-03-27 | Martin Stjernholm | | resolv_debug ("handle_import(%O, %O, %O) => new dirnode with handler\n",
what, current_file, handler);
|
34241f | 2001-05-24 | Henrik Grubbström (Grubba) | | return dirnode(path, handler);
}
|
57b52d | 2003-05-31 | Martin Stjernholm | | #endif
if(objectp (fc[path])) {
|
3d21a6 | 2003-03-27 | Martin Stjernholm | | resolv_debug ("handle_import(%O, %O) => found %O (cached)\n",
what, current_file, fc[path]);
return fc[path];
}
resolv_debug ("handle_import(%O, %O) => new dirnode\n", what, current_file);
|
2d8c83 | 2003-08-11 | Henrik Grubbström (Grubba) | | #ifdef PIKE_MODULE_RELOC
if(path == "/${PIKE_MODULE_PATH}" ||
has_prefix(path, "/${PIKE_MODULE_PATH}/")) {
string tmp = path[21..];
array(dirnode) dirnodes = ({});
foreach(pike_module_path, string prefix) {
string s2 = fakeroot(sizeof(tmp)? combine_path(prefix, tmp) : prefix);
if(master_file_stat(s2))
dirnodes += ({ dirnode(s2, handler) });
}
resolv_debug("handle_import(%O, %O) => Found %d dirnodes\n",
what, current_file, sizeof(dirnodes));
if (sizeof(dirnodes) > 1) return fc[path] = joinnode(dirnodes);
if (sizeof(dirnodes)) return fc[path] = dirnodes[0];
return UNDEFINED;
}
#endif /* PIKE_MODULE_RELOC */
return fc[path] = dirnode(fakeroot(path), handler);
|
cc2c07 | 1998-04-19 | Fredrik Hübinette (Hubbe) | | }
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | #endif /* 0 */
|
a20af6 | 2000-09-26 | Fredrik Hübinette (Hubbe) | |
multiset no_resolv = (<>);
|
b07e96 | 2001-07-27 | Martin Nilsson | |
|
21c85e | 2008-06-01 | Henrik Grubbström (Grubba) | |
|
a20af6 | 2000-09-26 | Fredrik Hübinette (Hubbe) | | class CompatResolver
|
cc2c07 | 1998-04-19 | Fredrik Hübinette (Hubbe) | | {
|
21c85e | 2008-06-01 | Henrik Grubbström (Grubba) | |
|
9dcabf | 2009-04-25 | Martin Stjernholm | | joinnode root_module =
joinnode(({instantiate_static_modules(predef::_static_modules)}),
0, 0, "predef::");
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | |
mapping(object:joinnode) handler_root_modules = ([]);
|
94dc1b | 2003-10-30 | H. William Welliver III | |
|
041825 | 2003-10-30 | H. William Welliver III | | array(string) system_module_path=({});
|
a20af6 | 2000-09-26 | Fredrik Hübinette (Hubbe) | | array(string) pike_module_path=({});
|
041825 | 2003-10-30 | H. William Welliver III | |
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | array(string) pike_include_path=({});
|
041825 | 2003-10-30 | H. William Welliver III | |
|
a20af6 | 2000-09-26 | Fredrik Hübinette (Hubbe) | | array(string) pike_program_path=({});
|
041825 | 2003-10-30 | H. William Welliver III | |
|
da494f | 2003-11-12 | Henrik Grubbström (Grubba) | | mapping(string:string) predefines = master()->initial_predefines;
|
a20af6 | 2000-09-26 | Fredrik Hübinette (Hubbe) | | string ver;
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | |
|
359329 | 2003-09-08 | Henrik Grubbström (Grubba) | |
|
21c85e | 2008-06-01 | Henrik Grubbström (Grubba) | |
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | CompatResolver fallback_resolver;
|
359329 | 2003-09-08 | Henrik Grubbström (Grubba) | |
|
4619bd | 2002-07-29 | Martin Nilsson | |
|
6df5a5 | 2001-11-07 | Martin Nilsson | |
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | |
|
35f51c | 2008-06-28 | Martin Nilsson | | protected void create(mixed version, CompatResolver|void fallback_resolver)
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | {
resolv_debug("CompatResolver(%O, %O)\n", version, fallback_resolver);
ver=(string)version;
#if 0
if (version) {
|
1997b3 | 2005-07-13 | Henrik Grubbström (Grubba) | | root_module->symbol = ver + "::";
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | }
#endif
if (CompatResolver::fallback_resolver = fallback_resolver) {
|
1997b3 | 2005-07-13 | Henrik Grubbström (Grubba) | | root_module->fallback_module = fallback_resolver->root_module;
|
a20af6 | 2000-09-26 | Fredrik Hübinette (Hubbe) | | }
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | predefines = initial_predefines;
}
|
a20af6 | 2000-09-26 | Fredrik Hübinette (Hubbe) | |
|
8f4569 | 2001-01-14 | Henrik Grubbström (Grubba) | |
|
a20af6 | 2000-09-26 | Fredrik Hübinette (Hubbe) | | void add_include_path(string tmp)
{
tmp=normalize_path(combine_path_with_cwd(tmp));
pike_include_path-=({tmp});
pike_include_path=({tmp})+pike_include_path;
}
|
8f4569 | 2001-01-14 | Henrik Grubbström (Grubba) | |
|
a20af6 | 2000-09-26 | Fredrik Hübinette (Hubbe) | | void remove_include_path(string tmp)
{
tmp=normalize_path(combine_path_with_cwd(tmp));
pike_include_path-=({tmp});
}
|
eba023 | 2004-01-13 | Martin Nilsson | |
|
8f4569 | 2001-01-14 | Henrik Grubbström (Grubba) | |
|
a20af6 | 2000-09-26 | Fredrik Hübinette (Hubbe) | | void add_module_path(string tmp)
{
tmp=normalize_path(combine_path_with_cwd(tmp));
|
1997b3 | 2005-07-13 | Henrik Grubbström (Grubba) | | root_module->add_path(tmp);
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | pike_module_path = ({ tmp }) + (pike_module_path - ({ tmp }));
|
a20af6 | 2000-09-26 | Fredrik Hübinette (Hubbe) | | }
|
eba023 | 2004-01-13 | Martin Nilsson | |
|
8f4569 | 2001-01-14 | Henrik Grubbström (Grubba) | |
|
a20af6 | 2000-09-26 | Fredrik Hübinette (Hubbe) | | void remove_module_path(string tmp)
{
tmp=normalize_path(combine_path_with_cwd(tmp));
|
1997b3 | 2005-07-13 | Henrik Grubbström (Grubba) | | root_module->rem_path(tmp);
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | pike_module_path -= ({ tmp });
|
a20af6 | 2000-09-26 | Fredrik Hübinette (Hubbe) | | }
|
eba023 | 2004-01-13 | Martin Nilsson | |
|
8f4569 | 2001-01-14 | Henrik Grubbström (Grubba) | |
|
a20af6 | 2000-09-26 | Fredrik Hübinette (Hubbe) | | void add_program_path(string tmp)
{
tmp=normalize_path(combine_path_with_cwd(tmp));
pike_program_path-=({tmp});
pike_program_path=({tmp})+pike_program_path;
}
|
eba023 | 2004-01-13 | Martin Nilsson | |
|
8f4569 | 2001-01-14 | Henrik Grubbström (Grubba) | |
|
a20af6 | 2000-09-26 | Fredrik Hübinette (Hubbe) | | void remove_program_path(string tmp)
{
tmp=normalize_path(combine_path_with_cwd(tmp));
pike_program_path-=({tmp});
}
|
374c90 | 2001-12-20 | Martin Stjernholm | |
|
080e3a | 2011-11-04 | Per Hedbor | | void add_predefine (string name, mixed value)
|
374c90 | 2001-12-20 | Martin Stjernholm | | {
predefines[name] = value;
}
void remove_predefine (string name)
{
m_delete (predefines, name);
}
|
db77fa | 2002-12-14 | Martin Nilsson | |
|
374c90 | 2001-12-20 | Martin Stjernholm | | mapping get_predefines()
{
return predefines;
}
|
080e3a | 2011-11-04 | Per Hedbor | | string evaluate_define(string def, string arguments)
{
mixed val = arguments ? predefines[def+"()"] : predefines[def];
if( callablep(val) )
{
object C = resolv("Parser.C");
array args;
if( arguments )
args = map(
map(C.group(C.split(arguments))/({","}),C.simple_reconstitute),
resolv("String.trim_all_whites"));
else
args = ({});
val = val( @args );
}
return (string)val;
}
|
fd0fd7 | 2004-04-17 | Marcus Comstedt | |
|
35f51c | 2008-06-28 | Martin Nilsson | | protected mapping(string:mixed) instantiate_static_modules(object|mapping static_modules)
|
fd0fd7 | 2004-04-17 | Marcus Comstedt | | {
|
4b7c4c | 2004-04-17 | Marcus Comstedt | | mapping(string:mixed) res = ([]), joins = ([]);
|
fd0fd7 | 2004-04-17 | Marcus Comstedt | | foreach(indices(static_modules), string name) {
mixed val = static_modules[name];
if (!val->_module_value)
val = val();
if(mixed tmp=val->_module_value) val=tmp;
|
4b7c4c | 2004-04-17 | Marcus Comstedt | | if(!has_value(name, '.'))
res[name] = val;
else {
mapping(string:mixed) level = joins;
string pfx;
while(2 == sscanf(name, "%s.%s", pfx, name))
level = (level[pfx] || (level[pfx] = ([])));
level[name] = val;
}
}
joinnode joinify(mapping m)
{
foreach(m; string n; mixed v)
if(mappingp(v))
m[n]=joinify(v);
return joinnode(({m}));
};
foreach(joins; string n; mixed v) {
if(mappingp(v))
v = joinify(v);
if(res[n])
|
9dcabf | 2009-04-25 | Martin Stjernholm | | res[n] = joinnode(({res[n], v}), 0, 0, n);
|
4b7c4c | 2004-04-17 | Marcus Comstedt | | else
res[n] = v;
|
fd0fd7 | 2004-04-17 | Marcus Comstedt | | }
return res;
}
|
6df5a5 | 2001-11-07 | Martin Nilsson | |
|
a20af6 | 2000-09-26 | Fredrik Hübinette (Hubbe) | | mapping get_default_module()
{
|
5b0000 | 2004-05-25 | Martin Stjernholm | | resolv_debug ("%O->get_default_module()\n", this);
|
a20af6 | 2000-09-26 | Fredrik Hübinette (Hubbe) | |
int saved_compat_minor=compat_minor;
int saved_compat_major=compat_major;
compat_minor=-1;
compat_major=-1;
mixed x;
mixed err =catch {
|
acd163 | 2001-12-17 | Henrik Grubbström (Grubba) | | if(resolv("__default") && (x=resolv("__default.all_constants")))
x=x();
|
a20af6 | 2000-09-26 | Fredrik Hübinette (Hubbe) | | };
compat_major=saved_compat_major;
compat_minor=saved_compat_minor;
if(err) throw(err);
|
167fcf | 2008-06-07 | Henrik Grubbström (Grubba) | | return x;
|
a20af6 | 2000-09-26 | Fredrik Hübinette (Hubbe) | | }
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | |
|
3215c9 | 2003-05-15 | Henrik Grubbström (Grubba) | |
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | joinnode get_root_module(object|void current_handler)
{
if (!root_module) {
error("get_root_module(%O): No default root module!\n",
current_handler);
}
if (!current_handler) return root_module;
joinnode node = handler_root_modules[current_handler];
if (node) return node;
|
34241f | 2001-05-24 | Henrik Grubbström (Grubba) | |
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | |
mixed static_modules = _static_modules;
if (current_handler->get_default_module) {
mapping(string:mixed) default_module =
current_handler->get_default_module();
if (default_module) {
static_modules = default_module["_static_modules"] || ([]);
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | }
|
94257b | 1998-10-16 | Henrik Grubbström (Grubba) | | }
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | |
|
fd0fd7 | 2004-04-17 | Marcus Comstedt | | node = joinnode(({ instantiate_static_modules(static_modules),
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | |
|
1997b3 | 2005-07-13 | Henrik Grubbström (Grubba) | | @filter(root_module->joined_modules,
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | lambda(mixed x) {
return objectp(x) && x->is_resolv_dirnode;
}) }),
current_handler,
|
9dcabf | 2009-04-25 | Martin Stjernholm | | root_module->fallback_module,
"predef::");
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | |
|
1997b3 | 2005-07-13 | Henrik Grubbström (Grubba) | | node->cache->_static_modules = static_modules;
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | |
return node;
}
mixed resolv_base(string identifier, string|void current_file,
object|void current_handler)
{
return get_root_module(current_handler)[identifier];
}
|
6df5a5 | 2001-11-07 | Martin Nilsson | |
|
100c3e | 2003-12-01 | Martin Nilsson | |
mixed resolv_or_error(string identifier, string|void current_file,
void|object current_handler)
{
mixed res = resolv(identifier, current_file, current_handler);
|
da22f1 | 2006-06-08 | Martin Stjernholm | | if(zero_type(res)) error("Could not resolve %s.\n", identifier);
|
100c3e | 2003-12-01 | Martin Nilsson | | return res;
}
|
6df5a5 | 2001-11-07 | Martin Nilsson | |
|
34241f | 2001-05-24 | Henrik Grubbström (Grubba) | | mixed resolv(string identifier, string|void current_file,
object|void current_handler)
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | {
resolv_debug("resolv(%O, %O)\n",identifier, current_file);
INC_RESOLV_MSG_DEPTH();
|
a20af6 | 2000-09-26 | Fredrik Hübinette (Hubbe) | |
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | |
if( no_resolv[ identifier ] ) {
DEC_RESOLV_MSG_DEPTH();
resolv_debug("resolv(%O, %O) => excluded\n",identifier, current_file);
return UNDEFINED;
}
|
26ece2 | 2001-06-18 | Henrik Grubbström (Grubba) | |
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | if (current_file && !stringp(current_file)) {
|
15cb2e | 2008-02-28 | Henrik Grubbström (Grubba) | | error("resolv(%O, %O, %O): current_file is not a string!\n",
identifier, current_file, current_handler);
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | }
|
eaa4da | 2001-10-04 | Fredrik Hübinette (Hubbe) | |
|
15cb2e | 2008-02-28 | Henrik Grubbström (Grubba) | | array(string) tmp = identifier/"::";
mixed ret;
if (sizeof(tmp) > 1) {
string scope = tmp[0];
|
9eee96 | 2008-05-20 | Henrik Grubbström (Grubba) | | tmp = tmp[1]/".";
|
15cb2e | 2008-02-28 | Henrik Grubbström (Grubba) | | switch(scope) {
case "predef":
ret = all_constants();
break;
default:
if (sscanf(scope, "%d.%d%*s", int major, int minor) == 3) {
ret = get_compilation_handler(major, minor);
if (ret) {
|
9eee96 | 2008-05-20 | Henrik Grubbström (Grubba) | | mixed mod = ret->get_default_module();
if (!zero_type(mod = mod[tmp[0]])) {
ret = mod;
|
15cb2e | 2008-02-28 | Henrik Grubbström (Grubba) | | } else {
|
9eee96 | 2008-05-20 | Henrik Grubbström (Grubba) | | ret = ret->resolv(tmp[0]);
|
15cb2e | 2008-02-28 | Henrik Grubbström (Grubba) | | }
|
9eee96 | 2008-05-20 | Henrik Grubbström (Grubba) | | tmp = tmp[1..];
|
15cb2e | 2008-02-28 | Henrik Grubbström (Grubba) | | break;
}
}
error("resolv(%O, %O, %O): Unsupported scope: %O!\n",
identifier, current_file, current_handler, scope);
}
} else {
tmp = identifier/".";
ret = resolv_base(tmp[0], current_file, current_handler);
tmp = tmp[1..];
}
foreach(tmp,string index) {
|
774933 | 2004-12-27 | Henrik Grubbström (Grubba) | | resolv_debug("indexing %O with %O...\n",
ret, index);
|
3abf3f | 2008-05-26 | Henrik Grubbström (Grubba) | | resolv_debug("indices(%O): %O\n", ret, indices(ret));
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | if (zero_type(ret)) break;
ret = ret[index];
}
DEC_RESOLV_MSG_DEPTH();
|
3c6f58 | 2002-05-24 | Martin Stjernholm | | #ifdef RESOLV_DEBUG
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | if (zero_type (ret))
resolv_debug("resolv(%O, %O) => not found\n",identifier, current_file);
else
resolv_debug("resolv(%O, %O) => found %O\n",identifier, current_file, ret);
|
3c6f58 | 2002-05-24 | Martin Stjernholm | | #endif /* RESOLV_DEBUG */
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | return ret;
}
|
a20af6 | 2000-09-26 | Fredrik Hübinette (Hubbe) | |
|
b78402 | 2008-05-28 | Henrik Grubbström (Grubba) | |
|
9a61da | 2004-04-20 | Martin Nilsson | |
|
a20af6 | 2000-09-26 | Fredrik Hübinette (Hubbe) | | string handle_include(string f,
string current_file,
int local_include)
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | {
if(local_include)
|
a20af6 | 2000-09-26 | Fredrik Hübinette (Hubbe) | | {
|
0ee5c6 | 2004-01-12 | Martin Nilsson | | if(IS_ABSOLUTE_PATH(f)) return combine_path(f);
|
15af9c | 2003-12-19 | Marcus Comstedt | | return combine_path_with_cwd(dirname(current_file), f);
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | }
else
{
foreach(pike_include_path, string path)
|
a20af6 | 2000-09-26 | Fredrik Hübinette (Hubbe) | | {
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | path=combine_path(path,f);
if(master_file_stat(fakeroot(path)))
return path;
|
a20af6 | 2000-09-26 | Fredrik Hübinette (Hubbe) | | }
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | if (fallback_resolver) {
return fallback_resolver->handle_include(f, current_file,
|
359329 | 2003-09-08 | Henrik Grubbström (Grubba) | | local_include);
|
a20af6 | 2000-09-26 | Fredrik Hübinette (Hubbe) | | }
}
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | |
return 0;
}
|
6df5a5 | 2001-11-07 | Martin Nilsson | |
|
a20af6 | 2000-09-26 | Fredrik Hübinette (Hubbe) | | string read_include(string f)
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | {
|
c2e10c | 2003-11-18 | Martin Stjernholm | | AUTORELOAD_CHECK_FILE(f);
if (array|object err = catch {
return master_read_file (f);
})
compile_cb_rethrow (err);
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | }
|
a20af6 | 2000-09-26 | Fredrik Hübinette (Hubbe) | |
|
47ba5a | 2013-06-03 | Martin Nilsson | | protected string _sprintf(int t)
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | {
return t=='O' && sprintf("CompatResolver(%O)",ver);
}
|
7c11f4 | 1999-10-04 | Fredrik Hübinette (Hubbe) | | }
|
a20af6 | 2000-09-26 | Fredrik Hübinette (Hubbe) | | inherit CompatResolver;
|
0e6613 | 2003-09-20 | Martin Nilsson | |
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | class Pike06Resolver
{
inherit CompatResolver;
mixed resolv_base(string identifier, string|void current_file,
object|void current_handler)
{
if (current_file) {
joinnode node = handle_import(".", current_file, current_handler);
return node[identifier] ||
::resolv_base(identifier, current_file, current_handler);
}
return ::resolv_base(identifier, current_file, current_handler);
}
}
|
97e5c7 | 2001-07-28 | Martin Nilsson | |
|
bfa62b | 1998-04-30 | Henrik Grubbström (Grubba) | | string _pike_file_name;
|
ac5184 | 1998-04-29 | Henrik Grubbström (Grubba) | | string _master_file_name;
|
b1d7d9 | 2002-01-07 | Martin Nilsson | |
private int(0..1) _async=0;
|
53a32a | 2000-06-04 | Francesco Chemolli | |
|
b1d7d9 | 2002-01-07 | Martin Nilsson | |
int(0..1) asyncp() {
|
53a32a | 2000-06-04 | Francesco Chemolli | | return _async;
}
|
45c726 | 2001-04-17 | Mirar (Pontus Hagland) | | #if constant(thread_create)
|
35f51c | 2008-06-28 | Martin Nilsson | | protected object _backend_thread=this_thread();
|
97e5c7 | 2001-07-28 | Martin Nilsson | |
|
45c726 | 2001-04-17 | Mirar (Pontus Hagland) | | object backend_thread()
{
return _backend_thread;
}
#endif
|
70e2ca | 2003-01-01 | Martin Nilsson | |
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | mapping(string:string) initial_predefines = ([]);
|
35f51c | 2008-06-28 | Martin Nilsson | | protected mixed main_resolv(string sym, CompatResolver|void resolver) {
|
aed1b5 | 2005-11-21 | Martin Nilsson | | mixed v = (resolver||this)->resolv(sym);
if(!v)
|
da22f1 | 2006-06-08 | Martin Stjernholm | | error("Could not resolve %s. "
|
aed1b5 | 2005-11-21 | Martin Nilsson | | "(Perhaps the installed pike tree has been moved.)\n", sym);
return v;
};
|
97e5c7 | 2001-07-28 | Martin Nilsson | |
|
b3926d | 2008-06-05 | Martin Stjernholm | |
void _main(array(string) orig_argv)
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | {
|
afa129 | 2000-02-19 | Martin Nilsson | | array(string) argv=copy_value(orig_argv);
|
504862 | 2003-04-10 | Martin Nilsson | | int debug,trace,run_tool;
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | object tmp;
|
c05dc4 | 2002-09-05 | Marcus Comstedt | | string postparseaction=0;
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | |
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | predefines = initial_predefines =
|
7d016d | 2008-03-26 | Henrik Grubbström (Grubba) | | Builtin._take_over_initial_predefines();
|
bfa62b | 1998-04-30 | Henrik Grubbström (Grubba) | | _pike_file_name = orig_argv[0];
|
91ac56 | 2011-09-07 | Martin Stjernholm | | _master_file_name = __FILE__;
|
45c726 | 2001-04-17 | Mirar (Pontus Hagland) | | #if constant(thread_create)
_backend_thread = this_thread();
#endif
|
bfa62b | 1998-04-30 | Henrik Grubbström (Grubba) | |
|
e90a8b | 1999-06-01 | Mirar (Pontus Hagland) | | #ifndef NOT_INSTALLED
|
504862 | 2003-04-10 | Martin Nilsson | | {
|
929cf7 | 2003-08-19 | Martin Nilsson | | array parts = (getenv("PIKE_INCLUDE_PATH")||"")/PATH_SEPARATOR-({""});
|
504862 | 2003-04-10 | Martin Nilsson | | int i = sizeof(parts);
while(i) add_include_path(parts[--i]);
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | |
|
929cf7 | 2003-08-19 | Martin Nilsson | | parts = (getenv("PIKE_PROGRAM_PATH")||"")/PATH_SEPARATOR-({""});
|
504862 | 2003-04-10 | Martin Nilsson | | i = sizeof(parts);
while(i) add_program_path(parts[--i]);
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | |
|
929cf7 | 2003-08-19 | Martin Nilsson | | parts = (getenv("PIKE_MODULE_PATH")||"")/PATH_SEPARATOR-({""});
|
504862 | 2003-04-10 | Martin Nilsson | | i = sizeof(parts);
while(i) add_module_path(parts[--i]);
}
|
e90a8b | 1999-06-01 | Mirar (Pontus Hagland) | | #endif
|
da2ddc | 2002-08-11 | Martin Nilsson | |
|
4619bd | 2002-07-29 | Martin Nilsson | | string format_paths() {
|
25c0a8 | 2002-08-11 | Per Hedbor | | return ("master.pike...: " + (_master_file_name || __FILE__) + "\n"
"Module path...: " + pike_module_path*"\n"
|
020d00 | 2002-08-15 | Per Hedbor | | " " + "\n"
|
25c0a8 | 2002-08-11 | Per Hedbor | | "Include path..: " + pike_include_path*"\n"
|
020d00 | 2002-08-15 | Per Hedbor | | " " + "\n"
|
25c0a8 | 2002-08-11 | Per Hedbor | | "Program path..: " + pike_program_path*"\n"
|
020d00 | 2002-08-15 | Per Hedbor | | " " + "\n");
|
4619bd | 2002-07-29 | Martin Nilsson | | };
|
b3926d | 2008-06-05 | Martin Stjernholm | | Version cur_compat_ver;
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | if(sizeof(argv)>1 && sizeof(argv[1]) && argv[1][0]=='-')
{
|
504862 | 2003-04-10 | Martin Nilsson | | array q;
|
27a23d | 2003-01-27 | Martin Nilsson | | tmp = main_resolv( "Getopt" );
|
8c0314 | 2002-11-15 | Martin Nilsson | | int NO_ARG = tmp->NO_ARG;
int MAY_HAVE_ARG = tmp->MAY_HAVE_ARG;
int HAS_ARG = tmp->HAS_ARG;
|
a7a45a | 1998-05-11 | Henrik Grubbström (Grubba) | |
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | q=tmp->find_all_options(argv,({
|
8c0314 | 2002-11-15 | Martin Nilsson | | ({"compat_version", HAS_ARG, ({"-V", "--compat"}), 0, 0}),
({"version", NO_ARG, ({"-v", "--version"}), 0, 0}),
|
64ff31 | 2003-04-03 | Martin Nilsson | | ({"dumpversion", NO_ARG, ({"--dumpversion"}), 0, 0}),
|
d62eab | 2003-09-18 | Martin Nilsson | | ({"help", MAY_HAVE_ARG, ({"-h", "--help"}), 0, 0}),
|
8c0314 | 2002-11-15 | Martin Nilsson | | ({"features", NO_ARG, ({"--features"}), 0, 0}),
({"info", NO_ARG, ({"--info"}), 0, 0}),
({"execute", HAS_ARG, ({"-e", "--execute"}), 0, 0}),
({"debug_without", HAS_ARG, ({"--debug-without"}), 0, 0}),
({"preprocess", HAS_ARG, ({"-E", "--preprocess"}), 0, 0}),
({"modpath", HAS_ARG, ({"-M", "--module-path"}), 0, 0}),
({"ipath", HAS_ARG, ({"-I", "--include-path"}), 0, 0}),
({"ppath", HAS_ARG, ({"-P", "--program-path"}), 0, 0}),
|
9e83d3 | 2008-06-29 | Martin Nilsson | | ({"showpaths", MAY_HAVE_ARG, ({"--show-paths"}), 0, 0}),
|
8c0314 | 2002-11-15 | Martin Nilsson | | ({"warnings", NO_ARG, ({"-w", "--warnings"}), 0, 0}),
({"nowarnings", NO_ARG, ({"-W", "--woff", "--no-warnings"}), 0, 0}),
({"autoreload", NO_ARG, ({"--autoreload"}), 0, 0}),
({"master", HAS_ARG, ({"-m"}), 0, 0}),
({"compiler_trace", NO_ARG, ({"--compiler-trace"}), 0, 0}),
({"assembler_debug",MAY_HAVE_ARG, ({"--assembler-debug"}), 0, 0}),
({"optimizer_debug",MAY_HAVE_ARG, ({"--optimizer-debug"}), 0, 0}),
({"debug", MAY_HAVE_ARG, ({"--debug"}), 0, 1}),
({"trace", MAY_HAVE_ARG, ({"--trace"}), 0, 1}),
({"ignore", MAY_HAVE_ARG, ({"-Dqdatplr"}), 0, 1}),
({"ignore", HAS_ARG, ({"-s"}), 0, 0}),
({"run_tool", NO_ARG, ({"-x"}), 0, 0}),
|
b73de5 | 2004-11-05 | Martin Nilsson | | ({"show_cpp_warn", NO_ARG, ({"--show-all-cpp-warnings","--picky-cpp"}), 0, 0}),
|
c5cc2d | 1998-04-29 | Henrik Grubbström (Grubba) | | }), 1);
|
eba023 | 2004-01-13 | Martin Nilsson | |
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | |
|
504862 | 2003-04-10 | Martin Nilsson | | for(int i=sizeof(q)-1; i>=0; i--)
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | {
switch(q[i][0])
{
|
a20af6 | 2000-09-26 | Fredrik Hübinette (Hubbe) | | case "compat_version":
sscanf(q[i][1],"%d.%d",compat_major,compat_minor);
break;
|
8c0314 | 2002-11-15 | Martin Nilsson | |
|
bec57d | 1999-09-06 | Fredrik Hübinette (Hubbe) | | #ifdef PIKE_AUTORELOAD
case "autoreload":
autoreload_on++;
|
631e28 | 2003-05-28 | Johan Sundström | | break;
|
bec57d | 1999-09-06 | Fredrik Hübinette (Hubbe) | | #endif
|
8c0314 | 2002-11-15 | Martin Nilsson | |
|
3d1446 | 2000-09-24 | Per Hedbor | | case "debug_without":
|
1a67ea | 2003-07-22 | Martin Nilsson | |
|
3d1446 | 2000-09-24 | Per Hedbor | | foreach( q[i][1]/",", string feature )
{
switch( feature )
{
case "ttf":
no_resolv[ "_Image_TTF" ] = 1;
break;
case "zlib":
no_resolv[ "Gz" ] = 1;
break;
case "unisys":
no_resolv[ "_Image_GIF" ] = 1;
no_resolv[ "_Image_TIFF" ] = 1;
break;
case "threads":
no_resolv[ "Thread" ] = 1;
|
f595e9 | 2003-01-01 | Martin Nilsson | | add_constant( "thread_create" );
|
3d1446 | 2000-09-24 | Per Hedbor | | break;
default:
no_resolv[ feature ] = 1;
break;
}
}
break;
|
8c0314 | 2002-11-15 | Martin Nilsson | |
|
c5cc2d | 1998-04-29 | Henrik Grubbström (Grubba) | | case "debug":
debug+=(int)q[i][1];
break;
|
862fb4 | 1998-04-05 | Fredrik Hübinette (Hubbe) | |
|
c5cc2d | 1998-04-29 | Henrik Grubbström (Grubba) | | #if constant(_compiler_trace)
case "compiler_trace":
_compiler_trace(1);
break;
#endif /* constant(_compiler_trace) */
|
8f4569 | 2001-01-14 | Henrik Grubbström (Grubba) | | #if constant(_assembler_debug)
case "assembler_debug":
_assembler_debug((int)q[i][1]);
break;
#endif /* constant(_assembler_debug) */
|
e27a5c | 1999-11-19 | Henrik Grubbström (Grubba) | | #if constant(_optimizer_debug)
case "optimizer_debug":
_optimizer_debug((int)q[i][1]);
break;
#endif /* constant(_optimizer_debug) */
|
c5cc2d | 1998-04-29 | Henrik Grubbström (Grubba) | | case "trace":
trace+=(int)q[i][1];
break;
|
862fb4 | 1998-04-05 | Fredrik Hübinette (Hubbe) | |
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | case "modpath":
add_module_path(q[i][1]);
break;
|
eba023 | 2004-01-13 | Martin Nilsson | |
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | case "ipath":
add_include_path(q[i][1]);
break;
|
eba023 | 2004-01-13 | Martin Nilsson | |
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | case "ppath":
add_program_path(q[i][1]);
break;
|
c5cc2d | 1998-04-29 | Henrik Grubbström (Grubba) | | case "warnings":
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | want_warnings++;
break;
|
ac5184 | 1998-04-29 | Henrik Grubbström (Grubba) | |
|
b714e1 | 2002-09-05 | Marcus Comstedt | | case "nowarnings":
|
098c8a | 2000-03-30 | Henrik Grubbström (Grubba) | | want_warnings--;
break;
|
ac5184 | 1998-04-29 | Henrik Grubbström (Grubba) | | case "master":
_master_file_name = q[i][1];
break;
|
66dca0 | 2002-09-05 | Marcus Comstedt | |
case "run_tool":
|
c05dc4 | 2002-09-05 | Marcus Comstedt | | run_tool = 1;
|
66dca0 | 2002-09-05 | Marcus Comstedt | | break;
|
f6da7b | 2004-06-27 | Martin Nilsson | |
case "show_cpp_warn":
show_if_constant_errors = 1;
break;
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | }
}
|
eba023 | 2004-01-13 | Martin Nilsson | |
|
b3926d | 2008-06-05 | Martin Stjernholm | | cur_compat_ver = Version (compat_major, compat_minor);
if (compat_major != -1) {
object compat_master = get_compat_master (compat_major, compat_minor);
if (cur_compat_ver <= Version (7, 6)) {
mapping(string:array(string)) compat_env = ([]);
foreach (Builtin._getenv(); string var; string val) {
#ifdef __NT__
compat_env[lower_case (var)] = ({var, val});
#else
compat_env[var] = ({var, val});
#endif
}
compat_master->environment = compat_env;
}
}
|
afa129 | 2000-02-19 | Martin Nilsson | | foreach(q, array opts)
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | {
switch(opts[0])
{
|
64ff31 | 2003-04-03 | Martin Nilsson | | case "dumpversion":
write("%d.%d.%d\n", __REAL_MAJOR__, __REAL_MINOR__, __REAL_BUILD__);
|
9e83d3 | 2008-06-29 | Martin Nilsson | | exit(0);
|
64ff31 | 2003-04-03 | Martin Nilsson | |
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | case "version":
|
21d4ac | 2013-03-26 | Martin Nilsson | | exit(0, string_to_utf8(version() + " Copyright © 1994-2013 Linköping University\n"
|
b47fb6 | 2009-11-13 | Per Hedbor | | "Pike comes with ABSOLUTELY NO WARRANTY; This is free software and you are\n"
"welcome to redistribute it under certain conditions; read the files\n"
"COPYING and COPYRIGHT in the Pike distribution for more details.\n"));
|
eba023 | 2004-01-13 | Martin Nilsson | |
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | case "help":
|
9e83d3 | 2008-06-29 | Martin Nilsson | | exit( 0, main_resolv("Tools.MasterHelp")->do_help(opts[1]) );
|
eba023 | 2004-01-13 | Martin Nilsson | |
|
94c855 | 2001-01-19 | Mirar (Pontus Hagland) | | case "features":
|
a6b6df | 2001-01-19 | Mirar (Pontus Hagland) | | postparseaction="features";
break;
case "info":
postparseaction="info";
|
94c855 | 2001-01-19 | Mirar (Pontus Hagland) | | break;
|
2ea826 | 1998-05-12 | Martin Stjernholm | |
case "showpaths":
|
9e83d3 | 2008-06-29 | Martin Nilsson | | if( stringp(opts[1]) )
{
switch(opts[1])
{
case "master":
write( (_master_file_name || __FILE__)+"\n" );
break;
case "module":
write( (pike_module_path * ":")+"\n" );
break;
case "include":
write( (pike_include_path * ":")+"\n" );
break;
case "program":
write( (pike_program_path * ":")+"\n" );
break;
default:
exit(1, "Unknown path type %s\n", opts[1]);
}
exit(0);
}
exit(0, format_paths());
|
eba023 | 2004-01-13 | Martin Nilsson | |
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | case "execute":
|
3bc9eb | 2004-02-27 | Martin Nilsson | | main_resolv( "Gmp.bignum" );
|
3215c9 | 2003-05-15 | Henrik Grubbström (Grubba) | | random_seed((time() ^ (getpid()<<8)));
argv = tmp->get_args(argv,1);
|
f9a096 | 2003-03-20 | Martin Stjernholm | | program prog;
|
729acf | 2008-05-30 | Martin Stjernholm | | mixed compile_err = catch {;
|
b3926d | 2008-06-05 | Martin Stjernholm | | if(cur_compat_ver <= Version(7,4))
|
729acf | 2008-05-30 | Martin Stjernholm | | prog = compile_string(
"mixed create(int argc, array(string) argv,array(string) env){"+
opts[1]+";}");
else if (intp (opts[1]))
prog = compile_string ("mixed run() {}");
else {
string code = opts[1];
while(sscanf(code, "%sCHAR(%1s)%s", code, string c, string rest)==3)
code += c[0] + rest;
|
b3926d | 2008-06-05 | Martin Stjernholm | | if (cur_compat_ver <= Version (7, 6))
prog = compile_string(
"#define NOT(X) !(X)\n"
"mixed run(int argc, array(string) argv,"
"mapping(string:string) env){"+
code+";}");
else
prog = compile_string(
"#define NOT(X) !(X)\n"
"mixed run(int argc, array(string) argv){" + code + ";}");
|
729acf | 2008-05-30 | Martin Stjernholm | | }
};
|
be62e6 | 2008-05-30 | Henrik Grubbström (Grubba) | | if (compile_err) {
if (compile_err->is_cpp_or_compilation_error) {
|
86e66a | 2010-05-06 | Henrik Grubbström (Grubba) | | exit (20, call_describe_error (compile_err));
|
be62e6 | 2008-05-30 | Henrik Grubbström (Grubba) | | }
else throw (compile_err);
|
d385d7 | 2004-05-01 | Martin Nilsson | | }
|
f9a096 | 2003-03-20 | Martin Stjernholm | |
#if constant(_debug)
if(debug) _debug(debug);
#endif
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | if(trace) trace = predef::trace(trace);
|
f9a096 | 2003-03-20 | Martin Stjernholm | | mixed ret;
mixed err = catch {
|
b3926d | 2008-06-05 | Martin Stjernholm | | if(cur_compat_ver <= Version(7,4))
prog (sizeof(argv),argv,getenv());
else if (cur_compat_ver <= Version (7, 6))
|
f9a096 | 2003-03-20 | Martin Stjernholm | | ret = prog()->run(sizeof(argv),argv,getenv());
|
b3926d | 2008-06-05 | Martin Stjernholm | | else
ret = prog()->run(sizeof(argv),argv);
|
f9a096 | 2003-03-20 | Martin Stjernholm | | };
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | predef::trace(trace);
|
f9a096 | 2003-03-20 | Martin Stjernholm | | if (err) {
handle_error (err);
ret = 10;
}
|
70e2ca | 2003-01-01 | Martin Nilsson | | if(stringp(ret)) {
write(ret);
if(ret[-1]!='\n') write("\n");
}
|
2ac59e | 2002-12-29 | Martin Nilsson | | if(!intp(ret) || ret<0) ret=0;
exit(ret);
|
fcf728 | 1998-04-28 | Fredrik Hübinette (Hubbe) | |
|
c5cc2d | 1998-04-29 | Henrik Grubbström (Grubba) | | case "preprocess":
|
3bc9eb | 2004-02-27 | Martin Nilsson | | main_resolv( "Gmp.bignum" );
|
70e2ca | 2003-01-01 | Martin Nilsson | | write(cpp(master_read_file(opts[1]),opts[1]));
|
c5cc2d | 1998-04-29 | Henrik Grubbström (Grubba) | | exit(0);
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | }
}
|
caa322 | 1998-04-15 | Henrik Grubbström (Grubba) | | argv = tmp->get_args(argv,1);
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | }
|
b3926d | 2008-06-05 | Martin Stjernholm | | else
cur_compat_ver = Version (compat_major, compat_minor);
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | |
|
a6b6df | 2001-01-19 | Mirar (Pontus Hagland) | | switch (postparseaction)
|
94c855 | 2001-01-19 | Mirar (Pontus Hagland) | | {
|
a6b6df | 2001-01-19 | Mirar (Pontus Hagland) | | case "features":
|
3bc9eb | 2004-02-27 | Martin Nilsson | | write( main_resolv( "Tools.Install.features" )()*"\n"+"\n" );
|
70e2ca | 2003-01-01 | Martin Nilsson | | exit(0);
|
a6b6df | 2001-01-19 | Mirar (Pontus Hagland) | |
case "info":
|
70e2ca | 2003-01-01 | Martin Nilsson | | write("Software......Pike\n"
"Version......."+version()+"\n"
|
3032b4 | 2011-03-06 | Henrik Grubbström (Grubba) | | "WWW...........http://pike.lysator.liu.se/\n"
|
70e2ca | 2003-01-01 | Martin Nilsson | | "\n"
"pike binary..."+_pike_file_name+"\n"+
format_paths() + "\n"
"Features......"+
|
3bc9eb | 2004-02-27 | Martin Nilsson | | main_resolv( "Tools.Install.features" )()*"\n "+
|
70e2ca | 2003-01-01 | Martin Nilsson | | "\n");
|
a6b6df | 2001-01-19 | Mirar (Pontus Hagland) | | exit(0);
|
94c855 | 2001-01-19 | Mirar (Pontus Hagland) | | }
|
3bc9eb | 2004-02-27 | Martin Nilsson | | main_resolv( "Gmp.bignum" );
|
180872 | 2001-08-31 | Fredrik Hübinette (Hubbe) | | random_seed(time() ^ (getpid()<<8));
|
9339fc | 2000-01-09 | Fredrik Hübinette (Hubbe) | |
|
c05dc4 | 2002-09-05 | Marcus Comstedt | | if(sizeof(argv)==1)
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | {
|
db77fa | 2002-12-14 | Martin Nilsson | | if(run_tool) {
werror("Pike -x specificed without tool name.\n"
"Available tools:\n");
mapping t = ([]);
int i;
|
f306b1 | 2005-04-15 | Henrik Grubbström (Grubba) | | object ts = main_resolv("Tools.Standalone",
get_compilation_handler(compat_major,
compat_minor));
|
6e2cfd | 2003-10-08 | Martin Stjernholm | | foreach (indices(ts), string s) {
mixed val = ts[s];
if (programp (val)) {
object o = val();
|
22ac45 | 2008-06-28 | Per Hedbor | | if(!o->main || !o->description) continue;
t[s] = o->description;
|
6e2cfd | 2003-10-08 | Martin Stjernholm | | i = max(i, sizeof(s));
}
|
db77fa | 2002-12-14 | Martin Nilsson | | }
foreach(sort(indices(t)), string s)
werror(" %-"+i+"s %s\n", s, t[s]);
exit(1);
}
|
f306b1 | 2005-04-15 | Henrik Grubbström (Grubba) | | main_resolv("Tools.Hilfe",
get_compilation_handler(compat_major,
compat_minor))->StdinHilfe();
|
caa322 | 1998-04-15 | Henrik Grubbström (Grubba) | | exit(0);
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | }
|
4619bd | 2002-07-29 | Martin Nilsson | | else
argv=argv[1..];
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | |
|
586d1c | 2000-09-04 | Fredrik Hübinette (Hubbe) | | program prog;
|
34fb3d | 1998-10-31 | Henrik Grubbström (Grubba) | |
|
66dca0 | 2002-09-05 | Marcus Comstedt | | if(run_tool) {
mixed err = catch {
|
f306b1 | 2005-04-15 | Henrik Grubbström (Grubba) | | prog = main_resolv("Tools.Standalone." + argv[0],
get_compilation_handler(compat_major, compat_minor));
|
66dca0 | 2002-09-05 | Marcus Comstedt | | };
if (err)
|
d8674e | 2007-12-28 | Martin Nilsson | | exit(1, "Pike: Failed to load tool %s:\n"
"%s\n", argv[0],
|
86e66a | 2010-05-06 | Henrik Grubbström (Grubba) | | stringp(err[0])?err[0]:call_describe_backtrace(err));
|
66dca0 | 2002-09-05 | Marcus Comstedt | |
|
57b52d | 2003-05-31 | Martin Stjernholm | | argv[0] = search(programs, prog) || argv[0];
|
66dca0 | 2002-09-05 | Marcus Comstedt | | } else {
argv[0]=combine_path_with_cwd(argv[0]);
mixed err = catch {
prog=(program)argv[0];
};
|
f6da7b | 2004-06-27 | Martin Nilsson | | if (err) {
|
d8674e | 2007-12-28 | Martin Nilsson | | string fn = argv[0];
if( !file_stat(fn) )
{
if( file_stat(fn+".pike") )
fn += ".pike";
else
|
9f220b | 2008-05-12 | Henrik Grubbström (Grubba) | | exit(1, "Could not find file %O.\n", fn);
|
d8674e | 2007-12-28 | Martin Nilsson | | }
if( !file_stat(fn)->isreg )
exit(1, "File %O is not a regular file.\n", fn);
if( !master_read_file(fn) )
|
9f220b | 2008-05-12 | Henrik Grubbström (Grubba) | | exit(1, "File %O is not readable. %s.\n",
fn, strerror(errno()));
|
729acf | 2008-05-30 | Martin Stjernholm | | if (objectp (err) && err->is_cpp_or_compilation_error)
exit(1, "Pike: Failed to compile script.\n");
else
exit(1, "Pike: Failed to compile script:\n"
|
86e66a | 2010-05-06 | Henrik Grubbström (Grubba) | | "%s", call_describe_backtrace(err));
|
f6da7b | 2004-06-27 | Martin Nilsson | | }
|
39979e | 2004-09-06 | Martin Stjernholm | |
programs[argv[0]] = no_value;
|
66dca0 | 2002-09-05 | Marcus Comstedt | | }
|
34fb3d | 1998-10-31 | Henrik Grubbström (Grubba) | |
|
39979e | 2004-09-06 | Martin Stjernholm | | programs["/main"] = prog;
|
d8674e | 2007-12-28 | Martin Nilsson | |
|
586d1c | 2000-09-04 | Fredrik Hübinette (Hubbe) | | if(!prog)
|
3bc9eb | 2004-02-27 | Martin Nilsson | | error("Pike: Couldn't find script to execute\n(%O)\n", argv[0]);
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | |
|
862fb4 | 1998-04-05 | Fredrik Hübinette (Hubbe) | | #if constant(_debug)
if(debug) _debug(debug);
#endif
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | if(trace) trace = predef::trace(trace);
|
504862 | 2003-04-10 | Martin Nilsson | | mixed ret;
|
f9a096 | 2003-03-20 | Martin Stjernholm | | mixed err = catch {
|
808d71 | 2009-12-28 | Martin Stjernholm | |
|
41d0af | 2003-04-10 | Martin Nilsson | | object script;
|
b3926d | 2008-06-05 | Martin Stjernholm | | if(cur_compat_ver <= Version(7,4)) {
|
41d0af | 2003-04-10 | Martin Nilsson | | script=prog();
}
else {
script=prog(argv);
}
|
f9a096 | 2003-03-20 | Martin Stjernholm | | if(!script->main)
|
3bc9eb | 2004-02-27 | Martin Nilsson | | error("Error: %s has no main().\n", argv[0]);
|
b3926d | 2008-06-05 | Martin Stjernholm | | if (cur_compat_ver <= Version (7, 6))
ret=script->main(sizeof(argv),argv,getenv());
else
ret=script->main(sizeof(argv),argv);
|
f9a096 | 2003-03-20 | Martin Stjernholm | | };
|
ead42e | 2004-07-04 | Martin Stjernholm | |
|
b440ab | 2004-02-08 | Henrik Grubbström (Grubba) | | trace = predef::trace(trace);
|
f9a096 | 2003-03-20 | Martin Stjernholm | | if (err) {
handle_error (err);
|
504862 | 2003-04-10 | Martin Nilsson | | ret = 10;
|
f9a096 | 2003-03-20 | Martin Stjernholm | | }
|
9e83d3 | 2008-06-29 | Martin Nilsson | | if(!intp(ret))
exit(10, "Error: Non-integer value %O returned from main.\n", ret);
|
504862 | 2003-04-10 | Martin Nilsson | | if(ret >=0) exit([int]ret);
|
53a32a | 2000-06-04 | Francesco Chemolli | | _async=1;
|
eba023 | 2004-01-13 | Martin Nilsson | |
|
b440ab | 2004-02-08 | Henrik Grubbström (Grubba) | |
trace = predef::trace(trace);
|
87f908 | 2001-03-12 | Fredrik Hübinette (Hubbe) | | while(1)
{
mixed err=catch
{
while(1)
|
677d26 | 2003-11-14 | Martin Stjernholm | | Builtin.__backend(3600.0);
|
87f908 | 2001-03-12 | Fredrik Hübinette (Hubbe) | | };
master()->handle_error(err);
}
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | }
|
01d3c9 | 1999-11-04 | Henrik Grubbström (Grubba) | | #if constant(thread_local)
object inhibit_compile_errors = thread_local();
|
c63b2d | 2013-01-23 | Henrik Grubbström (Grubba) | |
void set_inhibit_compile_errors(mixed behaviour)
|
01d3c9 | 1999-11-04 | Henrik Grubbström (Grubba) | | {
|
c63b2d | 2013-01-23 | Henrik Grubbström (Grubba) | | inhibit_compile_errors->set(behaviour);
|
01d3c9 | 1999-11-04 | Henrik Grubbström (Grubba) | | }
|
71d995 | 1999-11-29 | Henrik Grubbström (Grubba) | |
|
c63b2d | 2013-01-23 | Henrik Grubbström (Grubba) | |
|
71d995 | 1999-11-29 | Henrik Grubbström (Grubba) | | mixed get_inhibit_compile_errors()
{
|
c2eb4a | 1999-11-29 | David Hedbor | | return inhibit_compile_errors->get();
|
71d995 | 1999-11-29 | Henrik Grubbström (Grubba) | | }
|
01d3c9 | 1999-11-04 | Henrik Grubbström (Grubba) | | #else /* !constant(thread_local) */
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | mixed inhibit_compile_errors;
void set_inhibit_compile_errors(mixed f)
{
inhibit_compile_errors=f;
}
|
71d995 | 1999-11-29 | Henrik Grubbström (Grubba) | |
mixed get_inhibit_compile_errors()
{
|
c2eb4a | 1999-11-29 | David Hedbor | | return inhibit_compile_errors;
|
71d995 | 1999-11-29 | Henrik Grubbström (Grubba) | | }
|
01d3c9 | 1999-11-04 | Henrik Grubbström (Grubba) | | #endif /* constant(thread_local) */
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | |
|
35f51c | 2008-06-28 | Martin Nilsson | | protected private function(string:string) _trim_file_name_cb=0;
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | string trim_file_name(string s)
{
|
4839dd | 2001-09-02 | Marcus Comstedt | | #ifdef PIKE_MODULE_RELOC
s = relocate_module(s);
#endif
|
e37a3e | 1999-10-09 | Fredrik Hübinette (Hubbe) | | if(getenv("LONG_PIKE_ERRORS")) return s;
|
471ed9 | 1998-04-24 | Fredrik Hübinette (Hubbe) | | if(getenv("SHORT_PIKE_ERRORS")) return BASENAME(s);
|
0024f9 | 2001-06-06 | Mirar (Pontus Hagland) | |
if (_trim_file_name_cb) return _trim_file_name_cb(s);
|
df2c63 | 2000-08-02 | Henrik Grubbström (Grubba) | |
catch {
string cwd=getcwd();
if (sizeof(cwd) && (cwd[-1] != '/')) {
cwd += "/";
}
|
28351b | 2003-05-31 | Martin Stjernholm | | if(has_prefix (s, cwd)) return s[sizeof(cwd)..];
|
df2c63 | 2000-08-02 | Henrik Grubbström (Grubba) | | };
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | return s;
}
|
0024f9 | 2001-06-06 | Mirar (Pontus Hagland) | | function(string:string) set_trim_file_name_callback(function(string:string) s)
{
function(string:string) f=_trim_file_name_cb;
_trim_file_name_cb=s;
return f;
}
|
97e5c7 | 2001-07-28 | Martin Nilsson | |
|
677d26 | 2003-11-14 | Martin Stjernholm | |
|
c63b2d | 2013-01-23 | Henrik Grubbström (Grubba) | |
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | void compile_error(string file,int line,string err)
{
|
01d3c9 | 1999-11-04 | Henrik Grubbström (Grubba) | | mixed val;
|
311242 | 2000-03-27 | Per Hedbor | | if(! (val = get_inhibit_compile_errors() ))
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | {
|
2f520e | 2002-04-28 | Martin Nilsson | | werror( "%s:%s:%s\n",trim_file_name(file),
line?(string)line:"-",err );
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | }
|
01d3c9 | 1999-11-04 | Henrik Grubbström (Grubba) | | else if(objectp(val) ||
programp(val) ||
functionp(val))
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | {
|
01d3c9 | 1999-11-04 | Henrik Grubbström (Grubba) | | if (objectp(val) && val->compile_error) {
val->compile_error(file, line, err);
|
71f4fe | 2008-05-01 | Martin Nilsson | | } else if (callablep(val)) {
|
311242 | 2000-03-27 | Per Hedbor | | val(file, line, err);
|
01d3c9 | 1999-11-04 | Henrik Grubbström (Grubba) | | }
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | }
}
|
97e5c7 | 2001-07-28 | Martin Nilsson | |
|
677d26 | 2003-11-14 | Martin Stjernholm | |
|
c63b2d | 2013-01-23 | Henrik Grubbström (Grubba) | |
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | void compile_warning(string file,int line,string err)
{
|
01d3c9 | 1999-11-04 | Henrik Grubbström (Grubba) | | mixed val;
|
311242 | 2000-03-27 | Per Hedbor | | if(!(val = get_inhibit_compile_errors() ))
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | {
if(want_warnings)
|
2f520e | 2002-04-28 | Martin Nilsson | | werror( "%s:%s: Warning: %s\n",trim_file_name(file),
line?(string)line:"-",err );
}
else if (objectp(val) && val->compile_warning) {
|
23184f | 2003-04-30 | Martin Nilsson | | ([function(string,int,string:void)]([object]val)
->compile_warning)(file, line, err);
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | }
}
|
97e5c7 | 2001-07-28 | Martin Nilsson | |
|
152a62 | 2010-02-22 | Stephen R. van den Berg | |
|
8594c8 | 2001-08-15 | Martin Stjernholm | |
|
c63b2d | 2013-01-23 | Henrik Grubbström (Grubba) | |
|
8594c8 | 2001-08-15 | Martin Stjernholm | | int compile_exception (array|object trace)
{
|
729acf | 2008-05-30 | Martin Stjernholm | | if (objectp (trace) && ([object]trace)->is_cpp_or_compilation_error)
|
677d26 | 2003-11-14 | Martin Stjernholm | | return 0;
|
8594c8 | 2001-08-15 | Martin Stjernholm | | if (mixed val = get_inhibit_compile_errors()) {
|
23184f | 2003-04-30 | Martin Nilsson | | if (objectp(val) && ([object]val)->compile_exception)
return ([function(object:int)]([object]val)
->compile_exception)([object]trace);
|
8594c8 | 2001-08-15 | Martin Stjernholm | | }
else {
handle_error (trace);
return 1;
}
return 0;
}
|
97e5c7 | 2001-07-28 | Martin Nilsson | |
|
8f2306 | 2000-06-09 | Martin Stjernholm | | void runtime_warning (string where, string what, mixed... args)
{
if (want_warnings)
switch (where + "." + what) {
case "gc.bad_cycle":
|
3c6f58 | 2002-05-24 | Martin Stjernholm | | #if 0
|
8f2306 | 2000-06-09 | Martin Stjernholm | | werror ("GC warning: Garbing cycle where destroy() will be called "
"in arbitrary order:\n%{ %s\n%}",
|
d3a332 | 2002-11-23 | Marcus Comstedt | | sprintf("%O", args[0][*]));
|
3c6f58 | 2002-05-24 | Martin Stjernholm | | #endif
|
8f2306 | 2000-06-09 | Martin Stjernholm | | break;
default:
werror ("%s warning: %s %O\n", capitalize (where), what, args);
}
}
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | |
|
35f51c | 2008-06-28 | Martin Nilsson | | protected object Charset;
|
97e5c7 | 2001-07-28 | Martin Nilsson | |
|
f4f08d | 1999-02-26 | Henrik Grubbström (Grubba) | | string decode_charset(string data, string charset)
{
|
bd8e1a | 2006-01-19 | Henrik Grubbström (Grubba) | | if (!Charset) {
|
0b8d2f | 2013-06-17 | Martin Nilsson | | Charset = [object]resolv("Charset");
|
bd8e1a | 2006-01-19 | Henrik Grubbström (Grubba) | | if (!Charset)
|
0b8d2f | 2013-06-17 | Martin Nilsson | | compile_cb_error("Cannot handle charset - no Charset module found.");
|
f4f08d | 1999-02-26 | Henrik Grubbström (Grubba) | | }
|
677d26 | 2003-11-14 | Martin Stjernholm | | if (mixed err = catch {
|
bd8e1a | 2006-01-19 | Henrik Grubbström (Grubba) | | object decoder = ([function(string:object)]Charset.decoder)(charset);
|
677d26 | 2003-11-14 | Martin Stjernholm | | return ([function(void:string)]([function(string:object)]decoder->
feed)(data)->drain)();
})
compile_cb_rethrow (err);
|
f4f08d | 1999-02-26 | Henrik Grubbström (Grubba) | | }
|
da0a82 | 2000-08-29 | Martin Stjernholm | | class Describer
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | {
|
da0a82 | 2000-08-29 | Martin Stjernholm | | int clipped=0;
int canclip=0;
mapping(mixed:int|string) ident = ([]);
int identcount = 0;
void identify_parts (mixed stuff)
{
|
9f7109 | 2000-11-20 | Martin Stjernholm | |
array identify_stack = ({stuff});
while (sizeof (identify_stack)) {
stuff = identify_stack[-1];
|
35320b | 2004-10-30 | Martin Stjernholm | | identify_stack = identify_stack[..<1];
|
54f7af | 2006-12-07 | Henrik Grubbström (Grubba) | | if (!intp(ident[stuff])) continue;
|
26ece2 | 2001-06-18 | Henrik Grubbström (Grubba) | | if (objectp (stuff) || functionp (stuff) || programp (stuff))
ident[stuff]++;
else if (arrayp (stuff)) {
|
9f7109 | 2000-11-20 | Martin Stjernholm | | if (!ident[stuff]++)
identify_stack += stuff;
}
else if (multisetp (stuff)) {
if (!ident[stuff]++)
|
23184f | 2003-04-30 | Martin Nilsson | | identify_stack += indices([multiset]stuff);
|
9f7109 | 2000-11-20 | Martin Stjernholm | | }
else if (mappingp (stuff)) {
if (!ident[stuff]++)
|
23184f | 2003-04-30 | Martin Nilsson | | identify_stack += indices([mapping]stuff) + values([mapping]stuff);
|
9f7109 | 2000-11-20 | Martin Stjernholm | | }
|
da0a82 | 2000-08-29 | Martin Stjernholm | | }
}
|
2602b8 | 2000-08-29 | Martin Stjernholm | | string describe_string (string m, int maxlen)
{
canclip++;
if(sizeof(m) < maxlen)
{
|
944936 | 2008-09-25 | Martin Stjernholm | | string t = sprintf("%q", m);
|
eba023 | 2004-01-13 | Martin Nilsson | | if (sizeof(t) < (maxlen + 2))
|
2602b8 | 2000-08-29 | Martin Stjernholm | | return t;
t = 0;
}
clipped++;
if(maxlen>10)
|
944936 | 2008-09-25 | Martin Stjernholm | | return sprintf("%q+[%d]",m[..maxlen-5],sizeof(m)-(maxlen-5));
|
eba023 | 2004-01-13 | Martin Nilsson | |
return "string["+sizeof(m)+"]";
|
2602b8 | 2000-08-29 | Martin Stjernholm | | }
string describe_array (array m, int maxlen)
{
if(!sizeof(m)) return "({})";
else {
if(maxlen<5)
{
clipped++;
return "array["+sizeof(m)+"]";
}
else {
canclip++;
return "({" + describe_comma_list(m,maxlen-2) +"})";
}
}
}
string describe_mapping (mapping m, int maxlen)
{
if(!sizeof(m)) return "([])";
else return "mapping["+sizeof(m)+"]";
}
string describe_multiset (multiset m, int maxlen)
{
if(!sizeof(m)) return "(<>)";
else return "multiset["+sizeof(m)+"]";
}
|
da0a82 | 2000-08-29 | Martin Stjernholm | | string describe (mixed m, int maxlen)
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | {
|
e61706 | 2004-01-08 | Martin Nilsson | | catch {
if (stringp (ident[m])) return [string]ident[m];
else if (intp (ident[m]) && ident[m] > 1)
ident[m] = "@" + identcount++;
};
|
da0a82 | 2000-08-29 | Martin Stjernholm | |
|
0a064e | 2002-11-24 | Henrik Grubbström (Grubba) | | string res;
if (catch (res=sprintf("%t",m)))
res = "object";
switch(res)
{
case "int":
|
08ca0a | 2004-12-08 | Martin Stjernholm | | if (!m && zero_type (m) == 1)
return "UNDEFINED";
|
0a064e | 2002-11-24 | Henrik Grubbström (Grubba) | | case "float":
return (string)m;
case "string":
|
23184f | 2003-04-30 | Martin Nilsson | | return describe_string ([string]m, maxlen);
|
0a064e | 2002-11-24 | Henrik Grubbström (Grubba) | | case "array":
|
23184f | 2003-04-30 | Martin Nilsson | | res = describe_array ([array]m, maxlen);
|
0a064e | 2002-11-24 | Henrik Grubbström (Grubba) | | break;
case "mapping":
|
23184f | 2003-04-30 | Martin Nilsson | | res = describe_mapping ([mapping]m, maxlen);
|
0a064e | 2002-11-24 | Henrik Grubbström (Grubba) | | break;
case "multiset":
|
23184f | 2003-04-30 | Martin Nilsson | | res = describe_multiset ([multiset]m, maxlen);
|
0a064e | 2002-11-24 | Henrik Grubbström (Grubba) | | break;
case "function":
|
23184f | 2003-04-30 | Martin Nilsson | | if (string tmp=describe_function([function]m)) res = tmp;
|
0a064e | 2002-11-24 | Henrik Grubbström (Grubba) | | break;
case "program":
|
23184f | 2003-04-30 | Martin Nilsson | | if(string tmp=describe_program([program]m)) res = tmp;
|
0a064e | 2002-11-24 | Henrik Grubbström (Grubba) | | break;
default:
if (catch {
if(string tmp=sprintf("%O", m)) res = tmp;
}) {
res = sprintf("Instance of %O", _typeof(m));
|
f645f0 | 2001-10-26 | Henrik Grubbström (Grubba) | | }
|
0a064e | 2002-11-24 | Henrik Grubbström (Grubba) | | break;
|
da0a82 | 2000-08-29 | Martin Stjernholm | | }
|
0a064e | 2002-11-24 | Henrik Grubbström (Grubba) | | if (stringp(ident[m]))
|
da0a82 | 2000-08-29 | Martin Stjernholm | | return ident[m] + "=" + res;
return res;
}
|
e8ebc0 | 1999-08-27 | Fredrik Hübinette (Hubbe) | |
|
da0a82 | 2000-08-29 | Martin Stjernholm | | string describe_comma_list(array x, int maxlen)
{
string ret="";
|
e8ebc0 | 1999-08-27 | Fredrik Hübinette (Hubbe) | |
|
da0a82 | 2000-08-29 | Martin Stjernholm | | if(!sizeof(x)) return "";
if(maxlen<0) return ",,,"+sizeof(x);
|
5e0916 | 1999-10-15 | Fredrik Hübinette (Hubbe) | |
|
da0a82 | 2000-08-29 | Martin Stjernholm | | int clip=min(maxlen/2,sizeof(x));
int len=maxlen;
int done=0;
|
ba20b1 | 1999-10-15 | Fredrik Hübinette (Hubbe) | |
while(1)
{
|
da0a82 | 2000-08-29 | Martin Stjernholm | | array(string) z=allocate(clip);
array(int) isclipped=allocate(clip);
array(int) clippable=allocate(clip);
for(int e=0;e<clip;e++)
|
ba20b1 | 1999-10-15 | Fredrik Hübinette (Hubbe) | | {
|
da0a82 | 2000-08-29 | Martin Stjernholm | | clipped=0;
canclip=0;
z[e]=describe(x[e],len);
isclipped[e]=clipped;
clippable[e]=canclip;
|
ba20b1 | 1999-10-15 | Fredrik Hübinette (Hubbe) | | }
while(1)
{
|
da0a82 | 2000-08-29 | Martin Stjernholm | | string ret = z[..clip-1]*",";
if(done || sizeof(ret)<=maxlen+1)
{
int tmp=sizeof(x)-clip-1;
clipped=`+(0,@isclipped);
if(tmp>=0)
{
clipped++;
ret+=",,,"+tmp;
}
canclip++;
return ret;
}
int last_newlen=len;
int newlen;
int clipsuggest;
while(1)
{
int smallsize=0;
int num_large=0;
clipsuggest=0;
|
ba20b1 | 1999-10-15 | Fredrik Hübinette (Hubbe) | |
|
da0a82 | 2000-08-29 | Martin Stjernholm | | for(int e=0;e<clip;e++)
|
ba20b1 | 1999-10-15 | Fredrik Hübinette (Hubbe) | | {
|
5e0916 | 1999-10-15 | Fredrik Hübinette (Hubbe) | | if((sizeof(z[e])>=last_newlen || isclipped[e]) && clippable[e])
|
ba20b1 | 1999-10-15 | Fredrik Hübinette (Hubbe) | | num_large++;
else
smallsize+=sizeof(z[e]);
if(num_large * 15 + smallsize < maxlen) clipsuggest=e+1;
}
|
eba023 | 2004-01-13 | Martin Nilsson | |
|
da0a82 | 2000-08-29 | Martin Stjernholm | | newlen=num_large ? (maxlen-smallsize)/num_large : 0;
|
eba023 | 2004-01-13 | Martin Nilsson | |
|
da0a82 | 2000-08-29 | Martin Stjernholm | | if(newlen<8 || newlen >= last_newlen) break;
last_newlen=newlen;
}
|
e8ebc0 | 1999-08-27 | Fredrik Hübinette (Hubbe) | |
|
da0a82 | 2000-08-29 | Martin Stjernholm | | if(newlen < 8 && clip)
{
clip-= (clip/4) || 1;
if(clip > clipsuggest) clip=clipsuggest;
}else{
len=newlen;
done++;
break;
}
|
ba20b1 | 1999-10-15 | Fredrik Hübinette (Hubbe) | | }
}
|
da0a82 | 2000-08-29 | Martin Stjernholm | | return ret;
}
|
e8ebc0 | 1999-08-27 | Fredrik Hübinette (Hubbe) | | }
|
be242d | 2002-11-23 | Henrik Grubbström (Grubba) | |
|
28351b | 2003-05-31 | Martin Stjernholm | | string program_path_to_name ( string path,
|
075a2e | 2008-08-31 | Henrik Grubbström (Grubba) | | void|string module_prefix,
void|string module_suffix,
|
4ce983 | 2003-06-05 | Martin Stjernholm | | void|string object_suffix )
|
28351b | 2003-05-31 | Martin Stjernholm | |
|
d3a332 | 2002-11-23 | Marcus Comstedt | | {
|
e3383c | 2006-01-25 | Henrik Grubbström (Grubba) | | if (path == "/master") return "master" + (object_suffix || "");
|
d3a332 | 2002-11-23 | Marcus Comstedt | | array(string) sort_paths_by_length(array(string) paths)
{
sort(map(paths, sizeof), paths);
return reverse(paths);
};
|
28351b | 2003-05-31 | Martin Stjernholm | |
|
e3383c | 2006-01-25 | Henrik Grubbström (Grubba) | | string prefix = "";
array(Version) versions = reverse(sort(indices(compat_handler_cache)));
find_prefix:
foreach(versions, Version version) {
CompatResolver r = compat_handler_cache[version];
if (!r) continue;
foreach(sort_paths_by_length(map(r->pike_module_path - ({""}),
lambda(string s) {
if (s[-1] == '/') return s;
return s+"/";
})),
string path_prefix) {
if (has_prefix(path, path_prefix)) {
path = path[sizeof(path_prefix)..];
if (version != currentversion) {
prefix = ((string)version) + "::";
}
break find_prefix;
}
|
d3a332 | 2002-11-23 | Marcus Comstedt | | }
}
|
28351b | 2003-05-31 | Martin Stjernholm | |
#if 0
path = trim_file_name(path);
#endif
string modname = replace(path, ".pmod/", ".");
if(search(modname, "/")<0) path=modname;
|
e3383c | 2006-01-25 | Henrik Grubbström (Grubba) | | path = prefix + path;
|
28351b | 2003-05-31 | Martin Stjernholm | | if (has_suffix(path, ".module.pmod")) {
|
35320b | 2004-10-30 | Martin Stjernholm | | return (module_prefix || "") + path[..<12] + (module_suffix || "");
|
28351b | 2003-05-31 | Martin Stjernholm | | }
if (has_suffix(path, ".pmod")) {
|
35320b | 2004-10-30 | Martin Stjernholm | | return (module_prefix || "") + path[..<5] + (module_suffix || "");
|
28351b | 2003-05-31 | Martin Stjernholm | | }
if (has_suffix(path, ".so")) {
|
35320b | 2004-10-30 | Martin Stjernholm | | return (module_prefix || "") + path[..<3] + (module_suffix || "");
|
28351b | 2003-05-31 | Martin Stjernholm | | }
if (has_suffix(path, ".pike")) {
|
35320b | 2004-10-30 | Martin Stjernholm | | return path[..<5] + (object_suffix || "");
|
28351b | 2003-05-31 | Martin Stjernholm | | }
return path + (object_suffix || "");
|
d3a332 | 2002-11-23 | Marcus Comstedt | | }
|
be242d | 2002-11-23 | Henrik Grubbström (Grubba) | |
|
e5ef06 | 2003-04-01 | Martin Nilsson | |
|
be242d | 2002-11-23 | Henrik Grubbström (Grubba) | |
|
e5ef06 | 2003-04-01 | Martin Nilsson | |
|
be242d | 2002-11-23 | Henrik Grubbström (Grubba) | | string describe_module(object|program mod, array(object)|void ret_obj)
{
|
2d01ff | 2003-09-09 | Martin Stjernholm | |
program parent_fun = object_program(mod);
if (parent_fun) {
if (ret_obj) ret_obj[0] = mod;
} else if (programp (mod)) {
parent_fun = mod;
|
aedfbc | 2004-01-12 | Martin Nilsson | |
|
a30b1a | 2004-01-12 | Martin Nilsson | |
|
aedfbc | 2004-01-12 | Martin Nilsson | | if (objects && objectp (mod = objects[parent_fun]) && ret_obj)
ret_obj[0] = mod;
|
be242d | 2002-11-23 | Henrik Grubbström (Grubba) | | }
|
2d01ff | 2003-09-09 | Martin Stjernholm | | else
return "";
|
be242d | 2002-11-23 | Henrik Grubbström (Grubba) | | if (mod) {
catch {
string res = sprintf("%O", mod);
|
d3a332 | 2002-11-23 | Marcus Comstedt | | if (res != "object" && res != "")
|
401fa0 | 2002-12-02 | Martin Stjernholm | | return (objectp (objects[parent_fun]) && programs["/master"] != parent_fun?
|
a63242 | 2002-11-23 | Marcus Comstedt | | res+".":res+"->");
|
be242d | 2002-11-23 | Henrik Grubbström (Grubba) | | };
|
83da8e | 2008-05-14 | Henrik Grubbström (Grubba) | | string res = search(all_constants(), mod);
if (res) return res;
|
be242d | 2002-11-23 | Henrik Grubbström (Grubba) | | }
if (!object_program(parent_fun)) {
|
28351b | 2003-05-31 | Martin Stjernholm | | if (string path = programs_reverse_lookup (parent_fun))
return program_path_to_name(path, "", ".", "()->");
|
be242d | 2002-11-23 | Henrik Grubbström (Grubba) | | }
array(object) parent_obj = ({ 0 });
string res = describe_module(function_object(parent_fun)||
|
c3b564 | 2003-01-09 | Henrik Grubbström (Grubba) | | function_program(parent_fun)||
|
be242d | 2002-11-23 | Henrik Grubbström (Grubba) | | object_program(parent_fun),
parent_obj);
|
401fa0 | 2002-12-02 | Martin Stjernholm | | object|program parent =
|
2d01ff | 2003-09-09 | Martin Stjernholm | | object_program (parent_obj[0]) ? parent_obj[0] : object_program(parent_fun);
if (mod && (object_program (parent) || parent)) {
|
be242d | 2002-11-23 | Henrik Grubbström (Grubba) | |
catch {
int i = search(values(parent), mod);
if (i >= 0) {
|
23184f | 2003-04-30 | Martin Nilsson | | return res + [string]indices(parent)[i] + ".";
|
be242d | 2002-11-23 | Henrik Grubbström (Grubba) | | }
};
}
if (string fun_name = function_name(parent_fun)) {
return res + fun_name + "()->";
}
|
2d01ff | 2003-09-09 | Martin Stjernholm | | if (!mod && (object_program (parent) || parent)) {
|
be242d | 2002-11-23 | Henrik Grubbström (Grubba) | | catch {
int i;
array(mixed) val = values(parent);
|
23184f | 2003-04-30 | Martin Nilsson | | array(string) ind = [array(string)]indices(parent);
|
be242d | 2002-11-23 | Henrik Grubbström (Grubba) | | for (i=0; i < sizeof(val); i++) {
|
2d01ff | 2003-09-09 | Martin Stjernholm | | if (object_program(val[i]) && object_program(val[i]) == parent_fun) {
|
be242d | 2002-11-23 | Henrik Grubbström (Grubba) | | return res + ind[i] + ".";
}
}
};
}
|
d3a332 | 2002-11-23 | Marcus Comstedt | | return res + (describe_program(parent_fun)||"unknown_program") + "()->";
|
be242d | 2002-11-23 | Henrik Grubbström (Grubba) | | }
|
97e5c7 | 2001-07-28 | Martin Nilsson | |
|
dd75be | 2003-02-26 | Martin Stjernholm | | string describe_object(object o)
|
bec57d | 1999-09-06 | Fredrik Hübinette (Hubbe) | | {
string s;
|
90b03d | 2003-01-16 | Martin Stjernholm | | if(zero_type (o)) return 0;
|
be242d | 2002-11-23 | Henrik Grubbström (Grubba) | |
|
83da8e | 2008-05-14 | Henrik Grubbström (Grubba) | |
|
42825a | 2003-05-07 | Martin Stjernholm | |
program|function(mixed...:void|object) parent_fun = object_program(o);
|
be242d | 2002-11-23 | Henrik Grubbström (Grubba) | |
catch {
|
c3b564 | 2003-01-09 | Henrik Grubbström (Grubba) | | object|program parent_obj =
(function_object(parent_fun) || function_program(parent_fun));
|
be242d | 2002-11-23 | Henrik Grubbström (Grubba) | |
|
10ab77 | 2002-12-04 | Marcus Comstedt | | if (objectp (parent_obj) || parent_obj) {
|
be242d | 2002-11-23 | Henrik Grubbström (Grubba) | |
object tmp = objects[parent_obj];
|
401fa0 | 2002-12-02 | Martin Stjernholm | | if (objectp (tmp)) parent_obj = tmp;
|
be242d | 2002-11-23 | Henrik Grubbström (Grubba) | |
|
b38cb3 | 2003-09-09 | |