Neuron®
The Neuron® is the basis for the creation of open and secure federated networks for smart societies.
Loading...
Searching...
No Matches
VariableReference.cs
1using System;
8
9namespace Waher.Script.Model
10{
15 {
16 private readonly bool onlyVariables;
17
27 {
28 this.onlyVariables = false;
29 }
30
42 {
43 this.onlyVariables = OnlyVariables;
44 }
45
50 public bool OnlyVariables => this.onlyVariables;
51
58 {
59 if (Variables.TryGetVariable(this.variableName, out Variable v))
60 return v.ValueElement;
61
62 if (!this.onlyVariables)
63 {
64 IElement ValueElement = TryGetConstant(this.variableName, Variables, this);
65 if (!(ValueElement is null))
66 return ValueElement;
67 }
68
70 }
71
81 {
83 return ValueElement;
84
86 return new Namespace(VariableName);
87
88 ValueElement = Expression.GetFunctionLambdaDefinition(VariableName, Node.Start, Node.Length, Node.Expression);
89 if (!(ValueElement is null))
90 return ValueElement;
91
92 if (Types.TryGetQualifiedNames(VariableName, out string[] QualifiedNames))
93 {
94 if (QualifiedNames.Length == 1)
95 {
96 Type T = Types.GetType(QualifiedNames[0]);
97
98 if (!(T is null))
99 return new TypeValue(T);
100 else
101 return new Namespace(QualifiedNames[0]);
102 }
103 else
104 {
105 int i, c = QualifiedNames.Length;
106 IElement[] Elements = new IElement[c];
107
108 for (i = 0; i < c; i++)
109 Elements[i] = new StringValue(QualifiedNames[i]);
110
111 return new ObjectVector(Elements);
112 }
113 }
114
115 if (Variables.TryGetVariable("Global", out Variable v) &&
116 v.ValueObject is Variables GlobalVariables &&
117 GlobalVariables.TryGetVariable(VariableName, out v))
118 {
119 return v.ValueElement;
120 }
121
122 return null;
123 }
124
131 public override PatternMatchResult PatternMatch(IElement CheckAgainst, Dictionary<string, IElement> AlreadyFound)
132 {
133 if (AlreadyFound.TryGetValue(this.variableName, out IElement E) && !E.Equals(CheckAgainst))
134 return PatternMatchResult.NoMatch;
135
136 AlreadyFound[this.variableName] = CheckAgainst;
137
138 return PatternMatchResult.Match;
139 }
140
148 {
149 if (VariableName == this.variableName)
150 return new ConstantElement(DoubleNumber.OneElement, this.Start, this.Length, this.Expression);
151 else
152 return new ConstantElement(DoubleNumber.ZeroElement, this.Start, this.Length, this.Expression);
153 }
154
158 public string DefaultVariableName => this.variableName;
159
161 public override bool Equals(object obj)
162 {
163 return obj is VariableReference O &&
164 this.onlyVariables.Equals(O.onlyVariables) &&
165 base.Equals(obj);
166 }
167
169 public override int GetHashCode()
170 {
171 int Result = base.GetHashCode();
172 Result ^= Result << 5 ^ this.onlyVariables.GetHashCode();
173 return Result;
174 }
175
176 }
177}
Static class that dynamically manages types and interfaces available in the runtime environment.
Definition: Types.cs:15
static Type GetType(string FullName)
Gets a type, given its full name.
Definition: Types.cs:42
static bool TryGetQualifiedNames(string UnqualifiedName, out string[] QualifiedNames)
Gets an array (possibly null) of qualified names relating to an unqualified name.
Definition: Types.cs:244
static bool IsRootNamespace(string Name)
Checks if a name is a root namespace.
Definition: Types.cs:185
Class managing a script expression.
Definition: Expression.cs:41
static bool TryGetConstant(string Name, Variables Variables, out IElement ValueElement)
Tries to get a constant value, given its name.
Definition: Expression.cs:3382
Represents a constant element value.
readonly string variableName
Name of variable being referenced by the node.
Base class for all nodes in a parsed script tree.
Definition: ScriptNode.cs:69
int Length
Length of expression covered by node.
Definition: ScriptNode.cs:101
Expression Expression
Expression of which the node is a part.
Definition: ScriptNode.cs:177
int Start
Start position in script expression.
Definition: ScriptNode.cs:92
Represents a variable reference.
bool OnlyVariables
If only values of variables should be returned (true), or if constants and namespaces should also be ...
override IElement Evaluate(Variables Variables)
Evaluates the node, using the variables provided in the Variables collection.
ScriptNode Differentiate(string VariableName, Variables Variables)
Differentiates a script node, if possible.
VariableReference(string VariableName, bool OnlyVariables, int Start, int Length, Expression Expression)
Represents a variable reference.
override PatternMatchResult PatternMatch(IElement CheckAgainst, Dictionary< string, IElement > AlreadyFound)
Performs a pattern match operation.
VariableReference(string VariableName, int Start, int Length, Expression Expression)
Represents a variable reference.
string DefaultVariableName
Default variable name, if any, null otherwise.
static IElement TryGetConstant(string VariableName, Variables Variables, ScriptNode Node)
Tries to get a constant value, given a variable name. This method will also check for namespaces and ...
static readonly DoubleNumber ZeroElement
0
Definition: DoubleNumber.cs:16
static readonly DoubleNumber OneElement
1
Definition: DoubleNumber.cs:21
Contains information about a variable.
Definition: Variable.cs:10
Collection of variables.
Definition: Variables.cs:25
virtual bool TryGetVariable(string Name, out Variable Variable)
Tries to get a variable object, given its name.
Definition: Variables.cs:56
Basic interface for all types of elements.
Definition: IElement.cs:21
Base interface for lambda expressions.
PatternMatchResult
Status result of a pattern matching operation.
Definition: ScriptNode.cs:17