diff --git a/src/main/scala/org/moe/runtime/builtins/CorePackage.scala b/src/main/scala/org/moe/runtime/builtins/CorePackage.scala index 8dacf41..96501b1 100644 --- a/src/main/scala/org/moe/runtime/builtins/CorePackage.scala +++ b/src/main/scala/org/moe/runtime/builtins/CorePackage.scala @@ -229,5 +229,22 @@ object CorePackage { } ) ) + + pkg.addSubroutine( + new MoeSubroutine( + "__PACKAGE__", + new MoeSignature(), + env, + { (e) => + val caller_env = r.getInterpreterCallStack.head.getCallSiteEnvironment + val caller_pkg = caller_env.getCurrentPackage match { + case Some(x) => x.getFullyQualifiedName + case None => "" + case _ => "" + } + getStr(caller_pkg) + } + ) + ) } } diff --git a/t/100-builtins/008-package.t b/t/100-builtins/008-package.t new file mode 100644 index 0000000..d058ae5 --- /dev/null +++ b/t/100-builtins/008-package.t @@ -0,0 +1,9 @@ +use Test::More; + +package Bar { + sub quux { __PACKAGE__() } +} + +is(Bar::quux(), "Bar", '__PACKAGE__ returns what we expect'); + +done_testing();