Skip to content

Commit a4bd402

Browse files
committed
mir: Start implementing declare_dependency
1 parent 459f6e3 commit a4bd402

File tree

3 files changed

+30
-14
lines changed

3 files changed

+30
-14
lines changed

src/mir/functions.xml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,14 @@ Copyright © 2024 Intel Corporation
3131
</optional>
3232
</arguments>
3333
</function>
34+
<function name="declare_dependency">
35+
<arguments>
36+
<keyword>
37+
<argument name="version" type="string"/>
38+
<!-- <argument name="compile_args" type="array[string]" /> -->
39+
<!-- <argument name="include_directories" type="array[string | include_directories]" /> -->
40+
<!-- <argument name="dependencies" type="array[dependency]" /> -->
41+
</keyword>
42+
</arguments>
43+
</function>
3444
</functions>

src/mir/generate_function_arguments.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,11 @@ class Arguments(T.Protocol):
5959
% if function.keywords:
6060
struct {
6161
% for kw in function.keywords:
62+
% if kw.default is not None:
6263
${kw.type.value} ${kw.name};
64+
% else:
65+
std::optional<${kw.type.value}> ${kw.name};
66+
% endif
6367
% endfor
6468
} keywords;
6569
% endif
@@ -189,7 +193,11 @@ class Arguments(T.Protocol):
189193
.${kw.name} = extract_keyword_argument<${kw.type.value}>(
190194
func.kw_args, "${kw.name}",
191195
"${function.name}: ${kw.name} argument must be a ${kw.type.name.lower()}"
196+
% if kw.default is not None:
192197
).value_or(${kw.type.value}{${kw.default}}),
198+
% else:
199+
),
200+
% endif
193201
% endfor
194202
},
195203
% endif
@@ -210,6 +218,7 @@ class ArgumentType(enum.Enum):
210218
STRING = 'String'
211219
FILE = 'File'
212220
BOOL = 'Boolean'
221+
ARRAY_STRING = 'Array[String]'
213222

214223

215224
@dataclasses.dataclass(slots=True)
@@ -247,7 +256,7 @@ class Function:
247256

248257
@property
249258
def struct_name(self) -> str:
250-
return self.name.capitalize()
259+
return ''.join(n.capitalize() for n in self.name.split('_'))
251260

252261
@property
253262
def min_pos_args(self) -> int:
@@ -309,7 +318,7 @@ def parse_keyword_arguments(element: et.Element | None) -> list[KeywordArgument]
309318
keywords.append(KeywordArgument(
310319
extract_attr(var, 'name'),
311320
type_,
312-
parse_value(extract_attr(var, 'default'), type_),
321+
parse_value(v, type_) if (v := var.get('default')) else None,
313322
))
314323

315324
return keywords

src/mir/passes/free_functions.cpp

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ std::optional<T> lower_build_target(const FunctionCall & f, const State::Persist
137137

138138
std::optional<Instruction> lower_include_dirs(const FunctionCall & f,
139139
const State::Persistant & pstate) {
140-
ArgumentValidator::Include_directories args =
140+
ArgumentValidator::IncludeDirectories args =
141141
ArgumentValidator::parse_include_directories(f, pstate);
142142

143143
std::vector<std::string> dirs{};
@@ -283,16 +283,8 @@ std::optional<Instruction> lower_ne(const FunctionCall & f) {
283283

284284
std::optional<Instruction> lower_declare_dependency(const FunctionCall & f,
285285
const State::Persistant & pstate) {
286-
if (!f.pos_args.empty()) {
287-
throw Util::Exceptions::InvalidArguments(
288-
"declare_dependency: takes 0 positional arguments.");
289-
}
290-
291-
std::string version =
292-
extract_keyword_argument<String>(
293-
f.kw_args, "version", "declare_dependency: 'version' keyword argument must be a string")
294-
.value_or(String("unknown"))
295-
.value;
286+
ArgumentValidator::DeclareDependency _args =
287+
ArgumentValidator::parse_declare_dependency(f, pstate);
296288

297289
std::vector<Arguments::Argument> args{};
298290
const auto & raw_comp_args = extract_keyword_argument_a<String>(
@@ -343,7 +335,12 @@ std::optional<Instruction> lower_declare_dependency(const FunctionCall & f,
343335
std::copy(dargs.begin(), dargs.end(), std::back_inserter(args));
344336
}
345337

346-
return Dependency{"internal", true, version, args};
338+
return Dependency{
339+
"internal",
340+
true,
341+
_args.keywords.version.value_or(String{pstate.project_version}).value,
342+
args,
343+
};
347344
}
348345

349346
class CallableReducer {

0 commit comments

Comments
 (0)