From a5e99ea99639b5189d4c53e1ebc894607b5af868 Mon Sep 17 00:00:00 2001 From: Thomas Geymayer Date: Mon, 14 Jul 2014 18:51:11 +0200 Subject: [PATCH] Nasal: require 0o as prefix for octal numbers. Using just 0 as prefix for octal number can lead to confusion where numbers could be interpreted the wrong way (oct instead of dec). Lets follow the same convention as Python 3 and Ecma 262 level 6 and use '0o' as prefix which can not be confused inadvertently. --- simgear/nasal/cppbind/nasal_num_test.cxx | 10 +++++++--- simgear/nasal/lex.c | 8 ++++---- simgear/nasal/string.c | 6 +++--- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/simgear/nasal/cppbind/nasal_num_test.cxx b/simgear/nasal/cppbind/nasal_num_test.cxx index 1746591f..0f06a872 100644 --- a/simgear/nasal/cppbind/nasal_num_test.cxx +++ b/simgear/nasal/cppbind/nasal_num_test.cxx @@ -72,9 +72,13 @@ static void runNumTests( double (TestContext::*test_double)(const std::string&), BOOST_CHECK_CLOSE((c.*test_int)("-1e7"), -1e7, 1e-5); BOOST_CHECK_CLOSE((c.*test_int)("2E07"), 2e07, 1e-5); - BOOST_CHECK_EQUAL((c.*test_int)("0755"), 0755); - BOOST_CHECK_EQUAL((c.*test_int)("0055"), 055); - BOOST_CHECK_EQUAL((c.*test_int)("-0155"), -0155); + BOOST_CHECK_EQUAL((c.*test_int)("0755"), 755); + BOOST_CHECK_EQUAL((c.*test_int)("0055"), 55); + BOOST_CHECK_EQUAL((c.*test_int)("-0155"), -155); + + BOOST_CHECK_EQUAL((c.*test_int)("0o755"), 0755); + BOOST_CHECK_EQUAL((c.*test_int)("0o055"), 055); + BOOST_CHECK_EQUAL((c.*test_int)("-0o155"), -0155); BOOST_CHECK_EQUAL((c.*test_int)("0x755"), 0x755); BOOST_CHECK_EQUAL((c.*test_int)("0x055"), 0x55); diff --git a/simgear/nasal/lex.c b/simgear/nasal/lex.c index dbeed7b8..00777e97 100644 --- a/simgear/nasal/lex.c +++ b/simgear/nasal/lex.c @@ -273,11 +273,11 @@ static int lexNumLiteral(struct Parser* p, int index) unsigned char* buf = (unsigned char*)p->buf; double d; - if(buf[i] == '0') { - if(i+2= len) { *v = 0; return len; } if(s[i] == '+') { i++; } else if(s[i] == '-') { i++; sgn = -1; } - if(s[i] == '0') { - i++; base = 8; - if( i < len && s[i] == 'x' ) { i++; base = 16; } + if(s[i] == '0' && ++i < len) { + if( s[i] == 'x' ) { i++; base = 16; } + if( s[i] == 'o' ) { i++; base = 8; } } i2 = readint(s, len, i, &val, base); if(i0 == i && i2 == i) { -- 2.39.5