|
View:
New views
3 Messages
—
Rating Filter:
Alert me
|
|
|
for review: representation of ":- module" and ":- end_module"I am seeking feedback mostly on the user-visible change in behavior in
the absence of :- module declarations at the starts of source files, though comments on the code are also welcome. I will fix the ZZZs before commit. Zoltan. Represent ":- module" and ":- end_module" items using purpose-specific kinds of items, instead of as part of the generic "module_defn" item kind. This is in preparation for a diff that would return submodules as separate entities in their own right, instead of as an embedded sequence of items that happen to start with a :- module item and end with an optional :- end_module item. Also as preparation, make missing a ":- module" declaration at the start of a source file an error instead of a warning. compiler/prog_item.m: Change the type representing items. compiler/prog_io.m: Conform to the change above, make missing module declarations into an error, and simplify some code. compiler/equiv_type.m: compiler/make_hlds_passes.m: compiler/mercury_to_mercury.m: compiler/module_qual.m: compiler/modules.m: compiler/recompilation.check.m: compiler/recompilation.version.m: Conform to the change above. Where relevant, turn chains of if-then-elses on item types into switches. compiler/inst.m: Make the module name in the module declaration match the module name. tests/invalid/big_test.err_exp: tests/invalid/errors.err_exp: tests/invalid/typeclass_test_1.err_exp: Update the expected error messages. tests/valid/inhibit_warn_test.m: To keep this test case valid, don't omit the ":- module" declaration. cvs diff: Diffing . cvs diff: Diffing analysis cvs diff: Diffing bindist cvs diff: Diffing boehm_gc cvs diff: Diffing boehm_gc/Mac_files cvs diff: Diffing boehm_gc/cord cvs diff: Diffing boehm_gc/cord/private cvs diff: Diffing boehm_gc/doc cvs diff: Diffing boehm_gc/include cvs diff: Diffing boehm_gc/include/private cvs diff: Diffing boehm_gc/libatomic_ops-1.2 cvs diff: Diffing boehm_gc/libatomic_ops-1.2/doc cvs diff: Diffing boehm_gc/libatomic_ops-1.2/src cvs diff: Diffing boehm_gc/libatomic_ops-1.2/src/atomic_ops cvs diff: Diffing boehm_gc/libatomic_ops-1.2/src/atomic_ops/sysdeps cvs diff: Diffing boehm_gc/libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc cvs diff: Diffing boehm_gc/libatomic_ops-1.2/src/atomic_ops/sysdeps/hpc cvs diff: Diffing boehm_gc/libatomic_ops-1.2/src/atomic_ops/sysdeps/ibmc cvs diff: Diffing boehm_gc/libatomic_ops-1.2/src/atomic_ops/sysdeps/icc cvs diff: Diffing boehm_gc/libatomic_ops-1.2/src/atomic_ops/sysdeps/msftc cvs diff: Diffing boehm_gc/libatomic_ops-1.2/src/atomic_ops/sysdeps/sunc cvs diff: Diffing boehm_gc/libatomic_ops-1.2/tests cvs diff: Diffing boehm_gc/tests cvs diff: Diffing boehm_gc/windows-untested cvs diff: Diffing boehm_gc/windows-untested/vc60 cvs diff: Diffing boehm_gc/windows-untested/vc70 cvs diff: Diffing boehm_gc/windows-untested/vc71 cvs diff: Diffing browser cvs diff: Diffing bytecode cvs diff: Diffing compiler Index: compiler/equiv_type.m =================================================================== RCS file: /home/mercury/mercury1/repository/mercury/compiler/equiv_type.m,v retrieving revision 1.83 diff -u -b -r1.83 equiv_type.m --- compiler/equiv_type.m 2 Jan 2009 03:12:06 -0000 1.83 +++ compiler/equiv_type.m 2 Nov 2009 06:51:58 -0000 @@ -208,20 +208,42 @@ skip_abstract_imported_items([], []). skip_abstract_imported_items([Item0 | Items0], Items) :- ( + ( Item0 = item_module_start(_) + ; Item0 = item_module_end(_) + ), + Items = Items0 + ; Item0 = item_module_defn(ItemModuleDefn), - ItemModuleDefn = item_module_defn_info(ModuleDefn, _, _SeqNum), + ItemModuleDefn = item_module_defn_info(ModuleDefn, _, _), + ( is_section_defn(ModuleDefn) = yes, ModuleDefn \= md_abstract_imported -> Items = Items0 ; skip_abstract_imported_items(Items0, Items) + ) + ; + ( Item0 = item_clause(_) + ; Item0 = item_type_defn(_) + ; Item0 = item_inst_defn(_) + ; Item0 = item_mode_defn(_) + ; Item0 = item_pred_decl(_) + ; Item0 = item_mode_decl(_) + ; Item0 = item_pragma(_) + ; Item0 = item_promise(_) + ; Item0 = item_typeclass(_) + ; Item0 = item_instance(_) + ; Item0 = item_initialise(_) + ; Item0 = item_finalise(_) + ; Item0 = item_mutable(_) + ; Item0 = item_nothing(_) + ), + skip_abstract_imported_items(Items0, Items) ). :- func is_section_defn(module_defn) = bool. -is_section_defn(md_module(_)) = yes. -is_section_defn(md_end_module(_)) = yes. is_section_defn(md_interface) = yes. is_section_defn(md_implementation) = yes. is_section_defn(md_private_interface) = yes. @@ -253,7 +275,8 @@ !Specs). replace_in_item_list(ModuleName, Location0, [Item0 | Items0], EqvMap, EqvInstMap, !ReplItems, !RecompInfo, !UsedModules, !Specs) :- - ( Item0 = item_module_defn(ItemModuleDefn) -> + ( + Item0 = item_module_defn(ItemModuleDefn), ItemModuleDefn = item_module_defn_info(ModuleDefn, _, _SeqNum), ( ModuleDefn = md_interface, @@ -270,23 +293,41 @@ ; ModuleDefn = md_abstract_imported ; ModuleDefn = md_opt_imported ; ModuleDefn = md_transitively_imported - % XXX I'm not sure what these two are so they may not signify + % XXX I'm not sure what this is so it may not signify % that we've finished processing the module. - ; ModuleDefn = md_external(_, _) ; ModuleDefn = md_export(_) ), Location = eqv_type_out_of_module ; - ( ModuleDefn = md_module(_) - ; ModuleDefn = md_end_module(_) - ; ModuleDefn = md_import(_) + ( ModuleDefn = md_import(_) ; ModuleDefn = md_use(_) ; ModuleDefn = md_include_module(_) + ; ModuleDefn = md_external(_, _) ; ModuleDefn = md_version_numbers(_, _) ), Location = Location0 ) ; + ( Item0 = item_module_start(_) + ; Item0 = item_module_end(_) + ), + unexpected(this_file, "replace_in_item_list: module start or end") + ; + ( Item0 = item_clause(_) + ; Item0 = item_type_defn(_) + ; Item0 = item_inst_defn(_) + ; Item0 = item_mode_defn(_) + ; Item0 = item_pred_decl(_) + ; Item0 = item_mode_decl(_) + ; Item0 = item_pragma(_) + ; Item0 = item_promise(_) + ; Item0 = item_typeclass(_) + ; Item0 = item_instance(_) + ; Item0 = item_initialise(_) + ; Item0 = item_finalise(_) + ; Item0 = item_mutable(_) + ; Item0 = item_nothing(_) + ), Location = Location0 ), replace_in_item(ModuleName, Location, EqvMap, EqvInstMap, @@ -351,7 +392,9 @@ Item = Item0, Specs = [] ; - ( Item0 = item_module_defn(_) + ( Item0 = item_module_start(_) + ; Item0 = item_module_end(_) + ; Item0 = item_module_defn(_) ; Item0 = item_clause(_) ; Item0 = item_inst_defn(_) ; Item0 = item_promise(_) Index: compiler/inst.m =================================================================== RCS file: /home/mercury/mercury1/repository/mercury/compiler/inst.m,v retrieving revision 1.13 diff -u -b -r1.13 inst.m --- compiler/inst.m 24 Oct 2005 04:14:06 -0000 1.13 +++ compiler/inst.m 31 Oct 2009 14:37:37 -0000 @@ -6,4 +6,4 @@ % % The former contents of this file are now prog_data.m. -:- module mer_inst. +:- module (inst). Index: compiler/make_hlds_passes.m =================================================================== RCS file: /home/mercury/mercury1/repository/mercury/compiler/make_hlds_passes.m,v retrieving revision 1.95 diff -u -b -r1.95 make_hlds_passes.m --- compiler/make_hlds_passes.m 4 Nov 2009 03:44:48 -0000 1.95 +++ compiler/make_hlds_passes.m 4 Nov 2009 03:45:54 -0000 @@ -309,6 +309,12 @@ add_item_decl_pass_1(Item, FoundError, !Status, !ModuleInfo, !Specs) :- ( + Item = item_module_start(_), + FoundError = no + ; + Item = item_module_end(_), + FoundError = no + ; Item = item_module_defn(ItemModuleDefn), add_pass_1_module_defn(ItemModuleDefn, !Status, !ModuleInfo, !Specs), FoundError = no @@ -449,15 +455,15 @@ ItemModuleDefn = item_module_defn_info(ModuleDefn, Context, _SeqNum), ( module_defn_update_import_status(ModuleDefn, StatusPrime) -> !:Status = StatusPrime - ; ModuleDefn = md_import(ModuleSpecifiers) -> - !.Status = item_status(IStat, _), - add_module_specifiers(ModuleSpecifiers, IStat, !ModuleInfo) - ; ModuleDefn = md_use(ModuleSpecifiers) -> + ; + ( + ( ModuleDefn = md_import(ModuleSpecifiers) + ; ModuleDefn = md_use(ModuleSpecifiers) + ), !.Status = item_status(IStat, _), add_module_specifiers(ModuleSpecifiers, IStat, !ModuleInfo) - ; ModuleDefn = md_include_module(_) -> - true - ; ModuleDefn = md_external(MaybeBackend, External) -> + ; + ModuleDefn = md_external(MaybeBackend, External), ( External = name_arity(Name, Arity) -> module_info_get_globals(!.ModuleInfo, Globals), CurrentBackend = lookup_current_backend(Globals), @@ -478,22 +484,35 @@ Pieces = [words("Warning:"), quote("external"), words("declaration requires arity."), nl], Msg = simple_msg(Context, [always(Pieces)]), - Spec = error_spec(severity_error, phase_parse_tree_to_hlds, [Msg]), + Spec = error_spec(severity_error, phase_parse_tree_to_hlds, + [Msg]), !:Specs = [Spec | !.Specs] ) - ; ModuleDefn = md_module(_ModuleName) -> - report_unexpected_decl("module", Context, !Specs) - ; ModuleDefn = md_end_module(_ModuleName) -> - report_unexpected_decl("end_module", Context, !Specs) - ; ModuleDefn = md_version_numbers(_, _) -> - true - ; ModuleDefn = md_transitively_imported -> - true ; + ( ModuleDefn = md_include_module(_) + ; ModuleDefn = md_version_numbers(_, _) + ; ModuleDefn = md_transitively_imported + ) + ; + ( ModuleDefn = md_interface + ; ModuleDefn = md_implementation + ; ModuleDefn = md_private_interface + ; ModuleDefn = md_imported(_) + ; ModuleDefn = md_used(_) + ; ModuleDefn = md_opt_imported + ; ModuleDefn = md_abstract_imported + ), + unexpected(this_file, + "add_pass_1_module_defn: " ++ + "module_defn_update_import_status missed something") + ; + ModuleDefn = md_export(_), Pieces = [words("Warning: declaration not yet implemented."), nl], Msg = simple_msg(Context, [always(Pieces)]), - Spec = error_spec(severity_warning, phase_parse_tree_to_hlds, [Msg]), + Spec = error_spec(severity_warning, phase_parse_tree_to_hlds, + [Msg]), !:Specs = [Spec | !.Specs] + ) ). :- pred add_pass_1_mutable(item_mutable_info::in, @@ -700,7 +719,9 @@ Item = item_mutable(ItemMutable), add_pass_2_mutable(ItemMutable, !.Status, !ModuleInfo, !Specs) ; - ( Item = item_clause(_) + ( Item = item_module_start(_) + ; Item = item_module_end(_) + ; Item = item_clause(_) ; Item = item_inst_defn(_) ; Item = item_mode_defn(_) ; Item = item_mode_decl(_) @@ -1040,7 +1061,9 @@ add_pass_3_mutable(ItemMutable, !.Status, !ModuleInfo, !QualInfo, !Specs) ; - ( Item = item_inst_defn(_) + ( Item = item_module_start(_) + ; Item = item_module_end(_) + ; Item = item_inst_defn(_) ; Item = item_mode_defn(_) ; Item = item_mode_decl(_) ; Item = item_typeclass(_) @@ -2775,20 +2798,29 @@ :- pred module_defn_update_import_status(module_defn::in, item_status::out) is semidet. -module_defn_update_import_status(md_interface, - item_status(status_exported, may_be_unqualified)). -module_defn_update_import_status(md_implementation, - item_status(status_local, may_be_unqualified)). -module_defn_update_import_status(md_private_interface, - item_status(status_exported_to_submodules, may_be_unqualified)). -module_defn_update_import_status(md_imported(Section), - item_status(status_imported(Section), may_be_unqualified)). -module_defn_update_import_status(md_used(Section), - item_status(status_imported(Section), must_be_qualified)). -module_defn_update_import_status(md_opt_imported, - item_status(status_opt_imported, must_be_qualified)). -module_defn_update_import_status(md_abstract_imported, - item_status(status_abstract_imported, must_be_qualified)). +module_defn_update_import_status(ModuleDefn, Status) :- + ( + ModuleDefn = md_interface, + Status = item_status(status_exported, may_be_unqualified) + ; + ModuleDefn = md_implementation, + Status = item_status(status_local, may_be_unqualified) + ; + ModuleDefn = md_private_interface, + Status = item_status(status_exported_to_submodules, may_be_unqualified) + ; + ModuleDefn = md_imported(Section), + Status = item_status(status_imported(Section), may_be_unqualified) + ; + ModuleDefn = md_used(Section), + Status = item_status(status_imported(Section), must_be_qualified) + ; + ModuleDefn = md_opt_imported, + Status = item_status(status_opt_imported, must_be_qualified) + ; + ModuleDefn = md_abstract_imported, + Status = item_status(status_abstract_imported, must_be_qualified) + ). %-----------------------------------------------------------------------------% Index: compiler/mercury_to_mercury.m =================================================================== RCS file: /home/mercury/mercury1/repository/mercury/compiler/mercury_to_mercury.m,v retrieving revision 1.339 diff -u -b -r1.339 mercury_to_mercury.m --- compiler/mercury_to_mercury.m 4 Nov 2009 03:44:48 -0000 1.339 +++ compiler/mercury_to_mercury.m 4 Nov 2009 03:45:55 -0000 @@ -494,6 +494,18 @@ mercury_output_item(Info, Item, !IO) :- ( + Item = item_module_start(ItemModuleStart), + ItemModuleStart = item_module_start_info(ModuleName, _, _), + io.write_string(":- module ", !IO), + mercury_output_bracketed_sym_name(ModuleName, !IO), + io.write_string(".\n", !IO) + ; + Item = item_module_end(ItemModuleEnd), + ItemModuleEnd = item_module_end_info(ModuleName, _, _), + io.write_string(":- end_module ", !IO), + mercury_output_bracketed_sym_name(ModuleName, !IO), + io.write_string(".\n", !IO) + ; Item = item_module_defn(ItemModuleDefn), mercury_output_item_module_defn(Info, ItemModuleDefn, !IO) ; @@ -567,8 +579,8 @@ maybe_output_line_number(Info, Context, !IO), mercury_output_inst_defn(VarSet, Name, Args, InstDefn, Context, !IO). -:- pred mercury_output_item_mode_defn(merc_out_info::in, item_mode_defn_info::in, - io::di, io::uo) is det. +:- pred mercury_output_item_mode_defn(merc_out_info::in, + item_mode_defn_info::in, io::di, io::uo) is det. mercury_output_item_mode_defn(Info, ItemModeDefn, !IO) :- ItemModeDefn = item_mode_defn_info(VarSet, Name0, Args, ModeDefn, _Cond, @@ -577,8 +589,8 @@ maybe_output_line_number(Info, Context, !IO), mercury_format_mode_defn(VarSet, Name, Args, ModeDefn, Context, !IO). -:- pred mercury_output_item_pred_decl(merc_out_info::in, item_pred_decl_info::in, - io::di, io::uo) is det. +:- pred mercury_output_item_pred_decl(merc_out_info::in, + item_pred_decl_info::in, io::di, io::uo) is det. mercury_output_item_pred_decl(Info, ItemPredDecl, !IO) :- ItemPredDecl = item_pred_decl_info(_Origin, TypeVarSet, InstVarSet, @@ -604,8 +616,8 @@ Purity, ClassContext, Context, ":- ", ".\n", ".\n", !IO) ). -:- pred mercury_output_item_mode_decl(merc_out_info::in, item_mode_decl_info::in, - io::di, io::uo) is det. +:- pred mercury_output_item_mode_decl(merc_out_info::in, + item_mode_decl_info::in, io::di, io::uo) is det. mercury_output_item_mode_decl(Info, ItemModeDecl, !IO) :- ItemModeDecl = item_mode_decl_info(VarSet, PredOrFunc, PredName0, Modes, @@ -907,8 +919,8 @@ mercury_output_goal(Goal, VarSet, Indent, !IO), io.write_string(".\n", !IO). -:- pred mercury_output_item_typeclass(merc_out_info::in, item_typeclass_info::in, - io::di, io::uo) is det. +:- pred mercury_output_item_typeclass(merc_out_info::in, + item_typeclass_info::in, io::di, io::uo) is det. mercury_output_item_typeclass(Info, ItemTypeClass, !IO) :- ItemTypeClass = item_typeclass_info(Constraints, FunDeps, ClassName0, @@ -967,8 +979,8 @@ ), io.write_string(".\n", !IO). -:- pred mercury_output_item_initialise(merc_out_info::in, item_initialise_info::in, - io::di, io::uo) is det. +:- pred mercury_output_item_initialise(merc_out_info::in, + item_initialise_info::in, io::di, io::uo) is det. mercury_output_item_initialise(_, ItemInitialise, !IO) :- ItemInitialise = item_initialise_info(_, PredSymName, Arity, _Context, @@ -1147,21 +1159,11 @@ mercury_write_module_spec_list(IncludedModules, !IO), io.write_string(".\n", !IO) ; - ModuleDefn = md_module(Module), - io.write_string(":- module ", !IO), - mercury_output_bracketed_sym_name(Module, !IO), - io.write_string(".\n", !IO) - ; - ModuleDefn = md_end_module(Module), - io.write_string(":- end_module ", !IO), - mercury_output_bracketed_sym_name(Module, !IO), - io.write_string(".\n", !IO) - ; - ModuleDefn = md_version_numbers(Module, VersionNumbers), + ModuleDefn = md_version_numbers(ModuleName, VersionNumbers), io.write_string(":- version_numbers(", !IO), io.write_int(version_numbers_version_number, !IO), io.write_string(", ", !IO), - mercury_output_bracketed_sym_name(Module, !IO), + mercury_output_bracketed_sym_name(ModuleName, !IO), io.write_string(",\n", !IO), recompilation.version.write_version_numbers(VersionNumbers, !IO), io.write_string(").\n", !IO) @@ -1786,15 +1788,15 @@ % add_lambda_eval_method(EvalMethod, !U), add_string(")>", !U) ; - ConsId = type_ctor_info_const(Module, Type, Arity), - ModuleString = sym_name_to_string(Module), + ConsId = type_ctor_info_const(ModuleName, Type, Arity), + ModuleString = sym_name_to_string(ModuleName), string.int_to_string(Arity, ArityString), add_strings(["<type_ctor_info for ", ModuleString, ".", Type, "/", ArityString, ">"], !U) ; - ConsId = base_typeclass_info_const(Module, Class, InstanceNum, + ConsId = base_typeclass_info_const(ModuleName, Class, InstanceNum, InstanceString), - ModuleString = sym_name_to_string(Module), + ModuleString = sym_name_to_string(ModuleName), add_string("<base_typeclass_info for ", !U), add_class_id(Class, !U), ( ModuleString \= "some bogus module name" -> Index: compiler/module_qual.m =================================================================== RCS file: /home/mercury/mercury1/repository/mercury/compiler/module_qual.m,v retrieving revision 1.175 diff -u -b -r1.175 module_qual.m --- compiler/module_qual.m 8 Sep 2009 02:43:35 -0000 1.175 +++ compiler/module_qual.m 31 Oct 2009 13:52:42 -0000 @@ -278,6 +278,16 @@ collect_mq_info_item(Item, !Info) :- ( + Item = item_module_start(ItemModuleStart), + ItemModuleStart = item_module_start_info(ModuleName, _, _), + add_module_defn(ModuleName, !Info) + ; + Item = item_module_end(_) + ; + Item = item_module_defn(ItemModuleDefn), + ItemModuleDefn = item_module_defn_info(ModuleDefn, _, _), + process_module_defn(ModuleDefn, !Info) + ; Item = item_type_defn(ItemTypeDefn), ItemTypeDefn = item_type_defn_info(_, SymName, Params, _, _, _, _), ( mq_info_get_import_status(!.Info, mq_status_abstract_imported) -> @@ -321,10 +331,6 @@ mq_info_set_modes(Modes, !Info) ) ; - Item = item_module_defn(ItemModuleDefn), - ItemModuleDefn = item_module_defn_info(ModuleDefn, _, _), - process_module_defn(ModuleDefn, !Info) - ; Item = item_promise(ItemPromise), ItemPromise = item_promise_info(_PromiseType, Goal, _ProgVarSet, _UnivVars, _Context, _SeqNum), @@ -395,8 +401,6 @@ % :- pred process_module_defn(module_defn::in, mq_info::in, mq_info::out) is det. -process_module_defn(md_module(ModuleName), !Info) :- - add_module_defn(ModuleName, !Info). process_module_defn(md_include_module(ModuleNameList), !Info) :- list.foldl(add_module_defn, ModuleNameList, !Info). process_module_defn(md_interface, !Info) :- @@ -421,7 +425,6 @@ process_module_defn(md_transitively_imported, !Info) :- unexpected(this_file, "process_module_defn: transitively_imported item"). process_module_defn(md_external(_, _), !Info). -process_module_defn(md_end_module(_), !Info). process_module_defn(md_export(_), !Info). process_module_defn(md_import(Imports), !Info) :- add_imports(Imports, !Info). @@ -723,10 +726,22 @@ module_qualify_item(Item0, Item, Continue, !Info, !Specs) :- ( - Item0 = item_clause(_), + ( Item0 = item_module_start(_) + ; Item0 = item_module_end(_) + ; Item0 = item_clause(_) + ; Item0 = item_initialise(_) + ; Item0 = item_finalise(_) + ; Item0 = item_promise(_) + ; Item0 = item_nothing(_) + ), Item = Item0, Continue = yes ; + Item0 = item_module_defn(ItemModuleDefn), + ItemModuleDefn = item_module_defn_info(ModuleDefn, _, _), + update_import_status(ModuleDefn, !Info, Continue), + Item = Item0 + ; Item0 = item_type_defn(ItemTypeDefn0), ItemTypeDefn0 = item_type_defn_info(TVarSet, SymName, Params, TypeDefn0, C, Context, SeqNum), @@ -763,12 +778,6 @@ Item = item_mode_defn(ItemModeDefn), Continue = yes ; - Item0 = item_module_defn(ItemModuleDefn0), - ItemModuleDefn0 = item_module_defn_info(ModuleDefn, Context, SeqNum), - update_import_status(ModuleDefn, !Info, Continue), - ItemModuleDefn = item_module_defn_info(ModuleDefn, Context, SeqNum), - Item = item_module_defn(ItemModuleDefn) - ; Item0 = item_pred_decl(ItemPredDecl0), ItemPredDecl0 = item_pred_decl_info(Origin, A, IVs, B, PredOrFunc, SymName, TypesAndModes0, WithType0, WithInst0, C, D, E, @@ -810,14 +819,6 @@ Item = item_pragma(ItemPragma), Continue = yes ; - Item0 = item_promise(_), - Item = Item0, - Continue = yes - ; - Item0 = item_nothing(_), - Item = Item0, - Continue = yes - ; Item0 = item_typeclass(ItemTypeClass0), ItemTypeClass0 = item_typeclass_info(Constraints0, FunDeps, Name, Vars, Interface0, VarSet, Context, SeqNum), @@ -856,14 +857,6 @@ Item = item_instance(ItemInstance), Continue = yes ; - Item0 = item_initialise(_), - Item = Item0, - Continue = yes - ; - Item0 = item_finalise(_O), - Item = Item0, - Continue = yes - ; Item0 = item_mutable(ItemMutable0), ItemMutable0 = item_mutable_info(Name, Type0, InitTerm, Inst0, Attrs, Varset, Context, SeqNum), @@ -925,7 +918,6 @@ update_import_status(md_abstract_imported, !Info, yes) :- mq_info_set_import_status(mq_status_abstract_imported, !Info). update_import_status(md_transitively_imported, !Info, no). -update_import_status(md_module(_), !Info, yes). update_import_status(md_interface, !Info, yes) :- mq_info_set_import_status(mq_status_exported, !Info). update_import_status(md_implementation, !Info, yes) :- @@ -935,7 +927,6 @@ update_import_status(md_imported(_), !Info, no). update_import_status(md_used(_), !Info, no). update_import_status(md_external(_, _), !Info, yes). -update_import_status(md_end_module(_), !Info, yes). update_import_status(md_export(_), !Info, yes). update_import_status(md_import(_), !Info, yes). update_import_status(md_use(_), !Info, yes). Index: compiler/modules.m =================================================================== RCS file: /home/mercury/mercury1/repository/mercury/compiler/modules.m,v retrieving revision 1.456 diff -u -b -r1.456 modules.m --- compiler/modules.m 14 Oct 2009 05:28:40 -0000 1.456 +++ compiler/modules.m 2 Nov 2009 06:49:18 -0000 @@ -650,7 +650,8 @@ strip_imported_items_2([], !RevItems). strip_imported_items_2([Item | Items], !RevItems) :- - ( Item = item_module_defn(ItemModuleDefn) -> + ( + Item = item_module_defn(ItemModuleDefn), ItemModuleDefn = item_module_defn_info(ModuleDefn, _, _), ( ( ModuleDefn = md_imported(_) @@ -661,9 +662,7 @@ % Item and everything in Items from the list. ; % XXX Some of these should probably cause an error message. - ( ModuleDefn = md_module(_) - ; ModuleDefn = md_end_module(_) - ; ModuleDefn = md_interface + ( ModuleDefn = md_interface ; ModuleDefn = md_implementation ; ModuleDefn = md_private_interface ; ModuleDefn = md_opt_imported @@ -679,6 +678,23 @@ strip_imported_items_2(Items, !RevItems) ) ; + ( Item = item_module_start(_) + ; Item = item_module_end(_) + ; Item = item_clause(_) + ; Item = item_type_defn(_) + ; Item = item_inst_defn(_) + ; Item = item_mode_defn(_) + ; Item = item_pred_decl(_) + ; Item = item_mode_decl(_) + ; Item = item_pragma(_) + ; Item = item_promise(_) + ; Item = item_typeclass(_) + ; Item = item_instance(_) + ; Item = item_initialise(_) + ; Item = item_finalise(_) + ; Item = item_mutable(_) + ; Item = item_nothing(_) + ), !:RevItems = [Item | !.RevItems], strip_imported_items_2(Items, !RevItems) ). @@ -859,9 +875,7 @@ "do_standardize_impl_items: non-singleton-module use") ) ; - ( ModuleDefn = md_module(_) - ; ModuleDefn = md_end_module(_) - ; ModuleDefn = md_imported(_) + ( ModuleDefn = md_imported(_) ; ModuleDefn = md_used(_) ; ModuleDefn = md_abstract_imported ; ModuleDefn = md_opt_imported @@ -1314,7 +1328,9 @@ list.foldl(get_requirements_of_impl_from_constraint, Constraints, !Modules) ; - ( Item = item_module_defn(_) + ( Item = item_module_start(_) + ; Item = item_module_end(_) + ; Item = item_module_defn(_) ; Item = item_clause(_) ; Item = item_type_defn(_) ; Item = item_inst_defn(_) @@ -1445,7 +1461,9 @@ Items = [Item0 | Items1] ) ; - ( Item0 = item_module_defn(_) + ( Item0 = item_module_start(_) + ; Item0 = item_module_end(_) + ; Item0 = item_module_defn(_) ; Item0 = item_type_defn(_) ; Item0 = item_inst_defn(_) ; Item0 = item_mode_defn(_) @@ -3132,7 +3150,8 @@ get_accessible_children_2(_, [], !IncludeDeps). get_accessible_children_2(!.Visible, [Item | Items], !IncludeDeps) :- - ( Item = item_module_defn(ItemModuleDefn) -> + ( + Item = item_module_defn(ItemModuleDefn), ItemModuleDefn = item_module_defn_info(ModuleDefn, _, _), ( ( ModuleDefn = md_abstract_imported @@ -3157,9 +3176,7 @@ !.Visible = no ) ; - ( ModuleDefn = md_module(_) - ; ModuleDefn = md_end_module(_) - ; ModuleDefn = md_external(_, _) + ( ModuleDefn = md_external(_, _) ; ModuleDefn = md_export(_) ; ModuleDefn = md_import(_) ; ModuleDefn = md_use(_) @@ -3168,7 +3185,23 @@ % Do nothing. ) ; - true + ( Item = item_module_start(_) + ; Item = item_module_end(_) + ; Item = item_clause(_) + ; Item = item_type_defn(_) + ; Item = item_inst_defn(_) + ; Item = item_mode_defn(_) + ; Item = item_pred_decl(_) + ; Item = item_mode_decl(_) + ; Item = item_pragma(_) + ; Item = item_promise(_) + ; Item = item_typeclass(_) + ; Item = item_instance(_) + ; Item = item_initialise(_) + ; Item = item_finalise(_) + ; Item = item_mutable(_) + ; Item = item_nothing(_) + ) ), get_accessible_children_2(!.Visible, Items, !IncludeDeps). @@ -3231,9 +3264,9 @@ ( % Check for a `module' declaration, which signals the start % of a nested module. - Item = item_module_defn(ItemModuleDefn), - ItemModuleDefn = item_module_defn_info(ModuleDefn, Context, SeqNum), - ModuleDefn = md_module(SubModuleName) + Item = item_module_start(ItemModuleStart), + ItemModuleStart = + item_module_start_info(SubModuleName, Context, SeqNum) -> % Parse in the items for the nested submodule. split_into_submodules_2(SubModuleName, Items1, !.InInterface, @@ -3256,9 +3289,8 @@ OtherItems = Items3 ; % Check for a matching `end_module' declaration. - Item = item_module_defn(ItemModuleDefn), - ItemModuleDefn = item_module_defn_info(ModuleDefn, _Context, _), - ModuleDefn = md_end_module(EndModuleName), + Item = item_module_end(ItemModuleEnd), + ItemModuleEnd = item_module_end_info(EndModuleName, _, _), EndModuleName = ModuleName -> % If so, that's the end of this module. @@ -3357,24 +3389,37 @@ list(error_spec)::in, list(error_spec)::out) is det. report_duplicate_modules(Duplicates, Items, !Specs) :- - solutions.solutions(is_duplicate_error(Duplicates, Items), - DuplicateErrors), + list.filter_map(is_duplicate_error(Duplicates), Items, + DuplicateErrorLists), + list.condense(DuplicateErrorLists, DuplicateErrors), list.foldl(report_error_duplicate_module_decl, DuplicateErrors, !Specs). -:- pred is_duplicate_error(set(module_name)::in, list(item)::in, - pair(module_name, prog_context)::out) is nondet. +:- pred is_duplicate_error(set(module_name)::in, item::in, + list(pair(module_name, prog_context))::out) is semidet. -is_duplicate_error(Duplicates, Items, SubModuleName - Context) :- - list.member(Item, Items), - Item = item_module_defn(ItemModuleDefn), - ItemModuleDefn = item_module_defn_info(ModuleDefn, Context, _), +is_duplicate_error(DuplicatesSet, Item, SubModuleNameContexts) :- ( - ModuleDefn = md_module(SubModuleName) + Item = item_module_start(ItemModuleStart), + ItemModuleStart = item_module_start_info(SubModuleName, Context, _), + set.member(SubModuleName, DuplicatesSet), + SubModuleNameContexts = [SubModuleName - Context] ; + Item = item_module_defn(ItemModuleDefn), + ItemModuleDefn = item_module_defn_info(ModuleDefn, Context, _), ModuleDefn = md_include_module(SubModuleNames), - list.member(SubModuleName, SubModuleNames) - ), - set.member(SubModuleName, Duplicates). + set.list_to_set(SubModuleNames, SubModuleNamesSet), + set.intersect(SubModuleNamesSet, DuplicatesSet, + DuplicatedSubModuleNamesSet), + set.to_sorted_list(DuplicatedSubModuleNamesSet, + DuplicatedSubModuleNames), + SubModuleNameContexts = + list.map(pair_with_context(Context), DuplicatedSubModuleNames) + ). + +:- func pair_with_context(prog_context, module_name) = + pair(module_name, prog_context). + +pair_with_context(Context, ModuleName) = ModuleName - Context. :- pred report_error_duplicate_module_decl(pair(module_name, prog_context)::in, list(error_spec)::in, list(error_spec)::out) is det. @@ -3601,7 +3646,9 @@ include_in_short_interface(Item) = Include :- ( - ( Item = item_module_defn(_) + ( Item = item_module_start(_) + ; Item = item_module_end(_) + ; Item = item_module_defn(_) ; Item = item_type_defn(_) ; Item = item_inst_defn(_) ; Item = item_mode_defn(_) @@ -3661,7 +3708,9 @@ ), NeedsImports = yes ; - ( Item = item_module_defn(_) + ( Item = item_module_start(_) + ; Item = item_module_end(_) + ; Item = item_module_defn(_) ; Item = item_nothing(_) ), NeedsImports = no @@ -3732,7 +3781,9 @@ Langs = [] ) ; - ( Item = item_module_defn(_) + ( Item = item_module_start(_) + ; Item = item_module_end(_) + ; Item = item_module_defn(_) ; Item = item_clause(_) ; Item = item_inst_defn(_) ; Item = item_mode_defn(_) @@ -3764,9 +3815,7 @@ ItemModuleDefn = item_module_defn_info(ModuleDefn, _, _), ( % XXX Some of these should yield an exception. - ( ModuleDefn = md_module(_) - ; ModuleDefn = md_end_module(_) - ; ModuleDefn = md_interface + ( ModuleDefn = md_interface ; ModuleDefn = md_implementation ; ModuleDefn = md_private_interface ; ModuleDefn = md_imported(_) @@ -3830,7 +3879,9 @@ Include = no ) ; - ( Item = item_clause(_) + ( Item = item_module_start(_) % ZZZ was yes + ; Item = item_module_end(_) % ZZZ was yes + ; Item = item_clause(_) ; Item = item_inst_defn(_) ; Item = item_mode_defn(_) ; Item = item_pred_decl(_) @@ -4157,7 +4208,9 @@ ), Reorderable = yes ; - ( Item = item_clause(_) + ( Item = item_module_start(_) + ; Item = item_module_end(_) + ; Item = item_clause(_) ; Item = item_pred_decl(_) ; Item = item_mode_decl(_) ; Item = item_initialise(_) @@ -4173,14 +4226,12 @@ reorderable_module_defn(ModuleDefn) = Reorderable :- ( ModuleDefn = md_import(_), Reorderable = yes ; ModuleDefn = md_abstract_imported, Reorderable = no - ; ModuleDefn = md_end_module(_), Reorderable = no ; ModuleDefn = md_export(_), Reorderable = yes ; ModuleDefn = md_external(_, _), Reorderable = yes ; ModuleDefn = md_implementation, Reorderable = no ; ModuleDefn = md_imported(_), Reorderable = no ; ModuleDefn = md_include_module(_), Reorderable = no ; ModuleDefn = md_interface, Reorderable = no - ; ModuleDefn = md_module(_), Reorderable = no ; ModuleDefn = md_opt_imported, Reorderable = no ; ModuleDefn = md_private_interface, Reorderable = no ; ModuleDefn = md_transitively_imported, Reorderable = no @@ -4266,7 +4317,10 @@ ), Chunkable = yes ; - Item = item_mutable(_), + ( Item = item_module_start(_) + ; Item = item_module_end(_) + ; Item = item_mutable(_) + ), Chunkable = no ). @@ -4274,7 +4328,6 @@ chunkable_module_defn(ModuleDefn) = Reorderable :- ( ModuleDefn = md_abstract_imported, Reorderable = no - ; ModuleDefn = md_end_module(_), Reorderable = no ; ModuleDefn = md_export(_), Reorderable = yes ; ModuleDefn = md_external(_, _), Reorderable = yes ; ModuleDefn = md_implementation, Reorderable = no @@ -4282,7 +4335,6 @@ ; ModuleDefn = md_imported(_), Reorderable = no ; ModuleDefn = md_include_module(_), Reorderable = no ; ModuleDefn = md_interface, Reorderable = no - ; ModuleDefn = md_module(_), Reorderable = no ; ModuleDefn = md_opt_imported, Reorderable = no ; ModuleDefn = md_private_interface, Reorderable = no ; ModuleDefn = md_transitively_imported, Reorderable = no Index: compiler/prog_io.m =================================================================== RCS file: /home/mercury/mercury1/repository/mercury/compiler/prog_io.m,v retrieving revision 1.301 diff -u -b -r1.301 prog_io.m --- compiler/prog_io.m 14 Oct 2009 05:28:42 -0000 1.301 +++ compiler/prog_io.m 2 Nov 2009 06:50:10 -0000 @@ -222,21 +222,22 @@ actually_read_module(Globals, OpenFile, DefaultModuleName, ReturnTimestamp, FileData, ModuleName, Items, Specs, Error, MaybeModuleTimestamp, !IO) :- - actually_read_module_2(Globals, OpenFile, DefaultModuleName, + do_actually_read_module(Globals, OpenFile, DefaultModuleName, no, ReturnTimestamp, FileData, ModuleName, Items, Specs, Error, MaybeModuleTimestamp, !IO). actually_read_module_if_changed(Globals, OpenFile, DefaultModuleName, OldTimestamp, FileData, ModuleName, Items, Specs, Error, MaybeModuleTimestamp, !IO) :- - actually_read_module_2(Globals, OpenFile, DefaultModuleName, + do_actually_read_module(Globals, OpenFile, DefaultModuleName, yes(OldTimestamp), do_return_timestamp, FileData, ModuleName, Items, Specs, Error,MaybeModuleTimestamp, !IO). actually_read_opt_file(Globals, FileName, DefaultModuleName, Items, Specs, Error, !IO) :- globals.lookup_accumulating_option(Globals, intermod_directories, Dirs), - actually_read_module_2(Globals, search_for_file(open_file, Dirs, FileName), + do_actually_read_module(Globals, + search_for_file(open_file, Dirs, FileName), DefaultModuleName, no, do_not_return_timestamp, _, ModuleName, Items, ItemSpecs, Error, _, !IO), check_module_has_expected_name(FileName, DefaultModuleName, ModuleName, @@ -263,15 +264,15 @@ % and then reverse them afterwards. (Using difference lists would require % late-input modes.) % -:- pred actually_read_module_2(globals::in, +:- pred do_actually_read_module(globals::in, open_file_pred(T)::in(open_file_pred), module_name::in, maybe(timestamp)::in, maybe_return_timestamp::in, maybe(T)::out, module_name::out, list(item)::out, list(error_spec)::out, module_error::out, maybe(io.res(timestamp))::out, io::di, io::uo) is det. -actually_read_module_2(Globals, OpenFile, DefaultModuleName, MaybeOldTimestamp, - ReturnTimestamp, MaybeFileData, ModuleName, Items, Specs, Error, - MaybeModuleTimestamp, !IO) :- +do_actually_read_module(Globals, OpenFile, DefaultModuleName, + MaybeOldTimestamp, ReturnTimestamp, MaybeFileData, ModuleName, + Items, Specs, Error, MaybeModuleTimestamp, !IO) :- io.input_stream(OldInputStream, !IO), OpenFile(OpenResult, !IO), ( @@ -464,9 +465,8 @@ % nested module, the error will be caught by make_hlds. RevItems0 = [Item | RevItemsPrime], - Item = item_module_defn(ItemModuleDefn), - ItemModuleDefn = item_module_defn_info(ModuleDefn, Context, _SeqNum), - ModuleDefn = md_end_module(ModuleName) + Item = item_module_end(ItemModuleEnd), + ItemModuleEnd = item_module_end_info(ModuleName, Context, _SeqNum) -> RevItems = RevItemsPrime, EndModule = module_end_yes(ModuleName, Context) @@ -490,14 +490,14 @@ % and remove it from the front of the item list. ( !.Items = [Item | !:Items], - Item = item_module_defn(ItemModuleDefn), - ItemModuleDefn = item_module_defn_info(md_module(ModuleName1), _, _) + Item = item_module_start(ItemModuleStart), + ItemModuleStart = item_module_start_info(StartModuleName, _, _) -> % Check that the end module declaration (if any) matches % the begin module declaration. ( EndModule = module_end_yes(EndModuleName, EndModuleContext), - ModuleName1 \= EndModuleName + StartModuleName \= EndModuleName -> Pieces = [words("Error:"), quote(":- end_module"), words("declaration"), @@ -603,8 +603,9 @@ io.input_stream(Stream, !IO), io.input_stream_name(Stream, SourceFileName0, !IO), read_first_item(DefaultModuleName, SourceFileName0, SourceFileName, - ModuleName, RevItems0, MaybeSecondTerm, !:Specs, !:Error, + ModuleName, ModuleDeclItem, MaybeSecondTerm, !:Specs, !:Error, !SeqNumCounter, !IO), + RevItems0 = [ModuleDeclItem], ( MaybeSecondTerm = yes(SecondTerm), % XXX Should this be SourceFileName instead of SourceFileName0? @@ -629,24 +630,24 @@ ). % We need to jump through a few hoops when reading the first item, - % to allow the initial `:- module' declaration to be optional. + % to allow us to recover from a missing initial `:- module' declaration. % The reason is that in order to parse an item, we need to know % which module it is defined in (because we do some module % qualification and checking of module qualifiers at parse time), % but the initial `:- module' declaration and the declaration % that follows it occur in different scopes, so we need to know - % what it is that we're parsing before we can parse it! + % what it is that we are parsing before we can parse it! % We solve this dilemma by first parsing it in the root scope, % and then if it turns out to not be a `:- module' declaration % we reparse it in the default module scope. Blecchh. % :- pred read_first_item(module_name::in, file_name::in, file_name::out, - module_name::out, list(item)::out, maybe(read_term)::out, + module_name::out, item::out, maybe(read_term)::out, list(error_spec)::out, module_error::out, counter::in, counter::out, io::di, io::uo) is det. read_first_item(DefaultModuleName, !SourceFileName, ModuleName, - Items, MaybeSecondTerm, Specs, Error, !SeqNumCounter, !IO) :- + ModuleDeclItem, MaybeSecondTerm, Specs, Error, !SeqNumCounter, !IO) :- % Parse the first term, treating it as occurring within the scope % of the special "root" module (so that any `:- module' declaration % is taken to be a non-nested module unless explicitly qualified). @@ -662,30 +663,31 @@ Pragma = pragma_source_file(!:SourceFileName) -> read_first_item(DefaultModuleName, !SourceFileName, ModuleName, - Items, MaybeSecondTerm, Specs, Error, !SeqNumCounter, !IO) + ModuleDeclItem, MaybeSecondTerm, Specs, Error, !SeqNumCounter, !IO) ; % Check if the first term was a `:- module' decl. MaybeFirstItem = read_item_ok(FirstItem), - FirstItem = item_module_defn(FirstItemModuleDefn), - FirstItemModuleDefn = item_module_defn_info(ModuleDefn, FirstContext, - _FirstItemSeqNum), - ModuleDefn = md_module(StartModuleName) + FirstItem = item_module_start(FirstItemModuleStart), + FirstItemModuleStart = item_module_start_info(StartModuleName, + FirstContext, _FirstItemSeqNum) -> % If so, then check that it matches the expected module name, % and if not, report a warning. ( match_sym_name(StartModuleName, DefaultModuleName) -> ModuleName = DefaultModuleName, - Specs = [] + Specs = [], + Error = no_module_errors ; match_sym_name(DefaultModuleName, StartModuleName) -> ModuleName = StartModuleName, - Specs = [] + Specs = [], + Error = no_module_errors ; % XXX I think this should be an error, not a warning. -zs - Pieces = [words("Warning: source file"), quote(!.SourceFileName), + Pieces = [words("Error: source file"), quote(!.SourceFileName), words("contains module named"), sym_name(StartModuleName), suffix("."), nl], Severity = severity_conditional(warn_wrong_module_name, yes, - severity_warning, no), + severity_error, no), Msgs = [option_is_set(warn_wrong_module_name, yes, [always(Pieces)])], Spec = error_spec(Severity, phase_term_to_parse_tree, @@ -695,49 +697,42 @@ % Which one should we use here? We used to use the default module % name (computed from the filename) but now we use the declared % one. - ModuleName = StartModuleName + ModuleName = StartModuleName, + Error = some_module_errors ), - make_module_decl(ModuleName, FirstContext, FixedFirstItem), - Items = [FixedFirstItem], - Error = no_module_errors, + make_module_decl(ModuleName, FirstContext, ModuleDeclItem), MaybeSecondTerm = no ; - % If the first term was not a `:- module' decl, then issue a warning - % (if warning enabled), and insert an implicit `:- module ModuleName' - % decl. + % If the first term was not a `:- module' decl, then generate an + % error message, and insert an implicit `:- module ModuleName' decl. ( MaybeFirstItem = read_item_ok(FirstItem) -> FirstContext = get_item_context(FirstItem) ; term.context_init(!.SourceFileName, 1, FirstContext) ), - % XXX I think this should be an error, not a warning. -zs - Pieces = [words("Warning: module should start with a"), + Pieces = [words("Error: module should start with a"), quote(":- module"), words("declaration."), nl], - Severity = severity_conditional(warn_missing_module_name, yes, - severity_warning, no), - Msgs = [option_is_set(warn_missing_module_name, yes, - [always(Pieces)])], + Severity = severity_error, + Msgs = [always(Pieces)], Spec = error_spec(Severity, phase_term_to_parse_tree, [simple_msg(FirstContext, Msgs)]), Specs = [Spec], + Error = some_module_errors, ModuleName = DefaultModuleName, - make_module_decl(ModuleName, FirstContext, FixedFirstItem), + make_module_decl(ModuleName, FirstContext, ModuleDeclItem), % Reparse the first term, this time treating it as occuring within % the scope of the implicit `:- module' decl rather than in the % root module. - MaybeSecondTerm = yes(MaybeFirstTerm), - Items = [FixedFirstItem], - Error = no_module_errors + MaybeSecondTerm = yes(MaybeFirstTerm) ). :- pred make_module_decl(module_name::in, term.context::in, item::out) is det. make_module_decl(ModuleName, Context, Item) :- - ModuleDefn = md_module(ModuleName), - ItemInfo = item_module_defn_info(ModuleDefn, Context, -1), - Item = item_module_defn(ItemInfo). + ItemInfo = item_module_start_info(ModuleName, Context, -1), + Item = item_module_start(ItemInfo). %-----------------------------------------------------------------------------% @@ -794,43 +789,8 @@ list(error_spec)::in, list(error_spec)::out, module_error::in, module_error::out, io::di, io::uo) is det. -read_items_loop_ok(Globals, Item0, !ModuleName, !SourceFileName, !Items, +read_items_loop_ok(Globals, Item, !ModuleName, !SourceFileName, !Items, !Specs, !Error, !IO) :- - ( - Item0 = item_nothing(ItemNothing0), - ItemNothing0 = item_nothing_info(yes(Warning), Context0, NothingSeqNum) - -> - Warning = item_warning(MaybeOption, Msg, Term), - ( - MaybeOption = yes(Option), - globals.lookup_bool_option(Globals, Option, Warn) - ; - MaybeOption = no, - Warn = yes - ), - ( - Warn = yes, - Pieces = [words("Warning: "), words(Msg), nl], - Spec = error_spec(severity_error, phase_term_to_parse_tree, - [simple_msg(get_term_context(Term), [always(Pieces)])]), - !:Specs = [Spec | !.Specs], - - globals.lookup_bool_option(Globals, halt_at_warn, Halt), - ( - Halt = yes, - !:Error = some_module_errors - ; - Halt = no - ) - ; - Warn = no - ), - ItemNothing = item_nothing_info(no, Context0, NothingSeqNum), - Item = item_nothing(ItemNothing) - ; - Item = Item0 - ), - % If the next item was a valid item, check whether it was a declaration % that affects the current parsing context -- i.e. either a `module' or % `end_module' declaration, or a `pragma source_file' declaration. @@ -838,24 +798,21 @@ % is a `pragma source_file' declaration, insert it into the item list. % Then continue looping. ( - Item = item_pragma(ItemPragma), - ItemPragma = item_pragma_info(_, Pragma, _, _), - Pragma = pragma_source_file(NewSourceFileName) - -> - !:SourceFileName = NewSourceFileName - ; - Item = item_module_defn(ItemModuleDefn) - -> - ItemModuleDefn = item_module_defn_info(ModuleDefn, Context, SeqNum), - ( ModuleDefn = md_module(NestedModuleName) -> + Item = item_module_start(ItemModuleStart), + ItemModuleStart = item_module_start_info(NestedModuleName, _, _), !:ModuleName = NestedModuleName, !:Items = [Item | !.Items] - ; ModuleDefn = md_end_module(NestedModuleName) -> + ; + Item = item_module_end(ItemModuleEnd), + ItemModuleEnd = item_module_end_info(NestedModuleName, _, _), sym_name_get_module_name_default(NestedModuleName, root_module_name, ParentModuleName), !:ModuleName = ParentModuleName, !:Items = [Item | !.Items] - ; ModuleDefn = md_import(Modules) -> + ; + Item = item_module_defn(ItemModuleDefn), + ItemModuleDefn = item_module_defn_info(ModuleDefn, Context, SeqNum), + ( ModuleDefn = md_import(Modules) -> list.map(make_pseudo_import_module_decl(Context, SeqNum), Modules, ImportItems), !:Items = ImportItems ++ !.Items @@ -871,7 +828,65 @@ !:Items = [Item | !.Items] ) ; + Item = item_pragma(ItemPragma), + ItemPragma = item_pragma_info(_, Pragma, _, _), + ( Pragma = pragma_source_file(NewSourceFileName) -> + !:SourceFileName = NewSourceFileName + ; + !:Items = [Item | !.Items] + ) + ; + ( Item = item_clause(_) + ; Item = item_type_defn(_) + ; Item = item_inst_defn(_) + ; Item = item_mode_defn(_) + ; Item = item_pred_decl(_) + ; Item = item_mode_decl(_) + ; Item = item_promise(_) + ; Item = item_typeclass(_) + ; Item = item_instance(_) + ; Item = item_initialise(_) + ; Item = item_finalise(_) + ; Item = item_mutable(_) + ), !:Items = [Item | !.Items] + ; + Item = item_nothing(ItemNothing), + ItemNothing = item_nothing_info(MaybeWarning, Context, NothingSeqNum), + ( + MaybeWarning = no, + !:Items = [Item | !.Items] + ; + MaybeWarning = yes(Warning), + Warning = item_warning(MaybeOption, Msg, Term), + ( + MaybeOption = yes(Option), + globals.lookup_bool_option(Globals, Option, Warn) + ; + MaybeOption = no, + Warn = yes + ), + ( + Warn = yes, + Pieces = [words("Warning: "), words(Msg), nl], + Spec = error_spec(severity_error, phase_term_to_parse_tree, + [simple_msg(get_term_context(Term), [always(Pieces)])]), + !:Specs = [Spec | !.Specs], + + globals.lookup_bool_option(Globals, halt_at_warn, Halt), + ( + Halt = yes, + !:Error = some_module_errors + ; + Halt = no + ) + ; + Warn = no + ), + NoWarnItemNothing = item_nothing_info(no, Context, NothingSeqNum), + NoWarnItem = item_nothing(NoWarnItemNothing), + !:Items = [NoWarnItem | !.Items] + ) ). %-----------------------------------------------------------------------------% @@ -1155,10 +1170,9 @@ MaybeModuleNameSym), ( MaybeModuleNameSym = ok1(ModuleNameSym), - ModuleDefn = md_module(ModuleNameSym), - ItemModuleDefn = - item_module_defn_info(ModuleDefn, Context, SeqNum), - Item = item_module_defn(ItemModuleDefn), + ItemModuleStart = + item_module_start_info(ModuleNameSym, Context, SeqNum), + Item = item_module_start(ItemModuleStart), MaybeItem0 = ok1(Item) ; MaybeModuleNameSym = error1(Specs), @@ -1166,23 +1180,6 @@ ), check_no_attributes(MaybeItem0, Attributes, MaybeItem) ; - Functor = "include_module", - ArgTerms = [ModuleNamesTerm], - parse_list(parse_module_name(ModuleName, VarSet), ModuleNamesTerm, - MaybeModuleNameSyms), - ( - MaybeModuleNameSyms = ok1(ModuleNameSyms), - ModuleDefn = md_include_module(ModuleNameSyms), - ItemModuleDefn = - item_module_defn_info(ModuleDefn, Context, SeqNum), - Item = item_module_defn(ItemModuleDefn), - MaybeItem0 = ok1(Item) - ; - MaybeModuleNameSyms = error1(Specs), - MaybeItem0 = error1(Specs) - ), - check_no_attributes(MaybeItem0, Attributes, MaybeItem) - ; Functor = "end_module", ArgTerms = [ModuleNameTerm], % The name in an `end_module' declaration not inside the scope of the @@ -1195,13 +1192,29 @@ MaybeModuleNameSym), ( MaybeModuleNameSym = ok1(ModuleNameSym), - ModuleDefn = md_end_module(ModuleNameSym), + ItemModuleEnd = + item_module_end_info(ModuleNameSym, Context, SeqNum), + Item = item_module_end(ItemModuleEnd), + MaybeItem0 = ok1(Item) + ; + MaybeModuleNameSym = error1(Specs), + MaybeItem0 = error1(Specs) + ), + check_no_attributes(MaybeItem0, Attributes, MaybeItem) + ; + Functor = "include_module", + ArgTerms = [ModuleNamesTerm], + parse_list(parse_module_name(ModuleName, VarSet), ModuleNamesTerm, + MaybeModuleNameSyms), + ( + MaybeModuleNameSyms = ok1(ModuleNameSyms), + ModuleDefn = md_include_module(ModuleNameSyms), ItemModuleDefn = item_module_defn_info(ModuleDefn, Context, SeqNum), Item = item_module_defn(ItemModuleDefn), MaybeItem0 = ok1(Item) ; - MaybeModuleNameSym = error1(Specs), + MaybeModuleNameSyms = error1(Specs), MaybeItem0 = error1(Specs) ), check_no_attributes(MaybeItem0, Attributes, MaybeItem) Index: compiler/prog_item.m =================================================================== RCS file: /home/mercury/mercury1/repository/mercury/compiler/prog_item.m,v retrieving revision 1.38 diff -u -b -r1.38 prog_item.m --- compiler/prog_item.m 10 Mar 2009 05:00:28 -0000 1.38 +++ compiler/prog_item.m 2 Nov 2009 06:50:58 -0000 @@ -93,7 +93,9 @@ % pragmas. XXX Why? :- type item - ---> item_module_defn(item_module_defn_info) + ---> item_module_start(item_module_start_info) + ; item_module_end(item_module_end_info) + ; item_module_defn(item_module_defn_info) ; item_clause(item_clause_info) ; item_type_defn(item_type_defn_info) ; item_inst_defn(item_inst_defn_info) @@ -109,6 +111,20 @@ ; item_mutable(item_mutable_info) ; item_nothing(item_nothing_info). +:- type item_module_start_info + ---> item_module_start_info( + module_start_module_name :: module_name, + module_start_context :: prog_context, + module_start_seq_num :: int + ). + +:- type item_module_end_info + ---> item_module_end_info( + module_end_module_name :: module_name, + module_end_context :: prog_context, + module_end_seq_num :: int + ). + :- type item_module_defn_info ---> item_module_defn_info( module_defn_module_defn :: module_defn, @@ -430,9 +446,8 @@ % :- type pragma_type - % - % Foreign language interfacing pragmas - % + % Foreign language interfacing pragmas. + % A foreign language declaration, such as C header code. ---> pragma_foreign_decl( decl_lang :: foreign_language, @@ -506,9 +521,9 @@ foreign_enum_type_arity :: arity, foreign_enum_values :: assoc_list(sym_name, string) ) - % - % Optimization pragmas - % + + % Optimization pragmas. + ; pragma_type_spec( tspec_pred_name :: sym_name, tspec_new_name :: sym_name, @@ -558,28 +573,26 @@ ) ; pragma_trailing_info( + % PredName, Arity, Mode number, Trailing status. + % Should on appear in `.opt' or `.trans_opt' files. trailing_info_p_or_f :: pred_or_func, trailing_info_name :: sym_name, trailing_info_arity :: arity, trailing_info_mode :: mode_num, trailing_info_status :: trailing_status ) - % PredName, Arity, Mode number, Trailing status. - % Should on appear in `.opt' or `.trans_opt' files. ; pragma_mm_tabling_info( + % PredName, Arity, Mode number, MM Tabling status. + % Should on appear in `.opt' or `.trans_opt' files. mm_tabling_info_p_or_f :: pred_or_func, mm_tabling_info_name :: sym_name, mm_tabling_info_arity :: arity, mm_tabling_info_mode :: mode_num, mm_tabling_info_status :: mm_tabling_status ) - % PredName, Arity, Mode number, MM Tabling status. - % Should on appear in `.opt' or `.trans_opt' files. - % - % Diagnostics pragmas (pragmas related to compiler warnings/errors) - % + % Diagnostics pragmas (pragmas related to compiler warnings/errors). ; pragma_obsolete( obsolete_name :: sym_name, @@ -588,13 +601,11 @@ ) ; pragma_source_file( - pragma_source_file :: string % Source file name. + pragma_source_file :: string ) - % - % Evaluation method pragmas - % + % Evaluation method pragmas. ; pragma_tabled( tabled_method :: eval_method, @@ -619,9 +630,7 @@ % Typename, Arity ) - % - % Purity pragmas - % + % Purity pragmas. ; pragma_promise_equivalent_clauses( eqv_clauses_name :: sym_name, @@ -641,9 +650,7 @@ % Predname, Arity ) - % - % Termination analysis pragmas - % + % Termination analysis pragmas. ; pragma_termination_info( terminfo_p_or_f :: pred_or_func, @@ -694,9 +701,7 @@ mode_check_clause_arity :: arity ) - % % CTGC pragmas: structure sharing / structure reuse analysis. - % ; pragma_structure_sharing( sharing_p_or_f :: pred_or_func, @@ -730,6 +735,8 @@ % The last sym_name (reuse_optimised_name) stores the name of the % optimised version of the exported predicate. + % Misc pragmas. + ; pragma_require_feature_set( rfs_feature_set :: set(required_feature) ). @@ -857,17 +864,14 @@ %-----------------------------------------------------------------------------% % -% Module system +% Module system. % - % This is how module-system declarations (such as imports and exports) - % are represented. + % This is how most module-system declarations (such as imports and exports, + % but not including the starts and ends of modules) are represented. % :- type module_defn - ---> md_module(module_name) - ; md_end_module(module_name) - - ; md_interface + ---> md_interface ; md_implementation ; md_private_interface @@ -950,6 +954,12 @@ get_item_context(Item) = Context :- ( + Item = item_module_start(ItemModuleStart), + Context = ItemModuleStart ^ module_start_context + ; + Item = item_module_end(ItemModuleEnd), + Context = ItemModuleEnd ^ module_end_context + ; Item = item_module_defn(ItemModuleDefn), Context = ItemModuleDefn ^ module_defn_context ; Index: compiler/recompilation.check.m =================================================================== RCS file: /home/mercury/mercury1/repository/mercury/compiler/recompilation.check.m,v retrieving revision 1.50 diff -u -b -r1.50 recompilation.check.m --- compiler/recompilation.check.m 14 Oct 2009 05:28:43 -0000 1.50 +++ compiler/recompilation.check.m 31 Oct 2009 13:54:07 -0000 @@ -936,10 +936,12 @@ check_for_pred_or_func_item_ambiguity(no, NeedQualifier, OldTimestamp, VersionNumbers, PredOrFunc, Name, Args, WithType, !Info) ; - ( Item = item_mode_decl(_) + ( Item = item_module_start(_) + ; Item = item_module_end(_) + ; Item = item_module_defn(_) + ; Item = item_mode_decl(_) ; Item = item_pragma(_) ; Item = item_promise(_) - ; Item = item_module_defn(_) ; Item = item_instance(_) ; Item = item_initialise(_) ; Item = item_finalise(_) Index: compiler/recompilation.version.m =================================================================== RCS file: /home/mercury/mercury1/repository/mercury/compiler/recompilation.version.m,v retrieving revision 1.70 diff -u -b -r1.70 recompilation.version.m --- compiler/recompilation.version.m 4 Nov 2009 03:44:50 -0000 1.70 +++ compiler/recompilation.version.m 4 Nov 2009 03:45:57 -0000 @@ -515,7 +515,9 @@ item_to_item_id_2(Item, MaybeItemId) :- ( - ( Item = item_module_defn(_) + ( Item = item_module_start(_) + ; Item = item_module_end(_) + ; Item = item_module_defn(_) ; Item = item_clause(_) ; Item = item_promise(_) ; Item = item_initialise(_) @@ -700,6 +702,28 @@ item_is_unchanged(Item1, Item2) = Unchanged :- ( + Item1 = item_module_start(ItemModuleStart1), + ItemModuleStart1 = item_module_start_info(ModuleName, _, _), + ( + Item2 = item_module_start(ItemModuleStart2), + ItemModuleStart2 = item_module_start_info(ModuleName, _, _) + -> + Unchanged = yes + ; + Unchanged = no + ) + ; + Item1 = item_module_end(ItemModuleEnd1), + ItemModuleEnd1 = item_module_end_info(ModuleName, _, _), + ( + Item2 = item_module_end(ItemModuleEnd2), + ItemModuleEnd2 = item_module_end_info(ModuleName, _, _) + -> + Unchanged = yes + ; + Unchanged = no + ) + ; Item1 = item_module_defn(ItemModuleDefn1), ItemModuleDefn1 = item_module_defn_info(ModuleDefn, _, _), ( cvs diff: Diffing compiler/notes cvs diff: Diffing debian cvs diff: Diffing debian/patches cvs diff: Diffing deep_profiler cvs diff: Diffing deep_profiler/notes cvs diff: Diffing doc cvs diff: Diffing extras cvs diff: Diffing extras/base64 cvs diff: Diffing extras/cgi cvs diff: Diffing extras/complex_numbers cvs diff: Diffing extras/complex_numbers/samples cvs diff: Diffing extras/complex_numbers/tests cvs diff: Diffing extras/concurrency cvs diff: Diffing extras/curs cvs diff: Diffing extras/curs/samples cvs diff: Diffing extras/curses cvs diff: Diffing extras/curses/sample cvs diff: Diffing extras/dynamic_linking cvs diff: Diffing extras/error cvs diff: Diffing extras/fixed cvs diff: Diffing extras/gator cvs diff: Diffing extras/gator/generations cvs diff: Diffing extras/gator/generations/1 cvs diff: Diffing extras/graphics cvs diff: Diffing extras/graphics/easyx cvs diff: Diffing extras/graphics/easyx/samples cvs diff: Diffing extras/graphics/mercury_allegro cvs diff: Diffing extras/graphics/mercury_allegro/examples cvs diff: Diffing extras/graphics/mercury_allegro/samples cvs diff: Diffing extras/graphics/mercury_allegro/samples/demo cvs diff: Diffing extras/graphics/mercury_allegro/samples/mandel cvs diff: Diffing extras/graphics/mercury_allegro/samples/pendulum2 cvs diff: Diffing extras/graphics/mercury_allegro/samples/speed cvs diff: Diffing extras/graphics/mercury_glut cvs diff: Diffing extras/graphics/mercury_opengl cvs diff: Diffing extras/graphics/mercury_tcltk cvs diff: Diffing extras/graphics/samples cvs diff: Diffing extras/graphics/samples/calc cvs diff: Diffing extras/graphics/samples/gears cvs diff: Diffing extras/graphics/samples/maze cvs diff: Diffing extras/graphics/samples/pent cvs diff: Diffing extras/lazy_evaluation cvs diff: Diffing extras/lex cvs diff: Diffing extras/lex/samples cvs diff: Diffing extras/lex/tests cvs diff: Diffing extras/log4m cvs diff: Diffing extras/logged_output cvs diff: Diffing extras/moose cvs diff: Diffing extras/moose/samples cvs diff: Diffing extras/moose/tests cvs diff: Diffing extras/mopenssl cvs diff: Diffing extras/morphine cvs diff: Diffing extras/morphine/non-regression-tests cvs diff: Diffing extras/morphine/scripts cvs diff: Diffing extras/morphine/source cvs diff: Diffing extras/net cvs diff: Diffing extras/odbc cvs diff: Diffing extras/posix cvs diff: Diffing extras/posix/samples cvs diff: Diffing extras/quickcheck cvs diff: Diffing extras/quickcheck/tutes cvs diff: Diffing extras/references cvs diff: Diffing extras/references/samples cvs diff: Diffing extras/references/tests cvs diff: Diffing extras/solver_types cvs diff: Diffing extras/solver_types/library cvs diff: Diffing extras/trailed_update cvs diff: Diffing extras/trailed_update/samples cvs diff: Diffing extras/trailed_update/tests cvs diff: Diffing extras/windows_installer_generator cvs diff: Diffing extras/windows_installer_generator/sample cvs diff: Diffing extras/windows_installer_generator/sample/images cvs diff: Diffing extras/xml cvs diff: Diffing extras/xml/samples cvs diff: Diffing extras/xml_stylesheets cvs diff: Diffing java cvs diff: Diffing java/runtime cvs diff: Diffing library cvs diff: Diffing mdbcomp cvs diff: Diffing profiler cvs diff: Diffing robdd cvs diff: Diffing runtime cvs diff: Diffing runtime/GETOPT cvs diff: Diffing runtime/machdeps cvs diff: Diffing samples cvs diff: Diffing samples/c_interface cvs diff: Diffing samples/c_interface/c_calls_mercury cvs diff: Diffing samples/c_interface/cplusplus_calls_mercury cvs diff: Diffing samples/c_interface/mercury_calls_c cvs diff: Diffing samples/c_interface/mercury_calls_cplusplus cvs diff: Diffing samples/c_interface/mercury_calls_fortran cvs diff: Diffing samples/c_interface/simpler_c_calls_mercury cvs diff: Diffing samples/c_interface/simpler_cplusplus_calls_mercury cvs diff: Diffing samples/c_interface/standalone_c cvs diff: Diffing samples/diff cvs diff: Diffing samples/muz cvs diff: Diffing samples/rot13 cvs diff: Diffing samples/solutions cvs diff: Diffing samples/solver_types cvs diff: Diffing samples/tests cvs diff: Diffing samples/tests/c_interface cvs diff: Diffing samples/tests/c_interface/c_calls_mercury cvs diff: Diffing samples/tests/c_interface/cplusplus_calls_mercury cvs diff: Diffing samples/tests/c_interface/mercury_calls_c cvs diff: Diffing samples/tests/c_interface/mercury_calls_cplusplus cvs diff: Diffing samples/tests/c_interface/mercury_calls_fortran cvs diff: Diffing samples/tests/c_interface/simpler_c_calls_mercury cvs diff: Diffing samples/tests/c_interface/simpler_cplusplus_calls_mercury cvs diff: Diffing samples/tests/diff cvs diff: Diffing samples/tests/muz cvs diff: Diffing samples/tests/rot13 cvs diff: Diffing samples/tests/solutions cvs diff: Diffing samples/tests/toplevel cvs diff: Diffing scripts cvs diff: Diffing slice cvs diff: Diffing ssdb cvs diff: Diffing tests cvs diff: Diffing tests/analysis cvs diff: Diffing tests/analysis/ctgc cvs diff: Diffing tests/analysis/excp cvs diff: Diffing tests/analysis/ext cvs diff: Diffing tests/analysis/sharing cvs diff: Diffing tests/analysis/table cvs diff: Diffing tests/analysis/trail cvs diff: Diffing tests/analysis/unused_args cvs diff: Diffing tests/benchmarks cvs diff: Diffing tests/debugger cvs diff: Diffing tests/debugger/declarative cvs diff: Diffing tests/dppd cvs diff: Diffing tests/general cvs diff: Diffing tests/general/accumulator cvs diff: Diffing tests/general/string_format cvs diff: Diffing tests/general/structure_reuse cvs diff: Diffing tests/grade_subdirs cvs diff: Diffing tests/hard_coded cvs diff: Diffing tests/hard_coded/exceptions cvs diff: Diffing tests/hard_coded/purity cvs diff: Diffing tests/hard_coded/sub-modules cvs diff: Diffing tests/hard_coded/typeclasses cvs diff: Diffing tests/invalid Index: tests/invalid/bigtest.err_exp =================================================================== RCS file: /home/mercury/mercury1/repository/tests/invalid/bigtest.err_exp,v retrieving revision 1.17 diff -u -b -r1.17 bigtest.err_exp --- tests/invalid/bigtest.err_exp 14 Aug 2009 20:37:54 -0000 1.17 +++ tests/invalid/bigtest.err_exp 2 Nov 2009 15:07:38 -0000 @@ -1,3 +1,4 @@ +bigtest.m:001: Error: module should start with a `:- module' declaration. bigtest.m:001: Error: unrecognized declaration: bigtest.m:001: export_sym(((list / 1) , ((append / 3) , member))). bigtest.m:001: Warning: interface for module `bigtest' does not export @@ -7,7 +8,6 @@ bigtest.m:001: in its interface section(s). This would normally be a bigtest.m:001: `:- pred', `:- func', `:- type', `:- inst' or `:- mode' bigtest.m:001: declaration. -bigtest.m:001: Warning: module should start with a `:- module' declaration. bigtest.m:002: Error: unrecognized declaration: bigtest.m:002: export_pred(((append / 3) , member)). bigtest.m:003: Error: unrecognized declaration: Index: tests/invalid/errors.err_exp =================================================================== RCS file: /home/mercury/mercury1/repository/tests/invalid/errors.err_exp,v retrieving revision 1.19 diff -u -b -r1.19 errors.err_exp --- tests/invalid/errors.err_exp 14 Aug 2009 20:37:54 -0000 1.19 +++ tests/invalid/errors.err_exp 2 Nov 2009 15:07:47 -0000 @@ -1,7 +1,7 @@ errors.m:001: Warning: interface for module `errors' does not export anything. errors.m:001: Warning: module `int' is imported using both `:- import_module' errors.m:001: `:- use_module' declarations. -errors.m:010: Warning: module should start with a `:- module' declaration. +errors.m:010: Error: module should start with a `:- module' declaration. errors.m:028: Error: mode declaration for predicate errors.m:028: `errors.mode_declaration_without_pred_declaration'/0 errors.m:028: without preceding `pred' declaration. Index: tests/invalid/typeclass_test_1.err_exp =================================================================== RCS file: /home/mercury/mercury1/repository/tests/invalid/typeclass_test_1.err_exp,v retrieving revision 1.10 diff -u -b -r1.10 typeclass_test_1.err_exp --- tests/invalid/typeclass_test_1.err_exp 14 Aug 2009 20:37:55 -0000 1.10 +++ tests/invalid/typeclass_test_1.err_exp 2 Nov 2009 15:08:00 -0000 @@ -1,4 +1,4 @@ -typeclass_test_1.m:001: Warning: module should start with a `:- module' +typeclass_test_1.m:001: Error: module should start with a `:- module' typeclass_test_1.m:001: declaration. typeclass_test_1.m:007: In clause for predicate `main'/2: typeclass_test_1.m:007: unsatisfiable typeclass constraint: cvs diff: Diffing tests/invalid/purity cvs diff: Diffing tests/misc_tests cvs diff: Diffing tests/mmc_make cvs diff: Diffing tests/mmc_make/lib cvs diff: Diffing tests/par_conj cvs diff: Diffing tests/recompilation cvs diff: Diffing tests/stm cvs diff: Diffing tests/stm/orig cvs diff: Diffing tests/stm/orig/stm-compiler cvs diff: Diffing tests/stm/orig/stm-compiler/test1 cvs diff: Diffing tests/stm/orig/stm-compiler/test10 cvs diff: Diffing tests/stm/orig/stm-compiler/test2 cvs diff: Diffing tests/stm/orig/stm-compiler/test3 cvs diff: Diffing tests/stm/orig/stm-compiler/test4 cvs diff: Diffing tests/stm/orig/stm-compiler/test5 cvs diff: Diffing tests/stm/orig/stm-compiler/test6 cvs diff: Diffing tests/stm/orig/stm-compiler/test7 cvs diff: Diffing tests/stm/orig/stm-compiler/test8 cvs diff: Diffing tests/stm/orig/stm-compiler/test9 cvs diff: Diffing tests/stm/orig/stm-compiler-par cvs diff: Diffing tests/stm/orig/stm-compiler-par/bm1 cvs diff: Diffing tests/stm/orig/stm-compiler-par/bm2 cvs diff: Diffing tests/stm/orig/stm-compiler-par/stmqueue cvs diff: Diffing tests/stm/orig/stm-compiler-par/test1 cvs diff: Diffing tests/stm/orig/stm-compiler-par/test10 cvs diff: Diffing tests/stm/orig/stm-compiler-par/test11 cvs diff: Diffing tests/stm/orig/stm-compiler-par/test2 cvs diff: Diffing tests/stm/orig/stm-compiler-par/test3 cvs diff: Diffing tests/stm/orig/stm-compiler-par/test4 cvs diff: Diffing tests/stm/orig/stm-compiler-par/test5 cvs diff: Diffing tests/stm/orig/stm-compiler-par/test6 cvs diff: Diffing tests/stm/orig/stm-compiler-par/test7 cvs diff: Diffing tests/stm/orig/stm-compiler-par/test8 cvs diff: Diffing tests/stm/orig/stm-compiler-par/test9 cvs diff: Diffing tests/stm/orig/stm-compiler-par-asm_fast cvs diff: Diffing tests/stm/orig/stm-compiler-par-asm_fast/test1 cvs diff: Diffing tests/stm/orig/stm-compiler-par-asm_fast/test2 cvs diff: Diffing tests/stm/orig/stm-compiler-par-asm_fast/test3 cvs diff: Diffing tests/stm/orig/stm-compiler-par-asm_fast/test4 cvs diff: Diffing tests/stm/orig/stm-compiler-par-asm_fast/test5 cvs diff: Diffing tests/stm/orig/stm-compiler-par-asm_fast/test6 cvs diff: Diffing tests/stm/orig/stm-compiler-par-asm_fast/test7 cvs diff: Diffing tests/stm/orig/stm-compiler-par-asm_fast/test8 cvs diff: Diffing tests/stm/orig/stm-compiler-par-asm_fast/test9 cvs diff: Diffing tests/tabling cvs diff: Diffing tests/term cvs diff: Diffing tests/trailing cvs diff: Diffing tests/valid Index: tests/valid/inhibit_warn_test.m =================================================================== RCS file: /home/mercury/mercury1/repository/tests/valid/inhibit_warn_test.m,v retrieving revision 1.1 diff -u -b -r1.1 inhibit_warn_test.m --- tests/valid/inhibit_warn_test.m 5 Jan 1998 08:40:43 -0000 1.1 +++ tests/valid/inhibit_warn_test.m 2 Nov 2009 15:10:04 -0000 @@ -1,4 +1,4 @@ -% missing `:- module' declaration +:- module inhibit_warn_test. :- pred p(int). :- mode p(out) is semidet. % determinism could be tighter p(1). cvs diff: Diffing tests/warnings cvs diff: Diffing tools cvs diff: Diffing trace cvs diff: Diffing util cvs diff: Diffing vim cvs diff: Diffing vim/after cvs diff: Diffing vim/ftplugin cvs diff: Diffing vim/syntax -------------------------------------------------------------------------- mercury-reviews mailing list Post messages to: mercury-reviews@... Administrative Queries: owner-mercury-reviews@... Subscriptions: mercury-reviews-request@... -------------------------------------------------------------------------- |
|
|
Re: for review: representation of ":- module" and ":- end_module"On Wed, 4 Nov 2009, Zoltan Somogyi wrote: > I am seeking feedback mostly on the user-visible change in behavior in > the absence of :- module declarations at the starts of source files, > though comments on the code are also welcome. I will fix the ZZZs before > commit. The new behaviour is fine by me. I suggest s/should/must in the error message, e.g. errors.m:010: Error: module must start with a `:- module' declaration. instead of: errors.m:010: Error: module should start with a `:- module' declaration. The former seems more direct. The diff appears fine. Julien. -------------------------------------------------------------------------- mercury-reviews mailing list Post messages to: mercury-reviews@... Administrative Queries: owner-mercury-reviews@... Subscriptions: mercury-reviews-request@... -------------------------------------------------------------------------- |
|
|
Re: for review: representation of ":- module" and ":- end_module"On 05-Nov-2009, Julien Fischer <juliensf@...> wrote:
> errors.m:010: Error: module must start with a `:- module' declaration. > > instead of: > > errors.m:010: Error: module should start with a `:- module' > declaration. > > The former seems more direct. Done, and committed. Zoltan. -------------------------------------------------------------------------- mercury-reviews mailing list Post messages to: mercury-reviews@... Administrative Queries: owner-mercury-reviews@... Subscriptions: mercury-reviews-request@... -------------------------------------------------------------------------- |
| Free embeddable forum powered by Nabble | Forum Help |