blob: dab8916b23e70cdc6519d22565cdfe3522704ed9 (
plain) (
blame)
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
:(after "int main")
Transform.push_back(check_types_by_instruction);
:(code)
void check_types_by_instruction(const recipe_ordinal r) {
map<string, vector<type_ordinal> > metadata;
for (long long int i = 0; i < SIZE(Recipe[r].steps); ++i) {
instruction& inst = Recipe[r].steps.at(i);
switch (inst.operation) {
// Primitive Recipe Type Checks
case COPY: {
if (SIZE(inst.products) != SIZE(inst.ingredients)) {
raise << "ingredients and products should match in '" << inst.to_string() << "'\n" << end();
break;
}
for (long long int i = 0; i < SIZE(inst.ingredients); ++i) {
if (!is_mu_array(inst.ingredients.at(i)) && is_mu_array(inst.products.at(i))) {
raise << Recipe[r].name << ": can't copy " << inst.ingredients.at(i).original_string << " to array " << inst.products.at(i).original_string << "\n" << end();
goto finish_checking_instruction;
}
if (is_mu_array(inst.ingredients.at(i)) && !is_mu_array(inst.products.at(i))) {
raise << Recipe[r].name << ": can't copy array " << inst.ingredients.at(i).original_string << " to " << inst.products.at(i).original_string << "\n" << end();
goto finish_checking_instruction;
}
}
break;
}
// End Primitive Recipe Type Checks
default: {
// Defined Recipe Type Checks
// End Defined Recipe Type Checks
}
}
finish_checking_instruction:;
}
}
:(scenario copy_checks_reagent_count)
% Hide_warnings = true;
recipe main [
1:number <- copy 34, 35
]
+warn: ingredients and products should match in '1:number <- copy 34, 35'
:(scenario write_scalar_to_array_disallowed)
% Hide_warnings = true;
recipe main [
1:array:number <- copy 34
]
+warn: main: can't copy 34 to array 1:array:number
:(scenario write_scalar_to_array_disallowed_2)
% Hide_warnings = true;
recipe main [
1:number, 2:array:number <- copy 34, 35
]
+warn: main: can't copy 35 to array 2:array:number
|