Implicit conversion to function types is now a more standard part of the type conversion infrastructure, rather than special cases of things like FunctionSymbolExpr immediately returning a pointer type, etc. Improved AddressOfExpr::TypeCheck() to actually issue errors in cases where it's illegal to take the address of an expression. Added AddressOfExpr::GetConstant() implementation that handles taking the address of functions. Issue #223.
24 lines
502 B
Plaintext
24 lines
502 B
Plaintext
|
|
export uniform int width() { return programCount; }
|
|
|
|
typedef float (*FuncType)(float, float);
|
|
|
|
float foo(float a, float b) {
|
|
return a+b;
|
|
}
|
|
|
|
static float bar(float a, float b) {
|
|
return a<b?a:b;
|
|
}
|
|
|
|
export void f_f(uniform float RET[], uniform float aFOO[]) {
|
|
float a = aFOO[programIndex];
|
|
float b = aFOO[0]-1;
|
|
uniform FuncType func = foo;
|
|
RET[programIndex] = (func ? func : &bar)(a, b);
|
|
}
|
|
|
|
export void result(uniform float RET[]) {
|
|
RET[programIndex] = 1 + 1*programIndex;
|
|
}
|