summaryrefslogtreecommitdiff
path: root/lisp/calc
diff options
context:
space:
mode:
Diffstat (limited to 'lisp/calc')
-rw-r--r--lisp/calc/calc-aent.el52
-rw-r--r--lisp/calc/calc-comb.el9
2 files changed, 35 insertions, 26 deletions
diff --git a/lisp/calc/calc-aent.el b/lisp/calc/calc-aent.el
index c062a822e89..2210435036c 100644
--- a/lisp/calc/calc-aent.el
+++ b/lisp/calc/calc-aent.el
@@ -410,32 +410,40 @@ T means abort and give an error message.")
(exit-minibuffer))))
(defun calcAlg-blink-matching-open ()
- (let ((oldpos (point))
- (blinkpos nil))
+ (let ((rightpt (point))
+ (leftpt nil)
+ (rightchar (preceding-char))
+ leftchar
+ rightsyntax
+ leftsyntax)
(save-excursion
(condition-case ()
- (setq blinkpos (scan-sexps oldpos -1))
- (error nil)))
- (if (and blinkpos
- (> oldpos (1+ (point-min)))
- (or (and (= (char-after (1- oldpos)) ?\))
- (= (char-after blinkpos) ?\[))
- (and (= (char-after (1- oldpos)) ?\])
- (= (char-after blinkpos) ?\()))
- (save-excursion
- (goto-char blinkpos)
- (looking-at ".+\\(\\.\\.\\|\\\\dots\\|\\\\ldots\\)")))
- (let ((saved (aref (syntax-table) (char-after blinkpos))))
- (unwind-protect
- (progn
- (aset (syntax-table) (char-after blinkpos)
- (+ (logand saved 255)
- (lsh (char-after (1- oldpos)) 8)))
- (blink-matching-open))
- (aset (syntax-table) (char-after blinkpos) saved)))
+ (setq leftpt (scan-sexps rightpt -1)
+ leftchar (char-after leftpt))
+ (error nil)))
+ (if (and leftpt
+ (or (and (= rightchar ?\))
+ (= leftchar ?\[))
+ (and (= rightchar ?\])
+ (= leftchar ?\()))
+ (save-excursion
+ (goto-char leftpt)
+ (looking-at ".+\\(\\.\\.\\|\\\\dots\\|\\\\ldots\\)")))
+ (let ((leftsaved (aref (syntax-table) leftchar))
+ (rightsaved (aref (syntax-table) rightchar)))
+ (unwind-protect
+ (progn
+ (cond ((= leftchar ?\[)
+ (aset (syntax-table) leftchar (cons 4 ?\)))
+ (aset (syntax-table) rightchar (cons 5 ?\[)))
+ (t
+ (aset (syntax-table) leftchar (cons 4 ?\]))
+ (aset (syntax-table) rightchar (cons 5 ?\())))
+ (blink-matching-open))
+ (aset (syntax-table) leftchar leftsaved)
+ (aset (syntax-table) rightchar rightsaved)))
(blink-matching-open))))
-
(defun calc-alg-digit-entry ()
(calc-alg-entry
(cond ((eq last-command-char ?e)
diff --git a/lisp/calc/calc-comb.el b/lisp/calc/calc-comb.el
index 24e3e5f182e..adb8fcecce6 100644
--- a/lisp/calc/calc-comb.el
+++ b/lisp/calc/calc-comb.el
@@ -540,12 +540,12 @@
;;; Produce a random 10-bit integer, with (random) if no seed provided,
;;; or else with Numerical Recipes algorithm ran3 / Knuth 3.2.2-A.
-(defvar var-RandSeed nil)
+(defvar var-RandSeed)
(defvar math-random-cache nil)
(defvar math-gaussian-cache nil)
(defun math-init-random-base ()
- (if var-RandSeed
+ (if (and (boundp 'var-RandSeed) var-RandSeed)
(if (eq (car-safe var-RandSeed) 'vec)
nil
(if (Math-integerp var-RandSeed)
@@ -599,9 +599,10 @@
;;; Produce a random digit in the range 0..999.
;;; Avoid various pitfalls that may lurk in the built-in (random) function!
;;; Shuffling algorithm from Numerical Recipes, section 7.1.
+(defvar math-random-last)
(defun math-random-digit ()
- (let (i math-random-last)
- (or (eq var-RandSeed math-last-RandSeed)
+ (let (i)
+ (or (and (boundp 'var-RandSeed) (eq var-RandSeed math-last-RandSeed))
(math-init-random-base))
(or math-random-cache
(progn