Skip to content
This repository was archived by the owner on Aug 31, 2021. It is now read-only.

Commit 62df16d

Browse files
author
Monte Goulding
committed
some changes as discussed
1 parent e32fd9f commit 62df16d

4 files changed

Lines changed: 65 additions & 55 deletions

File tree

lcidlc/lclink.sh

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,21 @@ fi
66

77
DEPS=`cat "$LIVECODE_DEP_FILE"`
88

9-
VERSION=${SDK_NAME: -3}
10-
VERSION="${VERSION//\./}"
9+
SDK_MAJORVERSION=${SDK_NAME: -3}
10+
SDK_MAJORVERSION=${SDK_MAJORVERSION: 0:1}
11+
SDK_MINORVERSION=${SDK_NAME: -1}
1112

1213
# Frameworks may not exist in older sdks so conditionally include
13-
for MINVERSION in 30 40 50 60; do
14-
if [ $VERSION -lt $MINVERSION ]; then
15-
DEPS="$(echo "$DEPS" | sed "/framework$MINVERSION /d")"
16-
DEPS="$(echo "$DEPS" | sed "/weak-framework$MINVERSION /d")"
17-
else
18-
DEPS=${DEPS//framework$MINVERSION /framework }
19-
DEPS=${DEPS//weak-framework$MINVERSION /weak-framework }
20-
fi
14+
for MAJORVERSION in 3 4 5 6 7; do
15+
for MINORVERSION in 0 1 2 3 4; do
16+
if [[ $SDK_MAJORVERSION -lt $MAJORVERSION || ($SDK_MAJORVERSION == $MAJORVERSION && $SDK_MINORVERSION -lt $MINORVERSION) ]]; then
17+
DEPS="$(echo "$DEPS" | sed "/framework-$MAJORVERSION.$MINORVERSION /d")"
18+
DEPS="$(echo "$DEPS" | sed "/weak-framework-$MAJORVERSION.$MINORVERSION /d")"
19+
else
20+
DEPS=${DEPS//framework-$MAJORVERSION.$MINORVERSION /framework }
21+
DEPS=${DEPS//weak-framework-$MAJORVERSION.$MINORVERSION /weak-framework }
22+
fi
23+
done
2124
done
2225

2326
DEPS=${DEPS//library /-l}

lcidlc/src/Interface.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -384,11 +384,11 @@ bool InterfaceEndHandler(InterfaceRef self)
384384
return true;
385385
}
386386

387-
bool InterfaceDefineHandlerParameter(InterfaceRef self, Position p_where, ParameterType p_param_type, NameRef p_name, NameRef p_type, ValueRef p_default, bool optional)
387+
bool InterfaceDefineHandlerParameter(InterfaceRef self, Position p_where, ParameterType p_param_type, NameRef p_name, NameRef p_type, ValueRef p_default, bool p_optional)
388388
{
389389
static const char *s_param_types[] = {"in", "out", "inout", "ref"};
390390
MCLog("%s - %s%s parameter %s as %s", PositionDescribe(p_where),
391-
optional ? "optional " : "",
391+
p_optional ? "optional " : "",
392392
s_param_types[p_param_type],
393393
StringGetCStringPtr(NameGetString(p_name)),
394394
StringGetCStringPtr(NameGetString(p_type)));
@@ -420,7 +420,7 @@ bool InterfaceDefineHandlerParameter(InterfaceRef self, Position p_where, Parame
420420
}
421421

422422
// RULE: No non-optional parameters after an optional one
423-
if (!optional &&
423+
if (!p_optional &&
424424
t_variant -> parameter_count > 0 &&
425425
t_variant -> parameters[t_variant -> parameter_count - 1] . is_optional)
426426
InterfaceReport(self, p_where, kInterfaceErrorParamAfterOptionalParam, nil);
@@ -433,9 +433,9 @@ bool InterfaceDefineHandlerParameter(InterfaceRef self, Position p_where, Parame
433433
t_variant -> parameters[t_variant -> parameter_count - 1] . name = ValueRetain(p_name);
434434
t_variant -> parameters[t_variant -> parameter_count - 1] . type = ValueRetain(p_type);
435435
t_variant -> parameters[t_variant -> parameter_count - 1] . default_value = ValueRetain(p_default);
436-
t_variant -> parameters[t_variant -> parameter_count - 1] . is_optional = optional;
436+
t_variant -> parameters[t_variant -> parameter_count - 1] . is_optional = p_optional;
437437

438-
if (!optional)
438+
if (!p_optional)
439439
t_variant -> minimum_parameter_count += 1;
440440

441441
return true;

lcidlc/src/Interface.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ bool InterfaceDefineEnumElement(InterfaceRef interface, Position where, StringRe
5757
bool InterfaceEndEnum(InterfaceRef interface);
5858

5959
bool InterfaceBeginHandler(InterfaceRef interface, Position where, HandlerType type, NameRef name);
60-
bool InterfaceDefineHandlerParameter(InterfaceRef interface, Position where, ParameterType param_type, NameRef name, NameRef type, ValueRef default_value, bool optional);
60+
bool InterfaceDefineHandlerParameter(InterfaceRef interface, Position where, ParameterType param_type, NameRef name, NameRef type, ValueRef default_value, bool p_optional);
6161
bool InterfaceDefineHandlerReturn(InterfaceRef interface, Position where, NameRef type, bool indirect);
6262
bool InterfaceDefineHandlerBinding(InterfaceRef interface, Position where, NameRef name);
6363
bool InterfaceEndHandler(InterfaceRef interface);

lcidlc/src/InterfaceGenerate.cpp

Lines changed: 46 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -817,56 +817,63 @@ static bool InterfaceGenerateHandlers(InterfaceRef self, CoderRef p_coder)
817817
}
818818
if (t_parameter -> mode == kParameterTypeIn || t_parameter -> mode == kParameterTypeInOut)
819819
{
820-
CoderWriteLine(p_coder, "\tif (success)\n\t{");
821-
if (t_parameter -> default_value != nil)
820+
CoderWriteLine(p_coder, "\tif (success)", k);
821+
CoderWriteLine(p_coder, "\t{", k);
822+
if (t_parameter -> is_optional)
822823
{
823824
CoderWriteLine(p_coder, "\t\tif (argc > %d)", k);
825+
if (t_parameter -> default_value != nil)
826+
CoderWrite(p_coder, "\t\t\tsuccess = ");
827+
else
828+
CoderWrite(p_coder, "\t\t\t");
824829
if (t_native_type != kNativeTypeEnum)
825-
CoderWriteLine(p_coder, "\t\t\tsuccess = fetch__%s(\"%s\", argv[%d], param__%s);", NativeTypeGetTag(t_native_type), t_name, k, t_name);
830+
CoderWriteLine(p_coder, "fetch__%s(\"%s\", argv[%d], param__%s);", NativeTypeGetTag(t_native_type), t_name, k, t_name);
826831
else
827-
CoderWriteLine(p_coder, "\t\t\tsuccess = fetchenum__%s(\"%s\", argv[%d], param__%s);", name_to_cname(t_parameter -> type), t_name, k, t_name);
828-
CoderWriteLine(p_coder, "\t\telse");
829-
switch(t_native_type)
832+
CoderWriteLine(p_coder, "fetchenum__%s(\"%s\", argv[%d], param__%s);", name_to_cname(t_parameter -> type), t_name, k, t_name);
833+
if (t_parameter -> default_value != nil)
830834
{
831-
case kNativeTypeBoolean:
832-
CoderWriteLine(p_coder, "\t\t\tparam__%s = %s;", t_name, StringGetCStringPtr(NameGetString(t_parameter -> default_value)));
833-
break;
834-
case kNativeTypeObjcData:
835-
CoderWriteLine(p_coder, "\t\t\tsuccess = false;");
836-
break;
837-
case kNativeTypeCString:
838-
case kNativeTypeCData:
839-
CoderWriteLine(p_coder, "\t\t\tsuccess = default__%s(\"%s\", param__%s);", NativeTypeGetTag(t_native_type), StringGetCStringPtr(t_parameter -> default_value), t_name);
840-
break;
841-
case kNativeTypeObjcString:
842-
CoderWriteLine(p_coder, "\t\t\tparam__%s = @\"%s\";", t_name, StringGetCStringPtr(t_parameter -> default_value));
843-
break;
844-
case kNativeTypeInteger:
845-
CoderWriteLine(p_coder, "\t\t\tparam__%s = %lld;", t_name, NumberGetInteger(t_parameter -> default_value));
846-
break;
847-
case kNativeTypeReal:
848-
CoderWriteLine(p_coder, "\t\t\tparam__%s = %.15g;", t_name, NumberGetReal(t_parameter -> default_value));
849-
break;
850-
case kNativeTypeEnum:
851-
CoderWriteLine(p_coder, "\t\t\tparam__%s = %lld;", t_name, InterfaceResolveEnumElement(self, t_parameter -> type, t_parameter -> default_value));
852-
break;
853-
default:
854-
CoderWriteLine(p_coder, "\t\t\tsuccess = false;");
855-
break;
856-
}
835+
836+
CoderWriteLine(p_coder, "\t\tif (!success)", k);
837+
switch(t_native_type)
838+
{
839+
case kNativeTypeBoolean:
840+
CoderWriteLine(p_coder, "\t\t\tparam__%s = %s;", t_name, StringGetCStringPtr(NameGetString(t_parameter -> default_value)));
841+
break;
842+
case kNativeTypeObjcData:
843+
CoderWriteLine(p_coder, "\t\t\tsuccess = false;");
844+
break;
845+
case kNativeTypeCString:
846+
case kNativeTypeCData:
847+
CoderWriteLine(p_coder, "\t\t\tsuccess = default__%s(\"%s\", param__%s);", NativeTypeGetTag(t_native_type), StringGetCStringPtr(t_parameter -> default_value), t_name);
848+
break;
849+
case kNativeTypeObjcString:
850+
CoderWriteLine(p_coder, "\t\t\tparam__%s = @\"%s\";", t_name, StringGetCStringPtr(t_parameter -> default_value));
851+
break;
852+
case kNativeTypeInteger:
853+
CoderWriteLine(p_coder, "\t\t\tparam__%s = %lld;", t_name, NumberGetInteger(t_parameter -> default_value));
854+
break;
855+
case kNativeTypeReal:
856+
CoderWriteLine(p_coder, "\t\t\tparam__%s = %.15g;", t_name, NumberGetReal(t_parameter -> default_value));
857+
break;
858+
case kNativeTypeEnum:
859+
CoderWriteLine(p_coder, "\t\t\tparam__%s = %lld;", t_name, InterfaceResolveEnumElement(self, t_parameter -> type, t_parameter -> default_value));
860+
break;
861+
default:
862+
CoderWriteLine(p_coder, "\t\t\tsuccess = false;");
863+
break;
864+
}
865+
}
857866
}
858867
else
859868
{
860869
if (t_native_type != kNativeTypeEnum)
861-
CoderWriteLine(p_coder, "\t\tbool t_fetched = fetch__%s(\"%s\", argv[%d], param__%s);", NativeTypeGetTag(t_native_type), t_name, k, t_name);
870+
CoderWriteLine(p_coder, "\t\tsuccess = fetch__%s(\"%s\", argv[%d], param__%s);", NativeTypeGetTag(t_native_type), t_name, k, t_name);
862871
else
863-
CoderWriteLine(p_coder, "\t\tbool t_fetched = fetchenum__%s(\"%s\", argv[%d], param__%s);", name_to_cname(t_parameter -> type), t_name, k, t_name);
864-
// optional parameters without a default value
865-
if (!t_parameter->is_optional)
866-
CoderWriteLine(p_coder, "\t\tsuccess = t_fetched;");
867-
}
872+
CoderWriteLine(p_coder, "\t\tsuccess = fetchenum__%s(\"%s\", argv[%d], param__%s);", name_to_cname(t_parameter -> type), t_name, k, t_name);
873+
}
868874
CoderWriteLine(p_coder, "\t}");
869-
}
875+
876+
}
870877
if ((t_native_type == kNativeTypeCString || t_native_type == kNativeTypeCData) && t_parameter -> mode == kParameterTypeInOut)
871878
{
872879
CoderWriteLine(p_coder, "\tif (success)");

0 commit comments

Comments
 (0)