Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion buildSrc/src/main/kotlin/luau.jextract.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ tasks.named<JextractTask>("jextract") {
"lua_rawgetfield", "lua_rawget", "lua_rawgeti", "lua_getinfo",
"lua_setuserdatametatable", "lua_pcall", "lua_call",
"lua_tolstringatom", "lua_namecallatom",
"lua_debugtrace"
)
typedefs.addAll("lua_Alloc", "lua_CFunction", "lua_Destructor", "lua_Continuation")
structs.addAll("lua_Callbacks", "lua_Debug")
Expand All @@ -73,7 +74,7 @@ tasks.named<JextractTask>("jextract") {
"luaopen_utf8", "luaopen_math", "luaopen_debug",
"luaopen_vector", "luaL_openlibs", "luaL_optboolean",

"luaL_sandbox", "luaL_sandboxthread",
"luaL_sandbox", "luaL_sandboxthread"
)
}

Expand Down Expand Up @@ -110,6 +111,7 @@ tasks.named<JextractTask>("jextract") {
"luaW_lessthan", "luaLW_checkboolean", "luaLW_checkudata",

"luaW_assertconf_log", "luaW_assertconf_dump",
"luaW_interrupt_preempt_handler"
)
}
}
2 changes: 1 addition & 1 deletion native/luau
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ public static final GroupLayout layout() {
return optimizationLevel$LAYOUT;
}

private static final long optimizationLevel$OFFSET = 0;
private static final long optimizationLevel$OFFSET = $LAYOUT.byteOffset(groupElement("optimizationLevel"));

