[Turn on line numbering]arg str, @args; var def, me, obj, reg, member, match, type, second; [(me ?= sender())] = args; if (args.length() > 1) match = args[2]; else match = [me, 'match_environment, []]; if (str == ".") { obj = (> match[1].(match[2])(".") <); return ['object, obj, obj, 0, 0]; } if ((reg = regexp(str, "^(.*)<([^>]*)>(.*)$"))) { def = (> match[1].(match[2])(reg[2], @match[3]) <); str = reg[1] + reg[3]; } if ((reg = regexp(str, "([^\.,]*)([\.,]+)([^\( ]*)"))) { obj = reg[1]; member = reg[3]; type = reg[2]; if (type.length() > 1 && type[1] == "." && !obj) { type = type.subrange(2); obj = (> match[1].(match[2])(".") <); } else { obj = obj ? (> match[1].(match[2])(obj, @match[3]) <) : me; } if ("." in type) { if ("," in type) second = 'variable; type = 'method; } else { type = 'variable; } } else { obj = (> match[1].(match[2])(str, @match[3]) <); type = 'object; } return [type, obj, def || obj, member, second];
// Created 27-Mar-1995 as a part of ColdCore, see: @help Credit