[PATCH] Use "returning: #{...}"

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

[PATCH] Use "returning: #{...}"

Paolo Bonzini-2
Almost there...

Paolo

2007-08-13  Paolo Bonzini  <[hidden email]>

        * packages/gdbm/gdbm-c.st: Switch to the new syntax for "returning:".

        * packages/ncurses/ncurses.st: Switch to the new syntax for "returning:"

        * packages/gtk/MoreFuncs.st: Switch to the new syntax for "returning:".
        * packages/gtk/funcs.awk: Likewise.

* looking for [hidden email]--2004b/smalltalk--devo--2.2--patch-514 to compare with
* comparing to [hidden email]--2004b/smalltalk--devo--2.2--patch-514
M  NEWS
M  packages/ncurses/ncurses.st
M  packages/gdbm/gdbm-c.st
M  packages/gtk/MoreFuncs.st
M  packages/gtk/funcs.awk

--- orig/NEWS
+++ mod/NEWS
@@ -36,13 +36,29 @@ o   GNU Smalltalk now needs InfoZIP to b
     it is compiled, in order to use the new single-file package facility.
     In the future, this dependency may be removed.
 
+o   The tool for automatic documentation generator, that has been used by
+    the GNU Smalltalk distribution for a long time, is now installed as gst-doc.
+
+
+Backwards-incompatible changes:
+
+o   If you want to return a specific CObject class from a C call-out,
+    it is suggested that you stop using "returning: ClassName type", as in
+
+       <cCall: 'dupwin' returning: NCWindow type args: #(#self )>!
+
+    and instead use
+
+       <cCall: 'dupwin' returning: #{NCWindow} args: #(#self )>!
+                                   ^^^^^^^^^^^
+
+    The source code conversion tool might silently produce an incorrect
+    output if you use the former syntax.
+
 o   The ABI for external usage has changed.  libgst.a does not know anymore
     how to parse options, but exports functions to achieve the same effect
     as options.
 
-o   The tool for automatic documentation generator, that has been used by
-    the GNU Smalltalk distribution for a long time, is now installed as gst-doc.
-
 
 Packages improvements:
 
@@ -124,6 +140,15 @@ o   Since they are not portable outside
     package, only #uzip is available and it will only support extracting from
     ZIP files.
 
+o   When declaring a C function, the #returning: argument now supports
+    specifying CPtr and CArray types, the same way it is done in CStruct
+    and CUnion declarations.  For example, since you can specify an "int *"
+    as "#{CInt}", an "int **" (pointer to pointer to Integer, i.e. pointer
+    to CInt) would be written "#(#ptr #{CInt})".
+
+    Conversion from Array to CType is generally available using the
+    CType class>>#from: method.
+
 -----------------------------------------------------------------------------
 
 NEWS FROM 2.3.5 TO 2.3.6


--- orig/packages/gdbm/gdbm-c.st
+++ mod/packages/gdbm/gdbm-c.st
@@ -88,7 +88,7 @@ open: fileName blockSize: size flags: fl
     mode: modeInt fatalFunc: funcAddr
 
     "GDBM_FILE gdbm_open(name, block_size, flags, mode, fatal_func);"
-    <cCall: 'gdbm_open' returning: GDBM type
+    <cCall: 'gdbm_open' returning: #{GDBM}
  args: #(#string #int #int #int #cObject)>! !
 
 !GDBM methodsFor: 'C call-outs'!
@@ -105,7 +105,7 @@ at: key put: value flag: aFlag
 
 at: key
     "datum gdbm_fetch(dbf, key);"
-    <cCall: 'gdbm_fetch' returning: DatumStruct type args: #(#self #cObject)>
+    <cCall: 'gdbm_fetch' returning: #{DatumStruct} args: #(#self #cObject)>
 !
 
 removeKey: key
@@ -115,12 +115,12 @@ removeKey: key
 
 firstKey
     "datum gdbm_firstkey(dbf);"
-    <cCall: 'gdbm_firstkey' returning: DatumStruct type args: #(#self)>
+    <cCall: 'gdbm_firstkey' returning: #{DatumStruct} args: #(#self)>
 !
 
 nextKey: afterDatum
     "datum gdbm_nextkey(dbf, key);"
-    <cCall: 'gdbm_nextkey' returning: DatumStruct type args: #(#self #cObject)>
+    <cCall: 'gdbm_nextkey' returning: #{DatumStruct} args: #(#self #cObject)>
 !
 
 reorganize


