From 045e706600d3ab9be3aff15772a9fd9998e7cfb6 Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Fri, 17 Dec 2021 15:45:53 -0500 Subject: [PATCH] Added CallerType, CallerTypeName --- BeefLibs/corlib/src/Compiler.bf | 6 ++++++ IDEHelper/Compiler/BfExprEvaluator.cpp | 20 +++++++++++++++++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/BeefLibs/corlib/src/Compiler.bf b/BeefLibs/corlib/src/Compiler.bf index 3030c444..3be28ff7 100644 --- a/BeefLibs/corlib/src/Compiler.bf +++ b/BeefLibs/corlib/src/Compiler.bf @@ -217,6 +217,12 @@ namespace System [LinkName("#CallerFileDir")] public static extern String CallerFileDir; + [LinkName("#CallerType")] + public static extern Type CallerType; + + [LinkName("#CallerTypeName")] + public static extern String CallerTypeName; + [LinkName("#CallerMemberName")] public static extern String CallerMemberName; diff --git a/IDEHelper/Compiler/BfExprEvaluator.cpp b/IDEHelper/Compiler/BfExprEvaluator.cpp index a7750009..5db8dfee 100644 --- a/IDEHelper/Compiler/BfExprEvaluator.cpp +++ b/IDEHelper/Compiler/BfExprEvaluator.cpp @@ -6973,7 +6973,7 @@ BfTypedValue BfExprEvaluator::CreateCall(BfAstNode* targetSrc, const BfTypedValu filePath = mModule->mCurFilePosition.mFileInstance->mParser->mFileName; argValue = BfTypedValue(mModule->GetStringObjectValue(filePath), mModule->ResolveTypeDef(mModule->mCompiler->mStringTypeDef)); - } + } else if (strcmp(globalVar->mName, "#CallerFileName") == 0) { String filePath = ""; @@ -6990,6 +6990,24 @@ BfTypedValue BfExprEvaluator::CreateCall(BfAstNode* targetSrc, const BfTypedValu argValue = BfTypedValue(mModule->GetStringObjectValue(GetFileDir(filePath)), mModule->ResolveTypeDef(mModule->mCompiler->mStringTypeDef)); } + else if (strcmp(globalVar->mName, "#CallerTypeName") == 0) + { + String typeName = ""; + if (mModule->mCurTypeInstance != NULL) + typeName = mModule->TypeToString(mModule->mCurTypeInstance); + argValue = BfTypedValue(mModule->GetStringObjectValue(typeName), + mModule->ResolveTypeDef(mModule->mCompiler->mStringTypeDef)); + } + else if (strcmp(globalVar->mName, "#CallerType") == 0) + { + auto typeType = mModule->ResolveTypeDef(mModule->mCompiler->mTypeTypeDef); + BfType* type = mModule->mCurTypeInstance; + if (type != NULL) + { + mModule->AddDependency(type, mModule->mCurTypeInstance, BfDependencyMap::DependencyFlag_ExprTypeReference); + argValue = BfTypedValue(mModule->CreateTypeDataRef(type), typeType); + } + } else if (strcmp(globalVar->mName, "#CallerMemberName") == 0) { String memberName = "";