Reflection

Reflection is disabled by default and requires explicit reflect marker:

reflect struct Point {
    var x: Int
    var y: Int
}

Annotations can be accessed through reflection API:

//@SimpleSerial
reflect struct Point {
    var x: Int
    var y: Int
}

Usage

import sric::*
import serial::*
import waseGraphics

unsafe fun main(): Int {
    //force load reflect metadata
    var c : waseGraphics::Color
    c.init(1, 1, 1, 1);

    var rmodule = findModule("waseGraphics")
    printf("rmodule %p\n", rmodule as raw*? Void)

    //make instance
    var rtype = findRType("waseGraphics::Color")
    var obj = newInstance(*rtype)

    //access field
    var rgba = (unsafeCast$<raw*Int8>(obj) + rtype.fields[0].offset) as raw*UInt32
    *rgba = 0xff8845ff

    //call method
    var rmethod = findInstanceMethod(rtype, "toString")
    var str = callInstanceToString(rmethod.pointer, obj)
    printf("%s\n", str.c_str())
    return 0
}