Skip to content

Instantly share code, notes, and snippets.

View forax's full-sized avatar

Rémi Forax forax

  • University Gustave Eiffel (Paris)
  • Paris, France
View GitHub Profile
@forax
forax / Constantifier.java
Created January 12, 2018 17:33
How to simulate @stable semantics with method handles ?
import static java.lang.invoke.MethodHandles.constant;
import static java.lang.invoke.MethodHandles.dropArguments;
import static java.lang.invoke.MethodHandles.exactInvoker;
import static java.lang.invoke.MethodHandles.foldArguments;
import static java.lang.invoke.MethodHandles.lookup;
import static java.lang.invoke.MethodType.methodType;
import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
import java.lang.invoke.MethodHandles.Lookup;
@forax
forax / ASTToMHCompiler.java
Created January 3, 2018 16:05
A compiler that takes a toy AST and generate the corresponding method handle tree
import static java.lang.invoke.MethodHandles.constant;
import static java.lang.invoke.MethodHandles.dropArguments;
import static java.lang.invoke.MethodHandles.empty;
import static java.lang.invoke.MethodHandles.identity;
import static java.lang.invoke.MethodHandles.loop;
import static java.lang.invoke.MethodHandles.publicLookup;
import static java.lang.invoke.MethodType.methodType;
import static java.util.stream.IntStream.range;
import java.lang.invoke.MethodHandle;
@forax
forax / DefaultFileSystem.java
Created April 22, 2017 20:04
A dummy FileSystemlProvider
package filesystem_provider;
import java.io.IOException;
import java.nio.file.FileStore;
import java.nio.file.FileSystem;
import java.nio.file.Path;
import java.nio.file.PathMatcher;
import java.nio.file.WatchService;
import java.nio.file.attribute.UserPrincipalLookupService;
import java.nio.file.spi.FileSystemProvider;
class Morphism {
/*
List = Cons(int value, List next) | Nil
*/
interface ListVisitor<R, P> {
R Cons(int value, ListAcceptor next, P param);
R Nil(P param);
}
interface ListAcceptor {
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Collections;
import java.util.function.Supplier;
import java.util.stream.Stream;
public interface Traversal<T> {
enum Order {
DEEP_FIRST {
@Override
package com.github.forax.pro.helper.parser;
import static com.github.forax.pro.helper.ModuleVisitor.ACC_OPEN;
import static com.github.forax.pro.helper.ModuleVisitor.ACC_STATIC;
import static com.github.forax.pro.helper.ModuleVisitor.ACC_TRANSITIVE;
import static java.util.stream.Collectors.toList;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
package java.lang.invoke;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.invoke.MethodHandles.Lookup;
import java.lang.reflect.AnnotatedElement;
import java.util.Arrays;
package java.lang.invoke;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.invoke.MethodHandles.Lookup;
import java.util.Objects;
import java.util.Optional;
@forax
forax / Vault.java
Last active November 1, 2016 12:07
package org.openjdk.meta;
import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
import java.lang.invoke.MethodType;
import java.lang.invoke.MethodHandles.Lookup;
import java.util.Objects;
import java.util.Optional;
import java.util.concurrent.atomic.AtomicReference;
import java.util.function.Function;
package fr.umlv.json;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.invoke.CallSite;
import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
import java.lang.invoke.MethodHandles.Lookup;