X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flanguage%2Fexpressions%2Fparse.c;h=7b845a8d369ebf6da4b736db7c7028cc1ad9814b;hb=f164b2f6e545d8233572a4635d710b2a46784fdb;hp=32c2e6152917f721f2a50fc1d569720e8ad9386b;hpb=92e42986429596633f71457a585b3266209822dd;p=pspp diff --git a/src/language/expressions/parse.c b/src/language/expressions/parse.c index 32c2e61529..7b845a8d36 100644 --- a/src/language/expressions/parse.c +++ b/src/language/expressions/parse.c @@ -1,5 +1,5 @@ /* PSPP - a program for statistical analysis. - Copyright (C) 1997-9, 2000, 2006, 2010, 2011 Free Software Foundation, Inc. + Copyright (C) 1997-9, 2000, 2006, 2010, 2011, 2012 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 @@ -39,6 +39,7 @@ #include "libpspp/pool.h" #include "libpspp/str.h" +#include "gl/c-strcase.h" #include "gl/xalloc.h" /* Declarations. */ @@ -262,8 +263,9 @@ type_check (struct expression *e, atom_type_name (actual_type)); return false; } - if (actual_type == OP_number && expected_type == OP_boolean) - *n = expr_allocate_unary (e, OP_NUM_TO_BOOLEAN, *n); + if (actual_type == OP_number && expected_type == EXPR_BOOLEAN) + *n = expr_allocate_binary (e, OP_NUM_TO_BOOLEAN, *n, + expr_allocate_string (e, ss_empty ())); break; case EXPR_STRING: @@ -897,8 +899,8 @@ parse_primary (struct lexer *lexer, struct expression *e) dict_encoding = (e->ds != NULL ? dict_get_encoding (dataset_dict (e->ds)) : "UTF-8"); - s = recode_string (dict_encoding, "UTF-8", lex_tokcstr (lexer), - ss_length (lex_tokss (lexer))); + s = recode_string_pool (dict_encoding, "UTF-8", lex_tokcstr (lexer), + ss_length (lex_tokss (lexer)), e->expr_pool); node = expr_allocate_string (e, ss_cstr (s)); lex_get (lexer); @@ -1005,7 +1007,7 @@ compare_names (const char *test, const char *name, bool abbrev_ok) static int compare_strings (const char *test, const char *name, bool abbrev_ok UNUSED) { - return strcasecmp (test, name); + return c_strcasecmp (test, name); } static bool @@ -1268,7 +1270,7 @@ parse_function (struct lexer *lexer, struct expression *e) break; else if (!lex_match (lexer, T_COMMA)) { - lex_error_expecting (lexer, ",", ")", NULL_SENTINEL); + lex_error_expecting (lexer, "`,'", "`)'", NULL_SENTINEL); goto fail; } }