diff options
-rw-r--r-- | doc/mailfromd.texi | 2 | ||||
-rw-r--r-- | src/drivers.c | 152 | ||||
-rw-r--r-- | src/gram.y | 4 | ||||
-rw-r--r-- | src/main.c | 2 | ||||
-rw-r--r-- | src/prog.c | 6 | ||||
-rw-r--r-- | src/prog.h | 8 |
6 files changed, 89 insertions, 85 deletions
diff --git a/doc/mailfromd.texi b/doc/mailfromd.texi index 4d5dc101..07b5ec8b 100644 --- a/doc/mailfromd.texi +++ b/doc/mailfromd.texi | |||
@@ -8998,7 +8998,7 @@ configuration directory set when building @command{mailfromd} | |||
8998 | (@pxref{Building}).} If it does, the program attempts to retrieve | 8998 | (@pxref{Building}).} If it does, the program attempts to retrieve |
8999 | its configuration settings from that file. | 8999 | its configuration settings from that file. |
9000 | 9000 | ||
9001 | The @file{mailfromd.conf} must have the @dfn{GNU mailutils | 9001 | The @file{mailfromd.conf} file must be written in the @dfn{GNU mailutils |
9002 | configuration format}, as described in @ref{conf-syntax, Configuration | 9002 | configuration format}, as described in @ref{conf-syntax, Configuration |
9003 | File Syntax,, mailutils, GNU Mailutils Manual}. This format can be | 9003 | File Syntax,, mailutils, GNU Mailutils Manual}. This format can be |
9004 | summarized as follows: | 9004 | summarized as follows: |
diff --git a/src/drivers.c b/src/drivers.c index 0ef1de57..721764e3 100644 --- a/src/drivers.c +++ b/src/drivers.c | |||
@@ -19,8 +19,8 @@ | |||
19 | struct literal *lit = literal_lookup(node->locus.file); \ | 19 | struct literal *lit = literal_lookup(node->locus.file); \ |
20 | *old_locus = &node->locus; \ | 20 | *old_locus = &node->locus; \ |
21 | code_op(opcode_locus); \ | 21 | code_op(opcode_locus); \ |
22 | code_immediate((STKVAL)lit->off); \ | 22 | code_immediate(lit->off, ulong); \ |
23 | code_immediate((STKVAL)node->locus.line); \ | 23 | code_immediate(node->locus.line, str); \ |
24 | } while (0) | 24 | } while (0) |
25 | 25 | ||
26 | static void code_trycatch_exit(unsigned id); | 26 | static void code_trycatch_exit(unsigned id); |
@@ -34,19 +34,19 @@ code_memref(NODE *node) | |||
34 | switch (node->v.var_ref.variable->storage_class) { | 34 | switch (node->v.var_ref.variable->storage_class) { |
35 | case storage_extern: | 35 | case storage_extern: |
36 | code_op(opcode_push); | 36 | code_op(opcode_push); |
37 | code_immediate((STKVAL)node->v.var_ref.variable->off); | 37 | code_immediate(node->v.var_ref.variable->off, long); |
38 | break; | 38 | break; |
39 | 39 | ||
40 | case storage_auto: | 40 | case storage_auto: |
41 | code_op(opcode_memstk); | 41 | code_op(opcode_memstk); |
42 | code_immediate((STKVAL)node->v.var_ref.nframes); | 42 | code_immediate(node->v.var_ref.nframes, size); |
43 | code_immediate((STKVAL)(-node->v.var_ref.variable->off)); | 43 | code_immediate((-node->v.var_ref.variable->off), long); |
44 | break; | 44 | break; |
45 | 45 | ||
46 | case storage_param: | 46 | case storage_param: |
47 | code_op(opcode_memstk); | 47 | code_op(opcode_memstk); |
48 | code_immediate((STKVAL)node->v.var_ref.nframes); | 48 | code_immediate(node->v.var_ref.nframes, size); |
49 | code_immediate((STKVAL)(node->v.var_ref.variable->off + 2)); | 49 | code_immediate((node->v.var_ref.variable->off + 2), long); |
50 | break; | 50 | break; |
51 | } | 51 | } |
52 | } | 52 | } |
@@ -78,7 +78,7 @@ code_type_string(NODE *node, struct locus **old_locus) | |||
78 | { | 78 | { |
79 | MARK_LOCUS(); | 79 | MARK_LOCUS(); |
80 | code_op(opcode_push); | 80 | code_op(opcode_push); |
81 | code_immediate((STKVAL)node->v.literal->off); | 81 | code_immediate(node->v.literal->off, size); |
82 | } | 82 | } |
83 | 83 | ||
84 | 84 | ||
@@ -96,7 +96,7 @@ code_type_symbol(NODE *node, struct locus **old_locus) | |||
96 | { | 96 | { |
97 | MARK_LOCUS(); | 97 | MARK_LOCUS(); |
98 | code_op(opcode_symbol); | 98 | code_op(opcode_symbol); |
99 | code_immediate((STKVAL)node->v.literal->off); | 99 | code_immediate(node->v.literal->off, size); |
100 | } | 100 | } |
101 | 101 | ||
102 | void | 102 | void |
@@ -119,7 +119,7 @@ code_type_number(NODE *node, struct locus **old_locus) | |||
119 | { | 119 | { |
120 | MARK_LOCUS(); | 120 | MARK_LOCUS(); |
121 | code_op(opcode_push); | 121 | code_op(opcode_push); |
122 | code_immediate((STKVAL)node->v.number); | 122 | code_immediate(node->v.number, long); |
123 | } | 123 | } |
124 | 124 | ||
125 | 125 | ||
@@ -205,17 +205,17 @@ code_type_if(NODE *node, struct locus **old_locus) | |||
205 | code_node(node->v.cond.cond); | 205 | code_node(node->v.cond.cond); |
206 | MARK_LOCUS(); | 206 | MARK_LOCUS(); |
207 | code_op(opcode_bz); | 207 | code_op(opcode_bz); |
208 | pos1 = code_immediate((STKVAL)NULL); | 208 | pos1 = code_immediate(NULL, ptr); |
209 | traverse_tree(node->v.cond.if_true); | 209 | traverse_tree(node->v.cond.if_true); |
210 | if (node->v.cond.if_false) { | 210 | if (node->v.cond.if_false) { |
211 | code_op(opcode_jmp); | 211 | code_op(opcode_jmp); |
212 | pos2 = code_immediate((STKVAL)NULL); | 212 | pos2 = code_immediate(NULL, ptr); |
213 | traverse_tree(node->v.cond.if_false); | 213 | traverse_tree(node->v.cond.if_false); |
214 | endpos = code_get_counter (); | 214 | endpos = code_get_counter (); |
215 | code_put(pos1, (STKVAL)(pos2 - pos1)); | 215 | code_put(pos1, (pos2 - pos1), long); |
216 | code_put(pos2, (STKVAL)(endpos - pos2 - 1)); | 216 | code_put(pos2, (endpos - pos2 - 1), long); |
217 | } else | 217 | } else |
218 | code_put(pos1, (STKVAL)(code_get_counter () - pos1 - 1)); | 218 | code_put(pos1, (code_get_counter () - pos1 - 1), long); |
219 | } | 219 | } |
220 | 220 | ||
221 | 221 | ||
@@ -785,17 +785,17 @@ code_type_bin(NODE *node, struct locus **old_locus) | |||
785 | Y: push 1 | 785 | Y: push 1 |
786 | Z: */ | 786 | Z: */ |
787 | code_op(opcode_bz); | 787 | code_op(opcode_bz); |
788 | pos1 = code_immediate((STKVAL)NULL); | 788 | pos1 = code_immediate(NULL, ptr); |
789 | code_node(node->v.bin.arg[1]); | 789 | code_node(node->v.bin.arg[1]); |
790 | code_op(opcode_bnz); | 790 | code_op(opcode_bnz); |
791 | pos2 = code_immediate((STKVAL)4); | 791 | pos2 = code_immediate(4, long); |
792 | code_op(opcode_push); | 792 | code_op(opcode_push); |
793 | code_immediate((STKVAL)0); | 793 | code_immediate(0, long); |
794 | code_op(opcode_jmp); | 794 | code_op(opcode_jmp); |
795 | code_immediate((STKVAL)2); | 795 | code_immediate(2, long); |
796 | code_op(opcode_push); | 796 | code_op(opcode_push); |
797 | code_immediate((STKVAL)1); | 797 | code_immediate(1, long); |
798 | code_put(pos1, (STKVAL)(pos2 - pos1)); | 798 | code_put(pos1, (pos2 - pos1), long); |
799 | break; | 799 | break; |
800 | 800 | ||
801 | case bin_or: | 801 | case bin_or: |
@@ -810,17 +810,17 @@ code_type_bin(NODE *node, struct locus **old_locus) | |||
810 | Z: */ | 810 | Z: */ |
811 | 811 | ||
812 | code_op(opcode_bnz); | 812 | code_op(opcode_bnz); |
813 | pos1 = code_immediate((STKVAL)NULL); | 813 | pos1 = code_immediate(NULL, ptr); |
814 | code_node(node->v.bin.arg[1]); | 814 | code_node(node->v.bin.arg[1]); |
815 | code_op(opcode_bz); | 815 | code_op(opcode_bz); |
816 | pos2 = code_immediate((STKVAL)4); | 816 | pos2 = code_immediate(4, long); |
817 | code_op(opcode_push); | 817 | code_op(opcode_push); |
818 | code_immediate((STKVAL)1); | 818 | code_immediate(1, long); |
819 | code_op(opcode_jmp); | 819 | code_op(opcode_jmp); |
820 | code_immediate((STKVAL)2); | 820 | code_immediate(2, long); |
821 | code_op(opcode_push); | 821 | code_op(opcode_push); |
822 | code_immediate((STKVAL)0); | 822 | code_immediate(0, long); |
823 | code_put(pos1, (STKVAL)(pos2 - pos1)); | 823 | code_put(pos1, (pos2 - pos1), long); |
824 | break; | 824 | break; |
825 | 825 | ||
826 | case bin_eq: | 826 | case bin_eq: |
@@ -1062,7 +1062,7 @@ code_result_arg(NODE *node) | |||
1062 | code_node(node); | 1062 | code_node(node); |
1063 | else { | 1063 | else { |
1064 | code_op(opcode_push); | 1064 | code_op(opcode_push); |
1065 | code_immediate((STKVAL)NULL); | 1065 | code_immediate(NULL, ptr); |
1066 | } | 1066 | } |
1067 | } | 1067 | } |
1068 | 1068 | ||
@@ -1115,7 +1115,7 @@ code_type_result(NODE *node, struct locus **old_locus) | |||
1115 | 1115 | ||
1116 | MARK_LOCUS(); | 1116 | MARK_LOCUS(); |
1117 | code_op(opcode_result); | 1117 | code_op(opcode_result); |
1118 | code_immediate((STKVAL)(mft_int)node->v.ret.stat); | 1118 | code_immediate(node->v.ret.stat, int); |
1119 | code_op(opcode_nil); | 1119 | code_op(opcode_nil); |
1120 | } | 1120 | } |
1121 | 1121 | ||
@@ -1152,11 +1152,11 @@ code_type_header(NODE *node, struct locus **old_locus) | |||
1152 | code_node(node->v.hdr.value); | 1152 | code_node(node->v.hdr.value); |
1153 | else { | 1153 | else { |
1154 | code_op(opcode_push); | 1154 | code_op(opcode_push); |
1155 | code_immediate((STKVAL)0); | 1155 | code_immediate(0, size); |
1156 | } | 1156 | } |
1157 | code_op(opcode_header); | 1157 | code_op(opcode_header); |
1158 | code_immediate((STKVAL)(mft_int)node->v.hdr.opcode); | 1158 | code_immediate(node->v.hdr.opcode, int); |
1159 | code_immediate((STKVAL)node->v.hdr.name->off); | 1159 | code_immediate(node->v.hdr.name->off, size); |
1160 | } | 1160 | } |
1161 | 1161 | ||
1162 | 1162 | ||
@@ -1224,14 +1224,14 @@ code_type_builtin(NODE *node, struct locus **old_locus) | |||
1224 | if (bp->optcount || (bp->flags & MFD_BUILTIN_VARIADIC)) { | 1224 | if (bp->optcount || (bp->flags & MFD_BUILTIN_VARIADIC)) { |
1225 | /* Pass the number of actual arguments in a hidden arg */ | 1225 | /* Pass the number of actual arguments in a hidden arg */ |
1226 | code_op(opcode_push); | 1226 | code_op(opcode_push); |
1227 | code_immediate((STKVAL)i); | 1227 | code_immediate(i, size); |
1228 | } | 1228 | } |
1229 | 1229 | ||
1230 |