ammer

Variables

Variables can be declared in library definitions using public static var fields.

Example: variable in library definition

class Foobar extends ammer.def.Library<"foobar"> {
  public static var bar:Int;
}

In this example, bar is an integer variable in the Foobar library.

As for function signatures, variable types are restricted to a subset of Haxe types. See FFI types.

Constants

If a value from a native library is available immediately, such as constants or macro definitions, it can be declared as a constant in the ammer definition using a public static final field.

Example: constant in library definition

class Foobar extends ammer.def.Library<"foobar"> {
  @:ammer.native("HELLO_WORLD")
  public static final helloWorld:String;
}

In this example, helloWorld is a string constant for the Foobar ammer library definition. The headers of the foobar native library must ensure that HELLO_WORLD is a valid C expression, for example with #define HELLO_WORLD "hello world".

@:ammer.native can be used to specify the C expression which will be used to determine the value of a constant. There is no restriction to what the expression can be: it may be a literal, a constant, the result of a library call, and so forth. However, all constant values are initialised at the same time, typically before Haxe main is reached, so the C expression should not be a mutable value, because it will not be updated.

Metadata applicable to variables and constants

« Previous: Functions Next: Sublibraries »