Fork of daniellemaywood.uk/gleam — Wasm codegen work
2

Configure Feed

Select the types of activity you want to include in your feed.

1use ecow::EcoString; 2use num_bigint::BigInt; 3 4#[derive(Debug, PartialEq, Eq, Default)] 5pub struct Module { 6 pub functions: Vec<Function>, 7} 8 9#[derive(Debug, PartialEq, Eq)] 10pub struct Function { 11 pub name: EcoString, 12 pub return_type: Type, 13 pub parameters: Vec<FunctionParameter>, 14 pub body: Expression, 15} 16 17#[derive(Debug, PartialEq, Eq)] 18pub struct FunctionParameter { 19 pub type_: Type, 20 pub name: Option<EcoString>, 21} 22 23#[derive(Debug, Clone, PartialEq, Eq)] 24pub enum Type { 25 Int, 26 Float, 27 Bool, 28 String, 29 Struct { elements: Vec<Type> }, 30 List(Box<Type>), 31 Generic, 32} 33 34#[derive(Debug, PartialEq, Eq, Clone)] 35pub struct Var { 36 pub name: EcoString, 37} 38 39#[derive(Debug, PartialEq, Eq, Clone)] 40pub enum Expression { 41 Block(Vec<Expression>), 42 43 FunctionRef { 44 module: EcoString, 45 name: EcoString, 46 arity: usize, 47 }, 48 49 Var(Var), 50 51 Int { 52 value: BigInt, 53 }, 54 55 Float { 56 value: EcoString, 57 }, 58 59 Bool { 60 value: bool, 61 }, 62 63 String { 64 value: EcoString, 65 }, 66 67 Equals { 68 lhs: Box<Expression>, 69 rhs: Box<Expression>, 70 }, 71 72 NotEquals { 73 lhs: Box<Expression>, 74 rhs: Box<Expression>, 75 }, 76 77 IntGt { 78 lhs: Box<Expression>, 79 rhs: Box<Expression>, 80 }, 81 82 IntGtEq { 83 lhs: Box<Expression>, 84 rhs: Box<Expression>, 85 }, 86 87 IntLt { 88 lhs: Box<Expression>, 89 rhs: Box<Expression>, 90 }, 91 92 IntLtEq { 93 lhs: Box<Expression>, 94 rhs: Box<Expression>, 95 }, 96 97 IntAdd { 98 lhs: Box<Expression>, 99 rhs: Box<Expression>, 100 }, 101 102 IntSub { 103 lhs: Box<Expression>, 104 rhs: Box<Expression>, 105 }, 106 107 IntMul { 108 lhs: Box<Expression>, 109 rhs: Box<Expression>, 110 }, 111 112 IntDiv { 113 lhs: Box<Expression>, 114 rhs: Box<Expression>, 115 }, 116 117 IntRem { 118 lhs: Box<Expression>, 119 rhs: Box<Expression>, 120 }, 121 122 FloatGt { 123 lhs: Box<Expression>, 124 rhs: Box<Expression>, 125 }, 126 127 FloatGtEq { 128 lhs: Box<Expression>, 129 rhs: Box<Expression>, 130 }, 131 132 FloatLt { 133 lhs: Box<Expression>, 134 rhs: Box<Expression>, 135 }, 136 137 FloatLtEq { 138 lhs: Box<Expression>, 139 rhs: Box<Expression>, 140 }, 141 142 FloatAdd { 143 lhs: Box<Expression>, 144 rhs: Box<Expression>, 145 }, 146 147 FloatSub { 148 lhs: Box<Expression>, 149 rhs: Box<Expression>, 150 }, 151 152 FloatMul { 153 lhs: Box<Expression>, 154 rhs: Box<Expression>, 155 }, 156 157 FloatDiv { 158 lhs: Box<Expression>, 159 rhs: Box<Expression>, 160 }, 161 162 StringConcat { 163 lhs: Box<Expression>, 164 rhs: Box<Expression>, 165 }, 166 167 List { 168 items: Vec<Expression>, 169 tail: Option<Box<Expression>>, 170 }, 171 172 Struct { 173 tag: Option<u32>, 174 items: Vec<Expression>, 175 }, 176 177 StructTag { 178 value: Box<Expression>, 179 }, 180 181 StructAccess { 182 value: Box<Expression>, 183 index: u64, 184 }, 185 186 Set { 187 name: Var, 188 value: Box<Expression>, 189 }, 190 191 If { 192 cond: Box<Expression>, 193 then: Box<Expression>, 194 else_: Box<Expression>, 195 }, 196 197 Call { 198 target: Box<Expression>, 199 args: Vec<Expression>, 200 }, 201}