As of 2022, this is now possible (and easy) in all currently supported PostgreSQL versions, thanks to GET DIAGNOSTICS:
BEGIN TRANSACTION;
CREATE TYPE stuff AS (
nestlevel int
,arbitrary text
);
CREATE OR REPLACE FUNCTION fa()
RETURNS stuff
LANGUAGE plpgsql
AS $$
DECLARE
_stack text;
BEGIN
GET DIAGNOSTICS _stack = PG_CONTEXT;
RETURN ROW(
array_length(string_to_array(_stack, E'\n'), 1) - 1,
'Some text'
)::stuff;
END;
$$;
CREATE OR REPLACE FUNCTION fb()
RETURNS stuff
LANGUAGE plpgsql
AS $$
BEGIN
RETURN fa();
END;
$$;
SELECT fa();
SELECT fb();
ROLLBACK TRANSACTION;
BEGIN
CREATE TYPE
CREATE FUNCTION
CREATE FUNCTION
fa
-----------------
(0,"Some text")
(1 row)
fb
-----------------
(1,"Some text")
(1 row)
ROLLBACK
GET DISAGNOSTICShas been discussed and may be implemented for 9.6. Ask on pgsql-general and suggest it as a feature - or even better, implement it and send in a patch to plpgsql.