792dfa2f9120

Clean up opcode definition
[view raw] [browse files]
author Steve Losh <steve@stevelosh.com>
date Wed, 29 Jun 2016 13:53:59 +0000
parents 809f43baf982
children de6e248866f4
branches/tags (none)
files src/wam/constants.lisp src/wam/types.lisp

Changes

--- a/src/wam/constants.lisp	Fri Jun 10 20:28:37 2016 +0000
+++ b/src/wam/constants.lisp	Wed Jun 29 13:53:59 2016 +0000
@@ -100,54 +100,58 @@
 
 
 ;;;; Opcodes
-(define-constant +opcode-noop+ 0)
+(defmacro define-opcodes (&rest symbols)
+  `(progn
+     ,@(loop :for c :from 0
+             :for s :in symbols
+             :collect `(define-constant ,s ,c))
+     (define-constant +number-of-opcodes+ ,(length symbols))))
 
+(define-opcodes
+  +opcode-noop+
 
-;;; Program
-(define-constant +opcode-get-structure+ 1)
-(define-constant +opcode-unify-variable-local+ 2)
-(define-constant +opcode-unify-variable-stack+ 3)
-(define-constant +opcode-unify-value-local+ 4)
-(define-constant +opcode-unify-value-stack+ 5)
-(define-constant +opcode-get-variable-local+ 6)
-(define-constant +opcode-get-variable-stack+ 7)
-(define-constant +opcode-get-value-local+ 8)
-(define-constant +opcode-get-value-stack+ 9)
-
+  ;; Program
+  +opcode-get-structure+
+  +opcode-unify-variable-local+
+  +opcode-unify-variable-stack+
+  +opcode-unify-value-local+
+  +opcode-unify-value-stack+
+  +opcode-get-variable-local+
+  +opcode-get-variable-stack+
+  +opcode-get-value-local+
+  +opcode-get-value-stack+
 
-;;; Query
-(define-constant +opcode-put-structure+ 10)
-(define-constant +opcode-set-variable-local+ 11)
-(define-constant +opcode-set-variable-stack+ 12)
-(define-constant +opcode-set-value-local+ 13)
-(define-constant +opcode-set-value-stack+ 14)
-(define-constant +opcode-put-variable-local+ 15)
-(define-constant +opcode-put-variable-stack+ 16)
-(define-constant +opcode-put-value-local+ 17)
-(define-constant +opcode-put-value-stack+ 18)
-
+  ;; Query
+  +opcode-put-structure+
+  +opcode-set-variable-local+
+  +opcode-set-variable-stack+
+  +opcode-set-value-local+
+  +opcode-set-value-stack+
+  +opcode-put-variable-local+
+  +opcode-put-variable-stack+
+  +opcode-put-value-local+
+  +opcode-put-value-stack+
 
-;;; Control
-(define-constant +opcode-call+ 19)
-(define-constant +opcode-proceed+ 20)
-(define-constant +opcode-allocate+ 21)
-(define-constant +opcode-deallocate+ 22)
-(define-constant +opcode-done+ 23)
-(define-constant +opcode-try+ 24)
-(define-constant +opcode-retry+ 25)
-(define-constant +opcode-trust+ 26)
-(define-constant +opcode-cut+ 27)
+  ;; Control
+  +opcode-call+
+  +opcode-proceed+
+  +opcode-allocate+
+  +opcode-deallocate+
+  +opcode-done+
+  +opcode-try+
+  +opcode-retry+
+  +opcode-trust+
+  +opcode-cut+
 
+  ;; Constants
+  +opcode-get-constant+
+  +opcode-set-constant+
+  +opcode-put-constant+
+  +opcode-unify-constant+
 
-;;; Constants
-(define-constant +opcode-get-constant+ 28)
-(define-constant +opcode-set-constant+ 29)
-(define-constant +opcode-put-constant+ 30)
-(define-constant +opcode-unify-constant+ 31)
-
-;;; Lists
-(define-constant +opcode-get-list+ 32)
-(define-constant +opcode-put-list+ 33)
+  ;; Lists
+  +opcode-get-list+
+  +opcode-put-list+)
 
 
 ;;;; Debug Config
--- a/src/wam/types.lisp	Fri Jun 10 20:28:37 2016 +0000
+++ b/src/wam/types.lisp	Wed Jun 29 13:53:59 2016 +0000
@@ -45,7 +45,7 @@
 
 
 (deftype opcode ()
-  '(integer 0 33))
+  `(integer 0 ,(1- +number-of-opcodes+)))
 
 
 (deftype stack-frame-size ()