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

Commit ecd65eb

Browse files
committed
[[ lc-compile ]] Update builtin types for shim generation
1 parent c05123a commit ecd65eb

File tree

3 files changed

+31
-2
lines changed

3 files changed

+31
-2
lines changed

libscript/include/libscript/script.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -478,6 +478,9 @@ enum MCScriptForeignPrimitiveType
478478
kMCScriptForeignPrimitiveTypeCDouble,
479479
kMCScriptForeignPrimitiveTypeSInt,
480480
kMCScriptForeignPrimitiveTypeUInt,
481+
kMCScriptForeignPrimitiveTypeNaturalUInt,
482+
kMCScriptForeignPrimitiveTypeNaturalSInt,
483+
kMCScriptForeignPrimitiveTypeNaturalFloat,
481484
};
482485

483486
MCScriptForeignPrimitiveType MCScriptQueryForeignHandlerReturnTypeInModule(MCScriptModuleBuilderRef build, uindex_t type_index);

libscript/src/script-builder.cpp

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1942,24 +1942,38 @@ MCScriptMapTypeToForeignPrimitiveTypeInModule(MCScriptModuleBuilderRef self, uin
19421942
{ "CSChar", kMCScriptForeignPrimitiveTypeCSChar },
19431943
{ "CUChar", kMCScriptForeignPrimitiveTypeCUChar },
19441944
{ "CSShort", kMCScriptForeignPrimitiveTypeCSShort },
1945+
{ "CShort", kMCScriptForeignPrimitiveTypeCSShort },
19451946
{ "CUShort", kMCScriptForeignPrimitiveTypeCUShort },
19461947
{ "CSInt", kMCScriptForeignPrimitiveTypeCSInt },
1948+
{ "CInt", kMCScriptForeignPrimitiveTypeCSInt },
19471949
{ "CUInt", kMCScriptForeignPrimitiveTypeCUInt },
19481950
{ "CSLong", kMCScriptForeignPrimitiveTypeCSLong },
1951+
{ "CLong", kMCScriptForeignPrimitiveTypeCSLong },
19491952
{ "CULong", kMCScriptForeignPrimitiveTypeCULong },
1950-
{ "CULongLong", kMCScriptForeignPrimitiveTypeCSLongLong },
1953+
{ "CSLongLong", kMCScriptForeignPrimitiveTypeCSLongLong },
1954+
{ "CLongLong", kMCScriptForeignPrimitiveTypeCSLongLong },
19511955
{ "CULongLong", kMCScriptForeignPrimitiveTypeCULongLong },
19521956
{ "CDouble", kMCScriptForeignPrimitiveTypeCDouble },
19531957
{ "CFloat", kMCScriptForeignPrimitiveTypeCFloat },
19541958
{ "LCSInt", kMCScriptForeignPrimitiveTypeSInt },
1959+
{ "LCInt", kMCScriptForeignPrimitiveTypeSInt },
1960+
{ "LCIndex", kMCScriptForeignPrimitiveTypeSInt },
19551961
{ "LCUInt", kMCScriptForeignPrimitiveTypeUInt },
1962+
{ "LCUIndex", kMCScriptForeignPrimitiveTypeUInt },
19561963

19571964
{ "Float32", kMCScriptForeignPrimitiveTypeFloat32 },
19581965
{ "Float64", kMCScriptForeignPrimitiveTypeFloat64 },
19591966

19601967
{ "Pointer", kMCScriptForeignPrimitiveTypePointer },
19611968

1969+
{ "ZStringNative", kMCScriptForeignPrimitiveTypePointer },
19621970
{ "ZStringUTF8", kMCScriptForeignPrimitiveTypePointer },
1971+
{ "ZStringUTF16", kMCScriptForeignPrimitiveTypePointer },
1972+
1973+
/* Natural Types */
1974+
{ "NaturalUInt", kMCScriptForeignPrimitiveTypeNaturalUInt },
1975+
{ "NaturalSInt", kMCScriptForeignPrimitiveTypeNaturalSInt },
1976+
{ "NaturalFloat", kMCScriptForeignPrimitiveTypeNaturalFloat },
19631977

19641978
/* Java FFI Types */
19651979
{ "JObject", kMCScriptForeignPrimitiveTypePointer },

toolchain/lc-compile/src/emit.cpp

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -441,6 +441,9 @@ static struct { MCScriptForeignPrimitiveType type; const char *ctype; } s_primit
441441
DEFINE_PRIMITIVE_TYPE_MAPPING(CDouble, double)
442442
DEFINE_PRIMITIVE_TYPE_MAPPING(SInt, int32_t)
443443
DEFINE_PRIMITIVE_TYPE_MAPPING(UInt, uint32_t)
444+
DEFINE_PRIMITIVE_TYPE_MAPPING(NaturalUInt, natural_uint_t)
445+
DEFINE_PRIMITIVE_TYPE_MAPPING(NaturalSInt, natural_sint_t)
446+
DEFINE_PRIMITIVE_TYPE_MAPPING(NaturalFloat, natural_float_t)
444447
};
445448

446449
#undef DEFINE_PRIMITIVE_TYPE_MAPPING
@@ -584,7 +587,16 @@ static bool EmitEmittedBuiltins(void)
584587

585588
static const char *kOutputCDefinitions =
586589
"#include <stdint.h>\n"
587-
"#include <stddef.h>\n"
590+
"#include <stddef.h>\n\n"
591+
"#if UINTPTR_MAX == 0xffffffff\n"
592+
"typedef uint32_t natural_uint_t;\n"
593+
"typedef int32_t natural_sint_t;\n"
594+
"typedef float natural_float_t;\n"
595+
"#elif UINTPTR_MAX == 0xffffffffffffffff\n"
596+
"typedef uint64_t natural_uint_t;\n"
597+
"typedef int64_t natural_sint_t;\n"
598+
"typedef double natural_float_t;\n"
599+
"#endif\n\n"
588600
"typedef void (*__builtin_shim_type)(void*, void**);\n"
589601
"struct __builtin_module_info\n"
590602
"{\n"

0 commit comments

Comments
 (0)