Add support for the Go programming language.
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@12108 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
09f14197ac
commit
5af2978f77
259 changed files with 16159 additions and 14 deletions
16
Examples/go/constants/Makefile
Normal file
16
Examples/go/constants/Makefile
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
TOP = ../..
|
||||
SWIG = $(TOP)/../preinst-swig
|
||||
CXXSRCS =
|
||||
TARGET = example
|
||||
INTERFACE = example.i
|
||||
SWIGOPT =
|
||||
|
||||
all::
|
||||
$(MAKE) -f $(TOP)/Makefile CXXSRCS='$(CXXSRCS)' SWIG='$(SWIG)' \
|
||||
SWIGOPT='$(SWIGOPT)' TARGET='$(TARGET)' INTERFACE='$(INTERFACE)' go
|
||||
|
||||
clean::
|
||||
$(MAKE) -f $(TOP)/Makefile go_clean
|
||||
|
||||
check: all
|
||||
$(MAKE) -f $(TOP)/Makefile TARGET='$(TARGET)' INTERFACE='$(INTERFACE)' go_run
|
||||
44
Examples/go/constants/example.go
Normal file
44
Examples/go/constants/example.go
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* This file was automatically generated by SWIG (http://www.swig.org).
|
||||
* Version 2.0.1
|
||||
*
|
||||
* This file is not intended to be easily readable and contains a number of
|
||||
* coding conventions designed to improve portability and efficiency. Do not make
|
||||
* changes to this file unless you know what you are doing--modify the SWIG
|
||||
* interface file instead.
|
||||
* ----------------------------------------------------------------------------- */
|
||||
|
||||
package example
|
||||
|
||||
|
||||
type _swig_fnptr *byte
|
||||
type _swig_memberptr *byte
|
||||
|
||||
|
||||
func _swig_allocatememory(int) *byte
|
||||
func _swig_internal_allocate(len int) *byte {
|
||||
return _swig_allocatememory(len)
|
||||
}
|
||||
|
||||
func _swig_allocatestring(*byte, int) string
|
||||
func _swig_internal_makegostring(p *byte, l int) string {
|
||||
return _swig_allocatestring(p, l)
|
||||
}
|
||||
|
||||
func _swig_internal_gopanic(p *byte, l int) {
|
||||
panic(_swig_allocatestring(p, l))
|
||||
}
|
||||
|
||||
const ICONST int = 42
|
||||
const FCONST float64 = 2.1828
|
||||
const CCONST byte = 'x'
|
||||
func _swig_getCCONST2() byte
|
||||
var CCONST2 byte = _swig_getCCONST2()
|
||||
const SCONST string = "Hello World"
|
||||
func _swig_getSCONST2() string
|
||||
var SCONST2 string = _swig_getSCONST2()
|
||||
func _swig_getEXPR() float64
|
||||
var EXPR float64 = _swig_getEXPR()
|
||||
const Iconst int = 37
|
||||
const Fconst float64 = 3.14
|
||||
|
||||
25
Examples/go/constants/example.i
Normal file
25
Examples/go/constants/example.i
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
/* File : example.i */
|
||||
%module example
|
||||
|
||||
/* A few preprocessor macros */
|
||||
|
||||
#define ICONST 42
|
||||
#define FCONST 2.1828
|
||||
#define CCONST 'x'
|
||||
#define CCONST2 '\n'
|
||||
#define SCONST "Hello World"
|
||||
#define SCONST2 "\"Hello World\""
|
||||
|
||||
/* This should work just fine */
|
||||
#define EXPR ICONST + 3*(FCONST)
|
||||
|
||||
/* This shouldn't do anything */
|
||||
#define EXTERN extern
|
||||
|
||||
/* Neither should this (BAR isn't defined) */
|
||||
#define FOO (ICONST + BAR)
|
||||
|
||||
/* The following directives also produce constants */
|
||||
|
||||
%constant int iconst = 37;
|
||||
%constant double fconst = 3.14;
|
||||
55
Examples/go/constants/index.html
Normal file
55
Examples/go/constants/index.html
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
<html>
|
||||
<head>
|
||||
<title>SWIG:Examples:go:constants</title>
|
||||
</head>
|
||||
|
||||
<body bgcolor="#ffffff">
|
||||
|
||||
<tt>SWIG/Examples/go/constants/</tt>
|
||||
<hr>
|
||||
|
||||
<H2>Wrapping C Constants</H2>
|
||||
|
||||
<p>
|
||||
When SWIG encounters C preprocessor macros and C declarations that
|
||||
look like constants, it creates a Go constant with an identical value.
|
||||
Click <a href="example.i">here</a> to see a SWIG interface with some
|
||||
constant declarations in it.
|
||||
|
||||
|
||||
<h2>Accessing Constants from Go</h2>
|
||||
Click <a href="../../../Doc/Manual/Go.html#go_constants">here</a> for
|
||||
the section on constants in the SWIG and Go documentation.
|
||||
<p>
|
||||
|
||||
Click <a href="runme.go">here</a> to see a Go program that prints out
|
||||
the values of the constants contained in the above file.</p>
|
||||
<h2>Key points</h2>
|
||||
<ul>
|
||||
<li>All names are capitalized to make them visible.
|
||||
<li>The values of preprocessor macros are converted into Go constants.
|
||||
<li>C string literals such as "Hello World" are converted into Go strings.
|
||||
<li>Macros that are not fully defined are simply ignored. For example:
|
||||
<blockquote>
|
||||
<pre>
|
||||
#define EXTERN extern
|
||||
</pre>
|
||||
</blockquote>
|
||||
is ignored because SWIG has no idea what type of variable this would be.
|
||||
|
||||
<p>
|
||||
<li>Expressions are allowed provided that all of their components are
|
||||
defined. Otherwise, the constant is ignored.
|
||||
|
||||
<li>Certain C declarations involving 'const' are also turned into Go
|
||||
constants.
|
||||
<li>The constants that appear in a SWIG interface file do not have to
|
||||
appear in any sort of matching C source file since the creation of a
|
||||
constant does not require linkage to a stored value (i.e., a value
|
||||
held in a C global variable or memory location).
|
||||
</ul>
|
||||
|
||||
<hr>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
18
Examples/go/constants/runme.go
Normal file
18
Examples/go/constants/runme.go
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"./example"
|
||||
)
|
||||
|
||||
func main() {
|
||||
fmt.Println("ICONST = ", example.ICONST, " (should be 42)")
|
||||
fmt.Println("FCONST = ", example.FCONST, " (should be 2.1828)")
|
||||
fmt.Printf("CCONST = %c (should be 'x')\n", example.CCONST)
|
||||
fmt.Printf("CCONST2 = %c(this should be on a new line)\n", example.CCONST2)
|
||||
fmt.Println("SCONST = ", example.SCONST, " (should be 'Hello World')")
|
||||
fmt.Println("SCONST2 = ", example.SCONST2, " (should be '\"Hello World\"')")
|
||||
fmt.Println("EXPR = ", example.EXPR, " (should be 48.5484)")
|
||||
fmt.Println("iconst = ", example.Iconst, " (should be 37)")
|
||||
fmt.Println("fconst = ", example.Fconst, " (should be 3.14)")
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue