1
+ // RUN: (%COMPILE %s && %RUN ) | %CHECK %s
2
+
3
+ TYPE PositionWithExtraMetadata:
4
+ STRUCT
5
+ x: REAL ;
6
+ y: REAL ;
7
+ data: ARRAY [1 ..100 ] OF STRING ;
8
+ END_STRUCT
9
+ END_TYPE
10
+
11
+ FUNCTION_BLOCK FbA
12
+ VAR
13
+ localStruct: PositionWithExtraMetadata := (x := 1.0 , y := 2.0 , data := [' Data 1' , ' Data 2' , ' Data 3' ]);
14
+ localStringArray: ARRAY [1 ..3 ] OF STRING := [' Value 1' , ' Value 2' , ' Value 3' ];
15
+ localStructArray: ARRAY [1 ..3 ] OF PositionWithExtraMetadata := [
16
+ (x := 3.0 , y := 4.0 , data := [' Data 4' , ' Data 5' , ' Data 6' ]),
17
+ (x := 5.0 , y := 6.0 , data := [' Data 7' , ' Data 8' , ' Data 9' ]),
18
+ (x := 7.0 , y := 8.0 , data := [' Data 10' , ' Data 11' , ' Data 12' ])
19
+ ];
20
+ END_VAR
21
+
22
+ METHOD returnString: STRING
23
+ returnString := ' FbA::returnString' ;
24
+ END_METHOD
25
+
26
+ METHOD returnStruct: PositionWithExtraMetadata
27
+ returnStruct := localStruct;
28
+ END_METHOD
29
+
30
+ METHOD returnStringArray: ARRAY [1 ..3 ] OF STRING
31
+ returnStringArray := localStringArray;
32
+ END_METHOD
33
+
34
+ METHOD returnStructArray: ARRAY [1 ..3 ] OF PositionWithExtraMetadata
35
+ returnStructArray := localStructArray;
36
+ END_METHOD
37
+ END_FUNCTION_BLOCK
38
+
39
+ FUNCTION main
40
+ VAR
41
+ instanceA: FbA ;
42
+ returnStringPtr: POINTER TO FbA .returnString := ADR (instanceA.returnString);
43
+ returnStructPtr: POINTER TO FbA .returnStruct := ADR (instanceA.returnStruct);
44
+ returnStringArrayPtr: POINTER TO FbA .returnStringArray := ADR (instanceA.returnStringArray);
45
+ returnStructArrayPtr: POINTER TO FbA .returnStructArray := ADR (instanceA.returnStructArray);
46
+
47
+ localReturnString: STRING ;
48
+ localReturnStruct: PositionWithExtraMetadata ;
49
+ localReturnStringArray: ARRAY [1 ..3 ] OF STRING ;
50
+ localReturnStructArray: ARRAY [1 ..3 ] OF PositionWithExtraMetadata ;
51
+ END_VAR
52
+
53
+ // localReturnString := instanceA.returnString();
54
+ // CHECK: localReturnString = FbA ::returnString
55
+ localReturnString := returnStringPtr^ (instanceA);
56
+ printf(' localReturnString = %s$N' , ADR (localReturnString));
57
+
58
+ // localReturnStruct := instanceA.returnStruct();
59
+ // CHECK: localReturnStruct.x = 1.000000
60
+ // CHECK: localReturnStruct.y = 2.000000
61
+ // CHECK: localReturnStruct.data[1 ] = Data 1
62
+ // CHECK: localReturnStruct.data[2 ] = Data 2
63
+ // CHECK: localReturnStruct.data[3 ] = Data 3
64
+ localReturnStruct := returnStructPtr^ (instanceA);
65
+ printf(' localReturnStruct.x = %f$N' , localReturnStruct.x);
66
+ printf(' localReturnStruct.y = %f$N' , localReturnStruct.y);
67
+ printf(' localReturnStruct.data[1] = %s$N' , ADR (localReturnStruct.data[1 ]));
68
+ printf(' localReturnStruct.data[2] = %s$N' , ADR (localReturnStruct.data[2 ]));
69
+ printf(' localReturnStruct.data[3] = %s$N' , ADR (localReturnStruct.data[3 ]));
70
+
71
+ // localReturnStringArray := instanceA.returnStringArray();
72
+ // CHECK: localReturnStringArray[1 ] = Value 1
73
+ // CHECK: localReturnStringArray[2 ] = Value 2
74
+ // CHECK: localReturnStringArray[3 ] = Value 3
75
+ localReturnStringArray := returnStringArrayPtr^ (instanceA);
76
+ printf(' localReturnStringArray[1] = %s$N' , ADR (localReturnStringArray[1 ]));
77
+ printf(' localReturnStringArray[2] = %s$N' , ADR (localReturnStringArray[2 ]));
78
+ printf(' localReturnStringArray[3] = %s$N' , ADR (localReturnStringArray[3 ]));
79
+
80
+ // localReturnStructArray := instanceA.returnStructArray();
81
+ // CHECK: localReturnStructArray[1 ].x = 3.000000
82
+ // CHECK: localReturnStructArray[1 ].y = 4.000000
83
+ // CHECK: localReturnStructArray[1 ].data[1 ] = Data 4
84
+ // CHECK: localReturnStructArray[1 ].data[2 ] = Data 5
85
+ // CHECK: localReturnStructArray[1 ].data[3 ] = Data 6
86
+ // CHECK: localReturnStructArray[2 ].x = 5.000000
87
+ // CHECK: localReturnStructArray[2 ].y = 6.000000
88
+ // CHECK: localReturnStructArray[2 ].data[1 ] = Data 7
89
+ // CHECK: localReturnStructArray[2 ].data[2 ] = Data 8
90
+ // CHECK: localReturnStructArray[2 ].data[3 ] = Data 9
91
+ // CHECK: localReturnStructArray[3 ].x = 7.000000
92
+ // CHECK: localReturnStructArray[3 ].y = 8.000000
93
+ // CHECK: localReturnStructArray[3 ].data[1 ] = Data 10
94
+ // CHECK: localReturnStructArray[3 ].data[2 ] = Data 11
95
+ // CHECK: localReturnStructArray[3 ].data[3 ] = Data 12
96
+ localReturnStructArray := returnStructArrayPtr^ (instanceA);
97
+ printf(' localReturnStructArray[1].x = %f$N' , localReturnStructArray[1 ].x);
98
+ printf(' localReturnStructArray[1].y = %f$N' , localReturnStructArray[1 ].y);
99
+ printf(' localReturnStructArray[1].data[1] = %s$N' , ADR (localReturnStructArray[1 ].data[1 ]));
100
+ printf(' localReturnStructArray[1].data[2] = %s$N' , ADR (localReturnStructArray[1 ].data[2 ]));
101
+ printf(' localReturnStructArray[1].data[3] = %s$N' , ADR (localReturnStructArray[1 ].data[3 ]));
102
+ printf(' localReturnStructArray[2].x = %f$N' , localReturnStructArray[2 ].x);
103
+ printf(' localReturnStructArray[2].y = %f$N' , localReturnStructArray[2 ].y);
104
+ printf(' localReturnStructArray[2].data[1] = %s$N' , ADR (localReturnStructArray[2 ].data[1 ]));
105
+ printf(' localReturnStructArray[2].data[2] = %s$N' , ADR (localReturnStructArray[2 ].data[2 ]));
106
+ printf(' localReturnStructArray[2].data[3] = %s$N' , ADR (localReturnStructArray[2 ].data[3 ]));
107
+ printf(' localReturnStructArray[3].x = %f$N' , localReturnStructArray[3 ].x);
108
+ printf(' localReturnStructArray[3].y = %f$N' , localReturnStructArray[3 ].y);
109
+ printf(' localReturnStructArray[3].data[1] = %s$N' , ADR (localReturnStructArray[3 ].data[1 ]));
110
+ printf(' localReturnStructArray[3].data[2] = %s$N' , ADR (localReturnStructArray[3 ].data[2 ]));
111
+ printf(' localReturnStructArray[3].data[3] = %s$N' , ADR (localReturnStructArray[3 ].data[3 ]));
112
+ END_FUNCTION
0 commit comments