public void CreateSetIndexCommand() { IExpression targetExpression = new ConstantExpression(1); IExpression indexExpression = new ConstantExpression(2); IExpression valueExpression = new ConstantExpression(3); var command = new SetIndexCommand(targetExpression, indexExpression, valueExpression); Assert.AreEqual(targetExpression, command.TargetExpression); Assert.AreEqual(indexExpression, command.IndexExpression); Assert.AreEqual(valueExpression, command.Expression); }
public void ExecuteSetIndexCommandOnDictionary() { var dictionary = new Hashtable(); IExpression targetExpression = new ConstantExpression(dictionary); IExpression indexExpression = new ConstantExpression("foo"); IExpression valueExpression = new ConstantExpression("bar"); var command = new SetIndexCommand(targetExpression, indexExpression, valueExpression); command.Execute(null); Assert.AreEqual("bar", dictionary["foo"]); }
public void ExecuteSetIndexCommandOnArray() { var array = new object[] { 1, 2, 2 }; IExpression targetExpression = new ConstantExpression(array); IExpression indexExpression = new ConstantExpression(2); IExpression valueExpression = new ConstantExpression(3); var command = new SetIndexCommand(targetExpression, indexExpression, valueExpression); command.Execute(null); Assert.AreEqual(3, array[2]); }
public void ExecuteSetIndexCommandOnList() { var list = new List <object>() { 1, 2, 2 }; IExpression targetExpression = new ConstantExpression(list); IExpression indexExpression = new ConstantExpression(2); IExpression valueExpression = new ConstantExpression(3); var command = new SetIndexCommand(targetExpression, indexExpression, valueExpression); command.Execute(null); Assert.AreEqual(3, list[2]); }
private ICommand CompileSimpleCommand() { Token token = this.TryCompile(TokenType.Name); ICommand command; if (token == null) { command = this.CompileExpressionCommand(); this.CompileEndOfCommand(); return(command); } if (token.Value == "import") { string name = this.CompileName(true).Value; while (this.TryCompile(TokenType.Operator, ".")) { name += "." + this.CompileName(true).Value; } this.CompileEndOfCommand(); return(new ImportCommand(name)); } if (token.Value == "from") { string name = this.CompileName(true).Value; while (this.TryCompile(TokenType.Operator, ".")) { name += "." + this.CompileName(true).Value; } this.CompileName("import"); if (this.TryCompile(TokenType.Operator, "*")) { return(new ImportFromCommand(name)); } IList <string> names = this.CompileNameList(); this.CompileEndOfCommand(); return(new ImportFromCommand(name, names)); } if (token.Value == "if") { return(this.CompileIfCommand()); } if (token.Value == "class") { return(this.CompileClassCommand()); } if (token.Value == "for") { return(this.CompileForCommand()); } if (token.Value == "while") { return(this.CompileWhileCommand()); } if (token.Value == "break") { return(new BreakCommand()); } if (token.Value == "continue") { return(new ContinueCommand()); } if (token.Value == "def") { return(this.CompileDefCommand()); } if (token.Value == "try") { return(this.CompileTryCommand()); } if (token.Value == "pass") { this.CompileEndOfCommand(); return(new PassCommand()); } if (token.Value == "return") { return(this.CompileReturnCommand()); } this.lexer.PushToken(token); var exprcommand = this.CompileExpressionCommand(); if (!this.TryCompile(TokenType.Operator, "=")) { this.CompileEndOfCommand(); return(exprcommand); } var valueexpr = this.CompileExpression(); if (exprcommand.Expression is NameExpression) { command = new SetCommand(((NameExpression)exprcommand.Expression).Name, valueexpr); this.CompileEndOfCommand(); return(command); } if (exprcommand.Expression is AttributeExpression) { command = new SetAttributeCommand(((AttributeExpression)exprcommand.Expression).Expression, ((AttributeExpression)exprcommand.Expression).Name, valueexpr); this.CompileEndOfCommand(); return(command); } if (exprcommand.Expression is IndexedExpression) { var indexedexpr = (IndexedExpression)exprcommand.Expression; command = new SetIndexCommand(indexedexpr.TargetExpression, indexedexpr.IndexExpression, valueexpr); return(command); } throw new SyntaxError("invalid assignment"); }