diff --git a/js-assembler/assemble-open-coded.rkt b/js-assembler/assemble-open-coded.rkt index 208e6f6..1ec42dd 100644 --- a/js-assembler/assemble-open-coded.rkt +++ b/js-assembler/assemble-open-coded.rkt @@ -52,11 +52,21 @@ (assemble-binop-chain "plt.baselib.numbers.divide" checked-operands)] [(add1) - (assemble-binop-chain "plt.baselib.numbers.add" (cons "1" checked-operands))] + (string-append + (format "(typeof(~a)==='number'&&(~a)<9E15?(~a)+1" + (first operands) (first operands) (first operands)) + ":" + (format "RT.checkedAdd1(M, ~a)" (first operands)) + ")")] + [(sub1) - (assemble-binop-chain "plt.baselib.numbers.subtract" (append checked-operands (list "1")))] - + (string-append + (format "(typeof(~a)==='number'&&(~a)>-9E15?(~a)-1" + (first operands) (first operands) (first operands)) + ":" + (format "RT.checkedSub1(M, ~a)" (first operands)) + ")")] [(<) (assemble-boolean-chain "plt.baselib.numbers.lessThan" checked-operands)] diff --git a/js-assembler/runtime-src/runtime.js b/js-assembler/runtime-src/runtime.js index 7c9d9fd..18255e6 100644 --- a/js-assembler/runtime-src/runtime.js +++ b/js-assembler/runtime-src/runtime.js @@ -804,6 +804,21 @@ }; + ////////////////////////////////////////////////////////////////////// + var checkedAdd1 = function(M, n) { + return plt.baselib.numbers.add( + testArgument(M, 'number', isNumber, n, 0, 'add1'), + 1); + }; + + var checkedSub1 = function(M, n) { + return plt.baselib.numbers.subtract( + testArgument(M, 'number', isNumber, n, 0, 'add1'), + 1); + }; + + + ////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////// @@ -940,4 +955,6 @@ exports['checkClosureAndArity'] = checkClosureAndArity; exports['checkPrimitiveArity'] = checkPrimitiveArity; + exports['checkedAdd1'] = checkedAdd1; + exports['checkedSub1'] = checkedSub1; }(this.plt, this.plt.baselib)); \ No newline at end of file diff --git a/version.rkt b/version.rkt index 077c809..4d46da8 100644 --- a/version.rkt +++ b/version.rkt @@ -7,4 +7,4 @@ (provide version) (: version String) -(define version "1.133") +(define version "1.135")