Author: bernhard
Date: Sun Jun 3 05:20:17 2007
New Revision: 18776
Modified:
trunk/languages/lisp/cl.pir
trunk/languages/lisp/include/macros/standard.pir
trunk/languages/lisp/lisp/bootstrap.l
Log:
[languages/lisp]
Pass a sub name to .SPECIAL_FORM, analogous to .DEFUN.
This allows to reintroduce parts of bootstrap.l
Modified: trunk/languages/lisp/cl.pir
==============================================================================
--- trunk/languages/lisp/cl.pir (original)
+++ trunk/languages/lisp/cl.pir Sun Jun 3 05:20:17 2007
@@ -82,14 +82,14 @@
# VALID_IN_PARROT_0_2_0 .DEFUN(symbol, package, "EVAL", _eval)
.DEFUN(symbol, package, "EVAL", "_eval")
- .SPECIAL_FORM(symbol, package, "FUNCTION", _function)
+ .SPECIAL_FORM(symbol, package, "FUNCTION", '_function')
# VALID_IN_PARROT_0_2_0 .DEFUN(symbol, package, "GENSYM", _gensym)
.DEFUN(symbol, package, "GENSYM", "_gensym")
- .SPECIAL_FORM(symbol, package, "IF", _if)
+ .SPECIAL_FORM(symbol, package, "IF", '_if')
- .SPECIAL_FORM(symbol, package, "LET", _let)
+ .SPECIAL_FORM(symbol, package, "LET", '_let')
# VALID_IN_PARROT_0_2_0 .DEFUN(symbol, package, "LIST", _list)
.DEFUN(symbol, package, "LIST", "_list")
@@ -103,9 +103,9 @@
# VALID_IN_PARROT_0_2_0 .DEFUN(symbol, package, "PRINT", _print)
.DEFUN(symbol, package, "PRINT", "_print")
- .SPECIAL_FORM(symbol, package, "PROGN", _progn)
+ .SPECIAL_FORM(symbol, package, "PROGN", '_progn')
- .SPECIAL_FORM(symbol, package, "QUOTE", _quote)
+ .SPECIAL_FORM(symbol, package, "QUOTE", '_quote')
# VALID_IN_PARROT_0_2_0 .DEFUN(symbol, package, "READ", _read)
.DEFUN(symbol, package, "READ", "_read")
@@ -119,7 +119,7 @@
# VALID_IN_PARROT_0_2_0 .DEFUN(symbol, package, "RPLACD", _rplacd)
.DEFUN(symbol, package, "RPLACD", "_rplacd")
- .SPECIAL_FORM(symbol, package, "SETQ",_setq )
+ .SPECIAL_FORM(symbol, package, "SETQ", '_setq')
# VALID_IN_PARROT_0_2_0 .DEFUN(symbol, package, "TYPE-OF", _type_of)
.DEFUN(symbol, package, "TYPE-OF", "_type_of")
@@ -925,6 +925,7 @@
.sub _setq
.param pmc args
+
.local string name
.local pmc lexical
.local pmc symbol
Modified: trunk/languages/lisp/include/macros/standard.pir
==============================================================================
--- trunk/languages/lisp/include/macros/standard.pir (original)
+++ trunk/languages/lisp/include/macros/standard.pir Sun Jun 3 05:20:17 2007
@@ -48,6 +48,8 @@
_specialformp = new "LispSpecialForm"
# VALID_IN_PARROT_0_2_0 _specialformp._set_body(.L)
+ .const .Sub _special_func = .L
+ _specialformp._set_body(_special_func)
_namep = new "LispString"
_namep = .N
Modified: trunk/languages/lisp/lisp/bootstrap.l
==============================================================================
--- trunk/languages/lisp/lisp/bootstrap.l (original)
+++ trunk/languages/lisp/lisp/bootstrap.l Sun Jun 3 05:20:17 2007
@@ -29,78 +29,78 @@
"NOT" "NULL" "PACKAGE-NAME" "PRINT" "PROGN" "QUOTE" "READ"
"READ-DELIMITED-LIST" "RPLACA" "RPLACD" "SETQ" "SYMBOL-FUNCTION"
"SYMBOL-NAME" "SYMBOL-PACKAGE" "TYPE-OF" "VALUES"
- "IN-PACKAGE"
-
+ "IN-PACKAGE"
+
;; Miscellaneous symbols
"*GENSYM-COUNTER*" "*MACROEXPAND-HOOK*" "*PACKAGE*" "*READ-EVAL*"
"*READTABLE*" "*STANDARD-INPUT*" "*STANDARD-OUTPUT*" "BASE-CHAR"
"FLOAT" "HASH-TABLE" "INTEGER" "MACRO" "NIL" "PACKAGE" "STREAM"
"STRING" "SYMBOL" "T")
-; ;; Set the current package to SYSTEM so we don't have to prefix
symbols.
-; (cl:setq *package* (sys:%find-package "SYSTEM"))
-; (%use-package (%find-package "SYSTEM") (%find-package "COMMON-LISP"))
-;
-; ;; Create a hash table used to store all the dispatching macros.
-; (setq *dispatching-macros* (%make-hash-table))
-;
-; ;; #'xxx macro. See CLtL section 2.4.8.2 for details.
-; (%set-hash *dispatching-macros*
-; "'"
-; (function
-; (lambda (stream char)
-; (list 'function (read stream)))))
-;
-; ;; #.xxx macro. See CLtL section 2.4.8.6 for details.
-; (setq *read-eval* t)
-; (%set-hash *dispatching-macros*
-; "."
-; (function
-; (lambda (stream char)
-; (if *read-eval*
-; (eval (read stream))
-; (error "reader-error" "*READ-EVAL* is NIL")))))
-;
-; ;; #< macro. See CLtL section 2.4.8.20 for details.
-; (%set-hash *dispatching-macros*
-; "<"
-; (function
-; (lambda (stream char)
-; (error "reader-error" "#< is invalid syntax"))))
-;
-; ;; ##<Space> macro. See CLtL section 2.4.8.21 for details.
-; (%set-hash *dispatching-macros*
-; " "
-; (function
-; (lambda (stream char)
-; (error "reader-error" "#| | is invalid syntax"))))
-;
-; ;; #) macro. See CLtL section 2.4.8.22 for details.
-; (%set-hash *dispatching-macros*
-; ")"
-; (function
-; (lambda (stream char)
-; (error "reader-error" "#) is invalid syntax"))))
-;
+;; Set the current package to SYSTEM so we don't have to prefix symbols.
+(cl:setq *package* (sys:%find-package "SYSTEM"))
+(%use-package (%find-package "SYSTEM") (%find-package "COMMON-LISP"))
+
+;; Create a hash table used to store all the dispatching macros.
+(setq *dispatching-macros* (%make-hash-table))
+
+;; #'xxx macro. See CLtL section 2.4.8.2 for details.
+(%set-hash *dispatching-macros*
+ "'"
+ (function
+ (lambda (stream char)
+ (list 'function (read stream)))))
+
+;; #.xxx macro. See CLtL section 2.4.8.6 for details.
+(setq *read-eval* t)
+(%set-hash *dispatching-macros*
+ "."
+ (function
+ (lambda (stream char)
+ (if *read-eval*
+ (eval (read stream))
+ (error "reader-error" "*READ-EVAL* is NIL")))))
+
+;; #< macro. See CLtL section 2.4.8.20 for details.
+(%set-hash *dispatching-macros*
+ "<"
+ (function
+ (lambda (stream char)
+ (error "reader-error" "#< is invalid syntax"))))
+
+;; ##<Space> macro. See CLtL section 2.4.8.21 for details.
+(%set-hash *dispatching-macros*
+ " "
+ (function
+ (lambda (stream char)
+ (error "reader-error" "#| | is invalid syntax"))))
+
+;; #) macro. See CLtL section 2.4.8.22 for details.
+(%set-hash *dispatching-macros*
+ ")"
+ (function
+ (lambda (stream char)
+ (error "reader-error" "#) is invalid syntax"))))
+
; (setq *macroexpand-hook* #'(lambda (fn form env)
; (apply fn (list form env))))
-;
-; ;; Create the KEYWORD package.
-; (sys:%make-package "KEYWORD")
-;
+
+;; Create the KEYWORD package.
+(sys:%make-package "KEYWORD")
+
; (sys:load "lisp/objects.l")
; (sys:load "lisp/core.l")
; (sys:load "lisp/logic.l")
; (sys:load "lisp/pred.l")
; (sys:load "lisp/list.l")
; (sys:load "lisp/math.l")
-;
-; ;; Create and alias the COMMON-LISP-USER package.
-; (sys:%make-package "COMMON-LISP-USER")
-; (sys:%alias-package (sys:%find-package "COMMON-LISP-USER") "CL-USER")
-;
+
+;; Create and alias the COMMON-LISP-USER package.
+(sys:%make-package "COMMON-LISP-USER")
+(sys:%alias-package (sys:%find-package "COMMON-LISP-USER") "CL-USER")
+
; (cl:setq *package* (sys:%find-package "CL-USER"))
; (sys:%use-package (sys:%find-package "CL-USER")
; (sys:%find-package "COMMON-LISP"))
-;
+
; (in-package "COMMON-LISP-USER")