export function initTypes(is32bit) { // EJSObject's struct type depends no the pointer size of the // architecture. on 32 bit platforms (XXX or maybe just x86?) // clang inserts 4 bytes of padding at the end. we therefore need // to delay initialization of EJSObject (and therefore its uses) // until after we've determined pointer size. if (is32bit) { EjsObject = llvm.StructType.create("struct.EJSObject", [ Int32, // GCObjectHeader gc_header; EjsSpecops.pointerTo(), // EJSSpecOps* ops; EjsValue, // ejsval proto; // the __proto__ property EjsPropertyMap.pointerTo(), // EJSPropertyMap map; llvm.ArrayType.get(llvm.Type.getInt8Ty(), 4), // alignment that clang adds ]); } else { EjsObject = llvm.StructType.create("struct.EJSObject", [ Int32, // GCObjectHeader gc_header; EjsSpecops.pointerTo(), // EJSSpecOps* ops; EjsValue, // ejsval proto; // the __proto__ property EjsPropertyMap.pointerTo(), // EJSPropertyMap map; ]); } EjsFunction = llvm.StructType.create("struct.EJSFunction", [ EjsObject, // EJSObject obj; EjsClosureFunc, // EJSClosureFunc func; EjsValue, // ejsval env; Int32, // EJSBool bound; ]); EjsModule = CreateModuleTy("", 1); }
/* -*- Mode: js2; tab-width: 4; indent-tabs-mode: nil; -*- * vim: set ts=4 sw=4 et tw=99 ft=js: */ import * as llvm from '@llvm'; export let String = llvm.Type.getInt8Ty().pointerTo(); export let Int8Pointer = String; export let Bool = llvm.Type.getInt8Ty(); export let Void = llvm.Type.getVoidTy(); export let JSChar = llvm.Type.getInt16Ty(); export let Int1 = llvm.Type.getInt1Ty(); export let Int32 = llvm.Type.getInt32Ty(); export let Int64 = llvm.Type.getInt64Ty(); export let Double = llvm.Type.getDoubleTy(); export let EjsValueLayout = llvm.StructType.create("EjsValueType", [Int64]); export let EjsValue = EjsValueLayout; export let EjsClosureEnv = llvm.StructType.create("struct.EJSClosureEnv", [Int32, Int32, llvm.ArrayType.get(EjsValueLayout, 1)]); export let EjsPropIterator = EjsValue; //export let EjsClosureFunc = llvm.FunctionType.get(EjsValue, [EjsValue, EjsValue, Int32, EjsValue.pointerTo()]).pointerTo(); export let EjsClosureFunc = llvm.FunctionType.get(Void, [EjsValue.pointerTo(), EjsValue, EjsValue, Int32, EjsValue.pointerTo()]).pointerTo(); export let getEjsClosureFunc = (abi) => abi.createFunctionType(EjsValue, [EjsValue, EjsValue, Int32, EjsValue.pointerTo()]).pointerTo(); export let EjsPrimString = llvm.StructType.create("EjsPrimString", [Int32, Int32, Int64, Int64 ]); // XXX not the real structure but it should be good export let EjsSpecops = llvm.StructType.create("struct.EJSSpecOps", []); // XXX export let EjsPropertyMap = llvm.StructType.create("struct.EJSPropertyMap", [ JSChar.pointerTo(), // _EJSPropertyMapSlot** slots JSChar.pointerTo(), // _EJSPropertyMapSlot* first_insert