Value Except::call(Value self, Value member, short nargs, short nargnames, ushort* argnames, int each) { static Value As("As"); static Value Callstack("Callstack"); if (member == As) { argseach(nargs, nargnames, argnames, each); if (nargs != 1) except("usage: exception.As(string)"); return new Except(*this, ARG(0).gcstr()); } if (member == Callstack) { argseach(nargs, nargnames, argnames, each); NOARGS("exception.Callstack()"); return calls(); } else return SuString::call(self, member, nargs, nargnames, argnames, each); }
Value SuFunction::call(Value self, Value member, short nargs, short nargnames, short* argnames, int each) { static Value Disasm("Disasm"); static Value Source("Source"); if (member == CALL) { args(nargs, nargnames, argnames, each); if (flags) dotParams(self); Framer frame(this, self); return tls().proc->fp->run(); } else if (member == Disasm) { NOARGS("function.Disasm()"); OstreamStr oss; disasm(oss); return new SuString(oss.str()); } else if (member == Source) { return new SuString(src); } else return Func::call(self, member, nargs, nargnames, argnames, each); }