--- orig/packages/gtk/MoreFuncs.st
+++ mod/packages/gtk/MoreFuncs.st
@@ -79,11 +79,11 @@ propertiesAt: name put: anObject
 !GtkWidget methodsFor: 'C call-outs'!
 
 getAllocation
-    <cCall: 'gstGtkWidgetGetAllocation' returning: GtkAllocation type
+    <cCall: 'gstGtkWidgetGetAllocation' returning: #{GtkAllocation}
  args: #(#self )>!
 
 getWindow
-    <cCall: 'gstGtkGetWindow' returning: GdkWindow type args: #(#self )>!
+    <cCall: 'gstGtkGetWindow' returning: #{GdkWindow} args: #(#self )>!
 
 getState
     <cCall: 'gstGtkGetState' returning: #int args: #(#self )>!
@@ -133,10 +133,10 @@ setOop: iter column: aColumn value: aVal
 !GtkDialog methodsFor: 'C call-outs'!
 
 getVBox
-    <cCall: 'gstGtkDialogGetVBox' returning: GtkWidget type args: #(#self )>!
+    <cCall: 'gstGtkDialogGetVBox' returning: #{GtkWidget} args: #(#self )>!
 
 getActionArea
-    <cCall: 'gstGtkDialogGetActionArea' returning: GtkWidget type
+    <cCall: 'gstGtkDialogGetActionArea' returning: #{GtkWidget}
  args: #(#self )>! !
 
 !GtkScrolledWindow methodsFor: 'C call-outs'!


--- orig/packages/gtk/funcs.awk
+++ mod/packages/gtk/funcs.awk
@@ -358,7 +358,7 @@ function returned( var )
   else {
     res = ptr_type[res]
     if (res == "")
-      res = var " type"
+      res = "#{" var "}"
   }
 
   return res


--- orig/packages/ncurses/ncurses.st
+++ mod/packages/ncurses/ncurses.st
@@ -484,14 +484,14 @@ derwin: anInt1 forColumns: anInt2 atY: a
      call."
 
     "WINDOW *derwin (WINDOW *, int, int, int, int);"
-    <cCall: 'derwin' returning: NCWindow type
+    <cCall: 'derwin' returning: #{NCWindow}
  args: #(#self #int #int #int #int )>!
 dupwin
     "I return a duplicate of my window. See the man(3) dupwin entry
      for a description of my c function call."
 
     "WINDOW *dupwin (WINDOW *);"
-    <cCall: 'dupwin' returning: NCWindow type
+    <cCall: 'dupwin' returning: #{NCWindow}
  args: #(#self )>!
 
 getbkgd
@@ -926,7 +926,7 @@ subpad: anInt1 ncols: anInt2 beginY: anI
     c function call."
 
     "WINDOW *subpad (WINDOW *, int, int, int, int);"
-    <cCall: 'subpad' returning: NCWindow type
+    <cCall: 'subpad' returning: #{NCWindow}
  args: #(#self #int #int #int #int )>!
 
 subwin: anInt1 ncols: anInt2 beginY: anInt3 beginX: anInt4
@@ -935,7 +935,7 @@ subwin: anInt1 ncols: anInt2 beginY: anI
     function call."
 
     "WINDOW *subwin (WINDOW *, int, int, int, int);"
-    <cCall: 'subwin' returning: NCWindow type
+    <cCall: 'subwin' returning: #{NCWindow}
  args: #(#self #int #int #int #int )>!
 
 syncok: aBoolean
@@ -2388,7 +2388,7 @@ newpad: anInt1 ncols: anInt2
      man(3) newpad entry for a description of my c function call."
 
     "WINDOW *newpad (int, int);"
-    <cCall: 'newpad' returning: NCWindow type
+    <cCall: 'newpad' returning: #{NCWindow}
  args: #(#int #int )>!
 
 newwin: anInt1 cols: anInt2 beginY: anInt3 beginX: anInt4
@@ -2398,7 +2398,7 @@ newwin: anInt1 cols: anInt2 beginY: anIn
      description of my c function call."
 
     "WINDOW *newwin (int, int, int, int);"
-    <cCall: 'newwin' returning: NCWindow type
+    <cCall: 'newwin' returning: #{NCWindow}
  args: #(#int #int #int #int )>!
 
 nl
@@ -2473,7 +2473,7 @@ pairNumber: anInt
 
 primInitScr
     "WINDOW *initscr (void);"
-    <cCall: 'initscr' returning: NCWindow type
+    <cCall: 'initscr' returning: #{NCWindow}
  args: #( )>!
 
 printw: aString




_______________________________________________
help-smalltalk mailing list
[hidden email]
http://lists.gnu.org/mailman/listinfo/help-smalltalk