2 * (C) Copyright 2007-2008 Jeremy Maitin-Shepard
4 * Use, modification, and distribution are subject to the terms specified in the
8 function keyword_argument(name, value)
14 function keyword_argument_forwarder(args)
19 function _get_keyword_argument_setter(name) {
20 return function (value) { return new keyword_argument(name, value); }
23 function _get_keyword_argument_getter(name) {
24 return function () { return new keyword_argument(name, true); }
27 // This function must be called with all string arguments, all of
28 // which must begin with "$".
29 function define_keywords()
31 for (var i = 0; i < arguments.length; ++i)
33 var name = arguments[i];
34 this.__defineSetter__(name, _get_keyword_argument_setter(name));
35 this.__defineGetter__(name, _get_keyword_argument_getter(name));
39 var define_keyword = define_keywords;
41 function forward_keywords(args)
43 return new keyword_argument_forwarder(args);
46 // This is called with a function's `arguments' variable. Additional
47 // default values can also be specified as subsequent arguments.
48 function keywords(args)
50 /* First add our own arguments. */
51 for (var i = 1; i < arguments.length; ++i)
53 var arg = arguments[i];
54 args[arg.name] = arg.value;
56 function helper(in_args)
58 // Begin at the first "undeclared" argument
59 for (var i = in_args.callee.length; i < in_args.length; ++i)
62 if (arg instanceof keyword_argument)
63 args[arg.name] = arg.value;
64 else if (arg instanceof keyword_argument_forwarder)