// Compile with: // clang++ --target=wasm32-wasi fraction-norm.cc -o fraction-norm.wasm -g \ // -O0 -fdebug-prefix-map=$PWD=. struct Fraction { long numerator; long denominator; }; inline long abs(long x) { return x >= 0 ? x : -x; } extern "C" void norm(Fraction &n) { long a = abs(n.numerator), b = abs(n.denominator); if (a == 0 || b == 0) return; do { a %= b; if (a == 0) break; b %= a; } while (b > 0); long gcd = a + b; if (n.denominator > 0) { n.numerator /= gcd; n.denominator /= gcd; } else { n.numerator /= -gcd; n.denominator /= -gcd; } } int main() { Fraction c = {6, 27}; norm(c); return 0; }