aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/tokenize.c2
-rw-r--r--tests/number_literals.sh10
2 files changed, 11 insertions, 1 deletions
diff --git a/src/tokenize.c b/src/tokenize.c
index 57a5c61..0b40f2f 100644
--- a/src/tokenize.c
+++ b/src/tokenize.c
@@ -348,7 +348,7 @@ static void do_tokenize_all(Lexer* l) {
infile_next_char(l->src);
}
tok->kind = TokenKind_literal_int;
- tok->value.integer = atoi(builder.buf);
+ tok->value.integer = strtol(builder.buf, NULL, 0);
} else if (isalpha(c) || c == '_') {
StrBuilder builder;
strbuilder_init(&builder);
diff --git a/tests/number_literals.sh b/tests/number_literals.sh
new file mode 100644
index 0000000..e96308a
--- /dev/null
+++ b/tests/number_literals.sh
@@ -0,0 +1,10 @@
+test_exit_code 0 <<'EOF'
+#include "../../helpers.h"
+
+int main() {
+ ASSERT_EQ(0, 0);
+ ASSERT_EQ(291, 0x123);
+ ASSERT_EQ(3405691582, 0xcafebabe);
+ ASSERT_EQ(436, 0664);
+}
+EOF