Skip to content

Commit 2577d41

Browse files
authored
Merge pull request livecode#5531 from runrevmark/lcb-ordinal_binding-2
[[ LCB ]] Add ordinal binding for builtin modules
2 parents 353b320 + b27cf19 commit 2577d41

21 files changed

Lines changed: 687 additions & 51 deletions

engine/engine.gyp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -535,6 +535,11 @@
535535
},
536536
},
537537

538+
'sources':
539+
[
540+
'<(PRODUCT_DIR)/obj.target/engine_lcb_modules/geni/engine_lcb_modules.o',
541+
],
542+
538543
'sources!':
539544
[
540545
'src/dummy.cpp',

engine/src/canvas.lcb

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2284,10 +2284,10 @@ end syntax
22842284
// TODO - add resize operation? "resize <image> to <width>,<height>"
22852285
// TODO - implement image operations
22862286

2287-
public foreign handler MCCanvasImageTransform(inout xImage as Image, in pTransform as Transform) returns nothing binds to "<builtin>"
2288-
public foreign handler MCCanvasImageScale(inout xImage as Image, in pScaleX as CanvasFloat, in pScaleY as CanvasFloat) returns nothing binds to "<builtin>"
2289-
public foreign handler MCCanvasImageRotate(inout xImage as Image, in pRotation as CanvasFloat) returns nothing binds to "<builtin>"
2290-
public foreign handler MCCanvasImageCrop(inout xImage as Image, in pRight as Rectangle) returns nothing binds to "<builtin>"
2287+
// public foreign handler MCCanvasImageTransform(inout xImage as Image, in pTransform as Transform) returns nothing binds to "<builtin>"
2288+
// public foreign handler MCCanvasImageScale(inout xImage as Image, in pScaleX as CanvasFloat, in pScaleY as CanvasFloat) returns nothing binds to "<builtin>"
2289+
// public foreign handler MCCanvasImageRotate(inout xImage as Image, in pRotation as CanvasFloat) returns nothing binds to "<builtin>"
2290+
// public foreign handler MCCanvasImageCrop(inout xImage as Image, in pRight as Rectangle) returns nothing binds to "<builtin>"
22912291

22922292
//syntax TransformImage is statement
22932293
// "transform" <mImage: Expression> "by" <mTransform: Expression>
@@ -4865,7 +4865,7 @@ end syntax
48654865
////////////////////////////////////////////////////////////////////////////////
48664866

48674867
public foreign handler MCCanvasThisCanvas(out rCanvas as Canvas) returns nothing binds to "<builtin>"
4868-
public foreign handler MCCanvasPretendToAssignThisCanvas(in pCanvas as Canvas) returns nothing binds to "<builtin>"
4868+
public foreign handler MCCanvasPretendToAssignToThisCanvas(in pCanvas as Canvas) returns nothing binds to "<builtin>"
48694869
public foreign handler MCCanvasNewCanvasWithSize(in pSize as List, out rCanvas as Canvas) returns nothing binds to "<builtin>"
48704870
public foreign handler MCCanvasGetPixelDataOfCanvas(in pCanvas as Canvas, out rData as Data) returns nothing binds to "<builtin>"
48714871
public foreign handler MCCanvasGetPixelHeightOfCanvas(in pCanvas as Canvas, out rHeight as LCUInt) returns nothing binds to "<builtin>"
@@ -4889,7 +4889,7 @@ syntax ThisCanvas is expression
48894889
"this" "canvas"
48904890
begin
48914891
MCCanvasThisCanvas(output)
4892-
MCCanvasPretendToAssignThisCanvas(input)
4892+
MCCanvasPretendToAssignToThisCanvas(input)
48934893
end syntax
48944894

48954895
//////////

engine/src/module-canvas.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1766,6 +1766,7 @@ void MCCanvasTransformSkewWithList(MCCanvasTransformRef &x_transform, MCProperLi
17661766
MCCanvasTransformSkew(x_transform, t_skew.x, t_skew.y);
17671767
}
17681768

1769+
MC_DLLEXPORT_DEF
17691770
void MCCanvasTransformMultiply(MCCanvasTransformRef p_left, MCCanvasTransformRef p_right, MCCanvasTransformRef &r_transform)
17701771
{
17711772
MCGAffineTransform t_transform;

engine/src/module-canvas.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -289,6 +289,7 @@ extern "C" MC_DLLEXPORT void MCCanvasTransformTranslate(MCCanvasTransformRef &x_
289289
extern "C" MC_DLLEXPORT void MCCanvasTransformTranslateWithList(MCCanvasTransformRef &x_transform, MCProperListRef p_list);
290290
extern "C" MC_DLLEXPORT void MCCanvasTransformSkew(MCCanvasTransformRef &x_transform, MCCanvasFloat p_x_skew, MCCanvasFloat p_y_skew);
291291
extern "C" MC_DLLEXPORT void MCCanvasTransformSkewWithList(MCCanvasTransformRef &x_transform, MCProperListRef p_list);
292+
extern "C" MC_DLLEXPORT void MCCanvasTransformMultiply(MCCanvasTransformRef p_left, MCCanvasTransformRef p_right, MCCanvasTransformRef &r_transform);
292293

293294
//////////
294295

engine/src/widget-popup.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -465,7 +465,7 @@ extern "C" MC_DLLEXPORT_DEF void MCWidgetExecClosePopupWithResult(MCValueRef p_r
465465
s_widget_popup->close();
466466
}
467467

468-
extern "C" MC_DLLEXPORT_DEF void MCWidgetExecClosePopup(MCValueRef p_result)
468+
extern "C" MC_DLLEXPORT_DEF void MCWidgetExecClosePopup()
469469
{
470470
MCWidgetExecClosePopupWithResult(kMCNull);
471471
}

engine/src/widget.lcb

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -646,7 +646,7 @@ public foreign handler MCWidgetGetClickButton(in pCurrent as CBool, out rButton
646646
public foreign handler MCWidgetGetClickCount(in pCurrent as CBool, out rCount as CUInt) returns nothing binds to "<builtin>"
647647

648648
--public foreign handler MCWidgetGetMouseButtonState(in pIndex as LCUInt, out rPressed /*as PressedState*/) returns nothing binds to "<builtin>"
649-
public foreign handler MCWidgetGetModifierKeys(in pCurrent as CBool, out rKeys as List) returns nothing binds to "<builtin>"
649+
--public foreign handler MCWidgetGetModifierKeys(in pCurrent as CBool, out rKeys as List) returns nothing binds to "<builtin>"
650650

651651
/**
652652
Summary: Determines the location of the mouse pointer relative to the widget.
@@ -1033,8 +1033,8 @@ public foreign handler MCWidgetExecPlaceWidget(in pChild as Widget) returns noth
10331033
public foreign handler MCWidgetExecPlaceWidgetAt(in pChild as Widget, in pAtBottom as CBool) returns nothing binds to "<builtin>"
10341034
public foreign handler MCWidgetExecPlaceWidgetRelative(in pChild as Widget, in pIsBelow as CBool, in pOtherChild as Widget) returns nothing binds to "<builtin>"
10351035
public foreign handler MCWidgetExecUnplaceWidget(in pChild as Widget) returns nothing binds to "<builtin>"
1036-
public foreign handler MCWidgetSnapshotWidget(in pChild as Widget) returns Image binds to "<builtin>"
1037-
public foreign handler MCWidgetSnapshotWidgetAtSizeAsList(in pChild as Widget, in pSize as List) returns Image binds to "<builtin>"
1036+
--public foreign handler MCWidgetSnapshotWidget(in pChild as Widget) returns Image binds to "<builtin>"
1037+
--public foreign handler MCWidgetSnapshotWidgetAtSizeAsList(in pChild as Widget, in pSize as List) returns Image binds to "<builtin>"
10381038

10391039
public foreign handler MCWidgetGetPropertyOfWidget(in pName as String, in pWidget as Widget, out rValue as optional any) returns nothing binds to "<builtin>"
10401040
public foreign handler MCWidgetSetPropertyOfWidget(in pValue as optional any, in pName as String, in pWidget as Widget) returns nothing binds to "<builtin>"
@@ -1045,13 +1045,17 @@ public foreign handler MCWidgetSetWidthOfWidget(in pWidth as CanvasFloat, in pWi
10451045
public foreign handler MCWidgetGetHeightOfWidget(in pWidget as Widget, out rHeight as CanvasFloat) returns nothing binds to "<builtin>"
10461046
public foreign handler MCWidgetSetHeightOfWidget(in pHeight as CanvasFloat, in pWidget as Widget) returns nothing binds to "<builtin>"
10471047
public foreign handler MCWidgetGetLocationOfWidget(in pWidget as Widget, out rHeight as Point) returns nothing binds to "<builtin>"
1048-
public foreign handler MCWidgetSetLocationOfWidget(in pHeight as CanvasFloat, in pWidget as Widget) returns nothing binds to "<builtin>"
1048+
public foreign handler MCWidgetSetLocationOfWidget(in pLocation as Point, in pWidget as Widget) returns nothing binds to "<builtin>"
10491049
public foreign handler MCWidgetGetEnabledOfWidget(in pWidget as Widget, out rEnabled as CBool) returns nothing binds to "<builtin>"
10501050
public foreign handler MCWidgetSetEnabledOfWidget(in pEnabled as CBool, in pWidget as Widget) returns nothing binds to "<builtin>"
10511051
public foreign handler MCWidgetGetDisabledOfWidget(in pWidget as Widget, out rDisabled as CBool) returns nothing binds to "<builtin>"
10521052
public foreign handler MCWidgetSetDisabledOfWidget(in pDisabled as CBool, in pWidget as Widget) returns nothing binds to "<builtin>"
1053+
1054+
/*
1055+
No implementation
10531056
public foreign handler MCWidgetGetFontOfWidget(in pWidget as Widget, out rFont as optional Font) returns nothing binds to "<builtin>"
10541057
public foreign handler MCWidgetSetFontOfWidget(in pFont as optional Font, in pWidget as Widget) returns nothing binds to "<builtin>"
1058+
*/
10551059

10561060
public foreign handler MCWidgetGetAnnotationOfWidget(in pName as String, in pWidget as Widget, out rValue as optional any) returns nothing binds to "<builtin>"
10571061
public foreign handler MCWidgetSetAnnotationOfWidget(in pValue as optional any, in pName as String, in pWidget as Widget) returns nothing binds to "<builtin>"
@@ -1526,12 +1530,14 @@ Return a font which reflects the current (effective) settings of
15261530

15271531
References: MyFont (expression)
15281532
*/
1533+
/* No implementation
15291534
syntax WidgetFontProperty is prefix operator with property precedence
15301535
"the" "font" "of" <Widget: Expression>
15311536
begin
15321537
MCWidgetGetFontOfWidget(Widget, output)
15331538
MCWidgetSetFontOfWidget(input, Widget)
15341539
end syntax
1540+
*/
15351541

15361542
//
15371543

libscript/include/libscript/script.h

Lines changed: 50 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -171,8 +171,8 @@ bool MCScriptCreateModuleFromStream(MCStreamRef stream, MCScriptModuleRef& r_mod
171171
// Load a module from a blob
172172
MC_DLLEXPORT bool MCScriptCreateModuleFromData(MCDataRef data, MCScriptModuleRef & r_module);
173173

174-
// Set initializer / finalizer
175-
void MCScriptSetModuleLifecycleFunctions(MCScriptModuleRef module, bool (*initializer)(void), void (*finalizer)(void));
174+
// Set initializer / finalizer / builtins
175+
void MCScriptConfigureBuiltinModule(MCScriptModuleRef module, bool (*initializer)(void), void (*finalizer)(void), void **builtins);
176176

177177
// Lookup the module with the given name. Returns false if no such module exists.
178178
bool MCScriptLookupModule(MCNameRef name, MCScriptModuleRef& r_module);
@@ -412,6 +412,54 @@ void MCScriptEmitBytecodeInModuleA(MCScriptModuleBuilderRef builder, uindex_t op
412412

413413
void MCScriptEmitPositionForBytecodeInModule(MCScriptModuleBuilderRef builder, MCNameRef file, uindex_t line);
414414

415+
/* These methods are used to build shims for builtin foreign handlers. They
416+
allow lc-compiles 'emit' module to get the details of a handler type. The
417+
types returned are the raw types of the arguments after taking into account
418+
mode which means we only (currently) need void, pointer, bool and the number
419+
types (both fixed and C). We need to enumerate them all separately, as some
420+
int types change depending on the architecture. */
421+
422+
enum MCScriptForeignPrimitiveType
423+
{
424+
kMCScriptForeignPrimitiveTypeUnknown,
425+
kMCScriptForeignPrimitiveTypeVoid,
426+
kMCScriptForeignPrimitiveTypePointer,
427+
kMCScriptForeignPrimitiveTypeSInt8,
428+
kMCScriptForeignPrimitiveTypeUInt8,
429+
kMCScriptForeignPrimitiveTypeSInt16,
430+
kMCScriptForeignPrimitiveTypeUInt16,
431+
kMCScriptForeignPrimitiveTypeSInt32,
432+
kMCScriptForeignPrimitiveTypeUInt32,
433+
kMCScriptForeignPrimitiveTypeSInt64,
434+
kMCScriptForeignPrimitiveTypeUInt64,
435+
kMCScriptForeignPrimitiveTypeSIntSize,
436+
kMCScriptForeignPrimitiveTypeUIntSize,
437+
kMCScriptForeignPrimitiveTypeSIntPtr,
438+
kMCScriptForeignPrimitiveTypeUIntPtr,
439+
kMCScriptForeignPrimitiveTypeFloat32,
440+
kMCScriptForeignPrimitiveTypeFloat64,
441+
kMCScriptForeignPrimitiveTypeCBool,
442+
kMCScriptForeignPrimitiveTypeCChar,
443+
kMCScriptForeignPrimitiveTypeCSChar,
444+
kMCScriptForeignPrimitiveTypeCUChar,
445+
kMCScriptForeignPrimitiveTypeCSShort,
446+
kMCScriptForeignPrimitiveTypeCUShort,
447+
kMCScriptForeignPrimitiveTypeCSInt,
448+
kMCScriptForeignPrimitiveTypeCUInt,
449+
kMCScriptForeignPrimitiveTypeCSLong,
450+
kMCScriptForeignPrimitiveTypeCULong,
451+
kMCScriptForeignPrimitiveTypeCSLongLong,
452+
kMCScriptForeignPrimitiveTypeCULongLong,
453+
kMCScriptForeignPrimitiveTypeCFloat,
454+
kMCScriptForeignPrimitiveTypeCDouble,
455+
kMCScriptForeignPrimitiveTypeSInt,
456+
kMCScriptForeignPrimitiveTypeUInt,
457+
};
458+
459+
MCScriptForeignPrimitiveType MCScriptQueryForeignHandlerReturnTypeInModule(MCScriptModuleBuilderRef build, uindex_t type_index);
460+
uindex_t MCScriptQueryForeignHandlerParameterCountInModule(MCScriptModuleBuilderRef build, uindex_t type_index);
461+
MCScriptForeignPrimitiveType MCScriptQueryForeignHandlerParameterTypeInModule(MCScriptModuleBuilderRef build, uindex_t type_index, uindex_t arg_index);
462+
415463
////////////////////////////////////////////////////////////////////////////////
416464

417465
#endif

libscript/src/binary.lcb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,9 @@ public foreign handler MCBinaryExecPutBytesAfter(in Source as Data, inout Target
2727

2828
public foreign handler MCBinaryEvalConcatenateBytes(in Left as Data, in Right as Data, out Result as Data) returns nothing binds to "<builtin>"
2929

30+
/* No implementation
3031
public foreign handler MCBinaryEvalContainsBytes(in Target as Data, in Needle as Data, out Value as CBool) returns nothing binds to "<builtin>"
32+
*/
3133

3234
public foreign handler MCBinaryEvalIsEqualTo(in Left as Data, in Right as Data, out Value as CBool) returns nothing binds to "<builtin>"
3335
public foreign handler MCBinaryEvalIsNotEqualTo(in Left as Data, in Right as Data, out Value as CBool) returns nothing binds to "<builtin>"

libscript/src/byte.lcb

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,16 @@ public foreign handler MCByteEvalOffsetOfBytes(in IsLast as CBool, in Needle as
2828
public foreign handler MCByteEvalOffsetOfBytesBefore(in IsLast as CBool, in Needle as Data, in Before as LCIndex, in Target as Data, out Offset as LCUIndex) returns nothing binds to "<builtin>"
2929
public foreign handler MCByteEvalOffsetOfBytesAfter(in IsLast as CBool, in Needle as Data, in After as LCIndex, in Target as Data, out Offset as LCUIndex) returns nothing binds to "<builtin>"
3030

31-
public foreign handler MCByteEvalIsAmongTheBytesOf(in Needle as Data, in Target as Data, out Value as CBool) returns nothing binds to "<builtin>"
31+
// public foreign handler MCByteEvalIsAmongTheBytesOf(in Needle as Data, in Target as Data, out Value as CBool) returns nothing binds to "<builtin>"
3232

3333
public foreign handler MCByteEvalContainsBytes(in Target as Data, in Needle as Data, out Value as CBool) returns nothing binds to "<builtin>"
34-
public foreign handler MCByteEvalIsInBytes(in Needle as Data, in Target as Data, out Value as CBool) returns nothing binds to "<builtin>"
3534
public foreign handler MCByteEvalBeginsWithBytes(in Target as Data, in Needle as Data, out Value as CBool) returns nothing binds to "<builtin>"
3635
public foreign handler MCByteEvalEndsWithBytes(in Target as Data, in Needle as Data, out Value as CBool) returns nothing binds to "<builtin>"
3736

37+
/* No implementation
38+
public foreign handler MCByteEvalIsInBytes(in Needle as Data, in Target as Data, out Value as CBool) returns nothing binds to "<builtin>"
39+
*/
40+
3841
public foreign handler MCByteFetchByteOf(in Index as LCIndex, in Target as Data, out Value as Data) returns nothing binds to "<builtin>"
3942
public foreign handler MCByteStoreByteOf(in Value as Data, in Index as LCIndex, inout Target as Data) returns nothing binds to "<builtin>"
4043
public foreign handler MCByteFetchByteRangeOf(in Start as LCIndex, in Finish as LCIndex, in Target as Data, out Value as Data) returns nothing binds to "<builtin>"
@@ -169,11 +172,13 @@ Description:
169172
Tags: Binary
170173
*/
171174

175+
/* No implementation
172176
syntax ByteIsInData is neutral binary operator with comparison precedence
173177
<Needle: Expression> "is" "in" <Target: Expression>
174178
begin
175179
MCByteEvalIsInBytes(Needle, Target, output)
176180
end syntax
181+
*/
177182

178183
--
179184

libscript/src/char.lcb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,10 @@ public foreign handler MCCharEvalNumberOfCharsIn(in Target as String, out Count
3131

3232
public foreign handler MCCharEvalIsAmongTheCharsOf(in Needle as String, in Target as String, out Value as CBool) returns nothing binds to "<builtin>"
3333

34+
/* No implementation
3435
public foreign handler MCCharStoreBeforeCharOf(in Value as String, in Index as LCIndex, inout Target as String) returns nothing binds to "<builtin>"
3536
public foreign handler MCCharStoreAfterCharOf(in Value as String, in Index as LCIndex, inout Target as String) returns nothing binds to "<builtin>"
37+
*/
3638

3739
public foreign handler MCCharEvalOffsetOfChars(in IsLast as CBool, in Needle as String, in Target as String, out Offset as LCUIndex) returns nothing binds to "<builtin>"
3840
public foreign handler MCCharEvalOffsetOfCharsBefore(in IsLast as CBool, in Needle as String, in Before as LCIndex, in Target as String, out Offset as LCUIndex) returns nothing binds to "<builtin>"

0 commit comments

Comments
 (0)