Libraryless. Click here for Pure Java version (4957L/27K).
1  | // Reification of an operator in a type-safe language  | 
2  | // -has a name  | 
3  | // -has 0 or more arguments  | 
4  | // -each argument has a type and can have a name (otherwise it gets some default name like "argument 1")  | 
5  | // -has an optional return type (or return type null for no return value)  | 
6  | // -to return multiple values, use a struct type  | 
7  | |
8  | // T is the meta-type for argument and return types  | 
9  | persistable sclass GOperator<T> extends GAbstractOperator<T> {
 | 
10  | gettable L<Argument> arguments;  | 
11  | gettable T returnType;  | 
12  | |
13  |   record noeq Argument(int index, S name, T type) {
 | 
14  |     T type() { ret type; }
 | 
15  | |
16  |     S shortToString() {
 | 
17  | ret type + " " + name;  | 
18  | }  | 
19  | }  | 
20  | |
21  |   *(S *name) {}
 | 
22  | |
23  | // add argument  | 
24  |   selfType arg(T type, S name default makeDefaultArgumentName()) {
 | 
25  | arguments = createOrAdd(arguments, new Argument(l(arguments), name, type));  | 
26  | this;  | 
27  | }  | 
28  | |
29  |   selfType returns(T type) {
 | 
30  | returnType = type;  | 
31  | this;  | 
32  | }  | 
33  | |
34  |   S makeDefaultArgumentName() {
 | 
35  | ret "arg" + (l(arguments)+1);  | 
36  | }  | 
37  | |
38  |   public S toString aka toStringWithArgumentNames() {
 | 
39  |     ret name + ": " + joinWithCommaOr("()", lmapMethod shortToString(arguments))
 | 
40  | + " -> " + or(returnType, "void");  | 
41  | }  | 
42  | |
43  |   S toStringWithoutArgumentNames() {
 | 
44  | ret name + ": " + joinWithComma(map(arguments, a -> a.type))  | 
45  | + " -> " + or(returnType, "void");  | 
46  | }  | 
47  | }  | 
download show line numbers debug dex old transpilations
Travelled to 4 computer(s): bhatertpkbcr, ekrmjmnbrukm, mowyntqkapby, mqqgnosmbjvj
No comments. add comment
| Snippet ID: | #1033956 | 
| Snippet name: | GOperator - reification of an operator in a type-safe language. concrete definition with one signature | 
| Eternal ID of this version: | #1033956/18 | 
| Text MD5: | de47a8635d5f669b25382f6a9a4efe73 | 
| Transpilation MD5: | f4d56ba87e2984a0bf1ceb5812ad97bd | 
| Author: | stefan | 
| Category: | javax / scripting | 
| Type: | JavaX fragment (include) | 
| Public (visible to everyone): | Yes | 
| Archived (hidden from active list): | No | 
| Created/modified: | 2022-01-15 02:31:39 | 
| Source code size: | 1377 bytes / 47 lines | 
| Pitched / IR pitched: | No / No | 
| Views / Downloads: | 453 / 656 | 
| Version history: | 17 change(s) | 
| Referenced in: | [show references] |