10
10
(in-package #:tim-judge)
12
(defparameter *languages-compilers*
19
(defparameter *languages-interpreters*
22
(defparameter *languages-extensions*
29
(defparameter *test-extensions*
34
(defun make-accessor (slot-name)
35
"Make accessor from slot-name for class generating."
36
(intern (concatenate 'string
38
(string-upcase (string slot-name)))))
40
(defun make-initarg (slot-name)
41
"Make initarg from slot-name for class generating"
42
(intern (string slot-name) "KEYWORD"))
44
(defun make-class-from-structure (s
45
&optional (class-name 'judge-config))
46
"Generate a class from a convenient user-defined variable."
47
(eval `(defclass ,class-name ()
51
(let* ((slot-name (nth 0 slot))
52
(slot-init-value (nth 1 slot)))
54
:accessor (make-accessor slot-name)
55
:initarg (make-initarg slot-name)
56
:initform slot-init-value))))))
58
12
(defun make-dump-string (class-structure)
59
13
(format nil "~{~{~a~*~}: ~~15a~~%~}" class-structure))
61
(defun get-slot-value (slot-name obj)
62
(eval `(funcall #',(intern (concatenate 'string "CONF-"
63
(symbol-name slot-name))) ,obj)))
65
(defun make-dump-parameters (class-structure class-object)
67
for slot in class-structure
68
collect (get-slot-value (first slot) class-object)))
70
(defun dump-class (obj class-structure &optional (stream *standard-output*))
71
(apply #'format stream (make-dump-string class-structure)
72
(make-dump-parameters class-structure obj)))