summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorAraq <rumpf_a@web.de>2014-03-10 17:32:50 +0100
committerAraq <rumpf_a@web.de>2014-03-10 17:32:50 +0100
commit121553d1a69c4d175259944f6bdc9f9dcfda9cdd (patch)
tree900c8918fcc3961efba8096d159ae8bd15a0641f
parentd4714ed14ee6bc2b2c58dc3e6a60246a76d4132f (diff)
downloadNim-121553d1a69c4d175259944f6bdc9f9dcfda9cdd.tar.gz
osproc compiles again for haiku
-rw-r--r--lib/pure/osproc.nim95
-rw-r--r--tests/parser/tstrongspaces.nim52
-rw-r--r--todo.txt1
3 files changed, 101 insertions, 47 deletions
diff --git a/lib/pure/osproc.nim b/lib/pure/osproc.nim
index 582b3c960..5d6848565 100644
--- a/lib/pure/osproc.nim
+++ b/lib/pure/osproc.nim
@@ -606,7 +606,8 @@ elif not defined(useNimRtl):
     optionPoParentStreams: bool
     optionPoStdErrToStdOut: bool
 
-  proc startProcessAuxSpawn(data: TStartProcessData): TPid {.tags: [FExecIO, FReadEnv].}
+  when not defined(useFork):
+    proc startProcessAuxSpawn(data: TStartProcessData): TPid {.tags: [FExecIO, FReadEnv].}
   proc startProcessAuxFork(data: TStartProcessData): TPid {.tags: [FExecIO, FReadEnv].}
   {.push stacktrace: off, profiler: off.}
   proc startProcessAfterFork(data: ptr TStartProcessData) {.
@@ -664,7 +665,8 @@ elif not defined(useNimRtl):
     data.workingDir = workingDir
 
 
-    when defined(posix_spawn) and not defined(useFork) and not defined(useClone) and not defined(linux):
+    when defined(posix_spawn) and not defined(useFork) and 
+        not defined(useClone) and not defined(linux):
       pid = startProcessAuxSpawn(data)
     else:
       pid = startProcessAuxFork(data)
@@ -694,55 +696,56 @@ elif not defined(useNimRtl):
       discard close(pStdin[readIdx])
       discard close(pStdout[writeIdx])
 
-  proc startProcessAuxSpawn(data: TStartProcessData): TPid =
-    var attr: Tposix_spawnattr
-    var fops: Tposix_spawn_file_actions
-
-    template chck(e: expr) =
-      if e != 0'i32: osError(osLastError())
-
-    chck posix_spawn_file_actions_init(fops)
-    chck posix_spawnattr_init(attr)
-
-    var mask: Tsigset
-    chck sigemptyset(mask)
-    chck posix_spawnattr_setsigmask(attr, mask)
-    chck posix_spawnattr_setpgroup(attr, 0'i32)
-
-    chck posix_spawnattr_setflags(attr, POSIX_SPAWN_USEVFORK or
-                                        POSIX_SPAWN_SETSIGMASK or
-                                        POSIX_SPAWN_SETPGROUP)
-
-    if not data.optionPoParentStreams:
-      chck posix_spawn_file_actions_addclose(fops, data.pStdin[writeIdx])
-      chck posix_spawn_file_actions_adddup2(fops, data.pStdin[readIdx], readIdx)
-      chck posix_spawn_file_actions_addclose(fops, data.pStdout[readIdx])
-      chck posix_spawn_file_actions_adddup2(fops, data.pStdout[writeIdx], writeIdx)
-      chck posix_spawn_file_actions_addclose(fops, data.pStderr[readIdx])
-      if data.optionPoStdErrToStdOut:
-        chck posix_spawn_file_actions_adddup2(fops, data.pStdout[writeIdx], 2)
+  when not defined(useFork):
+    proc startProcessAuxSpawn(data: TStartProcessData): TPid =
+      var attr: Tposix_spawnattr
+      var fops: Tposix_spawn_file_actions
+
+      template chck(e: expr) =
+        if e != 0'i32: osError(osLastError())
+
+      chck posix_spawn_file_actions_init(fops)
+      chck posix_spawnattr_init(attr)
+
+      var mask: Tsigset
+      chck sigemptyset(mask)
+      chck posix_spawnattr_setsigmask(attr, mask)
+      chck posix_spawnattr_setpgroup(attr, 0'i32)
+
+      chck posix_spawnattr_setflags(attr, POSIX_SPAWN_USEVFORK or
+                                          POSIX_SPAWN_SETSIGMASK or
+                                          POSIX_SPAWN_SETPGROUP)
+
+      if not data.optionPoParentStreams:
+        chck posix_spawn_file_actions_addclose(fops, data.pStdin[writeIdx])
+        chck posix_spawn_file_actions_adddup2(fops, data.pStdin[readIdx], readIdx)
+        chck posix_spawn_file_actions_addclose(fops, data.pStdout[readIdx])
+        chck posix_spawn_file_actions_adddup2(fops, data.pStdout[writeIdx], writeIdx)
+        chck posix_spawn_file_actions_addclose(fops, data.pStderr[readIdx])
+        if data.optionPoStdErrToStdOut:
+          chck posix_spawn_file_actions_adddup2(fops, data.pStdout[writeIdx], 2)
+        else:
+          chck posix_spawn_file_actions_adddup2(fops, data.pStderr[writeIdx], 2)
+
+      var res: cint
+      # FIXME: chdir is global to process
+      if data.workingDir.len > 0:
+        setCurrentDir($data.workingDir)
+      var pid: TPid
+
+      if data.optionPoUsePath:
+        res = posix_spawnp(pid, data.sysCommand, fops, attr, data.sysArgs, data.sysEnv)
       else:
-        chck posix_spawn_file_actions_adddup2(fops, data.pStderr[writeIdx], 2)
-
-    var res: cint
-    # FIXME: chdir is global to process
-    if data.workingDir.len > 0:
-      setCurrentDir($data.workingDir)
-    var pid: TPid
-
-    if data.optionPoUsePath:
-      res = posix_spawnp(pid, data.sysCommand, fops, attr, data.sysArgs, data.sysEnv)
-    else:
-      res = posix_spawn(pid, data.sysCommand, fops, attr, data.sysArgs, data.sysEnv)
+        res = posix_spawn(pid, data.sysCommand, fops, attr, data.sysArgs, data.sysEnv)
 
-    discard posix_spawn_file_actions_destroy(fops)
-    discard posix_spawnattr_destroy(attr)
-    chck res
-    return pid
+      discard posix_spawn_file_actions_destroy(fops)
+      discard posix_spawnattr_destroy(attr)
+      chck res
+      return pid
 
   proc startProcessAuxFork(data: TStartProcessData): TPid =
     if pipe(data.pErrorPipe) != 0:
-        osError(osLastError())
+      osError(osLastError())
 
     finally:
       discard close(data.pErrorPipe[readIdx])
diff --git a/tests/parser/tstrongspaces.nim b/tests/parser/tstrongspaces.nim
new file mode 100644
index 000000000..91506daf0
--- /dev/null
+++ b/tests/parser/tstrongspaces.nim
@@ -0,0 +1,52 @@
+#! strongSpaces
+
+discard """
+  output: '''35
+77
+(Field0: 1, Field1: 2, Field2: 2)
+ha
+true
+tester args
+all
+all args
+'''
+"""
+
+echo 2+5 * 5
+
+let foo = 77
+echo $foo
+
+echo (1, 2, 2)
+
+template `&`(a, b: int): expr = a and b
+template `|`(a, b: int): expr = a - b
+template `++`(a, b: int): expr = a + b == 8009
+
+when true:
+  let b = 66
+  let c = 90
+  let bar = 8000
+  if foo+4 * 4 == 8 and b&c | 9  ++
+      bar:
+    echo "ho"
+  else:
+    echo "ha"
+
+  let booA = foo+4 * 4  -  b&c | 9  +
+      bar
+  # is parsed as
+  let booB = ((foo+4)*4) - ((b&c) | 9) + bar
+
+  echo booA == booB
+
+
+template `|`(a, b): expr = (if a.len > 0: a else: b)
+
+const
+  tester = "tester"
+  args = "args"
+
+echo tester & " " & args|"all"
+echo "all"  |  tester & " " & args
+echo "all"|tester & " " & args
diff --git a/todo.txt b/todo.txt
index 51f883d1d..3b085ac91 100644
--- a/todo.txt
+++ b/todo.txt
@@ -1,7 +1,6 @@
 version 0.9.4
 =============
 
-- make testament produce full JSON information
 - fix gensym capture bug
 - vm
   - at least try to get the basic type zoo ops right