diff options
Diffstat (limited to 'mixlib')
| -rw-r--r-- | mixlib/mix_parser.c | 10 | ||||
| -rw-r--r-- | mixlib/mix_scanner.l | 24 | 
2 files changed, 22 insertions, 12 deletions
| diff --git a/mixlib/mix_parser.c b/mixlib/mix_parser.c index 142b245..796f3ad 100644 --- a/mixlib/mix_parser.c +++ b/mixlib/mix_parser.c @@ -2,7 +2,7 @@   * Implementation of the functions declared in mix_parser.h and   * xmix_parser.h   * ------------------------------------------------------------------ - * Copyright (C) 2000, 2001, 2003, 2004, 2006, 2007 Free Software Foundation, Inc. + * Copyright (C) 2000, 2001, 2003, 2004, 2006, 2007, 2009 Free Software Foundation, Inc.   *   * This program is free software; you can redistribute it and/or modify   * it under the terms of the GNU General Public License as published by @@ -467,13 +467,15 @@ mix_parser_err_t  mix_parser_define_symbol_value (mix_parser_t *parser, const gchar *name,  				mix_word_t value)  { -  g_assert (parser != NULL && name != NULL); +  g_assert (parser != NULL); + +  if (NULL == name || strlen (name) == 0) return MIX_PERR_MIS_SYM;    switch (mix_symbol_table_add (parser->symbol_table, name, value))      {      case MIX_SYM_OK: -      if ( parser->status == MIX_PERR_NOCOMP ) -	update_future_refs_value_ (parser, name, value, TRUE); +      if (parser->status == MIX_PERR_NOCOMP) +        update_future_refs_value_ (parser, name, value, TRUE);        return MIX_PERR_OK;      case MIX_SYM_LONG: return MIX_PERR_LONG_SYMBOL;      case MIX_SYM_DUP: return MIX_PERR_DUP_SYMBOL; diff --git a/mixlib/mix_scanner.l b/mixlib/mix_scanner.l index 9ced144..aeff30a 100644 --- a/mixlib/mix_scanner.l +++ b/mixlib/mix_scanner.l @@ -1,7 +1,7 @@  /* -*-c-*- -------------- mix_scanner.l :   * Lexical scanner used by mix_parser_t   * ------------------------------------------------------------------ - * Copyright (C) 2000, 2003, 2004, 2006, 2007, 2008 Free Software Foundation, Inc. + * Copyright (C) 2000, 2003, 2004, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.   *   * This program is free software; you can redistribute it and/or modify   * it under the terms of the GNU General Public License as published by @@ -329,13 +329,21 @@ wexpr   {expr}({fpart})?(,{expr}({fpart})?)*  <EQU>{    {number}{ws}*\n   |    {number}{ws}+.*\n { -    mix_word_t value; -    gint def; -    if ( symbol == NULL ) RETURN_ERROR (MIX_PERR_MIS_SYM, NULL); -    value = mix_word_new (atol (yytext)); -    def = mix_parser_define_symbol_value (parser, symbol, value); -    if ( def == MIX_SYM_DUP )  RETURN_ERROR (MIX_PERR_DUP_SYMBOL, symbol); -    if ( def == MIX_SYM_LONG )  RETURN_ERROR (MIX_PERR_LONG_SYMBOL, symbol); +    gint def = MIX_PERR_MIS_SYM; +    if (symbol) +      { +        mix_word_t value = mix_word_new (atol (yytext)); +        def = mix_parser_define_symbol_value (parser, symbol, value); +      } +    switch (def) +      { +      case MIX_SYM_DUP:  RETURN_ERROR (MIX_PERR_DUP_SYMBOL, symbol); break; +      case MIX_SYM_LONG:  RETURN_ERROR (MIX_PERR_LONG_SYMBOL, symbol); break; +      case MIX_PERR_MIS_SYM: +        mix_parser_log_error (parser, def, lineno, NULL, TRUE); +        break; +      default: break; +      }      ++lineno;      BEGIN (INITIAL);    } | 
