AstNode_base;
OnyxToken* export_name;
+ AstTyped* export_name_expr;
AstTyped* export;
};
CheckStatus check_process_directive(AstNode* directive) {
if (directive->kind == Ast_Kind_Directive_Export) {
- AstTyped* export = ((AstDirectiveExport *) directive)->export;
- if (export->entity && export->entity->state <= Entity_State_Check_Types)
- YIELD(directive->token->pos, "Waiting for export type to be known.");
+ AstDirectiveExport *export = (AstDirectiveExport *) directive;
+ AstTyped *exported = export->export;
+ if (exported->entity && exported->entity->state <= Entity_State_Check_Types)
+ YIELD(directive->token->pos, "Waiting for exported type to be known.");
+
+ CHECK(expression, &export->export_name_expr);
+
+ if (export->export_name_expr->kind != Ast_Kind_StrLit) {
+ ERROR_(export->token->pos, "Expected export name to be a string literal, got '%s'.", onyx_ast_node_kind_string(export->export_name_expr->kind));
+ }
+
+ export->export_name = export->export_name_expr->token;
}
if (directive->kind == Ast_Kind_Directive_Tag) {
else if (parse_possible_directive(parser, "export")) {
AstDirectiveExport *export = make_node(AstDirectiveExport, Ast_Kind_Directive_Export);
export->token = dir_token;
- export->export_name = expect_token(parser, Token_Type_Literal_String);
+ parser->parse_calls = 0;
+ export->export_name_expr = parse_expression(parser, 0); // expect_token(parser, Token_Type_Literal_String);
+ parser->parse_calls = 1;
export->export = parse_expression(parser, 0);
case Ast_Kind_Directive_Export: {
AstDirectiveExport *export = (AstDirectiveExport *) directive;
SYMRES(expression, &export->export);
+ SYMRES(expression, &export->export_name_expr);
if (export->export->kind == Ast_Kind_Polymorphic_Proc) {
onyx_report_error(export->token->pos, Error_Critical, "Cannot export a polymorphic function.");