Function: ccl-compile-expression

ccl-compile-expression is a byte-compiled function defined in ccl.el.gz.

Signature

(ccl-compile-expression RRR EXPR)

Documentation

Compile SET statement of the form (RRR = EXPR).

Source Code

;; Defined in /usr/src/emacs/lisp/international/ccl.el.gz
(defun ccl-compile-expression (rrr expr)
  "Compile SET statement of the form `(RRR = EXPR)'."
  (let ((left (car expr))
	(op (get (nth 1 expr) 'ccl-arith-code))
	(right (nth 2 expr)))
    (if (listp left)
	(progn
	  ;; EXPR has the form `((EXPR2 OP2 ARG) OP RIGHT)'.  Compile
	  ;; the first term as `(r7 = (EXPR2 OP2 ARG)).'
	  (ccl-compile-expression 'r7 left)
	  (setq left 'r7)))

    ;; Now EXPR has the form (LEFT OP RIGHT).
    (if (and (eq rrr left)
	     (< op (length ccl-assign-arith-table)))
	;; Compile this SET statement as `(RRR OP= RIGHT)'.
	(if (integerp right)
	    (progn
	      (ccl-embed-code 'set-assign-expr-const rrr (ash op 3) 'r0)
	      (ccl-embed-data right))
	  (ccl-check-register right expr)
	  (ccl-embed-code 'set-assign-expr-register rrr (ash op 3) right))

      ;; Compile this SET statement as `(RRR = (LEFT OP RIGHT))'.
      (if (integerp right)
	  (progn
	    (ccl-embed-code 'set-expr-const rrr (ash op 3) left)
	    (ccl-embed-data right))
	(ccl-check-register right expr)
	(ccl-embed-code 'set-expr-register
			rrr
			(logior (ash op 3) (get right 'ccl-register-number))
			left)))))