瀏覽代碼

Added CallerType, CallerTypeName

Brian Fiete 3 年之前
父節點
當前提交
045e706600
共有 2 個文件被更改,包括 25 次插入1 次删除
  1. 6 0
      BeefLibs/corlib/src/Compiler.bf
  2. 19 1
      IDEHelper/Compiler/BfExprEvaluator.cpp

+ 6 - 0
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;
 

+ 19 - 1
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 = "";