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__
|
e08ca4 | 2018-12-08 | Marcus Comstedt | |
|
0fcf0c | 2004-03-05 | Martin Nilsson | |
|
0ffc19 | 2016-11-05 | Tobias S. Josefowitz | | #pragma dynamic_dot
|
2f520e | 2002-04-28 | Martin Nilsson | |
|
d5e23b | 2008-06-01 | Henrik Grubbström (Grubba) | |
|
346779 | 2021-07-18 | 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) | |
|
12afb4 | 2018-01-12 | Stephen R. van den Berg | | #if defined(__NT__)
|
929cf7 | 2003-08-19 | Martin Nilsson | | #define PATH_SEPARATOR ";"
#else
#define PATH_SEPARATOR ":"
#endif
|
61b41f | 2003-12-18 | Marcus Comstedt | | #define UPDIR "../"
|
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) | |
|
196b8e | 2017-12-04 | Henrik Grubbström (Grubba) | |
|
2f520e | 2002-04-28 | Martin Nilsson | |
|
196b8e | 2017-12-04 | Henrik Grubbström (Grubba) | |
|
2f520e | 2002-04-28 | Martin Nilsson | | int compat_major=-1;
|
4839dd | 2001-09-02 | Marcus Comstedt | |
|
196b8e | 2017-12-04 | Henrik Grubbström (Grubba) | |
|
2f520e | 2002-04-28 | Martin Nilsson | |
|
196b8e | 2017-12-04 | Henrik Grubbström (Grubba) | |
|
2f520e | 2002-04-28 | Martin Nilsson | | int compat_minor=-1;
|
196b8e | 2017-12-04 | Henrik Grubbström (Grubba) | |
|
f6da7b | 2004-06-27 | Martin Nilsson | |
|
196b8e | 2017-12-04 | Henrik Grubbström (Grubba) | |
|
f6da7b | 2004-06-27 | Martin Nilsson | | int show_if_constant_errors = 0;
|
2f520e | 2002-04-28 | Martin Nilsson | |
|
1683dc | 2019-05-01 | Henrik Grubbström (Grubba) | | protected int _is_pike_master = 0;
int `is_pike_master()
{
return _is_pike_master;
}
void `is_pike_master=(int one)
{
_is_pike_master = one;
if (one) {
add_constants();
}
}
|
b01e7e | 2010-07-29 | Martin Stjernholm | |
|
fba2e2 | 2014-12-05 | Bill Welliver | | mapping(string:object) fs_map = ([]);
object root_fs;
|
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..])
|
8ff89d | 2016-07-04 | Martin Nilsson | | #define trim(X) (Builtin.string_trim (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);
|
1b9258 | 2019-08-04 | Marcus Comstedt | | function _werror = werror;
if (!_werror || (_werror == locale_werror && !locale_werror_cache))
_werror = Files()->_stderr->write;
_werror (fmt);
|
3d21a6 | 2003-03-27 | Martin Stjernholm | | }
#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) | |
|
2fe88b | 2014-10-05 | Martin Nilsson | |
|
87ce12 | 2008-05-29 | Henrik Grubbström (Grubba) | |
|
4ee6a6 | 2008-09-13 | Henrik Grubbström (Grubba) | |
|
2fe88b | 2014-10-05 | Martin Nilsson | |
|
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) | |
|
2fe88b | 2014-10-05 | Martin Nilsson | | protected class Pike_7_8_master
|
b78402 | 2008-05-28 | Henrik Grubbström (Grubba) | | {
|
87ce12 | 2008-05-29 | Henrik Grubbström (Grubba) | | extern array(string) pike_include_path;
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
|
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);
|
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;
|
21c85e | 2008-06-01 | Henrik Grubbström (Grubba) | |
|
87ce12 | 2008-05-29 | Henrik Grubbström (Grubba) | | extern mapping(program:object) objects;
|
b78402 | 2008-05-28 | Henrik Grubbström (Grubba) | | object cast_to_object(string oname, string current_file);
class dirnode {};
|
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);
|
e3ba08 | 2008-09-14 | Henrik Grubbström (Grubba) | |
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);
extern int want_warnings;
program compile_string(string data, void|string name);
program compile_file(string file);
constant master_efuns = ({});
class joinnode {};
extern mapping(string:mixed) fc;
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) | | class Codec {};
|
6f8918 | 2008-05-29 | Henrik Grubbström (Grubba) | |
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);
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);
mixed get_inhibit_compile_errors();
string decode_charset(string data, string charset);
string describe_object(object o);
string describe_backtrace(array(mixed) trace, void|int linewidth);
string describe_error(mixed trace);
|
067ddd | 2014-08-11 | Martin Nilsson | |
|
b78402 | 2008-05-28 | Henrik Grubbström (Grubba) | |
|
6f8918 | 2008-05-29 | Henrik Grubbström (Grubba) | | #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();
|
6f8918 | 2008-05-29 | Henrik Grubbström (Grubba) | | 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);
|
e3d6bd | 2008-09-14 | Henrik Grubbström (Grubba) | |
|
ec8008 | 2014-08-24 | Martin Nilsson | |
|
6f8918 | 2008-05-29 | Henrik Grubbström (Grubba) | |
|
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);
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);
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;
|
abe9fe | 2014-09-18 | Martin Nilsson | |
|
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);
|
ffb798 | 2019-04-09 | Henrik Grubbström (Grubba) | | __deprecated__ string _sprintf(int t);
|
ec8008 | 2014-08-24 | Martin Nilsson | |
|
abe9fe | 2014-09-18 | Martin Nilsson | |
|
7729db | 2010-11-19 | Henrik Grubbström (Grubba) | |
extern int show_if_constant_errors;
extern mapping(string:string) initial_predefines;
extern joinnode root_module;
extern mapping(object:joinnode) handler_root_modules;
extern array(string) system_module_path;
extern CompatResolver fallback_resolver;
joinnode get_root_module(object|void current_handler);
|
2fe88b | 2014-10-05 | Martin Nilsson | | local protected object Pike_7_8_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)
{
|
2fe88b | 2014-10-05 | Martin Nilsson | | if (!Pike_7_8_compat_handler) {
Pike_7_8_compat_handler = global::get_compilation_handler(7, 8);
|
7729db | 2010-11-19 | Henrik Grubbström (Grubba) | | }
|
2fe88b | 2014-10-05 | Martin Nilsson | | return Pike_7_8_compat_handler->resolv_or_error(identifier, current_file,
|
7729db | 2010-11-19 | Henrik Grubbström (Grubba) | | current_handler);
}
|
6f8918 | 2008-05-29 | Henrik Grubbström (Grubba) | | local mixed resolv(string identifier, string|void current_file)
{
|
2fe88b | 2014-10-05 | Martin Nilsson | | if (!Pike_7_8_compat_handler) {
Pike_7_8_compat_handler = global::get_compilation_handler(7, 8);
|
6f8918 | 2008-05-29 | Henrik Grubbström (Grubba) | | }
|
2fe88b | 2014-10-05 | Martin Nilsson | | return Pike_7_8_compat_handler->resolv(identifier, current_file);
|
6f8918 | 2008-05-29 | Henrik Grubbström (Grubba) | | }
|
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)
{
|
2fe88b | 2014-10-05 | Martin Nilsson | |
if (major < 8)
|
8e06a3 | 2014-09-30 | Martin Nilsson | | return this::this;
|
4ee6a6 | 2008-09-13 | Henrik Grubbström (Grubba) | | 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) | | }
|
2fe88b | 2014-10-05 | Martin Nilsson | |
|
0e2616 | 2010-12-23 | Henrik Grubbström (Grubba) | |
|
2fe88b | 2014-10-05 | Martin Nilsson | |
|
0e2616 | 2010-12-23 | Henrik Grubbström (Grubba) | |
|
2fe88b | 2014-10-05 | Martin Nilsson | | protected class Pike_8_0_master
|
0e2616 | 2010-12-23 | Henrik Grubbström (Grubba) | | {
|
2fe88b | 2014-10-05 | Martin Nilsson | | inherit Pike_7_8_master;
|
0e2616 | 2010-12-23 | Henrik Grubbström (Grubba) | |
|
2fe88b | 2014-10-05 | Martin Nilsson | | local protected object Pike_8_0_compat_handler;
|
0e2616 | 2010-12-23 | Henrik Grubbström (Grubba) | | local mixed resolv_or_error(string identifier, string|void current_file,
void|object current_handler)
{
|
2fe88b | 2014-10-05 | Martin Nilsson | | if (!Pike_8_0_compat_handler) {
Pike_8_0_compat_handler = global::get_compilation_handler(8, 0);
|
0e2616 | 2010-12-23 | Henrik Grubbström (Grubba) | | }
|
2fe88b | 2014-10-05 | Martin Nilsson | | return Pike_8_0_compat_handler->resolv_or_error(identifier, current_file,
|
0e2616 | 2010-12-23 | Henrik Grubbström (Grubba) | | current_handler);
}
local mixed resolv(string identifier, string|void current_file)
{
|
2fe88b | 2014-10-05 | Martin Nilsson | | if (!Pike_8_0_compat_handler) {
Pike_8_0_compat_handler = global::get_compilation_handler(8, 0);
|
0e2616 | 2010-12-23 | Henrik Grubbström (Grubba) | | }
|
2fe88b | 2014-10-05 | Martin Nilsson | | return Pike_8_0_compat_handler->resolv(identifier, current_file);
|
0e2616 | 2010-12-23 | Henrik Grubbström (Grubba) | | }
object get_compat_master(int major, int minor)
{
|
2fe88b | 2014-10-05 | Martin Nilsson | | if (major < 8)
return Pike_7_8_master::get_compat_master(major, minor);
if ((major == 8) && (minor < 1))
|
8e06a3 | 2014-09-30 | Martin Nilsson | | return this::this;
|
0e2616 | 2010-12-23 | Henrik Grubbström (Grubba) | | return get_compat_master(major, minor);
}
}
|
d5e23b | 2008-06-01 | Henrik Grubbström (Grubba) | |
|
2fe88b | 2014-10-05 | Martin Nilsson | | protected inherit Pike_8_0_master;
|
b78402 | 2008-05-28 | Henrik Grubbström (Grubba) | |
|
59f982 | 2018-02-08 | Henrik Grubbström (Grubba) | |
|
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) | |
|
8f4569 | 2001-01-14 | Henrik Grubbström (Grubba) | |
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | int is_absolute_path(string p)
{
|
12afb4 | 2018-01-12 | Stephen R. van den Berg | | #if defined(__NT__)
|
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,"/");
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | }
|
12afb4 | 2018-01-12 | Stephen R. van den Berg | | #if defined(__NT__)
|
4619bd | 2002-07-29 | Martin Nilsson | | #define EXPLODE_PATH(X) (replace((X),"\\","/")/"/")
#else
#define EXPLODE_PATH(X) ((X)/"/")
#endif
|
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 | | array(string) r = EXPLODE_PATH(p);
if(r[0] == "" && sizeof(p))
r[0] = "/";
return r;
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | }
|
beb6a2 | 2019-01-17 | Henrik Grubbström (Grubba) | | #if !constant(dirname)
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | string dirname(string x)
{
|
77e4f2 | 2002-07-09 | Martin Nilsson | | if(x=="") return "";
|
bd5966 | 2019-01-16 | Henrik Grubbström (Grubba) | | array(string) tmp = EXPLODE_PATH(x);
if (x[0] == '/' && sizeof(tmp) < 3) return "/";
return tmp[..<1]*"/";
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | }
|
beb6a2 | 2019-01-17 | Henrik Grubbström (Grubba) | | #else /* dirname */
constant dirname = predef::dirname;
#endif /* !dirname */
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | |
|
beb6a2 | 2019-01-17 | Henrik Grubbström (Grubba) | | #if !constant(basename)
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | string basename(string x)
{
|
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 | | }
|
beb6a2 | 2019-01-17 | Henrik Grubbström (Grubba) | | #else /* basename */
constant basename = predef::basename;
#define BASENAME(X) basename(X)
#endif /* !basename */
|
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]; \
|
65340d | 2014-08-15 | Martin Nilsson | | if(!undefinedp (val) && val != no_value && \
|
1a03e7 | 2005-11-09 | Henrik Grubbström (Grubba) | | 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) | |
|
f3111a | 2019-03-20 | Henrik Grubbström (Grubba) | |
|
0de46d | 2018-08-06 | Henrik Grubbström (Grubba) | | protected class CompilerEnvironment
{
|
df8309 | 2018-12-27 | Henrik Grubbström (Grubba) | |
|
0de46d | 2018-08-06 | Henrik Grubbström (Grubba) | | inherit predef::CompilerEnvironment : OrigCompilerEnvironment;
|
df8309 | 2018-12-27 | Henrik Grubbström (Grubba) | |
|
4b61e1 | 2018-10-05 | Henrik Grubbström (Grubba) | | mixed resolv(string identifier, string filename,
object|void handler, object|void compat_handler)
{
return master()->resolv(identifier, filename,
handler, compat_handler);
}
|
df8309 | 2018-12-27 | Henrik Grubbström (Grubba) | |
|
4b61e1 | 2018-10-05 | Henrik Grubbström (Grubba) | | program handle_inherit(string inh, string current_file,
object|void handler, object|void compat_handler)
{
return master()->handle_inherit(inh, current_file,
handler, compat_handler);
}
|
df8309 | 2018-12-27 | Henrik Grubbström (Grubba) | |
|
4b61e1 | 2018-10-05 | Henrik Grubbström (Grubba) | | program handle_import(string module, string current_file,
object|void handler, object|void compat_handler)
{
return master()->handle_import(module, current_file,
handler, compat_handler);
}
|
ad505d | 2018-08-12 | Henrik Grubbström (Grubba) | | object get_compilation_handler(int major, int minor)
{
return master()->get_compilation_handler(major, minor);
}
|
b315da | 2019-01-06 | Henrik Grubbström (Grubba) | | #if constant(_static_modules.Builtin.__HAVE_COMPILER_NO_HANDLERS__)
class PikeCompiler
{
inherit ::this_program;
object handler;
object compat_handler;
protected mixed apply_handler(string fun, mixed ... args)
{
function f;
foreach(({ handler, compat_handler }), object o) {
if (objectp(o) && functionp(f = predef::`->(o, fun))) {
return f(@args);
}
}
return CompilerEnvironment::`->(fun)(@args);
}
void report(SeverityLevel severity, string filename, int linenumber,
string subsystem, string message,
mixed ... extra_args)
{
foreach(({ handler, compat_handler }), object o) {
if (!objectp(o)) continue;
if (functionp(o->report)) {
o->report(severity, filename, linenumber,
subsystem, message, @extra_args);
return;
}
if (severity < WARNING) continue;
if (severity >= ERROR) {
if (functionp(o->compile_error)) {
o->compile_error(filename, linenumber,
sizeof(extra_args)?
sprintf(message, @extra_args):
message);
return;
}
} else {
if (functionp(o->compile_warning)) {
o->compile_warning(filename, linenumber,
sizeof(extra_args)?
sprintf(message, @extra_args):
message);
return;
}
}
}
CompilerEnvironment::report(severity, filename, linenumber,
subsystem, message, @extra_args);
}
mixed resolv(string identifier)
{
return apply_handler(__func__, identifier, current_file,
handler, compat_handler);
}
mapping(string:mixed)|object get_default_module()
{
return apply_handler(__func__);
}
object get_compilation_handler(int major, int minor)
{
return apply_handler(__func__, major, minor);
}
program handle_inherit(string inh)
{
return apply_handler(__func__, inh, current_file,
handler, compat_handler);
}
program handle_import(string module)
{
return apply_handler(__func__, module, current_file,
handler, compat_handler);
}
void change_compiler_compatibility(int major, int minor)
{
if ((major == compat_major) && (minor == compat_minor)) {
return;
}
if (((major == -1) && (minor == -1)) ||
((major == __REAL_MAJOR__) && (minor == __REAL_MINOR__))) {
if ((compat_major == __REAL_MAJOR__) &&
(compat_minor == __REAL_MINOR__)) {
return;
}
compat_handler = 0;
} else {
compat_handler = get_compilation_handler(major, minor);
}
::change_compiler_compatibility(major, minor);
}
protected void create(string|void source,
object|void handler,
int|void major, int|void minor,
program|void target, object|void placeholder)
{
this::handler = handler;
::create(source, UNDEFINED, major, minor, target, placeholder);
}
}
#endif /* _static_modules.Builtin.__HAVE_COMPILER_NO_HANDLERS__ */
|
df8309 | 2018-12-27 | Henrik Grubbström (Grubba) | |
|
0de46d | 2018-08-06 | Henrik Grubbström (Grubba) | | int compile_exception(mixed err)
{
|
2c4fe5 | 2018-08-06 | Henrik Grubbström (Grubba) | | function(mixed:int) fun = master()->compile_exception;
return fun && fun(err);
|
0de46d | 2018-08-06 | Henrik Grubbström (Grubba) | | }
|
df8309 | 2018-12-27 | Henrik Grubbström (Grubba) | |
|
0de46d | 2018-08-06 | Henrik Grubbström (Grubba) | | string format_exception(mixed err)
{
return 0;
}
|
df8309 | 2018-12-27 | Henrik Grubbström (Grubba) | |
|
0de46d | 2018-08-06 | Henrik Grubbström (Grubba) | | class CPP
{
|
df8309 | 2018-12-27 | Henrik Grubbström (Grubba) | |
|
0de46d | 2018-08-06 | Henrik Grubbström (Grubba) | | inherit ::this_program;
|
026fa3 | 2018-10-08 | Henrik Grubbström (Grubba) | | #if constant(_static_modules.Builtin.__HAVE_CPP_NO_HANDLERS__)
|
df8309 | 2018-12-27 | Henrik Grubbström (Grubba) | |
|
026fa3 | 2018-10-08 | Henrik Grubbström (Grubba) | | object handler;
object compat_handler;
#endif
|
df8309 | 2018-12-27 | Henrik Grubbström (Grubba) | |
|
0de46d | 2018-08-06 | Henrik Grubbström (Grubba) | | protected mixed apply_handler(string fun, mixed ... args)
{
function f;
foreach(({ handler, compat_handler }), object o) {
if (objectp(o) && functionp(f = predef::`->(o, fun))) {
return f(@args);
}
}
return CompilerEnvironment::`->(fun)(@args);
}
|
2d9630 | 2018-08-09 | Henrik Grubbström (Grubba) | |
void report(SeverityLevel severity, string filename, int linenumber,
string subsystem,
sprintf_format message, sprintf_args ... extra_args)
{
foreach(({ handler, compat_handler }), object o) {
if (!objectp(o)) continue;
if (functionp(o->report)) {
o->report(severity, filename, linenumber,
subsystem, message, @extra_args);
return;
}
if (severity < WARNING) continue;
if (severity >= ERROR) {
if (functionp(o->compile_error)) {
o->compile_error(filename, linenumber,
sizeof(extra_args)?
sprintf(message, @extra_args):
message);
return;
}
} else {
if (functionp(o->compile_warning)) {
o->compile_warning(filename, linenumber,
sizeof(extra_args)?
sprintf(message, @extra_args):
message);
return;
}
}
}
::report(severity, filename, linenumber, subsystem, message, @extra_args);
}
|
df8309 | 2018-12-27 | Henrik Grubbström (Grubba) | |
|
ad505d | 2018-08-12 | Henrik Grubbström (Grubba) | | object get_compilation_handler(int major, int minor)
{
return apply_handler(__func__, major, minor);
}
|
026fa3 | 2018-10-08 | Henrik Grubbström (Grubba) | | #if constant(_static_modules.Builtin.__HAVE_CPP_NO_HANDLERS__)
|
df8309 | 2018-12-27 | Henrik Grubbström (Grubba) | |
|
026fa3 | 2018-10-08 | Henrik Grubbström (Grubba) | | mapping(string:string|function|object) get_predefines()
{
return apply_handler(__func__);
}
|
df8309 | 2018-12-27 | Henrik Grubbström (Grubba) | |
|
026fa3 | 2018-10-08 | Henrik Grubbström (Grubba) | | mixed resolv(string sym)
{
return apply_handler(__func__, sym, current_file,
handler, compat_handler);
}
|
df8309 | 2018-12-27 | Henrik Grubbström (Grubba) | |
|
026fa3 | 2018-10-08 | Henrik Grubbström (Grubba) | | string handle_include(string header_file, string current_file,
int(0..1) is_local_ref)
{
return apply_handler(__func__, header_file, current_file,
is_local_ref);
}
|
df8309 | 2018-12-27 | Henrik Grubbström (Grubba) | |
|
026fa3 | 2018-10-08 | Henrik Grubbström (Grubba) | | string read_include(string filename)
{
return apply_handler(__func__, filename);
}
string decode_charset(string data, string charset)
{
return apply_handler(__func__, data, charset);
}
#endif
|
a3ca4d | 2018-08-14 | Henrik Grubbström (Grubba) | | string evaluate_define(string def, string|void arguments)
{
return apply_handler(__func__, def, arguments);
}
|
df8309 | 2018-12-27 | Henrik Grubbström (Grubba) | |
|
ad505d | 2018-08-12 | Henrik Grubbström (Grubba) | | void change_cpp_compatibility(int major, int minor)
{
if ((compat_major == major) && (compat_minor == minor)) {
return;
}
if (((major == __REAL_MAJOR__) && (minor == __REAL_MINOR__)) ||
(major < 0)) {
compat_handler = UNDEFINED;
} else {
compat_handler = get_compilation_handler(major, minor);
}
::change_cpp_compatibility(major, minor);
}
|
df8309 | 2018-12-27 | Henrik Grubbström (Grubba) | |
|
0de46d | 2018-08-06 | Henrik Grubbström (Grubba) | | int compile_exception(mixed err)
{
return apply_handler(__func__, err);
}
|
df8309 | 2018-12-27 | Henrik Grubbström (Grubba) | |
|
0de46d | 2018-08-06 | Henrik Grubbström (Grubba) | | string format_exception(mixed err)
{
string ret = apply_handler(__func__, err);
if (ret) return ret;
if (compile_exception(err)) {
return "";
}
return 0;
}
|
026fa3 | 2018-10-08 | Henrik Grubbström (Grubba) | |
#if constant(_static_modules.Builtin.__HAVE_CPP_NO_HANDLERS__)
|
02ca66 | 2018-12-29 | Henrik Grubbström (Grubba) | |
|
026fa3 | 2018-10-08 | Henrik Grubbström (Grubba) | |
protected void create(mapping(string:mixed) options)
{
handler = options->handler;
compat_handler = UNDEFINED;
::create(options);
}
protected variant void create(string|void current_file,
int|string|void charset, object|void handler,
void|int compat_major, void|int compat_minor,
void|int picky_cpp)
{
mapping(string:mixed) options = ([]);
#define CPP_OPT(X) do { if (X) { options->X = X; } } while(0)
CPP_OPT(current_file);
CPP_OPT(charset);
CPP_OPT(handler);
CPP_OPT(compat_major);
CPP_OPT(compat_minor);
CPP_OPT(picky_cpp);
#undef CPP_OPT
local::create(options);
}
#endif
|
0de46d | 2018-08-06 | Henrik Grubbström (Grubba) | | }
|
b315da | 2019-01-06 | Henrik Grubbström (Grubba) | |
#if constant(_static_modules.Builtin.__HAVE_COMPILER_NO_HANDLERS__)
program compile(string source, object|void handler,
int|void major, int|void minor,
program|void target, object|void placeholder)
{
return PikeCompiler(source, handler, major, minor, target, placeholder)->
compile();
}
#endif /* _static_modules.Builtin.__HAVE_COMPILER_NO_HANDLERS__ */
|
0de46d | 2018-08-06 | Henrik Grubbström (Grubba) | | }
protected CompilerEnvironment DefaultCompilerEnvironment =
CompilerEnvironment();
|
b315da | 2019-01-06 | Henrik Grubbström (Grubba) | | #if constant(_static_modules.Builtin.__HAVE_COMPILER_NO_HANDLERS__)
|
f3111a | 2019-03-20 | Henrik Grubbström (Grubba) | |
|
b315da | 2019-01-06 | Henrik Grubbström (Grubba) | | protected program compile(string source, object|void handler,
int|void major, int|void minor,
program|void target, object|void placeholder)
{
return DefaultCompilerEnvironment->compile(source, handler,
major, minor,
target, placeholder);
}
#endif /* _static_modules.Builtin.__HAVE_COMPILER_NO_HANDLERS__ */
|
ab1307 | 2019-01-04 | Henrik Grubbström (Grubba) | |
protected object get_active_compilation_handler()
{
CompilerEnvironment.PikeCompiler c = get_active_compiler();
return c && c->compat_handler;
}
protected object get_active_error_handler()
{
CompilerEnvironment.PikeCompiler c = get_active_compiler();
return c && c->handler;
}
|
f3111a | 2019-03-20 | Henrik Grubbström (Grubba) | |
|
0de46d | 2018-08-06 | Henrik Grubbström (Grubba) | | protected string cpp(string data, mapping|string|void current_file,
int|string|void charset, object|void handler,
void|int compat_major, void|int compat_minor,
void|int picky_cpp)
{
|
68f995 | 2018-08-07 | Henrik Grubbström (Grubba) | | CompilerEnvironment.CPP cpp_obj =
DefaultCompilerEnvironment->CPP(current_file, charset,
handler || UNDEFINED,
compat_major, compat_minor,
picky_cpp);
cpp_obj->init_pike_cpp();
|
a975cb | 2018-08-08 | Henrik Grubbström (Grubba) | | return cpp_obj->high_cpp(data);
|
0de46d | 2018-08-06 | Henrik Grubbström (Grubba) | | }
|
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
|
956513 | 2014-02-14 | Martin Nilsson | | string code = cpp(source, filename||"-", 1, handler,
compat_major, compat_minor,
|
65340d | 2014-08-15 | Martin Nilsson | | (undefinedp(_show_if_constant_errors)?
|
956513 | 2014-02-14 | Martin Nilsson | | show_if_constant_errors:
_show_if_constant_errors));
program ret;
if(code)
ret = compile(code,
handler,
compat_major,
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) | | }
|
59f982 | 2018-02-08 | Henrik Grubbström (Grubba) | |
|
9bc32d | 2017-12-05 | Henrik Grubbström (Grubba) | |
|
97e5c7 | 2001-07-28 | Martin Nilsson | |
|
9bc32d | 2017-12-05 | Henrik Grubbström (Grubba) | |
|
d8a6fc | 2000-03-25 | Fredrik Hübinette (Hubbe) | | string master_read_file(string file)
{
|
fba2e2 | 2014-12-05 | Bill Welliver | | string x = find_handler_for_path(file);
if(x)
{
object h = fs_map[x];
file = file[sizeof(x)+1..];
|
352471 | 2015-05-26 | Martin Nilsson | |
|
fba2e2 | 2014-12-05 | Bill Welliver | | if(h = h->open(fakeroot(file),"r") )
{
string q = ([function(void : string)]h->read)();
return q;
}
|
352471 | 2015-05-26 | Martin Nilsson | |
|
fba2e2 | 2014-12-05 | Bill Welliver | | }
|
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) | |
|
fba2e2 | 2014-12-05 | Bill Welliver | | constant high_master_get_dir = predef::get_dir;
|
15af9c | 2003-12-19 | Marcus Comstedt | | string combine_path_with_cwd(string ... paths)
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | {
|
ef0b5f | 2020-05-30 | Marcus Comstedt | | #ifdef PIKE_MODULE_RELOC
if (has_prefix(paths[0], "/${PIKE_MODULE_PATH}/"+UPDIR))
return "/${PIKE_MODULE_PATH}/"+combine_path(paths[0][21..],@paths[1..]-({""}));
#endif
|
4a001a | 2019-12-15 | 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 | | {
|
352471 | 2015-05-26 | Martin Nilsson | | string y = find_handler_for_path(file);
|
fba2e2 | 2014-12-05 | Bill Welliver | | if(y)
{
object h = fs_map[y];
x = x[sizeof(y)+1..];
return h->get_dir(x);
}
else return predef::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) | | {
|
fba2e2 | 2014-12-05 | Bill Welliver | | object y = find_handler_for_path(file);
|
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];
|
65340d | 2014-08-15 | Martin Nilsson | | if( undefinedp(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;
|
fba2e2 | 2014-12-05 | Bill Welliver | |
if(y)
{
object h = fs_map[y];
x = x[sizeof(y)+1..];
return h->stat(x);
}
else return predef::file_stat(x);
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | }
#else
|
fba2e2 | 2014-12-05 | Bill Welliver | |
Stat master_file_stat(string file)
{
string x = find_handler_for_path(file);
if(x)
{
object h = fs_map[x];
file = file[sizeof(x)+1..];
|
352471 | 2015-05-26 | Martin Nilsson | |
|
fba2e2 | 2014-12-05 | Bill Welliver | | return h->stat(file);
}
else return predef::file_stat(file);
}
array master_get_dir(string file)
{
string x = find_handler_for_path(file);
if(x)
{
object h = fs_map[x];
file = file[sizeof(x)+1..];
|
352471 | 2015-05-26 | Martin Nilsson | |
return h->get_dir(file);
|
fba2e2 | 2014-12-05 | Bill Welliver | | }
else return predef::get_dir(file);
}
|
2f520e | 2002-04-28 | Martin Nilsson | | #endif // FILE_STAT_CACHE
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | |
|
fba2e2 | 2014-12-05 | Bill Welliver | |
|
9bc32d | 2017-12-05 | Henrik Grubbström (Grubba) | |
|
fba2e2 | 2014-12-05 | Bill Welliver | | mixed add_filesystem_handler(string mountpoint, object filesystem)
{
mixed rv = fs_map[mountpoint];
fs_map[mountpoint] = filesystem;
return rv;
}
|
9bc32d | 2017-12-05 | Henrik Grubbström (Grubba) | |
|
fba2e2 | 2014-12-05 | Bill Welliver | | string find_handler_for_path(string file)
{
foreach(reverse(sort(indices(fs_map))); int x; string path)
{
string p = path;
if(p[-1] != '/') p+="/";
if(file[-1] != '/') file+="/";
if(has_prefix(file, p))
return path;
}
|
352471 | 2015-05-26 | Martin Nilsson | |
|
fba2e2 | 2014-12-05 | Bill Welliver | | return 0;
}
|
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
|
59f982 | 2018-02-08 | Henrik Grubbström (Grubba) | |
|
b3926d | 2008-06-05 | Martin Stjernholm | |
|
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 | |
|
17a055 | 2019-04-25 | Henrik Grubbström (Grubba) | | if (force_update > 0) {
|
0866bf | 2013-06-16 | Henrik Grubbström (Grubba) | | 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) | | }
else {
#ifdef __NT__
res = Builtin._getenv();
if (!environment) set_lc_env (res);
#else
if (!environment) environment = Builtin._getenv();
res = environment + ([]);
#endif
|
17a055 | 2019-04-25 | Henrik Grubbström (Grubba) | | if (force_update < 0) return environment;
|
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) | | }
|
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) | | 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);
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) | |
|
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);
|
d04f8d | 2015-10-14 | Henrik Grubbström (Grubba) | | string code = cpp(master_read_file(filename),
filename,
1,
handler,
compat_major,
compat_minor);
if (!code) {
error("Required feature missing.\n");
}
return compile(code,
|
fc398b | 2001-05-31 | Fredrik Hübinette (Hubbe) | | handler,
compat_major,
compat_minor,
p,
o);
}
|
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) | |
|
59f982 | 2018-02-08 | 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) | |
|
b2e923 | 2016-09-19 | Henrik Grubbström (Grubba) | |
|
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 | | {
|
b2e923 | 2016-09-19 | Henrik Grubbström (Grubba) | |
|
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 | | }
|
e855be | 2019-05-04 | Tobias S. Josefowitz | | protected void call_compile_warning_lineno (object handler, string file,
int lineno, string msg,
mixed ... args) {
|
677d26 | 2003-11-14 | Martin Stjernholm | | if (sizeof (args)) msg = sprintf (msg, @args);
|
8ff89d | 2016-07-04 | Martin Nilsson | | msg = trim (msg);
|
4258a9 | 2019-11-02 | Peter Bortas | | if (handler->?compile_warning)
|
e855be | 2019-05-04 | Tobias S. Josefowitz | | handler->compile_warning (file, lineno, msg);
|
ad356c | 2009-12-28 | Martin Stjernholm | | else if (master()->compile_warning)
|
e855be | 2019-05-04 | Tobias S. Josefowitz | | master()->compile_warning (file, lineno, msg);
|
677d26 | 2003-11-14 | Martin Stjernholm | | else
|
e855be | 2019-05-04 | Tobias S. Josefowitz | | compile_warning (file, lineno, msg);
}
protected void call_compile_warning (object handler, string file,
string msg, mixed ... args)
{
call_compile_warning_lineno(handler, file, 0, msg, @args);
|
677d26 | 2003-11-14 | Martin Stjernholm | | }
|
633019 | 2000-02-10 | Fredrik Hübinette (Hubbe) | | #if constant(_static_modules.Builtin.mutex)
#define THREADED
#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;
}
|
a5af87 | 2018-02-06 | Martin Nilsson | | protected bool is_joinnode(mixed o)
{
return objectp(o) && object_program(o)->is_resolv_joinnode;
}
protected bool is_dirnode(mixed o)
{
return objectp(o) && object_program(o)->is_resolv_dirnode;
}
|
352471 | 2015-05-26 | Martin Nilsson | |
|
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;
|
a5af87 | 2018-02-06 | Martin Nilsson | | if (is_joinnode(mod))
|
352471 | 2015-05-26 | Martin Nilsson | | mods = mod->joined_modules;
|
026659 | 2007-06-13 | Martin Bähr | | else
mods = ({ mod });
foreach (mods;; object mod)
|
6f46aa | 2007-06-12 | Martin Bähr | | {
|
a5af87 | 2018-02-06 | Martin Nilsson | | if (is_dirnode(mod))
|
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)
|
352471 | 2015-05-26 | Martin Nilsson | | {
object doc_extractor = main_resolv("Tools.AutoDoc.PikeExtractor.extractClass");
|
c47588 | 2007-06-11 | Martin Bähr | | 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))
{
|
a5af87 | 2018-02-06 | Martin Nilsson | | if (is_joinnode(obj))
|
c47588 | 2007-06-11 | Martin Bähr | | obj = obj->joined_modules[0];
|
a5af87 | 2018-02-06 | Martin Nilsson | | if (is_dirnode(obj))
|
c47588 | 2007-06-11 | Martin Bähr | | 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 | | {
|
352471 | 2015-05-26 | Martin Nilsson | | 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])
|
352471 | 2015-05-26 | Martin Nilsson | | {
|
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);
|
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
{
|
65340d | 2014-08-15 | Martin Nilsson | | if(!undefinedp (ret=programs[fname]) && ret != no_value) {
|
1a03e7 | 2005-11-09 | Henrik Grubbström (Grubba) | | 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)
|
65340d | 2014-08-15 | Martin Nilsson | | if (!undefinedp (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) | |
|
b2e923 | 2016-09-19 | Henrik Grubbström (Grubba) | | object compiler_lock = DefaultCompilerEnvironment->lock();
if(!undefinedp(ret = programs[fname]) && (ret != no_value)) {
destruct(compiler_lock);
resolv_debug("low_findprog %s: returning cached (from other thread).\n",
fname);
return ret;
}
|
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),
|
4258a9 | 2019-11-02 | Peter Bortas | | (handler->?get_codec ||
|
87ce12 | 2008-05-29 | Henrik Grubbström (Grubba) | | 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);
|
4258a9 | 2019-11-02 | Peter Bortas | | if (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;
|
0df770 | 2016-09-16 | Henrik Grubbström (Grubba) | | destruct(compiler_lock);
|
c46d68 | 2000-01-05 | Martin Stjernholm | | throw(e);
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | }
|
0df770 | 2016-09-16 | Henrik Grubbström (Grubba) | | destruct(compiler_lock);
|
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 | |
|
4258a9 | 2019-11-02 | Peter Bortas | | if (ret->?this_program_does_not_exist) {
|
0453bf | 2004-03-22 | Martin Stjernholm | | resolv_debug ("low_findprog %s: program says it doesn't exist\n", fname);
return programs[fname] = 0;
}
else {
|
956513 | 2014-02-14 | Martin Nilsson | | if(!ret)
|
023798 | 2014-02-15 | Martin Nilsson | | resolv_debug("low_findprog %s: dependencies failed.\n", fname);
|
956513 | 2014-02-14 | Martin Nilsson | | else
resolv_debug("low_findprog %s: returning %O\n", fname, ret);
|
0453bf | 2004-03-22 | Martin Stjernholm | | 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) | |
|
b2e923 | 2016-09-19 | Henrik Grubbström (Grubba) | | object compiler_lock = DefaultCompilerEnvironment->lock();
|
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);
|
567f92 | 2016-09-12 | Martin Nilsson | | mixed n = has_value (name, '.') ?
|
548e83 | 2011-03-13 | Martin Stjernholm | | resolv ((name / ".")[..<1] * ".") :
get_root_module();
|
a5af87 | 2018-02-06 | Martin Nilsson | | if (is_dirnode(n) || is_joinnode(n))
|
548e83 | 2011-03-13 | Martin Stjernholm | | 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]) )
|
a5af87 | 2018-02-06 | Martin Nilsson | | if (is_dirnode(n))
|
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 | |
|
b2e923 | 2016-09-19 | Henrik Grubbström (Grubba) | |
|
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];
|
65340d | 2014-08-15 | Martin Nilsson | | if ((!undefinedp(prog)) && (prog != no_value))
|
352471 | 2015-05-26 | Martin Nilsson | | {
|
c47588 | 2007-06-11 | Martin Bähr | | return prog;
}
|
ef0b5f | 2020-05-30 | Marcus Comstedt | | #ifdef PIKE_MODULE_RELOC
if (!has_prefix(pname, "/${PIKE_MODULE_PATH}/"+UPDIR))
#endif
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,
|
352471 | 2015-05-26 | Martin Nilsson | | string current_file,
|
aa68b1 | 2001-03-19 | Fredrik Hübinette (Hubbe) | | 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) | | }
|
4f8b1f | 2013-06-28 | Henrik Grubbström (Grubba) | | protected string narrowify_string(string s)
{
if (Builtin.string_width(s) <= 8) return s;
return map(s/"",
lambda(string s) {
if (Builtin.string_width(s) <= 8) return s;
int c = s[0] & 0xffffffff;
if (c <= 0xffff) return sprintf("\\u%04x", c);
return sprintf("\\U%08x", c);
}) * "";
}
|
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];
|
4f8b1f | 2013-06-28 | Henrik Grubbström (Grubba) | | werror("%s", narrowify_string(msg));
werror(narrowify_string(sprintf("%O\n", bt)));
|
d28a71 | 2001-07-02 | Henrik Grubbström (Grubba) | | }) {
|
4f8b1f | 2013-06-28 | Henrik Grubbström (Grubba) | | werror(narrowify_string(sprintf("%O\n", x)));
|
d28a71 | 2001-07-02 | Henrik Grubbström (Grubba) | | }
};
|
4f8b1f | 2013-06-28 | Henrik Grubbström (Grubba) | | werror(narrowify_string(sprintf("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) | | }
|
615540 | 2018-06-01 | Henrik Grubbström (Grubba) | |
optional int(0..1) handle_attribute(mixed value, string attribute)
{
switch(attribute) {
#if constant(validate_utf8)
case "utf8":
return stringp(value) && validate_utf8(value, 3);
#endif
}
return UNDEFINED;
}
|
c5cc2d | 1998-04-29 | Henrik Grubbström (Grubba) | |
constant master_efuns = ({
|
4f64a5 | 2002-05-22 | Martin Nilsson | | "error",
|
beb6a2 | 2019-01-17 | Henrik Grubbström (Grubba) | | #if !constant(basename)
|
c5cc2d | 1998-04-29 | Henrik Grubbström (Grubba) | | "basename",
|
beb6a2 | 2019-01-17 | Henrik Grubbström (Grubba) | | #endif
#if !constant(dirname)
|
c5cc2d | 1998-04-29 | Henrik Grubbström (Grubba) | | "dirname",
|
beb6a2 | 2019-01-17 | Henrik Grubbström (Grubba) | | #endif
|
c5cc2d | 1998-04-29 | Henrik Grubbström (Grubba) | | "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 | | "true",
"false",
|
4f66d2 | 2021-02-23 | Henrik Grubbström (Grubba) | | "zero",
|
c5cc2d | 1998-04-29 | Henrik Grubbström (Grubba) | | "getenv",
"putenv",
#ifdef GETCWD_CACHE
"cd",
"getcwd",
#endif
});
|
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 | |
|
59f982 | 2018-02-08 | Henrik Grubbström (Grubba) | |
|
97a152 | 2017-03-17 | Henrik Grubbström (Grubba) | |
enum bool { false=0, true=1 };
|
e37819 | 2003-01-20 | Martin Nilsson | |
|
4f66d2 | 2021-02-23 | Henrik Grubbström (Grubba) | |
typedef int(0..0) zero;
|
7a90f1 | 2003-01-26 | Martin Nilsson | |
|
e37819 | 2003-01-20 | Martin Nilsson | |
|
d4140e | 2004-07-04 | Stephen R. van den Berg | |
|
97a152 | 2017-03-17 | Henrik Grubbström (Grubba) | |
|
76dc18 | 2018-02-09 | Martin Nilsson | |
|
1683dc | 2019-05-01 | Henrik Grubbström (Grubba) | | |
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | */
|
1683dc | 2019-05-01 | Henrik Grubbström (Grubba) | | protected void add_constants()
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | {
|
b315da | 2019-01-06 | Henrik Grubbström (Grubba) | | #if constant(_static_modules.Builtin.__HAVE_COMPILER_NO_HANDLERS__)
add_constant("compile", compile);
#endif /* _static_modules.Builtin.__HAVE_COMPILER_NO_HANDLERS__ */
|
ab1307 | 2019-01-04 | Henrik Grubbström (Grubba) | | add_constant("get_active_compilation_handler", get_active_compilation_handler);
add_constant("get_active_error_handler", get_active_error_handler);
|
0de46d | 2018-08-06 | Henrik Grubbström (Grubba) | | add_constant("CompilerEnvironment", CompilerEnvironment);
add_constant("DefaultCompilerEnvironment", DefaultCompilerEnvironment);
add_constant("cpp", cpp);
|
906612 | 2002-11-28 | Martin Nilsson | | foreach(master_efuns, string e)
|
65340d | 2014-08-15 | Martin Nilsson | | if (has_index(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) | |
|
43fe47 | 2016-01-04 | Per Hedbor | |
|
52a0b1 | 2016-05-08 | Henrik Grubbström (Grubba) | |
|
43fe47 | 2016-01-04 | Per Hedbor | |
|
52a0b1 | 2016-05-08 | Henrik Grubbström (Grubba) | | add_constant("bool", typeof([int(0..1)](mixed)0));
|
43fe47 | 2016-01-04 | Per Hedbor | |
|
1554cc | 2007-09-03 | Henrik Grubbström (Grubba) | | add_constant("__dirnode", dirnode);
add_constant("__joinnode", joinnode);
|
e08ca4 | 2018-12-08 | Marcus Comstedt | | werror = locale_werror;
|
d4140e | 2004-07-04 | Stephen R. van den Berg | | add_constant("write", write);
add_constant("werror", werror);
|
b85b13 | 2004-12-26 | Per Hedbor | |
|
fba2e2 | 2014-12-05 | Bill Welliver | | add_constant("get_dir", high_master_get_dir );
|
b85b13 | 2004-12-26 | Per Hedbor | | add_constant("file_stat", lambda( string f, int|void d ) { return file_stat(f,d);} );
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | |
|
206441 | 2016-01-17 | Martin Nilsson | | object rnd = Builtin.RandomSystem();
add_constant("random", rnd->random);
add_constant("random_string", rnd->random_string);
|
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);
|
1683dc | 2019-05-01 | Henrik Grubbström (Grubba) | | }
protected void create()
{
add_constants();
|
87f908 | 2001-03-12 | Fredrik Hübinette (Hubbe) | |
|
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) | | }
|
59f982 | 2018-02-08 | 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;
|
b2e923 | 2016-09-19 | Henrik Grubbström (Grubba) | | if(!objectp(o = objects[p])) {
object compiler_lock = DefaultCompilerEnvironment->lock();
if(!objectp(o = objects[p])) o = objects[p] = p();
destruct(compiler_lock);
}
|
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) | |
|
07eb49 | 2019-05-12 | Tobias S. Josefowitz | | void try_issue_deprecation_warning(object compilation_handler)
{
if (object active_compiler = get_active_compiler()) {
if (!active_compiler->suppress_deprecation_warnings()) {
call_compile_warning_lineno(compilation_handler,
active_compiler->current_file,
active_compiler->current_line,
"Using a deprecated value.");
}
}
}
|
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=([]);
|
07eb49 | 2019-05-12 | Tobias S. Josefowitz | | mapping(string:int(0..1)) deprecated_cache=([]);
|
3fc67f | 2016-07-07 | Martin Nilsson | |
|
5feacf | 2016-07-08 | Martin Nilsson | | protected 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;
|
3fc67f | 2016-07-07 | Martin Nilsson | | return 0;
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | }
|
1a03d1 | 2011-02-27 | Martin Nilsson | | protected void create()
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | {
|
20d693 | 2014-12-09 | Henrik Grubbström (Grubba) | | if (!dirname) {
error("Attempt to create a dirnode without a directory.\n"
"Have you inherited a dirnode?\n");
}
|
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 | | if (!sizeof(dirname)) return;
|
3fc67f | 2016-07-07 | Martin Nilsson | | array(string) files = sort(master_get_dir(dirname)||({}));
|
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") {
|
3fc67f | 2016-07-07 | Martin Nilsson | | module = module_checker();
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | }
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 | | }
}
|
3fc67f | 2016-07-07 | Martin Nilsson | | protected class module_checker
|
14bb59 | 2000-05-06 | Fredrik Hübinette (Hubbe) | | {
|
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) | |
|
352471 | 2015-05-26 | Martin Nilsson | | 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=([]);
|
07eb49 | 2019-05-12 | Tobias S. Josefowitz | | deprecated_cache=([]);
|
80f714 | 2003-02-27 | Henrik Grubbström (Grubba) | | _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 | | {
|
3fc67f | 2016-07-07 | Martin Nilsson | | resolv_debug ("dirnode(%O)->module_checker()[%O] => %O\n",
|
3e7cad | 2013-11-03 | Martin Nilsson | | dirname, index, module[?index]);
return 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;
|
b2e923 | 2016-09-19 | Henrik Grubbström (Grubba) | | if(!objectp(o = objects[ret])) {
object compiler_lock = DefaultCompilerEnvironment->lock();
if(!objectp(o = objects[ret])) o = objects[ret] = ret();
destruct(compiler_lock);
}
|
8c201a | 2004-04-17 | Marcus Comstedt | | 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;
|
65340d | 2014-08-15 | Martin Nilsson | | if(!undefinedp(o=module[index]))
|
aa68b1 | 2001-03-19 | Fredrik Hübinette (Hubbe) | | {
|
07eb49 | 2019-05-12 | Tobias S. Josefowitz | | mixed t;
|
3d21a6 | 2003-03-27 | Martin Stjernholm | | DEC_RESOLV_MSG_DEPTH();
resolv_debug ("dirnode(%O)->ind(%O) => found %O\n",
dirname, index, o);
|
07eb49 | 2019-05-12 | Tobias S. Josefowitz | |
if (objectp(module))
t = typeof_identifier(object_program(module), index);
if (t && deprecated_typep(t))
{
deprecated_cache[index] = 1;
try_issue_deprecation_warning(compilation_handler);
}
|
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) | | }
|
3abcaf | 2016-07-08 | Martin Nilsson | | protected mixed `[]=(string index, mixed value)
{
if(module && has_index(module, index))
return module[index]=value,cache[index]=value;
error("No such variable (%s) in object.\n", index);
}
|
5feacf | 2016-07-08 | Martin Nilsson | | protected mixed `->=(string index, mixed value)
{
return `[]=(index, value);
}
|
47ba5a | 2013-06-03 | Martin Nilsson | | protected mixed `[](string index)
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | {
mixed ret;
|
07eb49 | 2019-05-12 | Tobias S. Josefowitz | |
|
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
|
65340d | 2014-08-15 | Martin Nilsson | | if(!undefinedp(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
|
07eb49 | 2019-05-12 | Tobias S. Josefowitz | | if (ret != ZERO_TYPE)
{
if (deprecated_cache[index])
try_issue_deprecation_warning(compilation_handler);
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 | |
|
65340d | 2014-08-15 | Martin Nilsson | | cache[index] = undefinedp(ret) ? ZERO_TYPE : ret;
|
cd9971 | 2001-11-09 | Martin Stjernholm | | return ret;
|
ca2b07 | 1998-03-28 | Henrik Grubbström (Grubba) | | }
|
3e4b81 | 1998-10-16 | Henrik Grubbström (Grubba) | |
|
5feacf | 2016-07-08 | Martin Nilsson | | protected mixed `->(string index)
{
|
370a78 | 2016-07-08 | Martin Nilsson | | if( (< "dirname", "name", "is_resolv_dirnode",
|
07eb49 | 2019-05-12 | Tobias S. Josefowitz | | "module", "delete_value", "identifier_deprecatedp" >)[index] )
|
5feacf | 2016-07-08 | Martin Nilsson | | return ::`->(index);
return `[](index);
}
protected mixed safe_index(string index)
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | {
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;
}
|
07eb49 | 2019-05-12 | Tobias S. Josefowitz | | int(0..1) identifier_deprecatedp(string index)
{
if (has_index(cache, index) || deprecated_cache[index])
return deprecated_cache[index];
safe_index(index);
return deprecated_cache[index];
}
|
35f51c | 2008-06-28 | Martin Nilsson | | protected int(0..1) _cache_full;
|
5feacf | 2016-07-08 | Martin Nilsson | | protected void fill_cache()
|
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 | |
|
4fcd4f | 2014-06-10 | Henrik Grubbström (Grubba) | | 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 | |
|
4fcd4f | 2014-06-10 | Henrik Grubbström (Grubba) | | 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);
|
07eb49 | 2019-05-12 | Tobias S. Josefowitz | | m_delete (deprecated_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=([]);
|
07eb49 | 2019-05-12 | Tobias S. Josefowitz | | mapping(string:int(0..1)) deprecated_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) {
|
567f92 | 2016-09-12 | Martin Nilsson | | if (has_value (name, '|'))
|
9dcabf | 2009-04-25 | Martin Stjernholm | | 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 | |
|
20d693 | 2014-12-09 | Henrik Grubbström (Grubba) | | if (!joined_modules) {
error("Attempt to create a joinnode without joined modules.\n"
"Have you inherited a joinnode?\n");
}
|
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,
|
567f92 | 2016-09-12 | Martin Nilsson | | 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 = ([]);
|
07eb49 | 2019-05-12 | Tobias S. Josefowitz | | deprecated_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) {
|
a5af87 | 2018-02-06 | Martin Nilsson | | return !is_dirnode(node) ||
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | (node->dirname != path);
});
|
db6eae | 2009-07-17 | Henrik Grubbström (Grubba) | | cache = ([]);
|
07eb49 | 2019-05-12 | Tobias S. Josefowitz | | deprecated_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 = ({});
|
352471 | 2015-05-26 | Martin Nilsson | | foreach(joined_modules, object|mapping o)
|
ca051c | 1999-11-23 | Per Hedbor | | {
|
94257b | 1998-10-16 | Henrik Grubbström (Grubba) | | mixed ret;
|
352471 | 2015-05-26 | Martin Nilsson | | if (!undefinedp(ret = o[index]))
|
ca051c | 1999-11-23 | Per Hedbor | | {
|
a5af87 | 2018-02-06 | Martin Nilsson | | if (is_dirnode(ret) || is_joinnode(ret))
|
ca051c | 1999-11-23 | Per Hedbor | | {
|
8b307e | 1998-10-17 | Henrik Grubbström (Grubba) | |
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | res += ({ ret });
|
07eb49 | 2019-05-12 | Tobias S. Josefowitz | | if (o->identifier_deprecatedp(index))
|
dcf09c | 2019-07-09 | Tobias S. Josefowitz | | deprecated_cache[index] = 1;
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | } else {
|
3d21a6 | 2003-03-27 | Martin Stjernholm | | DEC_RESOLV_MSG_DEPTH();
resolv_debug ("joinnode(%O)->ind(%O) => found %O\n",
joined_modules, index, ret);
|
07eb49 | 2019-05-12 | Tobias S. Josefowitz | |
if (objectp(o) && o->identifier_deprecatedp(index))
{
deprecated_cache[index] = 1;
try_issue_deprecation_warning(compilation_handler);
}
|
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],
|
567f92 | 2016-09-12 | Martin Nilsson | | name && !has_value (name, '|') &&
|
9dcabf | 2009-04-25 | Martin Stjernholm | | (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) | | }
|
3abcaf | 2016-07-08 | Martin Nilsson | | protected mixed `[]=(string index, mixed value)
{
foreach(joined_modules, object|mapping o)
if(has_index(o, index))
return o[index]=value,cache[index]=value;
error("No such variable (%s) in object.\n", index);
}
|
5feacf | 2016-07-08 | Martin Nilsson | | protected mixed `->=(string index, mixed value)
{
|
bb0491 | 2016-07-08 | Martin Nilsson | | if( index=="fallback_module" )
return fallback_module=value;
|
5feacf | 2016-07-08 | Martin Nilsson | | return `[]=(index, value);
}
|
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;
|
07eb49 | 2019-05-12 | Tobias S. Josefowitz | |
|
65340d | 2014-08-15 | Martin Nilsson | | if (!undefinedp(ret = cache[index])) {
|
94257b | 1998-10-16 | Henrik Grubbström (Grubba) | | if (ret != ZERO_TYPE) {
|
07eb49 | 2019-05-12 | Tobias S. Josefowitz | | if (deprecated_cache[index])
try_issue_deprecation_warning(compilation_handler);
|
94257b | 1998-10-16 | Henrik Grubbström (Grubba) | | 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;
|
65340d | 2014-08-15 | Martin Nilsson | | if (undefinedp(ret)) {
|
94257b | 1998-10-16 | Henrik Grubbström (Grubba) | | cache[index] = ZERO_TYPE;
} else {
cache[index] = ret;
}
return ret;
}
|
eb801d | 2003-06-05 | Martin Stjernholm | |
|
5feacf | 2016-07-08 | Martin Nilsson | | protected mixed `->(string index)
{
|
bb0491 | 2016-07-08 | Martin Nilsson | | if( (< "joined_modules", "fallback_module", "name", "is_resolv_joinnode",
|
50afc2 | 2016-07-11 | Martin Nilsson | | "add_path", "rem_path", "delete_value", "_encode",
|
07eb49 | 2019-05-12 | Tobias S. Josefowitz | | "_decode", "identifier_deprecatedp" >)[index] )
|
5feacf | 2016-07-08 | Martin Nilsson | | return ::`->(index);
return `[](index);
}
|
07eb49 | 2019-05-12 | Tobias S. Josefowitz | | int(0..1) identifier_deprecatedp(string index)
{
if (has_index(cache, index) || deprecated_cache[index])
return deprecated_cache[index];
`[](index);
return deprecated_cache[index];
}
|
35f51c | 2008-06-28 | Martin Nilsson | | protected int _cache_full;
|
eb801d | 2003-06-05 | Martin Stjernholm | |
|
5feacf | 2016-07-08 | Martin Nilsson | | protected void fill_cache()
|
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) {
|
65340d | 2014-08-15 | Martin Nilsson | | if (!has_index(cache, index)) {
|
3e4b81 | 1998-10-16 | Henrik Grubbström (Grubba) | | `[](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 | |
|
c782bd | 2016-07-08 | Martin Nilsson | | protected int(0..) _sizeof()
{
return sizeof(_values());
}
|
a002d3 | 2002-03-01 | Martin Stjernholm | | void delete_value (mixed val)
{
if (string name = search (cache, val))
|
07eb49 | 2019-05-12 | Tobias S. Josefowitz | | {
|
a002d3 | 2002-03-01 | Martin Stjernholm | | m_delete (cache, name);
|
07eb49 | 2019-05-12 | Tobias S. Josefowitz | | m_delete (deprecated_cache, name);
}
|
a002d3 | 2002-03-01 | Martin Stjernholm | | 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--;
}
|
a5af87 | 2018-02-06 | Martin Nilsson | | else if (is_dirnode(o) || is_joinnode(o))
|
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 | | {
|
8b7c24 | 2018-02-06 | Henrik Grubbström (Grubba) | |
|
a5af87 | 2018-02-06 | Martin Nilsson | | return is_joinnode(other) &&
|
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)
{
|
8e06a3 | 2014-09-30 | Martin Nilsson | | this::joined_modules = joined_modules;
|
57b52d | 2003-05-31 | Martin Stjernholm | | }
|
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) | | {
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 */
|
e88f6a | 2020-05-24 | Marcus Comstedt | | joinnode node = joinnode(({}), current_handler);
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | #ifdef PIKE_MODULE_RELOC
|
e88f6a | 2020-05-24 | Marcus Comstedt | |
string tmp;
array(string) paths;
if(path == "/${PIKE_MODULE_PATH}" ||
has_prefix(path, "/${PIKE_MODULE_PATH}/")) {
tmp = path[21..];
paths = pike_module_path;
} else {
tmp = 0;
paths = ({ path });
}
foreach(paths, string prefix) {
path = (tmp && sizeof(tmp)? combine_path(prefix, tmp) : prefix);
auto path_stat = file_stat(path);
if (!path_stat && tmp)
continue;
#else
auto path_stat = file_stat(path);
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | #endif /* PIKE_MODULE_RELOC */
|
e88f6a | 2020-05-24 | Marcus Comstedt | | if (!path_stat)
compile_cb_error("Failed to stat file: %O\n", path);
if (path_stat->isreg) {
node->joined_modules += ({ low_cast_to_object(path, current_file, current_handler) });
}
else if (path_stat->isdir) {
|
325b8f | 2018-11-04 | Mateusz Krawczuk | | node->add_path(path);
|
e88f6a | 2020-05-24 | Marcus Comstedt | | }
|
8ecf64 | 2020-06-09 | Henrik Grubbström (Grubba) | | #ifdef PIKE_MODULE_RELOC
|
325b8f | 2018-11-04 | Mateusz Krawczuk | | }
|
8ecf64 | 2020-06-09 | Henrik Grubbström (Grubba) | | #endif /* PIKE_MODULE_RELOC */
|
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);
|
65340d | 2014-08-15 | Martin Nilsson | | if(!undefinedp(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",
|
fba2e2 | 2014-12-05 | Bill Welliver | | object s = file_stat(tmp);
if(s && s->isreg)
{
object fs;
catch(fs = resolv("Filesystem.Zip")(tmp));
if(fs) add_filesystem_handler(tmp, fs);
tmp = combine_path(tmp, "include");
}
|
3d21a6 | 2003-03-27 | Martin Stjernholm | | 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
|
352471 | 2015-05-26 | Martin Nilsson | |
|
2d8c83 | 2003-08-11 | Henrik Grubbström (Grubba) | |
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);
|
fba2e2 | 2014-12-05 | Bill Welliver | |
|
352471 | 2015-05-26 | Martin Nilsson | | if(fs_map[tmp])
|
fba2e2 | 2014-12-05 | Bill Welliver | | tmp = combine_path(tmp, "modules");
|
2d8c83 | 2003-08-11 | Henrik Grubbström (Grubba) | | 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) | |
|
fba2e2 | 2014-12-05 | Bill Welliver | |
|
352471 | 2015-05-26 | Martin Nilsson | |
|
fba2e2 | 2014-12-05 | Bill Welliver | |
|
352471 | 2015-05-26 | Martin Nilsson | |
|
fba2e2 | 2014-12-05 | Bill Welliver | |
void add_module_path(string path, string|void subpath)
|
a20af6 | 2000-09-26 | Fredrik Hübinette (Hubbe) | | {
|
fba2e2 | 2014-12-05 | Bill Welliver | | path=normalize_path(combine_path_with_cwd(path));
object s = file_stat(path);
if(s && s->isreg)
{
object fs;
catch(fs = resolv("Filesystem.Zip")(path));
if(fs) add_filesystem_handler(path, fs);
if(!subpath) subpath = "modules";
path = combine_path(path, subpath);
}
root_module->add_path(path);
pike_module_path = ({ path }) + (pike_module_path - ({ path }));
|
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;
}
|
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;
}
|
a7e9b9 | 2017-12-06 | Henrik Grubbström (Grubba) | |
|
6df5a5 | 2001-11-07 | Martin Nilsson | |
|
a7e9b9 | 2017-12-06 | Henrik Grubbström (Grubba) | |
|
a20af6 | 2000-09-26 | Fredrik Hübinette (Hubbe) | | mapping get_default_module()
|
e84228 | 2016-07-11 | Martin Nilsson | | {
resolv_debug ("%O->get_default_module()\n", this);
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) | | };
|
e84228 | 2016-07-11 | Martin Nilsson | | compat_major=saved_compat_major;
compat_minor=saved_compat_minor;
if(err) throw(err);
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) | |
|
50afc2 | 2016-07-11 | Martin Nilsson | | node = joinnode(({
([ "_static_modules" : static_modules ]),
instantiate_static_modules(static_modules),
|
a5af87 | 2018-02-06 | Martin Nilsson | | @filter(root_module->joined_modules,
is_dirnode)
}),
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | current_handler,
|
9dcabf | 2009-04-25 | Martin Stjernholm | | root_module->fallback_module,
"predef::");
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | |
return node;
}
|
a7e9b9 | 2017-12-06 | Henrik Grubbström (Grubba) | |
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | mixed resolv_base(string identifier, string|void current_file,
|
26e359 | 2018-07-06 | Henrik Grubbström (Grubba) | | object|void current_handler,
object|void current_compat_handler)
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | {
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);
|
65340d | 2014-08-15 | Martin Nilsson | | if(undefinedp(res)) error("Could not resolve %s.\n", identifier);
|
100c3e | 2003-12-01 | Martin Nilsson | | return res;
}
|
a7e9b9 | 2017-12-06 | Henrik Grubbström (Grubba) | |
|
6df5a5 | 2001-11-07 | Martin Nilsson | |
|
a7e9b9 | 2017-12-06 | Henrik Grubbström (Grubba) | |
|
34241f | 2001-05-24 | Henrik Grubbström (Grubba) | | mixed resolv(string identifier, string|void current_file,
|
26e359 | 2018-07-06 | Henrik Grubbström (Grubba) | | object|void current_handler,
object|void current_compat_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)) {
|
26e359 | 2018-07-06 | Henrik Grubbström (Grubba) | | error("resolv(%O, %O, %O, %O): current_file is not a string!\n",
identifier, current_file, current_handler, current_compat_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();
|
9c628b | 2014-11-04 | Martin Nilsson | | if (mod && !undefinedp(mod = mod[tmp[0]])) {
|
9eee96 | 2008-05-20 | Henrik Grubbström (Grubba) | | 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/".";
|
26e359 | 2018-07-06 | Henrik Grubbström (Grubba) | | ret = resolv_base(tmp[0], current_file,
current_handler, current_compat_handler);
|
15cb2e | 2008-02-28 | Henrik Grubbström (Grubba) | | tmp = tmp[1..];
}
foreach(tmp,string index) {
|
774933 | 2004-12-27 | Henrik Grubbström (Grubba) | | resolv_debug("indexing %O with %O...\n",
ret, index);
|
7d2578 | 2016-10-20 | Henrik Grubbström (Grubba) | |
|
65340d | 2014-08-15 | Martin Nilsson | | if (undefinedp(ret)) break;
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | ret = ret[index];
}
DEC_RESOLV_MSG_DEPTH();
|
3c6f58 | 2002-05-24 | Martin Stjernholm | | #ifdef RESOLV_DEBUG
|
65340d | 2014-08-15 | Martin Nilsson | | if (undefinedp (ret))
|
97f814 | 2003-09-18 | Henrik Grubbström (Grubba) | | 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 | |
|
5d533f | 2018-03-06 | Henrik Grubbström (Grubba) | |
|
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 | |
|
5d533f | 2018-03-06 | Henrik Grubbström (Grubba) | |
|
6df5a5 | 2001-11-07 | Martin Nilsson | |
|
5d533f | 2018-03-06 | Henrik Grubbström (Grubba) | |
|
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;
|
59f982 | 2018-02-08 | Henrik Grubbström (Grubba) | |
|
97a152 | 2017-03-17 | Henrik Grubbström (Grubba) | |
|
59f982 | 2018-02-08 | Henrik Grubbström (Grubba) | |
|
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 | |
|
e08ca4 | 2018-12-08 | Marcus Comstedt | |
|
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 | |
|
d712e3 | 2013-11-30 | Henrik Grubbström (Grubba) | | void _main(array(string(0..255)) 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) | | 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);
|
0d34dc | 2014-08-10 | Martin Nilsson | | if (cur_compat_ver < lowestcompat)
{
werror("This Pike only supports compatibility down to %s.\n",
(string)lowestcompat);
cur_compat_ver = lowestcompat;
compat_major = lowestcompat->major;
compat_minor = lowestcompat->minor;
}
|
b3926d | 2008-06-05 | Martin Stjernholm | | if (compat_major != -1) {
object compat_master = get_compat_master (compat_major, compat_minor);
}
|
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":
|
e08ca4 | 2018-12-08 | Marcus Comstedt | | exit(0, version() + " Copyright © 1994-2018 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"
|
e08ca4 | 2018-12-08 | Marcus Comstedt | | "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" );
|
206441 | 2016-01-17 | Martin Nilsson | | argv = tmp->get_args(argv,1);
|
3215c9 | 2003-05-15 | Henrik Grubbström (Grubba) | |
|
f9a096 | 2003-03-20 | Martin Stjernholm | | program prog;
|
729acf | 2008-05-30 | Martin Stjernholm | | mixed compile_err = catch {;
|
873214 | 2014-10-05 | Martin Nilsson | | if (intp (opts[1]))
|
729acf | 2008-05-30 | Martin Stjernholm | | 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;
|
873214 | 2014-10-05 | Martin Nilsson | | prog = compile_string(
|
b3926d | 2008-06-05 | Martin Stjernholm | | "#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 {
|
873214 | 2014-10-05 | Martin Nilsson | | 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);
|
639ada | 2016-08-07 | Henrik Grubbström (Grubba) | |
case "compiler_trace":
function(int:void) compiler_trace =
main_resolv("Debug.compiler_trace");
if (compiler_trace) {
compiler_trace(1);
}
break;
case "assembler_debug":
function(int:void) assembler_debug =
main_resolv("Debug.assembler_debug");
if (assembler_debug) {
assembler_debug((int)opts[1]);
}
break;
case "optimizer_debug":
function(int:void) optimizer_debug =
main_resolv("Debug.optimizer_debug");
if (optimizer_debug) {
optimizer_debug((int)opts[1]);
}
break;
|
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) | | }
|
4890f2 | 2020-07-20 | Henrik Grubbström (Grubba) | | main_resolv( "Stdio.FILE" );
|
3bc9eb | 2004-02-27 | Martin Nilsson | | main_resolv( "Gmp.bignum" );
|
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) )
|
8490d2 | 2016-11-05 | Martin Nilsson | | 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;
|
873214 | 2014-10-05 | Martin Nilsson | | 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]);
|
873214 | 2014-10-05 | Martin Nilsson | | if (cur_compat_ver <= Version (8, 0))
|
d712e3 | 2013-11-30 | Henrik Grubbström (Grubba) | | ret = script->main(sizeof(argv),argv);
|
b3926d | 2008-06-05 | Martin Stjernholm | | else
|
fc76bf | 2013-11-30 | Martin Nilsson | | {
|
d712e3 | 2013-11-30 | Henrik Grubbström (Grubba) | | mixed first_arg = __get_first_arg_type(_typeof(script->main));
if( first_arg && (typeof(argv) <= first_arg) ) {
|
fc76bf | 2013-11-30 | Martin Nilsson | | ret=script->main(argv);
|
d712e3 | 2013-11-30 | Henrik Grubbström (Grubba) | | } else
|
fc76bf | 2013-11-30 | Martin Nilsson | | 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);
|
f06727 | 2021-04-12 | Henrik Grubbström (Grubba) | | exit(10, "Error: Exiting due to uncaught error.\n");
|
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)
{
|
352471 | 2015-05-26 | Martin Nilsson | | mixed err=catch
|
87f908 | 2001-03-12 | Fredrik Hübinette (Hubbe) | | {
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),
|
4f8b1f | 2013-06-28 | Henrik Grubbström (Grubba) | | line?(string)line:"-",narrowify_string(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),
|
4f8b1f | 2013-06-28 | Henrik Grubbström (Grubba) | | line?(string)line:"-",narrowify_string(err) );
|
2f520e | 2002-04-28 | Martin Nilsson | | }
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":
|
c071bc | 2017-11-05 | Henrik Grubbström (Grubba) | |
|
3c6f58 | 2002-05-24 | Martin Stjernholm | | #if 0
|
c071bc | 2017-11-05 | Henrik Grubbström (Grubba) | | werror ("GC warning: Garbing cycle where _destruct() will be called "
|
8f2306 | 2000-06-09 | Martin Stjernholm | | "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)
{
|
cc3cea | 2019-12-15 | Marcus Comstedt | | if (charset == "iso-8859-1")
return data;
|
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à |