Rev 108 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 108 | Rev 125 | ||
---|---|---|---|
1 | #! /bin/sh /usr/share/dpatch/dpatch-run |
1 | #! /bin/sh /usr/share/dpatch/dpatch-run |
2 | ## dumping_problems.dpatch by Martin Stjernholm <mast@roxen.com> |
2 | ## dumping_problems.dpatch by Martin Stjernholm <mast@roxen.com> |
3 | ## |
3 | ## |
4 | ## DP: Encode references to all ex-masters as if they are to the current |
4 | ## DP: Encode references to all ex-masters as if they are to the current |
5 | ## DP: master. |
5 | ## DP: master. |
6 | ## DP: |
6 | ## DP: |
7 | ## DP: That since we cannot hope to eradicate all references to the old |
7 | ## DP: That since we cannot hope to eradicate all references to the old |
8 | ## DP: master when replacing it, and in any case the decoder cannot hope to |
8 | ## DP: master when replacing it, and in any case the decoder cannot hope to |
9 | ## DP: find the same ex-master again. |
9 | ## DP: find the same ex-master again. |
10 | ## DP: |
10 | ## DP: |
11 | ## DP: If this creates a problem for someone using replace_master then it's |
11 | ## DP: If this creates a problem for someone using replace_master then it's |
12 | ## DP: always possible to clear the is_pike_master variable in the old |
12 | ## DP: always possible to clear the is_pike_master variable in the old |
13 | ## DP: master. |
13 | ## DP: master. |
14 | 14 | ||
15 | @DPATCH@ |
15 | @DPATCH@ |
16 | 16 | ||
17 | --- trunk/lib/master.pike.in 28 Jul 2010 10:29:59 -0000 1.474 |
17 | --- trunk/lib/master.pike.in 28 Jul 2010 10:29:59 -0000 1.474 |
18 | +++ cvs/lib/master.pike.in 28 Jul 2010 22:58:01 -0000 1.476 |
18 | +++ cvs/lib/master.pike.in 28 Jul 2010 22:58:01 -0000 1.476 |
19 | @@ -85,6 +85,13 @@ |
19 | @@ -85,6 +85,13 @@ |
20 | //! |
20 | //! |
21 | int show_if_constant_errors = 0; |
21 | int show_if_constant_errors = 0; |
22 | 22 | ||
23 | +int is_pike_master = 0; |
23 | +int is_pike_master = 0; |
24 | +// This integer variable should exist in any object that aspires to be |
24 | +// This integer variable should exist in any object that aspires to be |
25 | +// the master. It gets set to 1 when the master is installed, and is |
25 | +// the master. It gets set to 1 when the master is installed, and is |
26 | +// therefore set in any object that is or has been the master. That |
26 | +// therefore set in any object that is or has been the master. That |
27 | +// makes the Encoder class encode references to the master and all |
27 | +// makes the Encoder class encode references to the master and all |
28 | +// ex-masters as references to the current master object. |
28 | +// ex-masters as references to the current master object. |
29 | + |
29 | + |
30 | // --- Functions begin here. |
30 | // --- Functions begin here. |
31 | 31 | ||
32 | // Have to access some stuff without going through the resolver. |
32 | // Have to access some stuff without going through the resolver. |
33 | @@ -5092,6 +5099,11 @@ |
33 | @@ -5092,6 +5099,11 @@ |
34 | } |
34 | } |
35 | } |
35 | } |
36 | 36 | ||
37 | + else if (what->is_pike_master) { |
37 | + else if (what->is_pike_master) { |
38 | + ENC_MSG (" is a master object\n"); |
38 | + ENC_MSG (" is a master object\n"); |
39 | + ENC_RETURN ("o/master"); |
39 | + ENC_RETURN ("o/master"); |
40 | + } |
40 | + } |
41 | + |
41 | + |
42 | program prog; |
42 | program prog; |
43 | if ((prog = objects_reverse_lookup (what))) |
43 | if ((prog = objects_reverse_lookup (what))) |
44 | ENC_MSG (" found program in objects: %O\n", prog); |
44 | ENC_MSG (" found program in objects: %O\n", prog); |
45 | --- trunk/src/builtin_functions.c 27 Jul 2010 16:46:01 -0000 1.704 |
45 | --- trunk/src/builtin_functions.c 27 Jul 2010 16:46:01 -0000 1.704 |
46 | +++ cvs/src/builtin_functions.c 28 Jul 2010 22:51:00 -0000 1.705 |
46 | +++ cvs/src/builtin_functions.c 28 Jul 2010 22:51:00 -0000 1.705 |
47 | @@ -7364,22 +7364,28 @@ |
47 | @@ -7364,22 +7364,28 @@ |
48 | */ |
48 | */ |
49 | PMOD_EXPORT void f_replace_master(INT32 args) |
49 | PMOD_EXPORT void f_replace_master(INT32 args) |
50 | { |
50 | { |
51 | + struct object *new_master; |
51 | + struct object *new_master; |
52 | ASSERT_SECURITY_ROOT("replace_master"); |
52 | ASSERT_SECURITY_ROOT("replace_master"); |
53 | 53 | ||
54 | if(!args) |
54 | if(!args) |
55 | SIMPLE_TOO_FEW_ARGS_ERROR("replace_master", 1); |
55 | SIMPLE_TOO_FEW_ARGS_ERROR("replace_master", 1); |
56 | if(Pike_sp[-args].type != T_OBJECT) |
56 | if(Pike_sp[-args].type != T_OBJECT) |
57 | SIMPLE_BAD_ARG_ERROR("replace_master", 1, "object"); |
57 | SIMPLE_BAD_ARG_ERROR("replace_master", 1, "object"); |
58 | - if(!Pike_sp[-args].u.object->prog) |
58 | - if(!Pike_sp[-args].u.object->prog) |
59 | + new_master = Pike_sp[-args].u.object; |
59 | + new_master = Pike_sp[-args].u.object; |
60 | + if(!new_master->prog) |
60 | + if(!new_master->prog) |
61 | bad_arg_error("replace_master", Pike_sp-args, args, 1, "object", Pike_sp-args, |
61 | bad_arg_error("replace_master", Pike_sp-args, args, 1, "object", Pike_sp-args, |
62 | "Called with destructed object.\n"); |
62 | "Called with destructed object.\n"); |
63 | 63 | ||
64 | if (Pike_sp[-args].subtype) |
64 | if (Pike_sp[-args].subtype) |
65 | bad_arg_error("replace_master", Pike_sp-args, args, 1, "object", Pike_sp-args, |
65 | bad_arg_error("replace_master", Pike_sp-args, args, 1, "object", Pike_sp-args, |
66 | "Subtyped master objects are not supported yet.\n"); |
66 | "Subtyped master objects are not supported yet.\n"); |
67 | - |
67 | - |
68 | + |
68 | + |
69 | + push_constant_text ("is_pike_master"); |
69 | + push_constant_text ("is_pike_master"); |
70 | + args++; |
70 | + args++; |
71 | + object_set_index (new_master, 0, Pike_sp - 1, &svalue_int_one); |
71 | + object_set_index (new_master, 0, Pike_sp - 1, &svalue_int_one); |
72 | + |
72 | + |
73 | free_object(master_object); |
73 | free_object(master_object); |
74 | - master_object=Pike_sp[-args].u.object; |
74 | - master_object=Pike_sp[-args].u.object; |
75 | + master_object=new_master; |
75 | + master_object=new_master; |
76 | add_ref(master_object); |
76 | add_ref(master_object); |
77 | 77 | ||
78 | free_program(master_program); |
78 | free_program(master_program); |
79 | --- trunk/src/object.c 11 Jul 2010 10:08:02 -0000 1.310 |
79 | --- trunk/src/object.c 11 Jul 2010 10:08:02 -0000 1.310 |
80 | +++ cvs/src/object.c 28 Jul 2010 22:50:59 -0000 1.311 |
80 | +++ cvs/src/object.c 28 Jul 2010 22:50:59 -0000 1.311 |
81 | @@ -658,6 +658,7 @@ |
81 | @@ -658,6 +658,7 @@ |
82 | } |
82 | } |
83 | 83 | ||
84 | { |
84 | { |
85 | + int f; |
85 | + int f; |
86 | ONERROR uwp; |
86 | ONERROR uwp; |
87 | 87 | ||
88 | /* fprintf(stderr, "Cloning master...\n"); */ |
88 | /* fprintf(stderr, "Cloning master...\n"); */ |
89 | @@ -673,7 +674,11 @@ |
89 | @@ -673,7 +674,11 @@ |
90 | 90 | ||
91 | call_c_initializers(master_object); |
91 | call_c_initializers(master_object); |
92 | call_pike_initializers(master_object,0); |
92 | call_pike_initializers(master_object,0); |
93 | - |
93 | - |
94 | + |
94 | + |
95 | + f = find_identifier ("is_pike_master", master_program); |
95 | + f = find_identifier ("is_pike_master", master_program); |
96 | + if (f >= 0) |
96 | + if (f >= 0) |
97 | + object_low_set_index (master_object, f, &svalue_int_one); |
97 | + object_low_set_index (master_object, f, &svalue_int_one); |
98 | + |
98 | + |
99 | /* fprintf(stderr, "Master loaded.\n"); */ |
99 | /* fprintf(stderr, "Master loaded.\n"); */ |
100 | 100 | ||
101 | UNSET_ONERROR (uwp); |
101 | UNSET_ONERROR (uwp); |
102 | --- trunk/src/svalue.c 11 Jul 2010 12:39:10 -0000 1.261 |
102 | --- trunk/src/svalue.c 11 Jul 2010 12:39:10 -0000 1.261 |
103 | +++ cvs/src/svalue.c 28 Jul 2010 22:46:39 -0000 1.262 |
103 | +++ cvs/src/svalue.c 28 Jul 2010 22:46:39 -0000 1.262 |
104 | @@ -30,14 +30,10 @@ |
104 | @@ -30,14 +30,10 @@ |
105 | 105 | ||
106 | #define sp Pike_sp |
106 | #define sp Pike_sp |
107 | 107 | ||
108 | -PMOD_EXPORT const struct svalue svalue_undefined = |
108 | -PMOD_EXPORT const struct svalue svalue_undefined = |
109 | +PMOD_EXPORT struct svalue svalue_undefined = |
109 | +PMOD_EXPORT struct svalue svalue_undefined = |
110 | SVALUE_INIT (T_INT, NUMBER_UNDEFINED, 0); |
110 | SVALUE_INIT (T_INT, NUMBER_UNDEFINED, 0); |
111 | -PMOD_EXPORT const struct svalue svalue_int_zero = SVALUE_INIT_INT (0); |
111 | -PMOD_EXPORT const struct svalue svalue_int_zero = SVALUE_INIT_INT (0); |
112 | -#ifdef HAVE_UNION_INIT |
112 | -#ifdef HAVE_UNION_INIT |
113 | -PMOD_EXPORT const struct svalue svalue_int_one = SVALUE_INIT_INT (1); |
113 | -PMOD_EXPORT const struct svalue svalue_int_one = SVALUE_INIT_INT (1); |
114 | -#else |
114 | -#else |
115 | +PMOD_EXPORT struct svalue svalue_int_zero = SVALUE_INIT_INT (0); |
115 | +PMOD_EXPORT struct svalue svalue_int_zero = SVALUE_INIT_INT (0); |
116 | PMOD_EXPORT struct svalue svalue_int_one = SVALUE_INIT_INT (1); |
116 | PMOD_EXPORT struct svalue svalue_int_one = SVALUE_INIT_INT (1); |
117 | -#endif |
117 | -#endif |
118 | 118 | ||
119 | #ifdef PIKE_DEBUG |
119 | #ifdef PIKE_DEBUG |
120 | PMOD_EXPORT const char msg_type_error[] = |
120 | PMOD_EXPORT const char msg_type_error[] = |
121 | --- trunk/src/svalue.h 18 Feb 2010 08:52:55 -0000 1.172 |
121 | --- trunk/src/svalue.h 18 Feb 2010 08:52:55 -0000 1.172 |
122 | +++ cvs/src/svalue.h 28 Jul 2010 22:46:40 -0000 1.173 |
122 | +++ cvs/src/svalue.h 28 Jul 2010 22:46:40 -0000 1.173 |
123 | @@ -323,13 +323,8 @@ |
123 | @@ -323,13 +323,8 @@ |
124 | 124 | ||
125 | #define FUNCTION_BUILTIN USHRT_MAX |
125 | #define FUNCTION_BUILTIN USHRT_MAX |
126 | 126 | ||
127 | -extern PMOD_EXPORT const struct svalue svalue_undefined, svalue_int_zero; |
127 | -extern PMOD_EXPORT const struct svalue svalue_undefined, svalue_int_zero; |
128 | -#ifdef HAVE_UNION_INIT |
128 | -#ifdef HAVE_UNION_INIT |
129 | -extern PMOD_EXPORT const struct svalue svalue_int_one; |
129 | -extern PMOD_EXPORT const struct svalue svalue_int_one; |
130 | -#else |
130 | -#else |
131 | -/* The value 1 is initialized first thing in init_pike. */ |
131 | -/* The value 1 is initialized first thing in init_pike. */ |
132 | -extern PMOD_EXPORT struct svalue svalue_int_one; |
132 | -extern PMOD_EXPORT struct svalue svalue_int_one; |
133 | -#endif |
133 | -#endif |
134 | +extern PMOD_EXPORT struct svalue svalue_undefined, |
134 | +extern PMOD_EXPORT struct svalue svalue_undefined, |
135 | + svalue_int_zero, svalue_int_one; |
135 | + svalue_int_zero, svalue_int_one; |
136 | 136 | ||
137 | #define is_gt(a,b) is_lt(b,a) |
137 | #define is_gt(a,b) is_lt(b,a) |
138 | #define is_ge(a,b) is_le(b,a) |
138 | #define is_ge(a,b) is_le(b,a) |