Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 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