mirror of
https://github.com/golang/go
synced 2024-11-06 02:26:17 -07:00
03876af91c
Currently, cgo supports only macros which can be reduced to constants or variables. The CL addresses remaining parts, macros which can be represented as niladic functions. The basic idea is simple: 1. make a thin wrapper function per macros. 2. replace macro expansions with function calls. Fixes #10715 Fixes #18720 Change-Id: I150b4fb48e9dc4cc34466ef6417c04ac93d4bc1a Reviewed-on: https://go-review.googlesource.com/43970 Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
55 lines
1.2 KiB
Go
55 lines
1.2 KiB
Go
// Copyright 2017 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package cgotest
|
|
|
|
/*
|
|
#define HELLO "hello"
|
|
#define WORLD "world"
|
|
#define HELLO_WORLD HELLO "\000" WORLD
|
|
|
|
struct foo { char c; };
|
|
#define SIZE_OF(x) sizeof(x)
|
|
#define SIZE_OF_FOO SIZE_OF(struct foo)
|
|
#define VAR1 VAR
|
|
#define VAR var
|
|
int var = 5;
|
|
|
|
#define ADDR &var
|
|
|
|
#define CALL fn()
|
|
int fn(void) {
|
|
return ++var;
|
|
}
|
|
*/
|
|
import "C"
|
|
import "testing"
|
|
|
|
func test18720(t *testing.T) {
|
|
if got, want := C.HELLO_WORLD, "hello\000world"; got != want {
|
|
t.Errorf("C.HELLO_WORLD == %q, expected %q", got, want)
|
|
}
|
|
|
|
if got, want := C.VAR1, C.int(5); got != want {
|
|
t.Errorf("C.VAR1 == %v, expected %v", got, want)
|
|
}
|
|
|
|
if got, want := *C.ADDR, C.int(5); got != want {
|
|
t.Errorf("*C.ADDR == %v, expected %v", got, want)
|
|
}
|
|
|
|
if got, want := C.CALL, C.int(6); got != want {
|
|
t.Errorf("C.CALL == %v, expected %v", got, want)
|
|
}
|
|
|
|
if got, want := C.CALL, C.int(7); got != want {
|
|
t.Errorf("C.CALL == %v, expected %v", got, want)
|
|
}
|
|
|
|
// Issue 20125.
|
|
if got, want := C.SIZE_OF_FOO, 1; got != want {
|
|
t.Errorf("C.SIZE_OF_FOO == %v, expected %v", got, want)
|
|
}
|
|
}
|