- private static Xex macro_expand (Xex[] bindings, Name[] args, Xex e)
- {
- Xex xex;
-
- if (e.function != null)
- {
- xex = new Xex ();
- xex.function = e.function;
- xex.args = new Xex[e.args.Length];
- for (int i = e.args.Length - 1; i >= 0; i--)
- xex.args[i] = macro_expand (bindings, args, e.args[i]);
- }
- else if (e.args != null)
- {
- xex = new Xex ();
- Name name = (Name) e.args[0].val;
- for (int i = args.Length - 1; i >= 0; i--)
- if (args[i] == name)
- return bindings[i];
- xex.function = null;
- xex.args = new Xex[1];
- xex.args[0] = e.args[0];
- }
- else
- {
- xex = e;
- }
- return xex;
- }
-