X-Git-Url: https://thelambdalab.xyz/gitweb/index.cgi?a=blobdiff_plain;f=scheme.4th;h=19848b60409e957933ac482f72e87dc803f7a6b2;hb=af4ada618d8d096645f783f40508a1bd6ad0d95d;hp=52ce34625049b8521453aefadd27548d56d06578;hpb=46a8d1c9a93efc50d4da538cba460faa1b29d602;p=scheme.forth.jl.git diff --git a/scheme.4th b/scheme.4th index 52ce346..19848b6 100644 --- a/scheme.4th +++ b/scheme.4th @@ -277,41 +277,37 @@ global-env setobj global-env fetchobj define-var ; -( = Arithmeic = ) +: arg-count-error + bold fg red ." Incorrect argument count." reset-term cr + abort +; -: add-prim ( args -- ) - 2dup nil objeq? if - 2drop - 0 fixnum-type +: ensure-arg-count ( args n -- ) + dup 0= if + drop nil objeq? false = if + arg-count-error + then else - 2dup car drop - -rot cdr recurse drop - + fixnum-type + -rot 2dup nil objeq? if + arg-count-error + then + + cdr rot 1- recurse then ; -' add-prim make-primitive + -:noname ( args -- ) - 2dup nil objeq? if - 2drop - 0 fixnum-type - else - 2dup car drop - -rot cdr add-prim drop - - fixnum-type - then -; make-primitive - +: arg-type-error + bold fg red ." Incorrect argument type." reset-term cr + abort +; -:noname ( args -- ) - 2dup nil objeq? if - 2drop - 1 fixnum-type - else - 2dup car drop - -rot cdr recurse drop - * fixnum-type +: ensure-arg-type ( arg type -- arg ) + istype? false = if + arg-type-error then -; make-primitive * +; + +include scheme-primitives.4th \ }}} @@ -397,8 +393,11 @@ parse-idx-stack parse-idx-sp ! : minus? ( -- bool ) nextchar [char] - = ; +: plus? ( -- bool ) + nextchar [char] + = ; + : fixnum? ( -- bool ) - minus? if + minus? plus? or if inc-parse-idx delim? if @@ -497,8 +496,11 @@ parse-idx-stack parse-idx-sp ! nextchar [char] " = ; : readnum ( -- num-atom ) - minus? dup if + plus? minus? or if + minus? inc-parse-idx + else + false then 0