Index: lib/json_parser.hh =================================================================== --- lib/json_parser.hh (revision 977418) +++ lib/json_parser.hh (working copy) @@ -65,7 +65,7 @@ #define YYERROR_VERBOSE 1 -/* Line 303 of lalr1.cc. */ +/* Line 35 of lalr1.cc. */ #line 70 "json_parser.hh" #include "location.hh" Index: lib/json_scanner.cpp =================================================================== --- lib/json_scanner.cpp (revision 977418) +++ lib/json_scanner.cpp (working copy) @@ -191,7 +191,7 @@ break; } - *yylval = QVariant(QString(sequence)); + *yylval = QVariant(sequence); qDebug() << "JSonScanner::yylex - yy::json_parser::token::WORD (" << yylval->toString() << ")"; return yy::json_parser::token::WORD; @@ -209,7 +209,7 @@ return yy::json_parser::token::DIGIT; } else if (isalnum(ch) != 0) { - *yylval = QVariant(QString(ch)); + *yylval = QVariant(QByteArray(&ch, 1)); qDebug() << "JSonScanner::yylex - yy::json_parser::token::WORD (" << ch << ")"; return yy::json_parser::token::WORD; Index: lib/json_parser.yy =================================================================== --- lib/json_parser.yy (revision 977418) +++ lib/json_parser.yy (working copy) @@ -137,14 +137,14 @@ $$ = null_variant; }; -number: int { $$ = QVariant ($1); } - | int fract { $$ = QVariant ($1.toString().append($2.toString())); } - | int exp { $$ = QVariant ($1.toString().append($2.toString())); } +number: int { $$ = QVariant ($1.toInt()); } + | int fract { $$ = QVariant ($1.toString().append($2.toString()).toDouble()); } + | int exp { $$ = QVariant ($1.toString().append($2.toString()).toDouble()); } | int fract exp { QString value = $1.toString(); value += $2.toString(); value += $3.toString(); - $$ = QVariant (value); + $$ = QVariant (value.toDouble()); }; int: DIGIT digits { $$ = QVariant ($1.toString().append($2.toString())); } @@ -165,13 +165,15 @@ exp: E digits { $$ = QVariant($1.toString().append($2.toString())); }; -string: QUOTMARKOPEN string_arg QUOTMARKCLOSE { $$ = $2 }; +string: QUOTMARKOPEN string_arg QUOTMARKCLOSE { + $$ = QVariant(QString::fromUtf8($2.toByteArray())); + }; string_arg: /*empty */ { $$ = QVariant (""); } | string_arg WORD { - QString string = $1.toString(); - string += $2.toString(); - $$ = QVariant(string); + QByteArray bytes = $1.toByteArray(); + bytes += $2.toByteArray(); + $$ = QVariant(bytes); }; %% Index: lib/json_driver.cc =================================================================== --- lib/json_driver.cc (revision 977418) +++ lib/json_driver.cc (working copy) @@ -45,6 +45,7 @@ QVariant JSonDriver::parse (QIODevice* io, bool* status) { m_errorMsg.clear(); + m_error = false; delete m_scanner; if (!io->isOpen()) { @@ -81,7 +82,7 @@ QVariant JSonDriver::parse(const QString& jsonString, bool* status) { QBuffer buffer; buffer.open(QBuffer::ReadWrite); - buffer.write(jsonString.toAscii()); + buffer.write(jsonString.toUtf8()); buffer.seek(0); return parse (&buffer, status); } Index: lib/json_parser.cc =================================================================== --- lib/json_parser.cc (revision 977418) +++ lib/json_parser.cc (working copy) @@ -42,7 +42,7 @@ #line 43 "json_parser.cc" #ifndef YY_ -# if defined YYENABLE_NLS && YYENABLE_NLS +# if YYENABLE_NLS # if ENABLE_NLS # include /* FIXME: INFRINGES ON USER NAME SPACE */ # define YY_(msgid) dgettext ("bison-runtime", msgid) @@ -406,21 +406,22 @@ { qDebug()<< "json_parser - syntax error found, " << "forcing exit"; + YYABORT; ;} break; case 7: -#line 91 "json_parser.yy" +#line 92 "json_parser.yy" { (yyval) = (yysemantic_stack_[(3) - (2)]); ;} break; case 8: -#line 93 "json_parser.yy" +#line 94 "json_parser.yy" { (yyval) = QVariant (QVariantMap()); ;} break; case 9: -#line 94 "json_parser.yy" +#line 95 "json_parser.yy" { QVariantMap members = (yysemantic_stack_[(2) - (2)]).toMap(); (yyval) = QVariant(members.unite ((yysemantic_stack_[(2) - (1)]).toMap())); @@ -428,12 +429,12 @@ break; case 10: -#line 99 "json_parser.yy" +#line 100 "json_parser.yy" { (yyval) = QVariant (QVariantMap()); ;} break; case 11: -#line 100 "json_parser.yy" +#line 101 "json_parser.yy" { QVariantMap members = (yysemantic_stack_[(3) - (3)]).toMap(); @@ -442,7 +443,7 @@ break; case 12: -#line 106 "json_parser.yy" +#line 107 "json_parser.yy" { QVariantMap pair; pair.insert ((yysemantic_stack_[(3) - (1)]).toString(), QVariant((yysemantic_stack_[(3) - (3)]))); @@ -451,17 +452,17 @@ break; case 13: -#line 112 "json_parser.yy" +#line 113 "json_parser.yy" { (yyval) = (yysemantic_stack_[(3) - (2)]); ;} break; case 14: -#line 114 "json_parser.yy" +#line 115 "json_parser.yy" { (yyval) = QVariant (QVariantList()); ;} break; case 15: -#line 115 "json_parser.yy" +#line 116 "json_parser.yy" { QVariantList members = (yysemantic_stack_[(2) - (2)]).toList(); members.prepend ((yysemantic_stack_[(2) - (1)])); @@ -470,12 +471,12 @@ break; case 16: -#line 121 "json_parser.yy" +#line 122 "json_parser.yy" { (yyval) = QVariant (QVariantList()); ;} break; case 17: -#line 122 "json_parser.yy" +#line 123 "json_parser.yy" { QVariantList members = (yysemantic_stack_[(3) - (3)]).toList(); members.prepend ((yysemantic_stack_[(3) - (2)])); @@ -484,37 +485,37 @@ break; case 18: -#line 128 "json_parser.yy" +#line 129 "json_parser.yy" { (yyval) = (yysemantic_stack_[(1) - (1)]); ;} break; case 19: -#line 129 "json_parser.yy" +#line 130 "json_parser.yy" { (yyval) = (yysemantic_stack_[(1) - (1)]); ;} break; case 20: -#line 130 "json_parser.yy" +#line 131 "json_parser.yy" { (yyval) = (yysemantic_stack_[(1) - (1)]); ;} break; case 21: -#line 131 "json_parser.yy" +#line 132 "json_parser.yy" { (yyval) = (yysemantic_stack_[(1) - (1)]); ;} break; case 22: -#line 132 "json_parser.yy" +#line 133 "json_parser.yy" { (yyval) = QVariant (true); ;} break; case 23: -#line 133 "json_parser.yy" +#line 134 "json_parser.yy" { (yyval) = QVariant (false); ;} break; case 24: -#line 134 "json_parser.yy" +#line 135 "json_parser.yy" { QVariant null_variant; (yyval) = null_variant; @@ -522,47 +523,47 @@ break; case 25: -#line 139 "json_parser.yy" - { (yyval) = QVariant ((yysemantic_stack_[(1) - (1)])); ;} +#line 140 "json_parser.yy" + { (yyval) = QVariant ((yysemantic_stack_[(1) - (1)]).toInt()); ;} break; case 26: -#line 140 "json_parser.yy" - { (yyval) = QVariant ((yysemantic_stack_[(2) - (1)]).toString().append((yysemantic_stack_[(2) - (2)]).toString())); ;} +#line 141 "json_parser.yy" + { (yyval) = QVariant ((yysemantic_stack_[(2) - (1)]).toString().append((yysemantic_stack_[(2) - (2)]).toString()).toDouble()); ;} break; case 27: -#line 141 "json_parser.yy" - { (yyval) = QVariant ((yysemantic_stack_[(2) - (1)]).toString().append((yysemantic_stack_[(2) - (2)]).toString())); ;} +#line 142 "json_parser.yy" + { (yyval) = QVariant ((yysemantic_stack_[(2) - (1)]).toString().append((yysemantic_stack_[(2) - (2)]).toString()).toDouble()); ;} break; case 28: -#line 142 "json_parser.yy" +#line 143 "json_parser.yy" { QString value = (yysemantic_stack_[(3) - (1)]).toString(); value += (yysemantic_stack_[(3) - (2)]).toString(); value += (yysemantic_stack_[(3) - (3)]).toString(); - (yyval) = QVariant (value); + (yyval) = QVariant (value.toDouble()); ;} break; case 29: -#line 149 "json_parser.yy" +#line 150 "json_parser.yy" { (yyval) = QVariant ((yysemantic_stack_[(2) - (1)]).toString().append((yysemantic_stack_[(2) - (2)]).toString())); ;} break; case 30: -#line 150 "json_parser.yy" +#line 151 "json_parser.yy" { (yyval) = QVariant ((yysemantic_stack_[(3) - (3)]).toString().prepend((yysemantic_stack_[(3) - (2)]).toString().prepend("-"))); ;} break; case 31: -#line 152 "json_parser.yy" +#line 153 "json_parser.yy" { (yyval) = QVariant (""); ;} break; case 32: -#line 153 "json_parser.yy" +#line 154 "json_parser.yy" { QString digits = (yysemantic_stack_[(2) - (2)]).toString(); digits.prepend ((yysemantic_stack_[(2) - (1)]).toString()); @@ -571,7 +572,7 @@ break; case 33: -#line 159 "json_parser.yy" +#line 160 "json_parser.yy" { QString digits = (yysemantic_stack_[(2) - (2)]).toString(); digits.prepend ("."); @@ -580,32 +581,34 @@ break; case 34: -#line 165 "json_parser.yy" +#line 166 "json_parser.yy" { (yyval) = QVariant((yysemantic_stack_[(2) - (1)]).toString().append((yysemantic_stack_[(2) - (2)]).toString())); ;} break; case 35: -#line 167 "json_parser.yy" - { (yyval) = (yysemantic_stack_[(3) - (2)]) ;} +#line 168 "json_parser.yy" + { + (yyval) = QVariant(QString::fromUtf8((yysemantic_stack_[(3) - (2)]).toByteArray())); + ;} break; case 36: -#line 169 "json_parser.yy" +#line 172 "json_parser.yy" { (yyval) = QVariant (""); ;} break; case 37: -#line 170 "json_parser.yy" +#line 173 "json_parser.yy" { - QString string = (yysemantic_stack_[(2) - (1)]).toString(); - string += (yysemantic_stack_[(2) - (2)]).toString(); - (yyval) = QVariant(string); + QByteArray bytes = (yysemantic_stack_[(2) - (1)]).toByteArray(); + bytes += (yysemantic_stack_[(2) - (2)]).toByteArray(); + (yyval) = QVariant(bytes); ;} break; /* Line 675 of lalr1.cc. */ -#line 609 "json_parser.cc" +#line 612 "json_parser.cc" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1_[yyn], &yyval, &yyloc); @@ -971,10 +974,10 @@ const unsigned char json_parser::yyrline_[] = { - 0, 77, 77, 82, 83, 84, 89, 91, 93, 94, - 99, 100, 106, 112, 114, 115, 121, 122, 128, 129, - 130, 131, 132, 133, 134, 139, 140, 141, 142, 149, - 150, 152, 153, 159, 165, 167, 169, 170 + 0, 77, 77, 82, 83, 84, 90, 92, 94, 95, + 100, 101, 107, 113, 115, 116, 122, 123, 129, 130, + 131, 132, 133, 134, 135, 140, 141, 142, 143, 150, + 151, 153, 154, 160, 166, 168, 172, 173 }; // Print the state stack on the debug stream. @@ -1061,7 +1064,7 @@ } // namespace yy -#line 176 "json_parser.yy" +#line 179 "json_parser.yy" int yy::yylex(YYSTYPE *yylval, yy::location *yylloc, JSonDriver* driver)