/* * LinsertCmd.java * * Copyright (c) 1997 Cornell University. * Copyright (c) 1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and * redistribution of this file, and for a DISCLAIMER OF ALL * WARRANTIES. * * Included in SQLite3 port to C# for use in testharness only; 2008 Noah B Hart * * RCS @(#) $Id: LinsertCmd.java,v 1.3 2003/01/09 02:15:39 mdejong Exp $ * */ using System; namespace tcl.lang { /// This class implements the built-in "linsert" command in Tcl. class LinsertCmd : Command { /// See Tcl user documentation for details. /// TclException If incorrect number of arguments. /// public TCL.CompletionCode cmdProc( Interp interp, TclObject[] argv ) { if ( argv.Length < 4 ) { throw new TclNumArgsException( interp, 1, argv, "list index element ?element ...?" ); } int size = TclList.getLength( interp, argv[1] ); int index = Util.getIntForIndex( interp, argv[2], size ); TclObject list = argv[1]; bool isDuplicate = false; // If the list object is unshared we can modify it directly. Otherwise // we create a copy to modify: this is "copy on write". if ( list.Shared ) { list = list.duplicate(); isDuplicate = true; } try { TclList.insert( interp, list, index, argv, 3, argv.Length - 1 ); interp.setResult( list ); } catch ( TclException e ) { if ( isDuplicate ) { list.release(); } throw; } return TCL.CompletionCode.RETURN; } } }