fix 14249: ctrl-c can be used to stop writing control expression 59/17559/2
Antoine ELIAS [Thu, 10 Dec 2015 10:39:23 +0000 (11:39 +0100)]
Change-Id: Iaed3cdd25020fb9987690fbf61a2e1ef6ec762c6

scilab/CHANGES_6.0.X
scilab/modules/ast/tests/nonreg_tests/bug_14249.tst [new file with mode: 0644]
scilab/modules/core/src/cpp/InitScilab.cpp

index 9da0ae9..d2b6707 100644 (file)
@@ -17,7 +17,7 @@ For a high-level overview of the changes in this release, please consult the "Wh
 New Features
 ============
 
-Xcos - the graphical tool for dynamic systems modeling and simulation - is 
+Xcos - the graphical tool for dynamic systems modeling and simulation - is
 finally functional in this release. You can now graphically create, edit, and
 simulate models. No changes are visible to the user, but the new Xcos uses the
 re-written Scilab engine, and is now running in native code, which should
@@ -57,6 +57,8 @@ Bug Fixes
 
 * Bug #14245 fixed - Problem in recursive extraction using list with struct.
 
+* Bug #14249 fixed - ctrl-c can be used to stop writing control expression.
+
 * Bug #14251 fixed - `spec` leaked some memory.
 
 * Bug #14253 fixed - Insertion in a struct contained in a list fixed.
@@ -67,6 +69,7 @@ Bug Fixes
 
 * Bug #14313 fixed - Parser did not create a column separator after spaces and '...' at the end of lines
 
+
 Dependencies
 =============
 
diff --git a/scilab/modules/ast/tests/nonreg_tests/bug_14249.tst b/scilab/modules/ast/tests/nonreg_tests/bug_14249.tst
new file mode 100644 (file)
index 0000000..0d2bec7
--- /dev/null
@@ -0,0 +1,21 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2015 - Scilab Enterprises - Antoine ELIAS
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- CLI SHELL MODE -->
+//
+// <-- INTERACTIVE TEST -->
+//
+// <-- Non-regression test for bug 14249 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/14249
+//
+// <-- Short Description -->
+// ctrl-c can be used to stop writing control expression
+
+for i = 1:10
+    disp(ii); //oops a typo !
+    //press ctrl-c to stop "for" writing
index a085999..92698d6 100644 (file)
@@ -659,18 +659,36 @@ void* scilabReadAndStore(void* param)
             }
             else
             {
-                //+1 for null termination and +1 for '\n'
-                size_t iLen = strlen(command) + strlen(pstRead) + 2;
-                char *pstNewCommand = (char *)MALLOC(iLen * sizeof(char));
+                if (ConfigVariable::isExecutionBreak())
+                {
+                    //clean parser state and close opened instruction.
+                    if (parser.getControlStatus() != Parser::AllControlClosed)
+                    {
+                        parser.cleanup();
+                        FREE(command);
+                        command = NULL;
+                        parser.setControlStatus(Parser::AllControlClosed);
+                        controlStatus = parser.getControlStatus();
+                    }
+
+                    ConfigVariable::resetExecutionBreak();
+                    break;
+                }
+                else
+                {
+                    //+1 for null termination and +1 for '\n'
+                    size_t iLen = strlen(command) + strlen(pstRead) + 2;
+                    char *pstNewCommand = (char *)MALLOC(iLen * sizeof(char));
 
 #ifdef _MSC_VER
-                sprintf_s(pstNewCommand, iLen, "%s\n%s", command, pstRead);
+                    sprintf_s(pstNewCommand, iLen, "%s\n%s", command, pstRead);
 #else
-                sprintf(pstNewCommand, "%s\n%s", command, pstRead);
+                    sprintf(pstNewCommand, "%s\n%s", command, pstRead);
 #endif
-                FREE(pstRead);
-                FREE(command);
-                command = pstNewCommand;
+                    FREE(pstRead);
+                    FREE(command);
+                    command = pstNewCommand;
+                }
             }
 
             if (ConfigVariable::getEnableDebug())