diff --git a/RandomizerCore/Logic/LogicManager.cs b/RandomizerCore/Logic/LogicManager.cs index 35a2351..2088fd8 100644 --- a/RandomizerCore/Logic/LogicManager.cs +++ b/RandomizerCore/Logic/LogicManager.cs @@ -120,6 +120,19 @@ public LogicInt GetVariable(int id) return _variables[intVariableOffset - id]; } + public LogicInt GetVariable(string name) + { + if (_variableIndices.TryGetValue(name, out int index)) return _variables[intVariableOffset - index]; + else if (VariableResolver.TryMatch(this, name, out LogicInt li)) + { + index = intVariableOffset - _variables.Count; + _variableIndices.Add(name, index); + _variables.Add(li); + return li; + } + else return null; + } + public LogicItem GetItem(string name) { if (!_items.TryGetValue(name, out LogicItem item)) diff --git a/RandomizerCore/StringLogic/Infix.cs b/RandomizerCore/StringLogic/Infix.cs index 58738e1..5c99568 100644 --- a/RandomizerCore/StringLogic/Infix.cs +++ b/RandomizerCore/StringLogic/Infix.cs @@ -82,6 +82,9 @@ public static List Tokenize(string infix, ITokenSource tokenSource) output.Add(tokenSource.GetComparisonToken(ComparerEnum[op], left, right)); } break; + case "(": + case ")": + throw new ArgumentException($"Failed to tokenize infix {infix}: extra parens found after parsing."); default: { output.Add(tokenSource.GetTermToken(postfix[j])); diff --git a/RandomizerCore/StringLogic/LogicClauseBuilder.cs b/RandomizerCore/StringLogic/LogicClauseBuilder.cs index 326fa32..f389664 100644 --- a/RandomizerCore/StringLogic/LogicClauseBuilder.cs +++ b/RandomizerCore/StringLogic/LogicClauseBuilder.cs @@ -58,7 +58,7 @@ public LogicClauseBuilder(LogicClauseBuilder lcb) public void OrWith(IEnumerable ts) { Append(ts); - Append(OperatorToken.AND); + Append(OperatorToken.OR); } public void OrWith(TermToken t)