Author: smash
Date: Fri Feb  9 07:09:06 2007
New Revision: 16933

Modified:
   trunk/languages/tcl/runtime/builtin/close.pir

Log:
[tcl] 
  * implement [close], check ticket #40706 for details


Modified: trunk/languages/tcl/runtime/builtin/close.pir
==============================================================================
--- trunk/languages/tcl/runtime/builtin/close.pir       (original)
+++ trunk/languages/tcl/runtime/builtin/close.pir       Fri Feb  9 07:09:06 2007
@@ -9,6 +9,34 @@
 
     .local int argc
     argc = elements argv
+
+    if argc != 1 goto bad_args
     
+    .local string channel_id
+    channel_id = argv[0]
+
+    .local pmc channels, next_channel_id, io_obj
+    channels = get_root_global ['_tcl'], 'channels'
+    next_channel_id = get_root_global ['_tcl'], 'next_channel_id'
+
+    io_obj = channels[channel_id]
+    if null io_obj goto channelid_error
+
+    io_obj.'flush'() # XXX refactor when we have events working
+    close io_obj
+
+    delete channels[channel_id]
+    # XXX update channel ids (after "proper" way of handling ids is defined)
+
     .return('')
+
+  channelid_error:
+    $S0 = 'can not find channel name "'
+    $S0 .= channel_id
+    $S0 .= '"'
+    tcl_error $S0
+
+  bad_args:
+    tcl_error 'wrong # args: should be "close channelId"'
+
 .end

Reply via email to