Mailing List Archive: 49091 messages
  • Home
  • Script library
  • AltME Archive
  • Mailing list
  • Articles Index
  • Site search
 

[REBOL] Re: Problem? load %script.r - howto retrieve all!!??

From: sunandadh:aol at: 17-Mar-2002 19:35

Norman:
> When loading or reading a file I would like to know ALL > the functions, blocks, etc..that where actived while loading the > file. There is no such command like "source loaded-script" > (Im now always using [ loaded: read %example.r ]) but thats a too > workaround..
I'm no guru here, but here's a solution that works if your functions are _not_ defined inside objects. The idea is: 1. capture current System/words 2. Load the script(s) 3. Examine new words added to system/words. Those of type Function! are what you are after. Sample code, including showing the object/function shortcoming: ;; Capture existing words existing-words: copy first system/words ;; ---- run a script that does the following: myfunc: func [] [print 1] myobj: make object! [myobjfunc: func [] [print 2]] ;; Spot the new words new-words: sort difference existing-words first system/words foreach new-word new-words [ print [new-word type? get to-word new-word] ] I don't know an easy way to tell if a word has changed -- but if you are running an untrusted script, 'protect has got to be basic insurance.....I suppose you could make a block of all words which are functions, and their molded checksum. After loading the script, check again to see if they are still functions with the same checksum. But protect _that_ block (or make it local) and all the words you need to check the checksums. Otherwise your checking could be subverted (My code above naively assumes that 'sort, 'difference, etc retain their expected meaning after running your script). Sunanda.