From d0b11af2bd445d10383049d2d7574c19a95c9006 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Mon, 1 Aug 2016 23:11:31 -0700 Subject: new multiline string syntax This patch also moves a bunch of the parser code into the tokenizer. Closes #162. --- src/bignum.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'src/bignum.cpp') diff --git a/src/bignum.cpp b/src/bignum.cpp index 1e90b201b0..7cbb880848 100644 --- a/src/bignum.cpp +++ b/src/bignum.cpp @@ -6,6 +6,7 @@ */ #include "bignum.hpp" +#include "buffer.hpp" #include #include @@ -41,6 +42,10 @@ void bignum_init_signed(BigNum *dest, int64_t x) { } } +void bignum_init_bignum(BigNum *dest, BigNum *src) { + memcpy(dest, src, sizeof(BigNum)); +} + bool bignum_fits_in_bits(BigNum *bn, int bit_count, bool is_signed) { assert(bn->kind == BigNumKindInt); @@ -343,3 +348,15 @@ bool bignum_cmp_gte(BigNum *op1, BigNum *op2) { return true; } } + +bool bignum_increment_by_scalar(BigNum *bignum, uint64_t scalar) { + assert(bignum->kind == BigNumKindInt); + assert(!bignum->is_negative); + return __builtin_uaddll_overflow(bignum->data.x_uint, scalar, &bignum->data.x_uint); +} + +bool bignum_multiply_by_scalar(BigNum *bignum, uint64_t scalar) { + assert(bignum->kind == BigNumKindInt); + assert(!bignum->is_negative); + return __builtin_umulll_overflow(bignum->data.x_uint, scalar, &bignum->data.x_uint); +} -- cgit v1.2.3