/usr/share/gnu-smalltalk/unsupported/DLD.st is in gnu-smalltalk-common 3.2.4-2.1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 | "======================================================================
|
| Test dynamic linking system
|
|
======================================================================"
"======================================================================
|
| Copyright 1988-92, 1994-95, 1999, 2000 Free Software Foundation, Inc.
| Written by Steve Byrne.
|
| This file is part of GNU Smalltalk.
|
| GNU Smalltalk is free software; you can redistribute it and/or modify it
| under the terms of the GNU General Public License as published by the Free
| Software Foundation; either version 2, or (at your option) any later version.
|
| GNU Smalltalk is distributed in the hope that it will be useful, but WITHOUT
| ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
| FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
| details.
|
| You should have received a copy of the GNU General Public License along with
| GNU Smalltalk; see the file COPYING. If not, write to the Free Software
| Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
======================================================================"
!Object methodsFor: 'experimentation'!
makeCModule: fileRoot
| p |
p := FileStream open: fileRoot, '.c' mode: 'w'.
p nextPutAll: '
int foo()
{
static value = 0;
return (value++);
}
'.
p close
!
makeC
self makeCModule: 'xxx'.
!
compileCModule: fileRoot
| p |
p := FileStream popen: 'cc -c ', fileRoot, '.c' dir: 'r'.
" cpp errors = 512, syntax errors = 256 "
^p close
!
compileC
'compile c' printNl.
(self compileCModule: 'xxx') printNl.
!
loadCModule: fileRoot
'load c module ' print. fileRoot printNl.
(DLD addLibrary: fileRoot, '.o') printNl.
!
loadC
| p |
self loadCModule: 'xxx'.
Object defineExternFunc: 'foo'
withSelectorArgs: 'foo'
returning: #int
args: #().
!
callC
nil foo printNl.
nil foo printNl.
! !
nil makeC!
nil compileC!
nil loadC!
(Object compiledMethodAt: #foo) inspect!
nil callC!
Object
defineCFunc: 'testDLD'
withSelectorArgs: 'testDLD'
returning: #void
args: #()
!
nil testDLD!
|