From 537b8a421b1265a73f1812e23f29862fdcd781db Mon Sep 17 00:00:00 2001 From: Amiri Barksdale at Home Date: Sat, 13 Jul 2013 18:17:09 -0700 Subject: [PATCH] __PACKAGE__() as a sub, not a special token --- .../org/moe/runtime/builtins/CorePackage.scala | 17 +++++++++++++++++ t/100-builtins/008-package.t | 9 +++++++++ 2 files changed, 26 insertions(+) create mode 100644 t/100-builtins/008-package.t 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();