1 diff -cr gcc-orig/cgraph.c gcc/cgraph.c
2 *** gcc-orig/cgraph.c Sat Apr 9 02:13:35 2005
3 --- gcc/cgraph.c Thu Jun 22 19:49:34 2006
7 cgraph_node (tree decl)
9 struct cgraph_node key, *node, **slot;
12 gcc_assert (TREE_CODE (decl) == FUNCTION_DECL);
16 node = cgraph_create_node ();
19 ! if (DECL_CONTEXT (decl) && TREE_CODE (DECL_CONTEXT (decl)) == FUNCTION_DECL)
21 ! node->origin = cgraph_node (DECL_CONTEXT (decl));
22 ! node->next_nested = node->origin->nested;
23 ! node->origin->nested = node;
28 node = cgraph_create_node ();
31 ! if (!DECL_NO_STATIC_CHAIN (decl))
33 ! context = decl_function_context (decl);
36 ! node->origin = cgraph_node (context);
37 ! node->next_nested = node->origin->nested;
38 ! node->origin->nested = node;
43 diff -cr gcc-orig/config/i386/i386.c gcc/config/i386/i386.c
44 *** gcc-orig/config/i386/i386.c Fri Apr 28 16:42:39 2006
45 --- gcc/config/i386/i386.c Thu Jun 22 19:49:34 2006
49 frame->red_zone_size = 0;
50 frame->to_allocate -= frame->red_zone_size;
51 frame->stack_pointer_offset -= frame->red_zone_size;
54 + /* As above, skip return address */
55 + frame->stack_pointer_offset = UNITS_PER_WORD;
58 fprintf (stderr, "nregs: %i\n", frame->nregs);
59 fprintf (stderr, "size: %i\n", size);
65 ! output_asm_insn ("mov{l}\t{%0@GOT(%1), %1|%1, %0@GOT[%1]}", xops);
66 output_asm_insn ("jmp\t{*}%1", xops);
73 ! output_asm_insn ("mov{l}\t{%a0@GOT(%1), %1|%1, %a0@GOT[%1]}", xops);
74 output_asm_insn ("jmp\t{*}%1", xops);
77 diff -cr gcc-orig/config/rs6000/rs6000.c gcc/config/rs6000/rs6000.c
78 *** gcc-orig/config/rs6000/rs6000.c Thu Apr 27 21:06:13 2006
79 --- gcc/config/rs6000/rs6000.c Thu Jun 22 19:49:35 2006
83 C is 0. Fortran is 1. Pascal is 2. Ada is 3. C++ is 9.
84 Java is 13. Objective-C is 14. */
85 ! if (! strcmp (language_string, "GNU C"))
87 else if (! strcmp (language_string, "GNU F77")
88 || ! strcmp (language_string, "GNU F95"))
91 C is 0. Fortran is 1. Pascal is 2. Ada is 3. C++ is 9.
92 Java is 13. Objective-C is 14. */
93 ! if (! strcmp (language_string, "GNU C") ||
94 ! ! strcmp (language_string, "GNU D"))
96 else if (! strcmp (language_string, "GNU F77")
97 || ! strcmp (language_string, "GNU F95"))
98 diff -cr gcc-orig/convert.c gcc/convert.c
99 *** gcc-orig/convert.c Wed Sep 21 19:20:36 2005
100 --- gcc/convert.c Thu Jun 22 20:08:13 2006
108 /* APPLE LOCAL begin AltiVec */
110 #include "c-common.h"
111 /* APPLE LOCAL end AltiVec */
114 #include "langhooks.h"
123 /* APPLE LOCAL begin AltiVec */
124 /* Build a COMPOUND_LITERAL_EXPR. TYPE is the type given in the compound
125 literal. INIT is a CONSTRUCTOR that initializes the compound literal. */
131 /* APPLE LOCAL end AltiVec */
134 /* Convert EXPR to the vector type TYPE in the usual ways. */
139 error ("can't convert between vector values of different size");
140 return error_mark_node;
143 /* APPLE LOCAL begin AltiVec */
144 if (TREE_CODE (type) == VECTOR_TYPE
145 && TREE_CODE (TREE_TYPE (expr)) == VECTOR_TYPE
149 /* converting a constant vector to new vector type with Motorola Syntax. */
150 return convert (type, build_compound_literal_vector (TREE_TYPE (expr), expr));
151 /* APPLE LOCAL end AltiVec */
154 return build1 (NOP_EXPR, type, expr);
156 diff -cr gcc-orig/dwarf2out.c gcc/dwarf2out.c
157 *** gcc-orig/dwarf2out.c Wed Apr 26 15:06:48 2006
158 --- gcc/dwarf2out.c Thu Jun 22 20:01:30 2006
161 /* APPLE LOCAL begin mainline 2006-03-24 4485597 */
162 return (lang == DW_LANG_C || lang == DW_LANG_C89 || lang == DW_LANG_ObjC
163 || lang == DW_LANG_C99
164 ! || lang == DW_LANG_C_plus_plus || lang == DW_LANG_ObjC_plus_plus);
165 /* APPLE LOCAL end mainline 2006-03-24 4485597 */
169 /* APPLE LOCAL begin mainline 2006-03-24 4485597 */
170 return (lang == DW_LANG_C || lang == DW_LANG_C89 || lang == DW_LANG_ObjC
171 || lang == DW_LANG_C99
172 ! || lang == DW_LANG_C_plus_plus || lang == DW_LANG_ObjC_plus_plus
173 ! || lang == DW_LANG_D);
174 /* APPLE LOCAL end mainline 2006-03-24 4485597 */
180 else if (strcmp (language_string, "GNU Objective-C++") == 0)
181 language = DW_LANG_ObjC_plus_plus;
182 /* APPLE LOCAL end mainline 2006-03-24 4485597 */
183 + else if (strcmp (language_string, "GNU D") == 0)
184 + language = DW_LANG_D;
186 language = DW_LANG_C89;
188 diff -cr gcc-orig/expr.c gcc/expr.c
189 *** gcc-orig/expr.c Fri Oct 28 14:47:00 2005
190 --- gcc/expr.c Thu Jun 22 19:49:35 2006
194 /* Lowered by gimplify.c. */
197 + case STATIC_CHAIN_EXPR:
198 + case STATIC_CHAIN_DECL:
199 + /* Lowered by tree-nested.c */
200 + gcc_unreachable ();
203 return get_exception_pointer (cfun);
205 diff -cr gcc-orig/function.c gcc/function.c
206 *** gcc-orig/function.c Wed Apr 26 14:07:46 2006
207 --- gcc/function.c Thu Jun 22 19:49:35 2006
210 FUNCTION_ARG_ADVANCE (all.args_so_far, data.promoted_mode,
211 data.passed_type, data.named_arg);
213 ! assign_parm_adjust_stack_rtl (&data);
215 if (assign_parm_setup_block_p (&data))
216 assign_parm_setup_block (&all, parm, &data);
218 FUNCTION_ARG_ADVANCE (all.args_so_far, data.promoted_mode,
219 data.passed_type, data.named_arg);
222 ! assign_parm_adjust_stack_rtl (&data);
224 if (assign_parm_setup_block_p (&data))
225 assign_parm_setup_block (&all, parm, &data);
229 /* Output all parameter conversion instructions (possibly including calls)
230 now that all parameters have been copied out of hard registers. */
231 ! emit_insn (all.conversion_insns);
233 /* If we are receiving a struct value address as the first argument, set up
234 the RTL for the function result. As this might require code to convert
237 /* Output all parameter conversion instructions (possibly including calls)
238 now that all parameters have been copied out of hard registers. */
240 ! emit_insn (all.conversion_insns);
242 /* If we are receiving a struct value address as the first argument, set up
243 the RTL for the function result. As this might require code to convert
247 struct assign_parm_data_all all;
248 tree fnargs, parm, stmts = NULL;
253 assign_parms_initialize_all (&all);
254 fnargs = assign_parms_augmented_arg_list (&all);
258 tree parm = cfun->static_chain_decl;
259 rtx local = gen_reg_rtx (Pmode);
261 - set_decl_incoming_rtl (parm, static_chain_incoming_rtx);
262 SET_DECL_RTL (parm, local);
263 mark_reg_pointer (local, TYPE_ALIGN (TREE_TYPE (TREE_TYPE (parm))));
265 ! emit_move_insn (local, static_chain_incoming_rtx);
268 /* If the function receives a non-local goto, then store the
270 tree parm = cfun->static_chain_decl;
271 rtx local = gen_reg_rtx (Pmode);
273 SET_DECL_RTL (parm, local);
274 mark_reg_pointer (local, TYPE_ALIGN (TREE_TYPE (TREE_TYPE (parm))));
276 ! if (! cfun->custom_static_chain)
278 ! set_decl_incoming_rtl (parm, static_chain_incoming_rtx);
279 ! emit_move_insn (local, static_chain_incoming_rtx);
281 ! /* else, the static chain will be set in the main body */
284 /* If the function receives a non-local goto, then store the
297 diff -cr gcc-orig/function.h gcc/function.h
298 *** gcc-orig/function.h Wed Apr 26 14:07:46 2006
299 --- gcc/function.h Thu Jun 22 19:51:26 2006
303 /* APPLE LOCAL begin 3837835 */
304 unsigned int uses_vector : 1;
305 /* APPLE LOCAL end 3837835 */
307 + /* Nonzero if static chain is initialized by something other than
308 + static_chain_incoming_rtx. */
309 + unsigned int custom_static_chain : 1;
311 + /* Nonzero if no code should be generated for prologues, copying
312 + parameters, etc. */
313 + unsigned int naked : 1;
316 /* The function currently being compiled. */
317 diff -cr gcc-orig/gcc.c gcc/gcc.c
318 *** gcc-orig/gcc.c Sat Jan 21 13:38:48 2006
319 --- gcc/gcc.c Thu Mar 1 10:27:25 2007
323 /* Flag set by cppspec.c to 1. */
326 + /* Flag set by drivers needing Pthreads. */
329 /* Flag saying to pass the greatest exit code returned by a sub-process
330 to the calling program. */
331 static int pass_exit_codes;
335 assembler has done its job.
336 %D Dump out a -L option for each directory in startfile_prefixes.
337 If multilib_dir is set, extra entries are generated with it affixed.
338 + %N Output the currently selected multilib directory name.
339 %l process LINK_SPEC as a spec.
340 %L process LIB_SPEC as a spec.
341 %G process LIBGCC_SPEC as a spec.
348 + #define GCC_SPEC_FORMAT_4 1
350 /* Record the mapping from file suffixes for compilation specs. */
362 if ((save_temps_flag || report_times) && use_pipes)
364 /* -save-temps overrides -pipe, so that temp files are produced */
373 + switches[n_switches].part1 = "pthread";
374 + switches[n_switches].args = 0;
375 + switches[n_switches].live_cond = SWITCH_OK;
376 + /* Do not print an error if there is not expansion for -pthread. */
377 + switches[n_switches].validated = 1;
378 + switches[n_switches].ordering = 0;
383 switches[n_switches].part1 = 0;
384 infiles[n_infiles].name = 0;
396 + obstack_grow (&obstack, "-fmultilib-dir=",
397 + strlen ("-fmultilib-dir="));
398 + obstack_grow (&obstack, multilib_dir,
399 + strlen (multilib_dir));
403 /* Here we define characters other than letters and digits. */
406 diff -cr gcc-orig/gcc.c gcc/gcc.h
407 *** gcc-orig/gcc.h Fri Mar 4 15:17:11 2005
408 --- gcc/gcc.h Sun Mar 4 13:36:10 2007
411 || (CHAR) == 'L' || (CHAR) == 'A' || (CHAR) == 'V' \
412 /* APPLE LOCAL frameworks */ \
414 ! || (CHAR) == 'B' || (CHAR) == 'b')
416 /* This defines which multi-letter switches take arguments. */
419 || (CHAR) == 'L' || (CHAR) == 'A' || (CHAR) == 'V' \
420 /* APPLE LOCAL frameworks */ \
422 ! || (CHAR) == 'B' || (CHAR) == 'b' || (CHAR) == 'J')
424 /* This defines which multi-letter switches take arguments. */
426 diff -cr gcc-orig/gimplify.c gcc/gimplify.c
427 *** gcc-orig/gimplify.c Thu Aug 11 19:55:22 2005
428 --- gcc/gimplify.c Thu Jun 22 19:49:35 2006
435 + case STATIC_CHAIN_EXPR:
436 + /* The argument is used as information only. No need to gimplify */
437 + case STATIC_CHAIN_DECL:
444 diff -cr gcc-orig/real.c gcc/real.c
445 *** gcc-orig/real.c Tue Jan 25 15:21:59 2005
446 --- gcc/real.c Thu Jun 22 19:49:35 2006
450 np2 = SIGNIFICAND_BITS - fmt->p * fmt->log2_b;
451 memset (r->sig, -1, SIGSZ * sizeof (unsigned long));
452 clear_significand_below (r, np2);
453 + if (REAL_MODE_FORMAT_COMPOSITE_P (mode))
454 + clear_significand_bit (r, SIGNIFICAND_BITS - fmt->pnan - 1);
457 /* Fills R with 2**N. */
458 diff -cr gcc-orig/tree-dump.c gcc/tree-dump.c
459 *** gcc-orig/tree-dump.c Tue Feb 15 10:53:52 2005
460 --- gcc/tree-dump.c Thu Jun 22 19:49:35 2006
464 dump_child ("args", TREE_OPERAND (t, 1));
467 + case STATIC_CHAIN_EXPR:
468 + dump_child ("func", TREE_OPERAND (t, 0));
472 dump_child ("elts", CONSTRUCTOR_ELTS (t));
474 diff -cr gcc-orig/tree-gimple.c gcc/tree-gimple.c
475 *** gcc-orig/tree-gimple.c Sat Jul 9 18:14:08 2005
476 --- gcc/tree-gimple.c Thu Jun 22 19:49:35 2006
483 + case STATIC_CHAIN_EXPR: /* not sure if this is right...*/
484 + case STATIC_CHAIN_DECL:
490 || TREE_CODE (t) == WITH_SIZE_EXPR
491 /* These are complex lvalues, but don't have addresses, so they
493 ! || TREE_CODE (t) == BIT_FIELD_REF);
496 /* Return true if T is a GIMPLE condition. */
498 || TREE_CODE (t) == WITH_SIZE_EXPR
499 /* These are complex lvalues, but don't have addresses, so they
501 ! || TREE_CODE (t) == BIT_FIELD_REF
502 ! /* This is an lvalue because it will be replaced with the real
503 ! static chain decl. */
504 ! || TREE_CODE (t) == STATIC_CHAIN_DECL);
507 /* Return true if T is a GIMPLE condition. */
508 diff -cr gcc-orig/tree-inline.c gcc/tree-inline.c
509 *** gcc-orig/tree-inline.c Wed Apr 26 14:07:46 2006
510 --- gcc/tree-inline.c Thu Jun 22 19:49:35 2006
516 ! if (TREE_CODE (*tp) == MODIFY_EXPR
517 && TREE_OPERAND (*tp, 0) == TREE_OPERAND (*tp, 1)
518 && (lang_hooks.tree_inlining.auto_var_in_fn_p
519 (TREE_OPERAND (*tp, 0), fn)))
524 ! if (! id->cloning_p && ! id->saving_p &&
525 ! TREE_CODE (*tp) == MODIFY_EXPR &&
526 ! TREE_OPERAND (*tp, 0) ==
527 ! DECL_STRUCT_FUNCTION (fn)->static_chain_decl)
529 ! /* Don't use special methods to initialize the static chain
530 ! if expanding inline. If this code could somehow be
531 ! expanded in expand_start_function, it would not be
532 ! necessary to deal with it here. */
533 ! *tp = build_empty_stmt ();
535 ! else if (TREE_CODE (*tp) == MODIFY_EXPR
536 && TREE_OPERAND (*tp, 0) == TREE_OPERAND (*tp, 1)
537 && (lang_hooks.tree_inlining.auto_var_in_fn_p
538 (TREE_OPERAND (*tp, 0), fn)))
539 diff -cr gcc-orig/tree-nested.c gcc/tree-nested.c
540 *** gcc-orig/tree-nested.c Mon Aug 8 15:02:59 2005
541 --- gcc/tree-nested.c Thu Jun 22 19:49:35 2006
548 + enum tree_code code;
550 type = get_frame_type (info->outer);
551 type = build_pointer_type (type);
554 Note also that it's represented as a parameter. This is more
555 close to the truth, since the initial value does come from
557 ! decl = build_decl (PARM_DECL, create_tmp_var_name ("CHAIN"), type);
558 DECL_ARTIFICIAL (decl) = 1;
559 DECL_IGNORED_P (decl) = 1;
560 TREE_USED (decl) = 1;
561 DECL_CONTEXT (decl) = info->context;
562 ! DECL_ARG_TYPE (decl) = type;
564 /* Tell tree-inline.c that we never write to this variable, so
565 it can copy-prop the replacement value immediately. */
567 Note also that it's represented as a parameter. This is more
568 close to the truth, since the initial value does come from
570 ! /* If the function has a custom static chain, a VAR_DECL is more
572 ! code = DECL_STRUCT_FUNCTION (info->context)->custom_static_chain ?
573 ! VAR_DECL : PARM_DECL;
574 ! decl = build_decl (code, create_tmp_var_name ("CHAIN"), type);
575 DECL_ARTIFICIAL (decl) = 1;
576 DECL_IGNORED_P (decl) = 1;
577 TREE_USED (decl) = 1;
578 DECL_CONTEXT (decl) = info->context;
579 ! if (TREE_CODE (decl) == PARM_DECL)
580 ! DECL_ARG_TYPE (decl) = type;
582 /* Tell tree-inline.c that we never write to this variable, so
583 it can copy-prop the replacement value immediately. */
588 if (info->context == target_context)
590 + /* might be doing something wrong to need the following line.. */
591 + get_frame_type (info);
592 x = build_addr (info->frame_decl);
598 if (DECL_NO_STATIC_CHAIN (decl))
601 + /* Don't use a trampoline for a static reference. */
602 + if (TREE_STATIC (t))
605 /* Lookup the immediate parent of the callee, as that's where
606 we need to insert the trampoline. */
607 for (i = info; i->context != target_context; i = i->outer)
611 = get_static_chain (info, target_context, &wi->tsi);
614 + case STATIC_CHAIN_EXPR:
615 + *tp = get_static_chain (info, TREE_OPERAND (t, 0), &wi->tsi);
618 + case STATIC_CHAIN_DECL:
619 + *tp = get_chain_decl (info);
627 tree x = build (COMPONENT_REF, TREE_TYPE (root->chain_field),
628 root->frame_decl, root->chain_field, NULL_TREE);
629 x = build (MODIFY_EXPR, TREE_TYPE (x), x, get_chain_decl (root));
630 ! append_to_statement_list (x, &stmt_list);
633 /* If trampolines were created, then we need to initialize them. */
635 tree x = build (COMPONENT_REF, TREE_TYPE (root->chain_field),
636 root->frame_decl, root->chain_field, NULL_TREE);
637 x = build (MODIFY_EXPR, TREE_TYPE (x), x, get_chain_decl (root));
638 ! /* If the function has a custom static chain, chain_field must
639 ! be set after the static chain. */
640 ! if (DECL_STRUCT_FUNCTION (root->context)->custom_static_chain)
642 ! /* Should use walk_function instead. */
643 ! tree_stmt_iterator i =
644 ! tsi_start ( BIND_EXPR_BODY (DECL_SAVED_TREE (context)));
645 ! while (!tsi_end_p (i))
647 ! tree t = tsi_stmt (i);
648 ! if (TREE_CODE (t) == MODIFY_EXPR &&
649 ! TREE_OPERAND (t, 0) == root->chain_decl)
651 ! tsi_link_after(& i, x, TSI_SAME_STMT);
657 ! gcc_assert(x == NULL_TREE);
660 ! append_to_statement_list (x, &stmt_list);
663 /* If trampolines were created, then we need to initialize them. */
664 diff -cr gcc-orig/tree-pretty-print.c gcc/tree-pretty-print.c
665 *** gcc-orig/tree-pretty-print.c Thu Dec 9 05:54:50 2004
666 --- gcc/tree-pretty-print.c Thu Jun 22 19:49:35 2006
670 pp_string (buffer, " [tail call]");
673 + case STATIC_CHAIN_EXPR:
674 + pp_string (buffer, "<<static chain of ");
675 + dump_generic_node (buffer, TREE_OPERAND (node, 0), spc, flags, false);
676 + pp_string (buffer, ">>");
679 + case STATIC_CHAIN_DECL:
680 + pp_string (buffer, "<<static chain decl>>");
683 case WITH_CLEANUP_EXPR:
686 diff -cr gcc-orig/tree-sra.c gcc/tree-sra.c
687 *** gcc-orig/tree-sra.c Mon Aug 22 16:57:03 2005
688 --- gcc-orig/tree-sra.c Fri Mar 7 13:43:03 2008
694 bool saw_one_field = false;
695 + tree last_offset = size_zero_node;
698 for (t = TYPE_FIELDS (type); t ; t = TREE_CHAIN (t))
699 if (TREE_CODE (t) == FIELD_DECL)
703 && (tree_low_cst (DECL_SIZE (t), 1)
704 != TYPE_PRECISION (TREE_TYPE (t))))
706 + /* Reject aliased fields created by GDC for anonymous unions. */
707 + cmp = fold_binary_to_constant (LE_EXPR, boolean_type_node,
708 + DECL_FIELD_OFFSET (t), last_offset);
709 + if (cmp == NULL_TREE || TREE_CODE (cmp) != INTEGER_CST || TREE_INT_CST_LOW (cmp))
712 saw_one_field = true;
714 diff -cr gcc-orig/tree.def gcc/tree.def
715 *** gcc-orig/tree.def Mon Oct 3 16:31:24 2005
716 --- gcc/tree.def Thu Jun 22 21:09:39 2006
720 Operand 2 is the static chain argument, or NULL. */
721 DEFTREECODE (CALL_EXPR, "call_expr", tcc_expression, 3)
723 + /* Operand 0 is the FUNC_DECL of the outer function for
724 + which the static chain is to be computed. */
725 + DEFTREECODE (STATIC_CHAIN_EXPR, "static_chain_expr", tcc_expression, 1)
727 + /* Represents a function's static chain. It can be used as an lvalue. */
728 + DEFTREECODE (STATIC_CHAIN_DECL, "static_chain_decl", tcc_expression, 0)
730 /* Specify a value to compute along with its corresponding cleanup.
731 Operand 0 is the cleanup expression.
732 The cleanup is executed by the first enclosing CLEANUP_POINT_EXPR,
736 /* APPLE LOCAL begin AV vmul_uch --haifa */
737 /* Used during vectorization to represent computation idioms. */
738 ! DEFTREECODE (MULT_UCH_EXPR, "mult_uch", '2', 2)
739 /* APPLE LOCAL end AV vmul_uch --haifa */
741 /* Value handles. Artificial nodes to represent expressions in
744 /* APPLE LOCAL begin AV vmul_uch --haifa */
745 /* Used during vectorization to represent computation idioms. */
746 ! DEFTREECODE (MULT_UCH_EXPR, "mult_uch", tcc_binary, 2)
747 /* APPLE LOCAL end AV vmul_uch --haifa */
749 /* Value handles. Artificial nodes to represent expressions in
750 diff -cr gcc-orig/config/darwin.h gcc/config/darwin.h
751 *** gcc-orig/config/darwin.h Thu Apr 27 21:06:13 2006
752 --- gcc/config/darwin.h Thu Dec 7 23:53:11 2006
756 %{!nostdlib:%{!nodefaultlibs:%G %L}} \
757 %{!A:%{!nostdlib:%{!nostartfiles:%E}}} %{T*} %{F*} }}}}}}}}"
759 + #ifdef TARGET_SYSTEM_ROOT
760 + #define LINK_SYSROOT_SPEC \
761 + "%{isysroot*:-syslibroot %*;:-syslibroot " TARGET_SYSTEM_ROOT "}"
763 + #define LINK_SYSROOT_SPEC "%{isysroot*:-syslibroot %*}"
766 /* Please keep the random linker options in alphabetical order (modulo
767 'Z' and 'no' prefixes). Options that can only go to one of libtool
768 or ld must be listed twice, under both !Zdynamiclib and
771 %{Zfn_seg_addr_table_filename*:-seg_addr_table_filename %*} \
772 %{sub_library*} %{sub_umbrella*} \
773 "/* APPLE LOCAL mainline 4.1 2005-06-03 */" \
774 ! %{isysroot*:-syslibroot %*} \
775 %{twolevel_namespace} %{twolevel_namespace_hints} \
779 %{Zfn_seg_addr_table_filename*:-seg_addr_table_filename %*} \
780 %{sub_library*} %{sub_umbrella*} \
781 "/* APPLE LOCAL mainline 4.1 2005-06-03 */" \
782 ! " LINK_SYSROOT_SPEC " \
783 %{twolevel_namespace} %{twolevel_namespace_hints} \