namespace tlang { internal class LeftShiftNode : Node { public Node Left {get;set;} public Node Right {get;set;} public LeftShiftNode(Node left, Node right) { this.Left = left; this.Right = right; } public override TObject Execute(IScopeEnvironment nodeEnv) { var l = Left.Execute(nodeEnv); var r = Right.Execute(nodeEnv); var lnum = l as TNumber; var rnum = r as TNumber; var dleft = l as TDictionary; if(dleft != null) { if(dleft.MemberExists("ls")) { var mbm = dleft["ls"] as ICallable; if(mbm != null) { return mbm.Call(r); } } } if(lnum != null && rnum != null) return TObject.Number((long)lnum.Value << (int)rnum.Value); return TObject.Null; } } }