-
Notifications
You must be signed in to change notification settings - Fork 23
/
Copy pathexternal_function_typedef.dart
43 lines (36 loc) · 1.11 KB
/
external_function_typedef.dart
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import 'package:hetu_script/hetu_script.dart';
import 'package:hetu_script/values.dart';
typedef DartFunction = int Function(int a, int b);
int hetuAdd(DartFunction func) {
return func(6, 7);
}
void main() {
final hetu = Hetu();
hetu.init(externalFunctions: {
'hetuAdd': (HTEntity entity,
{List<dynamic> positionalArgs = const [],
Map<String, dynamic> namedArgs = const {},
List<HTType> typeArgs = const []}) {
return hetuAdd(positionalArgs.first);
},
}, externalFunctionTypedef: {
'DartFunction': (HTFunction function) {
return (int a, int b) {
// must convert the return type here to let dart know its return value type.
return function.call(positionalArgs: [a, b]) as int;
};
},
});
hetu.eval(r'''
external function hetuAdd(func)
function [DartFunction] namedAdd(a: num, b: num) -> num {
return a + b
}
function main {
return hetuAdd(function [DartFunction] (a: num, b: num) -> num {
return a + b
})
}''');
var result = hetu.interpreter.invoke('main');
print(result);
}