Thu Dec 13 19:20:09 CET 2007
macro code concatenation
what i'd like to postpone expansion of constants until assembly. but,
i can't influence the meta functions from forth code.. this is another
one of those arbitrary complications.
- putting macros in the project dictionary
- by default, they are expanded
- when present in data positions, they are evaluated
i can't see a reason why this wouldn't work. the only concern is
stability: each invokation needs to reduce. i.e. '+' in meta dict is
special because it's different from the '+' in macros (the latter
can expand to symbolic code containing '+')
the problem i'm trying to solve is to get a minimal symbolic
representation of things that are constants by delaying their
evaluation, or by somehow recombining?
i.e.: if there is a macro
: foo 1 + ;
i want the code "123 foo foo" to expand to the machine code:
(qw (123 foo foo))
(qw (123 1 + 1 +))
the thing that decides what to do here is '+' but can this decision
somehow be transformed to the point where 'foo' executes? if every
macro inspects its result, and if the result is ONLY the combination
of constants->constants, this combination can be made symbolic, since
it can be re-computed at assembly time.
(qw a) (qw b) foo -> (qw (c d e f))
can be replaced by
(qw (a b foo))
because probably "c d e f" is not going to be very helpful to
understand where the constant came from.
this would enable the unification of:
* meta words
* host code
does the subset of these macros need to be explicitly defined?
probably not. they are just macros, and qualify if they map qw's to