/// <summary> /// Evaluates a member using by resolving a symbol by a full name. /// </summary> /// <remarks> /// DScript V2 feature. /// </remarks> internal EvaluationResult EvaluateEntryByFullName(Context context, FullSymbol fullName, LineInfo location) { ResolvedEntry resolvedEntry = default(ResolvedEntry); if (CurrentFileModule?.TryGetResolvedEntryByFullName(fullName, out resolvedEntry) == true) { return(EvaluateResolvedSymbol(context, this, location, resolvedEntry)); } // This is an assertion but not a graceful error, because resolution may fail only if something went wrong. string message = I($"Can't find resolved symbol by a full name '{fullName.ToString(context.FrontEndContext.SymbolTable)}'"); Contract.Assert(false, message); return(EvaluationResult.Undefined); }
private bool TryResolveEntryByLocation(Context context, FilePosition filePosition, FullSymbol nameForDebuggingPurposes, out ResolvedEntry resolvedEntry, out FileModuleLiteral owningFileModule) { owningFileModule = default(FileModuleLiteral); resolvedEntry = default(ResolvedEntry); if (CurrentFileModule?.TryGetResolvedEntry(context.ModuleRegistry, filePosition, out resolvedEntry, out owningFileModule) == true) { return(true); } // This is an assertion but not a graceful error, because resolution may fail only if something went wrong. string message = I($"Can't find resolved symbol '{nameForDebuggingPurposes.ToString(context.FrontEndContext.SymbolTable)}' at position '{filePosition.Position}' from source file '{filePosition.Path.ToString(context.PathTable)}'"); Contract.Assert(false, message); return(false); }
/// <summary> /// Stores a given resolved entry at a given location. /// </summary> public virtual void AddResolvedEntry(FilePosition location, ResolvedEntry entry) { CurrentFileModule?.AddResolvedEntry(location, entry); }
/// <summary> /// Stores a given resolved entry by a given name. /// </summary> public virtual void AddResolvedEntry(FullSymbol fullName, ResolvedEntry entry) { CurrentFileModule?.AddResolvedEntry(fullName, entry); }
// Following set of methods are used in V2 name resolution based on a semantic information from the checker. /// <summary> /// Stores a given function at a given location. /// </summary> public virtual void AddResolvedEntry(FilePosition location, FunctionLikeExpression lambda) { CurrentFileModule?.AddResolvedEntry(location, lambda); }