/**
* Offset for field:
Expand Down Expand Up @@ -116,7 +116,7 @@ public static void optimizationLevel(MemorySegment struct, int fieldValue) {
return debugLevel$LAYOUT;
}

private static final long debugLevel$OFFSET = 4;
private static final long debugLevel$OFFSET = $LAYOUT.byteOffset(groupElement("debugLevel"));

/**
* Offset for field:
Expand Down Expand Up @@ -160,7 +160,7 @@ public static void debugLevel(MemorySegment struct, int fieldValue) {
return typeInfoLevel$LAYOUT;
}

private static final long typeInfoLevel$OFFSET = 8;
private static final long typeInfoLevel$OFFSET = $LAYOUT.byteOffset(groupElement("typeInfoLevel"));

/**
* Offset for field:
Expand Down Expand Up @@ -204,7 +204,7 @@ public static void typeInfoLevel(MemorySegment struct, int fieldValue) {
return coverageLevel$LAYOUT;
}

private static final long coverageLevel$OFFSET = 12;
private static final long coverageLevel$OFFSET = $LAYOUT.byteOffset(groupElement("coverageLevel"));

/**
* Offset for field:
Expand Down Expand Up @@ -248,7 +248,7 @@ public static void coverageLevel(MemorySegment struct, int fieldValue) {
return vectorLib$LAYOUT;
}

private static final long vectorLib$OFFSET = 16;
private static final long vectorLib$OFFSET = $LAYOUT.byteOffset(groupElement("vectorLib"));

/**
* Offset for field:
Expand Down Expand Up @@ -292,7 +292,7 @@ public static void vectorLib(MemorySegment struct, MemorySegment fieldValue) {
return vectorCtor$LAYOUT;
}

private static final long vectorCtor$OFFSET = 24;
private static final long vectorCtor$OFFSET = $LAYOUT.byteOffset(groupElement("vectorCtor"));

/**
* Offset for field:
Expand Down Expand Up @@ -336,7 +336,7 @@ public static void vectorCtor(MemorySegment struct, MemorySegment fieldValue) {
return vectorType$LAYOUT;
}

private static final long vectorType$OFFSET = 32;
private static final long vectorType$OFFSET = $LAYOUT.byteOffset(groupElement("vectorType"));

/**
* Offset for field:
Expand Down Expand Up @@ -380,7 +380,7 @@ public static void vectorType(MemorySegment struct, MemorySegment fieldValue) {
return mutableGlobals$LAYOUT;
}

private static final long mutableGlobals$OFFSET = 40;
private static final long mutableGlobals$OFFSET = $LAYOUT.byteOffset(groupElement("mutableGlobals"));

/**
* Offset for field:
Expand Down Expand Up @@ -424,7 +424,7 @@ public static void mutableGlobals(MemorySegment struct, MemorySegment fieldValue
return userdataTypes$LAYOUT;
}

private static final long userdataTypes$OFFSET = 48;
private static final long userdataTypes$OFFSET = $LAYOUT.byteOffset(groupElement("userdataTypes"));

/**
* Offset for field:
Expand Down Expand Up @@ -468,7 +468,7 @@ public static void userdataTypes(MemorySegment struct, MemorySegment fieldValue)
return librariesWithKnownMembers$LAYOUT;
}

private static final long librariesWithKnownMembers$OFFSET = 56;
private static final long librariesWithKnownMembers$OFFSET = $LAYOUT.byteOffset(groupElement("librariesWithKnownMembers"));

/**
* Offset for field:
Expand Down Expand Up @@ -512,7 +512,7 @@ public static void librariesWithKnownMembers(MemorySegment struct, MemorySegment
return libraryMemberTypeCb$LAYOUT;
}

private static final long libraryMemberTypeCb$OFFSET = 64;
private static final long libraryMemberTypeCb$OFFSET = $LAYOUT.byteOffset(groupElement("libraryMemberTypeCb"));

/**
* Offset for field:
Expand Down Expand Up @@ -556,7 +556,7 @@ public static void libraryMemberTypeCb(MemorySegment struct, MemorySegment field
return libraryMemberConstantCb$LAYOUT;
}

private static final long libraryMemberConstantCb$OFFSET = 72;
private static final long libraryMemberConstantCb$OFFSET = $LAYOUT.byteOffset(groupElement("libraryMemberConstantCb"));

/**
* Offset for field:
Expand Down Expand Up @@ -600,7 +600,7 @@ public static void libraryMemberConstantCb(MemorySegment struct, MemorySegment f
return disabledBuiltins$LAYOUT;
}

private static final long disabledBuiltins$OFFSET = 80;
private static final long disabledBuiltins$OFFSET = $LAYOUT.byteOffset(groupElement("disabledBuiltins"));

/**
* Offset for field:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@
* typedef void (*lua_LibraryMemberConstantCallback)(const char *, const char *, lua_CompileConstant *)
* }
*/
public class lua_LibraryMemberConstantCallback {
public final class lua_LibraryMemberConstantCallback {

lua_LibraryMemberConstantCallback() {
private lua_LibraryMemberConstantCallback() {
// Should not be called directly
}

Expand Down Expand Up @@ -58,9 +58,11 @@ public static MemorySegment allocate(lua_LibraryMemberConstantCallback.Function
/**
* Invoke the upcall stub {@code funcPtr}, with given parameters
*/
public static void invoke(MemorySegment funcPtr,MemorySegment library, MemorySegment member, MemorySegment constant) {
public static void invoke(MemorySegment funcPtr, MemorySegment library, MemorySegment member, MemorySegment constant) {
try {
DOWN$MH.invokeExact(funcPtr, library, member, constant);
} catch (Error | RuntimeException ex) {
throw ex;
} catch (Throwable ex$) {
throw new AssertionError("should not reach here", ex$);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@
* typedef int (*lua_LibraryMemberTypeCallback)(const char *, const char *)
* }
*/
public class lua_LibraryMemberTypeCallback {
public final class lua_LibraryMemberTypeCallback {

lua_LibraryMemberTypeCallback() {
private lua_LibraryMemberTypeCallback() {
// Should not be called directly
}

Expand Down Expand Up @@ -58,9 +58,11 @@ public static MemorySegment allocate(lua_LibraryMemberTypeCallback.Function fi,
/**
* Invoke the upcall stub {@code funcPtr}, with given parameters
*/
public static int invoke(MemorySegment funcPtr,MemorySegment library, MemorySegment member) {
public static int invoke(MemorySegment funcPtr, MemorySegment library, MemorySegment member) {
try {
return (int) DOWN$MH.invokeExact(funcPtr, library, member);
} catch (Error | RuntimeException ex) {
throw ex;
} catch (Throwable ex$) {
throw new AssertionError("should not reach here", ex$);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
// Generated by jextract

package net.hollowcube.luau.internal.compiler;

import java.lang.invoke.*;
import java.lang.foreign.*;
import java.nio.ByteOrder;
import java.util.*;
import java.util.function.*;
import java.util.stream.*;

import static java.lang.foreign.ValueLayout.*;
import static java.lang.foreign.MemoryLayout.PathElement.*;

public class luacode_h$shared {

luacode_h$shared() {
// Should not be called directly
}

public static final ValueLayout.OfBoolean C_BOOL = (ValueLayout.OfBoolean) Linker.nativeLinker().canonicalLayouts().get("bool");
public static final ValueLayout.OfByte C_CHAR =(ValueLayout.OfByte)Linker.nativeLinker().canonicalLayouts().get("char");
public static final ValueLayout.OfShort C_SHORT = (ValueLayout.OfShort) Linker.nativeLinker().canonicalLayouts().get("short");
public static final ValueLayout.OfInt C_INT = (ValueLayout.OfInt) Linker.nativeLinker().canonicalLayouts().get("int");
public static final ValueLayout.OfLong C_LONG_LONG = (ValueLayout.OfLong) Linker.nativeLinker().canonicalLayouts().get("long long");
public static final ValueLayout.OfFloat C_FLOAT = (ValueLayout.OfFloat) Linker.nativeLinker().canonicalLayouts().get("float");
public static final ValueLayout.OfDouble C_DOUBLE = (ValueLayout.OfDouble) Linker.nativeLinker().canonicalLayouts().get("double");
public static final AddressLayout C_POINTER = ((AddressLayout) Linker.nativeLinker().canonicalLayouts().get("void*"))
.withTargetLayout(MemoryLayout.sequenceLayout(java.lang.Long.MAX_VALUE, C_CHAR));
public static final ValueLayout.OfLong C_LONG = (ValueLayout.OfLong) Linker.nativeLinker().canonicalLayouts().get("long");

static final boolean TRACE_DOWNCALLS = Boolean.getBoolean("jextract.trace.downcalls");

static void traceDowncall(String name, Object... args) {
String traceArgs = Arrays.stream(args)
.map(Object::toString)
.collect(Collectors.joining(", "));
System.out.printf("%s(%s)\n", name, traceArgs);
}

static MethodHandle upcallHandle(Class<?> fi, String name, FunctionDescriptor fdesc) {
try {
return MethodHandles.lookup().findVirtual(fi, name, fdesc.toMethodType());
} catch (ReflectiveOperationException ex) {
throw new AssertionError(ex);
}
}

static MemoryLayout align(MemoryLayout layout, long align) {
return switch (layout) {
case PaddingLayout p -> p;
case ValueLayout v -> v.withByteAlignment(align);
case GroupLayout g -> {
MemoryLayout[] alignedMembers = g.memberLayouts().stream()
.map(m -> align(m, align)).toArray(MemoryLayout[]::new);
yield g instanceof StructLayout ?
MemoryLayout.structLayout(alignedMembers) : MemoryLayout.unionLayout(alignedMembers);
}
case SequenceLayout s -> MemoryLayout.sequenceLayout(s.elementCount(), align(s.elementLayout(), align));
};
}
}

Loading