include? [if] condcomp.fth
include? save-input save-input.fth
include? read-line file.fth
+include? file? filefind.fth
+include? require require.fth
\ load floating point support if basic support is in kernel
exists? F*
include? task-member.fth member.fth
include? :struct c_struct.fth
include? smif{ smart_if.fth
-include? file? filefind.fth
include? see see.fth
include? words.like wordslik.fth
include? trace trace.fth
--- /dev/null
+\ REQUIRE and REQUIRED
+\
+\ This code is part of pForth.
+\
+\ The pForth software code is dedicated to the public domain,
+\ and any third party may reproduce, distribute and modify
+\ the pForth software code or any derivative works thereof
+\ without any compensation or license. The pForth software
+\ code is provided on an "as is" basis without any warranty
+\ of any kind, including, without limitation, the implied
+\ warranties of merchantability and fitness for a particular
+\ purpose and their equivalents under the laws of any jurisdiction.
+
+private{
+
+\ Has the file with name C-ADDR/U already been included?
+\
+\ This searches the "::::<filename>" marker created by INCLUDED. This
+\ works for now, but may break if pForth ever receives wordlists.
+: INCLUDED? ( c-addr u -- flag )
+ s" ::::" here place ( c-addr u )
+ here $append ( )
+ here latest findnfa.from ( x found? )
+ nip
+;
+
+\ FIXME: use real PARSE-NAME when available
+: (PARSE-NAME) ( "word" -- c-addr u ) bl parse-word ;
+
+}private
+
+: REQUIRED ( i*x c-addr u -- j*x ) 2dup included? IF 2drop ELSE included THEN ;
+: REQUIRE ( i*x "name" -- i*x ) (parse-name) required ;
+
+privatize
variable TRACE-INCLUDE
: INCLUDE.MARK.START ( c-addr u -- , mark start of include for FILE?)
- " ::::" pad $MOVE
- pad $APPEND
- pad ['] noop (:)
+ dup 5 + allocate throw >r
+ " ::::" r@ $move
+ r@ $append
+ r@ ['] noop (:)
+ r> free throw
;
: INCLUDE.MARK.END ( -- , mark end of include )
\ Tidy the test folder
T{ fn3 DELETE-FILE DROP -> }T
+\ ------------------------------------------------------------------------------
+TESTING REQUIRED REQUIRE INCLUDED
+\ Tests taken from Forth 2012 RfD
+
+T{ 0 S" t_required-helper1.fth" REQUIRED
+ REQUIRE t_required-helper1.fth
+ INCLUDE t_required-helper1.fth
+ -> 2 }T
+
+T{ 0 INCLUDE t_required-helper2.fth
+ S" t_required-helper2.fth" REQUIRED
+ REQUIRE t_required-helper2.fth
+ S" t_required-helper2.fth" INCLUDED
+ -> 2 }T
+
\ ----------------------------------------------------------------------------
TESTING two buffers available for S" and/or S\" (Forth 2012)
--- /dev/null
+\ For testing REQUIRED etc
+
+1+
--- /dev/null
+\ For testing REQUIRED etc
+
+1+