X-Git-Url: http://git.sourceforge.jp/view?p=pf3gnuchains%2Fgcc-fork.git;a=blobdiff_plain;f=libcpp%2FChangeLog;h=042d6fed4cfcceb713016880c77ee48491d39847;hp=9b3b53e25de5a52f7ad857c513f04f213cc0dfee;hb=050318d9e2c2b0c94959a97a0be729e16ea1f780;hpb=89768577114030eb69375ca94b7e749ae2428868 diff --git a/libcpp/ChangeLog b/libcpp/ChangeLog index 9b3b53e25de..042d6fed4cf 100644 --- a/libcpp/ChangeLog +++ b/libcpp/ChangeLog @@ -1,3 +1,622 @@ +2010-06-03 Joern Rennecke + Ralf Wildenhues + + PR bootstrap/42798 + * configure.ac: Check for declaration of 'basename(char *)'. + * configure: Regenerate. + * config.in: Regenerate. + +2010-04-25 Joseph Myers + + * include/cpplib.h (enum c_lang): Add CLK_GNUC1X and CLK_STDC1X. + * init.c (lang_defaults): Add entries for new language variants. + (cpp_init_builtins): Define __STDC_VERSION__ to 201000L for C1X + variants. + +2010-04-09 Manuel López-Ibáñez + + PR cpp/43195 + * files.c (report_missing_guard): Test for #pragma once. + +2010-04-07 Simon Baldwin + + * directives.c (do_diagnostic): Add warning reason argument, + call appropriate error reporting function for code. + (directive_diagnostics): Call specific warning functions with + warning reason where appropriate. + (do_error, do_warning, do_pragma_dependency): Add warning reason + argument to do_diagnostic calls. + * macro.c (_cpp_warn_if_unused_macro, enter_macro_context, + _cpp_create_definition): Call specific warning functions with + warning reason where appropriate. + * Makefile.in: Add new diagnostic functions to gettext translations. + * include/cpplib.h (struct cpp_callbacks): Add warning reason code + to error callback. + (CPP_DL_WARNING, CPP_DL_WARNING_SYSHDR, CPP_DL_PEDWARN, CPP_DL_ERROR, + CPP_DL_ICE, CPP_DL_NOTE, CPP_DL_FATAL): Replace macros with enums. + (CPP_W_NONE, CPP_W_DEPRECATED, CPP_W_COMMENTS, + CPP_W_MISSING_INCLUDE_DIRS, CPP_W_TRIGRAPHS, CPP_W_MULTICHAR, + CPP_W_TRADITIONAL, CPP_W_LONG_LONG, CPP_W_ENDIF_LABELS, + CPP_W_NUM_SIGN_CHANGE, CPP_W_VARIADIC_MACROS, + CPP_W_BUILTIN_MACRO_REDEFINED, CPP_W_DOLLARS, CPP_W_UNDEF, + CPP_W_UNUSED_MACROS, CPP_W_CXX_OPERATOR_NAMES, CPP_W_NORMALIZE, + CPP_W_INVALID_PCH, CPP_W_WARNING_DIRECTIVE): New enums for cpp + warning reason codes. + (cpp_warning, cpp_pedwarning, cpp_warning_syshdr, + cpp_warning_with_line, cpp_pedwarning_with_line, + cpp_warning_with_line_syshdr): New specific error reporting functions. + * pch.c (cpp_valid_state): Call specific warning functions with + warning reason where appropriate. + * errors.c (cpp_diagnostic, cpp_diagnostic_with_line): New central + diagnostic handlers. + (cpp_warning, cpp_pedwarning, cpp_warning_syshdr, + cpp_warning_with_line, cpp_pedwarning_with_line, + cpp_warning_with_line_syshdr): New specific error reporting functions. + * expr.c (cpp_classify_number, eval_token, num_unary_op): Call + specific warning functions with warning reason where appropriate. + * lex.c (_cpp_process_line_notes, _cpp_skip_block_comment, + warn_about_normalization, lex_identifier_intern, lex_identifier, + _cpp_lex_direct): Ditto. + * charset.c (_cpp_valid_ucn, convert_hex, convert_escape, + narrow_str_to_charconst): Ditto. + +2010-04-06 Jakub Jelinek + + PR preprocessor/43642 + * lex.c (lex_raw_string): Change type of TYPE variable to + unsigned char. + +2010-04-02 Ralf Wildenhues + + * aclocal.m4: Regenerate. + +2010-03-29 Jason Merrill + + More N3077 raw string changes + * charset.c (cpp_interpret_string): Don't transform UCNs in raw + strings. + * lex.c (bufring_append): Split out from... + (lex_raw_string): ...here. Undo trigraph and line splicing + transformations. Do process line notes in multi-line literals. + (_cpp_process_line_notes): Ignore notes that were already handled. + + Some raw string changes from N3077 + * charset.c (cpp_interpret_string): Change inner delimiters to (). + * lex.c (lex_raw_string): Likewise. Also disallow '\' in delimiter. + +2010-02-11 Jakub Jelinek + + * init.c (read_original_filename): Don't call read_original_directory + if _cpp_handle_directive returns 0. + +2010-01-01 Joseph Myers + + PR preprocessor/41947 + * expr.c (cpp_classify_number): Give error for hexadecimal + floating-point constant with no digits before or after point. + +2009-11-20 Arnaud Charlet + + * macro.c (enter_macro_context): Call cb.used callback if defined. + * directives.c (do_idef, do_ifndef): Ditto. + * include/cpplib.h (struct cpp_callbacks): Add used callback. + +2009-11-11 Kai Tietz + + * directives.c (do_pragma_push_macro): New pragma handler. + (do_pragma_pop_macro): Likewise. + (_cpp_init_internal_pragmas): Add push_macro and + pop_macro handler to internal pragmas. + (lex_macro_node_from_str): Removed. + (cpp_push_definition): Replace lex_macro_node_from_str + by _cpp_lex_identifier. + (cpp_pop_definition): Likewise. + * internal.h (_cpp_lex_identifier): New prototype. + (def_pragma_macro): New structure. + (cpp_reader): New member pushed_macros. + * lex.c (_cpp_lex_identifier): New function. + (lex_identifier_intern): New function. + * init.c (cpp_create_reader): Initialize pushed_macros + member. + (cpp_destroy): Free elements in pushed_macros member. + * pch.c (_cpp_save_pushed_macros): New function. + (_cpp_restore_pushed_macros): Likewise. + (_cpp_restore_pushed_macros): Use _cpp_save_pushed_macros. + (cpp_read_state): Use _cpp_restore_pushed_macros. + +2009-10-19 Jakub Jelinek + + * charset.c (cpp_init_iconv): Initialize utf8_cset_desc. + (_cpp_destroy_iconv): Destroy utf8_cset_desc, char16_cset_desc + and char32_cset_desc. + (converter_for_type): Handle CPP_UTF8STRING. + (cpp_interpret_string): Handle CPP_UTF8STRING and raw-strings. + * directives.c (get__Pragma_string): Handle CPP_UTF8STRING. + (parse_include): Reject raw strings. + * include/cpplib.h (CPP_UTF8STRING): New token type. + * internal.h (struct cpp_reader): Add utf8_cset_desc field. + * lex.c (lex_raw_string): New function. + (lex_string): Handle u8 string literals, call lex_raw_string + for raw string literals. + (_cpp_lex_direct): Call lex_string even for u8" and {,u,U,L,u8}R" + sequences. + * macro.c (stringify_arg): Handle CPP_UTF8STRING. + +2009-10-14 Jakub Jelinek + + PR preprocessor/41543 + * include/line-map.h (RESERVED_LOCATION_COUNT): Define. + * line-map.c (linemap_init): Initialize highest_location and + highest_line to RESERVED_LOCATION_COUNT-1 instead of 0. + +2009-10-09 Jason Merrill + + * charset.c (_cpp_valid_ucn): Update C++0x restrictions. + +2009-10-09 Neil Vachharajani + + * directives.c (DIRECTIVE_TABLE): Remove DEPRECATED from ident and + sccs. + +2009-09-23 Loren J. Rittle + + * configure.ac (AC_CHECK_HEADERS after AC_LANG(C++)): Add sys/stat.h. + * configure: Rebuilt. + +2009-09-22 Richard Guenther + + PR pch/38987 + * files.c (pch_open_file): Disallow non-toplevel PCH inclusion. + +2009-09-18 Chris Demetriou + + PR preprocessor/28435: + * include/cpplib.h (struct cpp_options): Add new member + deps.need_preprocessor_output. + * files.c (open_file_failed): If preprocessor output is needed + always report an error. + +2009-09-13 Kai Tietz + + * configure.ac: Set for i?86-w64-mingw* + need_64bit_hwint to yes. + * configure: Regenerated. + +2009-09-10 Jason Merrill + + * directives.c (cpp_define): constify. + +2009-09-02 Ian Lance Taylor + + * macro.c (stringify_arg): Escape CPP_WCHAR tokens. + +2009-08-24 Ralf Wildenhues + + * configure.ac (AC_PREREQ): Bump to 2.64. + +2009-08-22 Ralf Wildenhues + + * aclocal.m4: Regenerate. + * config.in: Regenerate. + * configure: Regenerate. + +2009-08-17 Tom Tromey + + PR preprocessor/41067: + * charset.c (convert_escape): Add missing ":" to error text. + +2009-07-27 Douglas B Rupp + + * include/cpplib.h (INO_T_CPP): New macro. + (struct cpp_dir): Use it. + +2009-07-20 Jerry Quinn + + PR regression/40800 + * configure.ac: Use = instead of == for testing + ENABLE_BUILD_WITH_CXX. + * configure: Rebuild. + +2009-07-17 Jerry Quinn + + * directives.c (do_linemarker, do_line): Use CPP_STRING for + ignored enum value. + * files.c (find_file_in_dir): Add cast from void* to char*. + * symtab.c (ht_lookup_with_hash): Add cast from void* to char*. + * Makefile.in: (WARN_CFLAGS): Use general and C-specific + warnings. + (CXX, CXXFLAGS, WARN_CXXFLAGS, ALL_CXXFLAGS, + ENABLE_BUILD_WITH_CXX, CCDEPMODE, CXXDEPMODE, COMPILER, + COMPILER_FLAGS): New. + (DEPMODE): Set from CCDEPMODE or CXXDEPMODE. + (COMPILE.base): Use COMPILER instead of CC. Use COMPILER_FLAGS + instead of ALL_CFLAGS. + * configure.ac: Invoke AC_PROG_CXX. Separate C-specific warnings + from other warnings. Add -Wc++-compat to C-specific warnings. + Check for --enable-build-with-cxx. Set and substitute + ENABLE_BUILD_WITH_CXX. Invoke ZW_PROG_COMPILER_DEPENDENCIES + according to ENABLE_BUILD_WITH_CXX. Invoke AC_LANG before + AC_CHECK_HEADERS. + * configure: Rebuild. + * include/cpp-id-data.h: Remove extern "C". + * include/line-map.h: Likewise. + * include/mkdeps.h: Likewise. + * include/symtab.h: Likewise. + * internal.h: Likewise. + +2009-06-23 Manuel Lopez-Ibanez + + * directives.c (parse_include): Add location argument. Update all + calls. + (parse_answer): Likewise. + (do_include_common): Error with exact location. + (parse_assertion): Likewise. + +2009-06-18 Manuel López-Ibáñez + + * expr.c (num_div_op): Take explicit location. + +2009-06-17 Ian Lance Taylor + + * include/cpplib.h (progname): Don't declare. + +2009-06-12 Ian Lance Taylor + + * include/cpplib.h (struct cpp_options): Add + warn_cxx_operator_names field. + (NODE_WARN_OPERATOR): Define. + (struct cpp_hashnode): Increase flags field to 10 bits, decrease + type to 6 bits. + * init.c (mark_named_operators): Add flags parameter. + (cpp_post_options): Pick flags value to pass to + mark_named_operators. + * lex.c (lex_identifier): If NODE_WARN_OPERATOR is set, warn that + identifier is an operator name in C++. + +2009-06-01 Aldy Hernandez + + * include/line-map.h (LAST_SOURCE_COLUMN): New. + +2009-06-01 Ian Lance Taylor + + * include/cpp-id-data.h: Add extern "C". + * include/line-map.h: Likewise. + * include/mkdeps.h: Likewise. + * include/symtab.h: Likewise. + * internal.h: Likewise. + +2009-05-15 Ian Lance Taylor + + * include/cpplib.h (enum cpp_builtin_type): Rename from enum + builtin_type. Change all uses. + +2009-05-14 Manuel Lopez-Ibanez + + PR cpp/36674 + * directives (do_linemarker): Compensate for the increment in + location that occurs when we reach the end of line. + * files (_cpp_stack_include): Mention _cpp_find_file in the + comment. + +2009-05-10 Joseph Myers + + * include/cpplib.h (enum cpp_token_fld_kind): Add + CPP_TOKEN_FLD_TOKEN_NO. + (struct cpp_macro_arg, struct cpp_identifier): Define. + (union cpp_token_u): Use struct cpp_identifier for identifiers. + Use struct cpp_macro_arg for macro arguments. Add token_no for + CPP_PASTE token numbers. + * directives.c (_cpp_handle_directive, lex_macro_node, do_pragma, + do_pragma_poison, parse_assertion): Use val.node.node in place of + val.node. + * expr.c (parse_defined, eval_token): Use val.node.node in place + of val.node. + * lex.c (cpp_ideq, _cpp_lex_direct, cpp_token_len, + cpp_spell_token, cpp_output_token, _cpp_equiv_tokens, + cpp_token_val_index): Use val.macro_arg.arg_no or val.token_no in + place of val.arg_no. Use val.node.node in place of val.node. + * macro.c (replace_args, cpp_get_token, parse_params, + lex_expansion_token, create_iso_definition, cpp_macro_definition): + Use val.macro_arg.arg_no or val.token_no in place of val.arg_no. + Use val.node.node in place of val.node. + +2009-05-03 Joseph Myers + + * charset.c (one_utf8_to_cppchar): Correct mask used for 5-byte + UTF-8 sequences. + +2009-04-25 Joseph Myers + + PR preprocessor/39559 + * expr.c (cpp_interpret_integer): Use a pedwarn for decimal + constants larger than intmax_t in C99 mode. + +2009-04-21 Taras Glek + + * include/cpp-id-data.h: Update GTY annotations to new syntax. + * include/cpplib.h: Likewise. + * include/line-map.h: Likewise. + * include/symtab.h: Likewise. + +2009-04-22 Manuel Lopez-Ibanez + + PR c++/14875 + * lex.c (cpp_type2name): Take a flags parameter. Call + cpp_named_operator2name for named operators and cpp_digraph2name + for digraphs. + (cpp_digraph2name): New. + (cpp_spell_token): Use it. + (cpp_output_token): Likewise. + * include/cpplib.h (cpp_type2name): Update declaration. + * init.c (cpp_named_operator2name): New. + * internal.h (cpp_named_operator2name): Declare. + +2009-04-21 Manuel Lopez-Ibanez + + PR c++/13358 + * init.c (cpp_create_reader): Wlong_long is disabled by default. + * expr.c (cpp_classify_number): Give different messages for C and + C++ front-ends. + +2009-04-19 Joseph Myers + + PR preprocessor/20078 + * include/cpp-id-data.h (struct cpp_macro): Add extra_tokens + field. + * include/cpplib.h (SP_DIGRAPH, SP_PREV_WHITE): Define. + (struct cpp_token): Change flags to unsigned short. + * lex.c (_cpp_lex_direct): Initialize arg_no for CPP_PASTE tokens. + (_cpp_equiv_tokens): Check arg_no for CPP_PASTE tokens. + (cpp_token_val_index): Return CPP_TOKEN_FLD_ARG_NO for CPP_PASTE + tokens. + * macro.c (macro_real_token_count): New. + (enter_macro_context, replace_args): Use macro_real_token_count. + (create_iso_definition): Record whitespace surrounding and digraph + spelling of # and ## tokens using SP_PREV_WHITE and SP_DIGRAPH. + Set extra_tokens and save CPP_PASTE tokens with arg_no set for + multiple consecutive ## tokens. + (_cpp_create_definition): Initialize extra_tokens. + (cpp_macro_definition): Use macro_real_token_count. + +2009-04-18 Joseph Myers + + * directives.c (parse_include): Pass true to check_eol. + +2009-04-18 Joseph Myers + + PR preprocessor/39646 + * include/line-map.h (enum lc_reason): Add LC_RENAME_VERBATIM. + * line-map.c (linemap_add): Handle LC_RENAME_VERBATIM. + * directives.c (do_line, do_linemarker): Use LC_RENAME_VERBATIM in + place of LC_RENAME. + +2009-04-18 Joseph Myers + + PR preprocessor/39647 + * directives.c (check_eol): Add parameter expand. + (do_undef, parse_include, do_line, do_linemarker, do_ident, + do_pragma_once, do_pragma_system_header, do_ifdef, do_ifndef, + do_else, do_endif, do_assert, do_unassert): All callers changed. + Pass true from do_line, false elsewhere. + +2009-04-12 Joseph Myers + + PR preprocessor/31869 + * macro.c (stringify_arg): Handle NULL source token in padding + token where previous padding token did not have source token with + preceding whitespace. + +2009-04-09 Jakub Jelinek + + * Makefile.in: Change copyright header to refer to version + 3 of the GNU General Public License and to point readers at the + COPYING3 file and the FSF's license web page. + * charset.c: Likewise. + * directives-only.c: Likewise. + * directives.c: Likewise. + * errors.c: Likewise. + * expr.c: Likewise. + * files.c: Likewise. + * identifiers.c: Likewise. + * include/cpp-id-data.h: Likewise. + * include/cpplib.h: Likewise. + * include/line-map.h: Likewise. + * include/mkdeps.h: Likewise. + * include/symtab.h: Likewise. + * init.c: Likewise. + * internal.h: Likewise. + * lex.c: Likewise. + * line-map.c: Likewise. + * macro.c: Likewise. + * makeucnid.c: Likewise. + * mkdeps.c: Likewise. + * pch.c: Likewise. + * symtab.c: Likewise. + * system.h: Likewise. + * traditional.c: Likewise. + * ucnid.tab: Likewise. + * ucnid.h: Regenerate. + +2009-04-01 Janis Johnson + + PR c/39027 + * include/cpplib.h (CPP_N_DEFAULT): Define. + * expr.c (interpret_float_suffix): Recognize d or D for double, + return new value for default. + (cpp_classify_number): Issue pedwarn for use of d or D in suffix. + + PR c/33466 + * expr.c (interpret_float_suffix): Reject invalid suffix that uses + letters from decimal float and fixed-point suffixes. + +2009-03-31 Joseph Myers + + PR preprocessor/15638 + * files.c (_cpp_find_file): Call open_file_failed after diagnosing + invalid PCH. + (open_file_failed): Make error for missing file fatal. + * include/cpplib.h (CPP_DL_FATAL): Define. + +2009-03-30 Sergiy Vyshnevetskiy + + PR preprocessor/31932: + * internal.h: Don't mention HAVE_ICONV_H. + * configure, config.in: Rebuild. + * configure.ac: Don't check for iconv.h. + +2009-03-30 Tom Tromey + + PR preprocessor/39512: + * line-map.c (linemap_init): Initialize 'reallocator' field. + +2009-03-30 Jakub Jelinek + + PR target/39558 + * macro.c (cpp_get_token): If macro_to_expand returns NULL + and used some tokens, add CPP_PADDING before next token. + +2009-03-29 Joseph Myers + + PR preprocessor/34695 + * makedepend.c: Remove. + * Makefile.in (makedepend_OBJS, makedepend$(EXEEXT)): Remove. + (all, clean, TAGS_SOURCES, include): Remove makedepend handling. + * directives.c (cpp_errors): Remove. + * errors.c (print_location, _cpp_begin_message, v_message): + Remove. + (cpp_error, cpp_error_with_line): Always use error callback. + (cpp_error, cpp_error_with_line, cpp_errno): Return bool. + * include/cpplib.h (cpp_options): Remove pedantic_errors, + inhibit_warnings, warn_system_headers, inhibit_errors, + warnings_are_errors, client_diagnostic. + (cpp_callbacks): Add extra arguments to error callback; make it + return bool. + (cpp_finish): Return void. + (cpp_destroy): Remove inaccurate comment about return value. + (cpp_errors, CPP_DL_EXTRACT, CPP_DL_WARNING_P): Remove. + (CPP_DL_NOTE): Define. + * include/line-map.h (linemap_print_containing_files): Remove. + * init.c (cpp_finish): Do not check for or return number of + errors. + * internal.h (cpp_reader): Remove errors field. + * line-map.c (linemap_print_containing_files): Remove. + * macro.c (_cpp_create_definition): Use CPP_DL_NOTE for message + about previous definition. Only emit it if previous diagnostic + was emitted. + +2009-03-28 Joseph Myers + + * Makefile.in (po/$(PACKAGE).pot): Use $(mkinstalldirs) not + mkinstalldirs. + +2009-03-18 Jakub Jelinek + + * include/cpplib.h (struct cpp_dir): Reorder fields for 64-bit hosts. + +2009-02-21 Joseph Myers + + * lex.c (lex_string): Return a CPP_LESS token for missing '>' in a + header name. + (_cpp_lex_direct): Handle this. + +2009-02-15 Richard Guenther + + Revert last change. + +2009-02-13 Richard Guenther + + * configure.ac: Enable LFS. + * configure: Re-generate. + * config.in: Likewise. + +2009-01-05 Ben Elliston + + * Makefile.in (.po.gmo): Use mkinstalldirs, not test -d || mkdir. + (.po.pox): Likewise. + (po/$(PACKAGE).pot): Likewise. + +2008-12-10 Alexandre Oliva + + PR target/37033 + * pch.c (cpp_valid_state): Improve message for poisoned symbols. + Allow for differences in __GCC_HAVE_DWARF2_CFI_ASM. + +2008-11-29 Joseph Myers + + * lex.c (cpp_token_len): Use 6 as default length. + +2008-10-31 Manuel López-Ibáñez + + * expr.c (struct op): Add location. + (_cpp_parse_expr): Propagate locations throught the stack + of expressions. + (reduce): Likewise. + (check_promotion): Use explicit location in errors. + +2008-10-05 Matthew Gingell + Arnaud Charlet + + * include/cpplib.h (cpp_comments, cpp_comment_table): New structs. + (cpp_get_comments): New function. + * internal.h (struct cpp_reader): Add comments field. + * init.c (cpp_destroy): Free comments. + * lex.c (store_comment, cpp_get_comments): New functions. + (comments): New struct. + (save_comment): Store comments in comments struct. + +2008-09-18 Simon Baldwin + + * include/cpplib.h (struct cpp_options): Add new boolean flag + warn_builtin_macro_redefined. + * init.c (cpp_create_reader): Initialize warn_builtin_macro_redefined. + * (struct builtin_operator): Split out from previous struct builtin, + enhance extra const correctness. + * (struct builtin_macro): Split out from previous struct builtin, add + new always_warn_if_redefined flag, enhance const correctness. + * (mark_named_operators): Use struct builtin_operator. + * (cpp_init_special_builtins): Use struct builtin_macro, add NODE_WARN + to builtins selectively. + * macro.c (warn_of_redefinition): Return false if a builtin macro + is not flagged with NODE_WARN. + +2008-07-31 Jakub Jelinek + + PR preprocessor/36649 + * files.c (struct report_missing_guard_data): New type. + (report_missing_guard): Put paths into an array instead of printing + them right away. Return 1 rather than 0. + (report_missing_guard_cmp): New function. + (_cpp_report_missing_guards): Sort and print paths gathered by + report_missing_guard callback. + +2008-07-22 Manuel Lopez-Ibanez + + PR 28079 + * directives.c (strtolinenum): Handle overflow. + (do_line): Give a warning if line number overflowed. + (do_linemarker): Update call to strtolinenum. + +2008-07-21 Manuel Lopez-Ibanez + + * include/line-map.h (linenum_type): New typedef. + (struct line_map): Use it. + (SOURCE_LINE): Second arguments is a LOCATION not a LINE. + (SOURCE_COLUMN): Likewise. + * macro.c (_cpp_builtin_macro_text): Use linenum_type. Don't store + source_location values in a variable of type linenum_type. + * directives.c (struct if_stack): Use linenum_type. + (strtoul_for_line): Rename as strtolinenum. + (do_line): Use linenum_type. + (do_linemarker): Use linenum_type and strtolinenum. + (_cpp_do_file_change): Use linenum_t. + * line-map.c (linemap_add): Likewise. + (linemap_line_start): Likewise. + * traditional.c (struct fun_macro): 'line' is a source_location. + * errors.c (print_location): Use linenum_type. + * directives-only.c (_cpp_preprocess_dir_only): Likewise. + * internal.h (CPP_INCREMENT_LINE): Likewise. + * lex.c (_cpp_skip_block_comment): Use source_location. + 2008-07-14 Ben Elliston * include/cpplib.h (NODE_CONDITIONAL): New.