import ctypes import itertools import mmap import multiprocessing import resource from pathlib import Path import platform import random import struct import subprocess import tempfile ROOT = Path(__file__).resolve().parents[1] MASK = (1 << 64) - 1 OPERATORS = ("+", "-", "*", "and", "or", "xor", "shl", "shr", "<") def evaluate(e, env): if isinstance(e, int): return e if isinstance(e, str): return env[e] op, *args = e if op == "let": name, a, b = args return evaluate(b, {**env, name: evaluate(a, env)}) if op == "if": c, a, b = args return evaluate(a if evaluate(c, env) else b, env) a, b = (evaluate(x, env) for x in args) return {"+": lambda: a + b, "-": lambda: a - b, "*": lambda: a * b, "and": lambda: a & b, "or": lambda: a | b, "xor": lambda: a ^ b, "shl": lambda: a << (b & 63), "shr": lambda: a >> (b & 63), "<": lambda: int(a < b)}[op]() & MASK def source(e): return "(" + " ".join(map(source, e)) + ")" if isinstance(e, tuple) else str(e) def native(code): image = mmap.mmap(-1, len(code), prot=mmap.PROT_READ | mmap.PROT_WRITE | mmap.PROT_EXEC) image.write(code) address = ctypes.addressof(ctypes.c_char.from_buffer(image)) bridge = bytes.fromhex("53 49 89 f8 49 89 f1 48 b8") + struct.pack("