Skip to content

Commit 40529a2

Browse files
committed
[[ Script ]] Cleanup
This commit implements the missing error throwing in the Query functions and uses a template to implement the LookupDefinition functions.
1 parent 52a1c77 commit 40529a2

1 file changed

Lines changed: 63 additions & 78 deletions

File tree

libscript/src/script-module.cpp

Lines changed: 63 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -748,6 +748,7 @@ bool MCScriptEnsureModuleIsUsable(MCScriptModuleRef self)
748748
if (t_symbol == nil)
749749
{
750750
MCErrorThrowGenericWithMessage(MCSTR("%{name} not usable - unable to resolve foreign type '%{type}'"),
751+
"name", self -> name,
751752
"type", t_type -> binding,
752753
nil);
753754
goto error_cleanup;
@@ -828,6 +829,25 @@ bool MCScriptEnsureModuleIsUsable(MCScriptModuleRef self)
828829

829830
////////////////////////////////////////////////////////////////////////////////
830831

832+
static bool
833+
__MCScriptThrowModuleNotUsableError(MCScriptModuleRef self)
834+
{
835+
return MCErrorThrowGenericWithMessage(MCSTR("%{name} not usable"),
836+
"name", self -> name,
837+
nil);
838+
}
839+
840+
static bool
841+
__MCScriptThrowDefinitionNotFoundInModuleError(MCScriptModuleRef self,
842+
MCScriptDefinitionKind p_kind,
843+
MCNameRef p_name)
844+
{
845+
return MCErrorThrowGenericWithMessage(MCSTR("%{kind} definition %{name} not found in %{module}"),
846+
"kind", __MCScriptDefinitionKindToString(p_kind),
847+
"name", p_name,
848+
"module", self->name);
849+
}
850+
831851
static bool
832852
__MCScriptCopyDefinitionsOfModule(MCScriptModuleRef self,
833853
MCScriptDefinitionKind p_kind,
@@ -893,11 +913,17 @@ bool MCScriptListConstantNamesOfModule(MCScriptModuleRef self, /* copy */ MCProp
893913
bool MCScriptQueryConstantOfModule(MCScriptModuleRef self, MCNameRef p_constant, MCValueRef& r_constant_value)
894914
{
895915
MCScriptConstantDefinition *t_constant_def = nil;
916+
917+
if (!self -> is_usable)
918+
return __MCScriptThrowModuleNotUsableError(self);
919+
896920
if (!MCScriptLookupConstantDefinitionInModule(self,
897921
p_constant,
898922
t_constant_def))
899923
{
900-
return false;
924+
return __MCScriptThrowDefinitionNotFoundInModuleError(self,
925+
kMCScriptDefinitionKindConstant,
926+
p_constant);
901927
}
902928

903929
r_constant_value = self->values[t_constant_def->value];
@@ -917,10 +943,10 @@ bool MCScriptQueryPropertyOfModule(MCScriptModuleRef self, MCNameRef p_property,
917943
MCScriptPropertyDefinition *t_def;
918944

919945
if (!self -> is_usable)
920-
return false; // TODO - throw error
946+
return __MCScriptThrowModuleNotUsableError(self);
921947

922948
if (!MCScriptLookupPropertyDefinitionInModule(self, p_property, t_def))
923-
return false; // TODO - throw error
949+
return __MCScriptThrowDefinitionNotFoundInModuleError(self, kMCScriptDefinitionKindProperty, p_property);
924950

925951
MCScriptDefinition *t_getter;
926952
t_getter = t_def -> getter != 0 ? self -> definitions[t_def -> getter - 1] : nil;
@@ -963,10 +989,10 @@ bool MCScriptQueryEventOfModule(MCScriptModuleRef self, MCNameRef p_event, /* ge
963989
MCScriptEventDefinition *t_def;
964990

965991
if (!self -> is_usable)
966-
return false; // TODO - throw error
992+
return __MCScriptThrowModuleNotUsableError(self);
967993

968994
if (!MCScriptLookupEventDefinitionInModule(self, p_event, t_def))
969-
return false; // TODO - throw error
995+
return __MCScriptThrowDefinitionNotFoundInModuleError(self, kMCScriptDefinitionKindEvent, p_event);
970996

971997
r_signature = self -> types[t_def -> type] -> typeinfo;
972998

@@ -985,10 +1011,10 @@ bool MCScriptQueryHandlerSignatureOfModule(MCScriptModuleRef self, MCNameRef p_h
9851011
MCScriptHandlerDefinition *t_def;
9861012

9871013
if (!self -> is_usable)
988-
return false; // TODO - throw error
1014+
return __MCScriptThrowModuleNotUsableError(self);
9891015

9901016
if (!MCScriptLookupHandlerDefinitionInModule(self, p_handler, t_def))
991-
return false; // TODO - throw error
1017+
return __MCScriptThrowDefinitionNotFoundInModuleError(self, kMCScriptDefinitionKindProperty, p_handler);
9921018

9931019
r_signature = self -> types[t_def -> type] -> typeinfo;
9941020

@@ -1001,12 +1027,12 @@ bool MCScriptCopyHandlerParameterNamesOfModule(MCScriptModuleRef self, MCNameRef
10011027

10021028
if (!self -> is_usable)
10031029
{
1004-
return false; // TODO - throw error
1030+
return __MCScriptThrowModuleNotUsableError(self);
10051031
}
10061032

10071033
if (!MCScriptLookupHandlerDefinitionInModule(self, p_handler, t_def))
10081034
{
1009-
return false; // TODO - throw error
1035+
return __MCScriptThrowDefinitionNotFoundInModuleError(self, kMCScriptDefinitionKindHandler, p_handler);
10101036
}
10111037

10121038
MCAutoProperListRef t_names;
@@ -1050,16 +1076,17 @@ void MCScriptReleaseRawModule(MCScriptModule *p_module)
10501076

10511077
////////////////////////////////////////////////////////////////////////////////
10521078

1053-
static bool
1079+
template <typename T, MCScriptDefinitionKind K> static bool
10541080
__MCScriptLookupDefinitionInModule(MCScriptModuleRef self,
1055-
MCScriptDefinitionKind p_kind,
10561081
MCNameRef p_name,
1057-
MCScriptDefinition*& r_definition)
1082+
T*& r_definition)
10581083
{
1084+
__MCScriptValidateObjectAndKind__(self, kMCScriptObjectKindModule);
1085+
10591086
for(uindex_t i = 0; i < self->exported_definition_count; i++)
10601087
{
1061-
if (p_kind != kMCScriptDefinitionKindNone &&
1062-
self->definitions[self->exported_definitions[i].index]->kind != p_kind)
1088+
if (K != kMCScriptDefinitionKindNone &&
1089+
self->definitions[self->exported_definitions[i].index]->kind != K)
10631090
{
10641091
continue;
10651092
}
@@ -1070,7 +1097,7 @@ __MCScriptLookupDefinitionInModule(MCScriptModuleRef self,
10701097
continue;
10711098
}
10721099

1073-
r_definition = self->definitions[self->exported_definitions[i].index];
1100+
r_definition = static_cast<T*>(self->definitions[self->exported_definitions[i].index]);
10741101

10751102
return true;
10761103
}
@@ -1081,84 +1108,42 @@ __MCScriptLookupDefinitionInModule(MCScriptModuleRef self,
10811108

10821109
bool MCScriptLookupConstantDefinitionInModule(MCScriptModuleRef self, MCNameRef p_constant, MCScriptConstantDefinition*& r_definition)
10831110
{
1084-
__MCScriptValidateObjectAndKind__(self, kMCScriptObjectKindModule);
1085-
1086-
MCScriptDefinition *t_definition = nil;
1087-
if (!__MCScriptLookupDefinitionInModule(self,
1088-
kMCScriptDefinitionKindConstant,
1089-
p_constant,
1090-
t_definition))
1091-
{
1092-
return false;
1093-
}
1094-
1095-
r_definition = static_cast<MCScriptConstantDefinition *>(t_definition);
1096-
1097-
return true;
1111+
return __MCScriptLookupDefinitionInModule<MCScriptConstantDefinition,
1112+
kMCScriptDefinitionKindConstant>(self,
1113+
p_constant,
1114+
r_definition);
10981115
}
10991116

11001117
bool MCScriptLookupPropertyDefinitionInModule(MCScriptModuleRef self, MCNameRef p_property, MCScriptPropertyDefinition*& r_definition)
11011118
{
1102-
__MCScriptValidateObjectAndKind__(self, kMCScriptObjectKindModule);
1103-
1104-
MCScriptDefinition *t_definition = nil;
1105-
if (!__MCScriptLookupDefinitionInModule(self,
1106-
kMCScriptDefinitionKindProperty,
1107-
p_property,
1108-
t_definition))
1109-
{
1110-
return false;
1111-
}
1112-
1113-
r_definition = static_cast<MCScriptPropertyDefinition *>(t_definition);
1114-
1115-
return true;
1119+
return __MCScriptLookupDefinitionInModule<MCScriptPropertyDefinition,
1120+
kMCScriptDefinitionKindProperty>(self,
1121+
p_property,
1122+
r_definition);
11161123
}
11171124

1118-
bool MCScriptLookupEventDefinitionInModule(MCScriptModuleRef self, MCNameRef p_property, MCScriptEventDefinition*& r_definition)
1125+
bool MCScriptLookupEventDefinitionInModule(MCScriptModuleRef self, MCNameRef p_event, MCScriptEventDefinition*& r_definition)
11191126
{
1120-
__MCScriptValidateObjectAndKind__(self, kMCScriptObjectKindModule);
1121-
1122-
MCScriptDefinition *t_definition = nil;
1123-
if (!__MCScriptLookupDefinitionInModule(self,
1124-
kMCScriptDefinitionKindEvent,
1125-
p_property,
1126-
t_definition))
1127-
{
1128-
return false;
1129-
}
1130-
1131-
r_definition = static_cast<MCScriptEventDefinition *>(t_definition);
1132-
1133-
return true;
1127+
return __MCScriptLookupDefinitionInModule<MCScriptEventDefinition,
1128+
kMCScriptDefinitionKindEvent>(self,
1129+
p_event,
1130+
r_definition);
11341131
}
11351132

11361133
bool MCScriptLookupHandlerDefinitionInModule(MCScriptModuleRef self, MCNameRef p_handler, MCScriptHandlerDefinition*& r_definition)
11371134
{
1138-
__MCScriptValidateObjectAndKind__(self, kMCScriptObjectKindModule);
1139-
1140-
MCScriptDefinition *t_definition = nil;
1141-
if (!__MCScriptLookupDefinitionInModule(self,
1142-
kMCScriptDefinitionKindHandler,
1143-
p_handler,
1144-
t_definition))
1145-
{
1146-
return false;
1147-
}
1148-
1149-
r_definition = static_cast<MCScriptHandlerDefinition *>(t_definition);
1150-
1151-
return true;
1135+
return __MCScriptLookupDefinitionInModule<MCScriptHandlerDefinition,
1136+
kMCScriptDefinitionKindHandler>(self,
1137+
p_handler,
1138+
r_definition);
11521139
}
11531140

11541141
bool MCScriptLookupDefinitionInModule(MCScriptModuleRef self, MCNameRef p_name, MCScriptDefinition*& r_definition)
11551142
{
1156-
__MCScriptValidateObjectAndKind__(self, kMCScriptObjectKindModule);
1157-
1158-
return __MCScriptLookupDefinitionInModule(self,
1159-
kMCScriptDefinitionKindNone,
1160-
p_name,
1161-
r_definition);
1143+
return __MCScriptLookupDefinitionInModule<MCScriptDefinition,
1144+
kMCScriptDefinitionKindNone>(self,
1145+
p_name,
1146+
r_definition);
11621147
}
11631148

11641149
////////////////////////////////////////////////////////////////////////////////

0 commit comments

Comments
 (0)