Public Methods | |
const cmt_string& | build (const Symbol& symbol, const cmt_string& tag_name = "") |
const cmt_string& | clean (const Symbol& symbol, const cmt_string& tag_name = "") |
Private Attributes | |
cmt_string | temp |
|
Reimplemented from ValueBuilder. Definition at line 1379 of file cmt_symbol.cxx. 01381 { 01382 int show_it = 0; 01383 01384 static cmt_string previous_temp; 01385 cmt_string new_value; 01386 static const cmt_string empty; 01387 01388 if (Cmt::get_action () == action_show_set) 01389 { 01390 if (symbol.name == Cmt::get_current_target ()) 01391 { 01392 show_it = 1; 01393 } 01394 } 01395 01396 temp = ""; 01397 01398 for (int i = 0; i < symbol.value_lists.size (); i++) 01399 { 01400 const SymbolValueList& value_list = symbol.value_lists[i]; 01401 01402 if (value_list.discarded) continue; 01403 01404 if ((value_list.use != 0) && 01405 (value_list.use->discarded)) continue; 01406 01407 const int selected = value_list.select_first (); 01408 01409 if (selected < 0) continue; 01410 01411 SymbolValue& value = value_list.values[selected]; 01412 01413 if (show_it) 01414 { 01415 cout << "# Package "; 01416 if (value_list.use != 0) 01417 { 01418 cout << value_list.use->package << " " << value_list.use->version; 01419 } 01420 } 01421 01422 // 01423 // One should accumulate values if it refers to 01424 // itself. 01425 // 01426 01427 new_value = value.text; 01428 01429 resolve_value_for_macros (new_value); 01430 01431 switch (value_list.command_type) 01432 { 01433 case CommandSet : 01434 01435 if (show_it) 01436 { 01437 cout << " defines set " << symbol.name << " as "; 01438 } 01439 01440 if (!value_list.is_reflexive || 01441 !symbol.value_is_reflexive (value.text)) 01442 { 01443 resolve_value (new_value, symbol.name, temp); 01444 temp = new_value; 01445 } 01446 else if (temp == "") 01447 { 01448 temp = CmtSystem::getenv (symbol.name); 01449 } 01450 01451 break; 01452 case CommandSetAppend : 01453 01454 if (show_it) 01455 { 01456 cout << " appends to set " << symbol.name << " : "; 01457 } 01458 01459 if (new_value != "") 01460 { 01461 temp += new_value; 01462 } 01463 01464 break; 01465 case CommandSetPrepend : 01466 01467 if (show_it) 01468 { 01469 cout << " prepends to set " << symbol.name << " : "; 01470 } 01471 01472 if (new_value != "") 01473 { 01474 previous_temp = temp; 01475 temp = new_value; 01476 temp += previous_temp; 01477 } 01478 01479 break; 01480 case CommandSetRemove : 01481 01482 if (show_it) 01483 { 01484 cout << " removes from set " << symbol.name << " : "; 01485 } 01486 01487 if (new_value != "") 01488 { 01489 temp.replace_all (new_value, empty); 01490 } 01491 01492 break; 01493 case CommandAlias : 01494 01495 if (show_it) 01496 { 01497 cout << " defines alias " << symbol.name << " as "; 01498 } 01499 01500 resolve_value (new_value, symbol.name, temp); 01501 temp = new_value; 01502 01503 break; 01504 } 01505 01506 if (show_it) 01507 { 01508 cout << "'" << value.text << "'"; 01509 01510 Tag* selected_tag = value.tag; 01511 01512 if ((selected_tag == 0) || 01513 (selected_tag == Tag::get_default ())) 01514 { 01515 cout << " for default tag"; 01516 } 01517 else 01518 { 01519 cout << " for tag '" << selected_tag->name << "'"; 01520 } 01521 01522 cout << endl; 01523 } 01524 } 01525 01526 return (temp); 01527 } |
|
Reimplemented from ValueBuilder. Definition at line 17 of file cmt_symbol.cxx. 00019 { 00020 static const cmt_string empty = ""; 00021 return (empty); 00022 } |
|
Definition at line 25 of file cmt_symbol.cxx. |