comparison host/libcdl/parse.cxx @ 163:0d2b193a635f

Merge from eCos master repository on 2001-06-22-17:38:39-BST
author jlarmour
date Fri, 22 Jun 2001 18:18:44 +0000
parents 6ed91473a1cd
children fbfd52cf7976
comparison
equal deleted inserted replaced
162:2395031e7a66 163:0d2b193a635f
799 if (0 != new_property) { 799 if (0 != new_property) {
800 delete new_property; 800 delete new_property;
801 } 801 }
802 throw; 802 throw;
803 } 803 }
804 804
805 CYG_REPORT_RETURN();
805 return TCL_OK; 806 return TCL_OK;
806 } 807 }
807 808
808 //}}} 809 //}}}
809 //{{{ parse_tclcode_property() 810 //{{{ parse_tclcode_property()
899 // ---------------------------------------------------------------------------- 900 // ----------------------------------------------------------------------------
900 901
901 int 902 int
902 CdlParse::parse_reference_property(CdlInterpreter interp, int argc, char** argv, std::string name, 903 CdlParse::parse_reference_property(CdlInterpreter interp, int argc, char** argv, std::string name,
903 char** options_desc, void (*final_parser)(CdlInterpreter, CdlProperty_Reference), 904 char** options_desc, void (*final_parser)(CdlInterpreter, CdlProperty_Reference),
904 CdlUpdateHandler update_handler) 905 bool allow_empty, CdlUpdateHandler update_handler)
905 { 906 {
906 CYG_REPORT_FUNCNAME("parse_reference_property"); 907 CYG_REPORT_FUNCNAME("parse_reference_property");
907 CYG_PRECONDITION_CLASSC(interp); 908 CYG_PRECONDITION_CLASSC(interp);
908 909
909 CdlProperty_Reference new_property = 0; 910 CdlProperty_Reference new_property = 0;
915 CdlParse::report_property_parse_error(interp, argv[0], "Missing argument."); 916 CdlParse::report_property_parse_error(interp, argv[0], "Missing argument.");
916 } else if ((data_index + 1) < argc) { 917 } else if ((data_index + 1) < argc) {
917 CdlParse::report_property_parse_error(interp, argv[0], "Too many arguments, expecting just one."); 918 CdlParse::report_property_parse_error(interp, argv[0], "Too many arguments, expecting just one.");
918 } else { 919 } else {
919 std::string refname = argv[data_index]; 920 std::string refname = argv[data_index];
920 if (!Cdl::is_valid_cdl_name(refname)) { 921 if (!(Cdl::is_valid_cdl_name(refname) || (allow_empty && ("" == refname)))) {
921 CdlParse::report_property_parse_error(interp, argv[0], "`" + refname + "' is not a valid CDL name"); 922 CdlParse::report_property_parse_error(interp, argv[0], "`" + refname + "' is not a valid CDL name");
922 } else { 923 } else {
923 CdlNode current_node = interp->get_node(); 924 CdlNode current_node = interp->get_node();
924 CYG_ASSERTC(0 != current_node); 925 CYG_ASSERTC(0 != current_node);
925 new_property = CdlProperty_ReferenceBody::make(current_node, name, refname, 926 new_property = CdlProperty_ReferenceBody::make(current_node, name, refname,