X-Git-Url: https://thelambdalab.xyz/gitweb/index.cgi?a=blobdiff_plain;f=scheme-primitives.4th;h=86fbbd9749606e2e1ef6d1ffed3c7cd34db69c85;hb=7888f570d4b32b447622e25c38a4e78197cc7732;hp=e446b2e57cfea95bc5efd91d1fb5f8faa240020c;hpb=480095585b96fbcc5a4fb58fb57188609aadb6e5;p=scheme.forth.jl.git diff --git a/scheme-primitives.4th b/scheme-primitives.4th index e446b2e..86fbbd9 100644 --- a/scheme-primitives.4th +++ b/scheme-primitives.4th @@ -352,13 +352,16 @@ hide relcfa pad swap load ; make-primitive load -' read make-primitive read +:noname ( args -- obj ) + 0 ensure-arg-count + read +; make-primitive read defer display :noname ( args -- none ) 2dup 1 ensure-arg-count - car print cr + car print none ; make-primitive write @@ -367,19 +370,31 @@ defer display 2dup car display cdr - nil-type istype? if 2drop exit then + nil? if 2drop exit then pair-type istype? if space recurse exit then ." . " display ; : displaychar ( charobj -- ) - drop emit + drop emit ; + +: (displaystring) ( charlist -- ) + nil? if + 2drop + else + 2dup car displaychar + cdr recurse + then +; + +: displaystring ( stringobj -- ) + drop pair-type (displaystring) ; :noname ( obj -- ) pair-type istype? if ." (" displaypair ." )" exit then character-type istype? if displaychar exit then - string-type istype? if (printstring) exit then + string-type istype? if displaystring exit then print ; is display @@ -388,7 +403,7 @@ defer display 2dup 1 ensure-arg-count car string-type ensure-arg-type - (printstring) cr + displaystring none ; make-primitive display-string @@ -397,7 +412,7 @@ defer display 2dup 1 ensure-arg-count car character-type ensure-arg-type - displaychar cr + displaychar none ; make-primitive display-character @@ -406,7 +421,7 @@ defer display 2dup 1 ensure-arg-count car - display cr + display none ; make-primitive display @@ -421,8 +436,26 @@ defer display ( ==== Evaluation ==== ) -:noname - \ Dummy apply procedure - \ Should never actually run! - ." Error: Dummy apply procedure executed!" cr -; make-primitive apply +:noname ( args -- result ) + 2dup car 2swap cdr + + nil? false = if car then ( proc argvals ) + + apply +; make-primitive apply + +( ==== Error System ==== ) + +:noname ( args -- result ) + bold fg red + + nil? if + ." Error." + else + ." Error: " car display + then + + reset-term + + recoverable-exception throw +; make-primitive error