UNPKG

futurescript

Version:

A functional style, but highly readable language that compiles to JavaScript.

134 lines (115 loc) 3.71 kB
import * as $lex from "./lex.mjs"; import * as $node from "./node.mjs"; import * as $base from "./expression-base.mjs"; import * as $pattern from "./pattern.mjs"; import * as $print from "./print.mjs"; import {JsBuilder as J} from "./js-builder.mjs"; export class PlusExpression extends $base.BinaryExpression { bareCompile() { return [this.x.compile(), "+", this.y.compile()]; } } PlusExpression.sign = $lex.Plus; export class MinusExpression extends $base.BinaryExpression { bareCompile() { return [this.x.compile(), "-", this.y.compile()]; } } MinusExpression.sign = $lex.Minus; export class TimesExpression extends $base.BinaryExpression { bareCompile() { return [this.x.compile(), "*", this.y.compile()]; } } TimesExpression.sign = $lex.Times; export class OverExpression extends $base.BinaryExpression { bareCompile() { return [this.x.compile(), "/", this.y.compile()]; } } OverExpression.sign = $lex.Over; export class EqualExpression extends $base.BinaryExpression { bareCompile() { return [this.x.compile(), "===", this.y.compile()]; } } EqualExpression.sign = $lex.Equal; export class NotEqualExpression extends $base.BinaryExpression { bareCompile() { return [this.x.compile(), "!==", this.y.compile()]; } } NotEqualExpression.sign = $lex.NotEqual; export class LessThanExpression extends $base.BinaryExpression { bareCompile() { return [this.x.compile(), "<", this.y.compile()]; } } LessThanExpression.sign = $lex.LessThan; export class GreaterThanExpression extends $base.BinaryExpression { bareCompile() { return [this.x.compile(), ">", this.y.compile()]; } } GreaterThanExpression.sign = $lex.GreaterThan; export class LessThanOrEqualExpression extends $base.BinaryExpression { bareCompile() { return [this.x.compile(), "<=", this.y.compile()]; } } LessThanOrEqualExpression.sign = $lex.LessThanOrEqual; export class GreaterThanOrEqualExpression extends $base.BinaryExpression { bareCompile() { return [this.x.compile(), ">=", this.y.compile()]; } } GreaterThanOrEqualExpression.sign = $lex.GreaterThanOrEqual; export class OrExpression extends $base.BinaryExpression { bareCompile() { return [this.x.compile(), "||", this.y.compile()]; } } OrExpression.sign = $lex.Or; export class AndExpression extends $base.BinaryExpression { bareCompile() { return [this.x.compile(), "&&", this.y.compile()]; } } AndExpression.sign = $lex.And; export class NotExpression extends $base.UnaryExpression { bareCompile() { return ["!", this.x.compile()]; } } NotExpression.sign = $lex.Not; export class PositiveExpression extends $base.UnaryExpression { bareCompile() { return ["+", this.x.compile()]; } } PositiveExpression.sign = $lex.Positive; export class NegativeExpression extends $base.UnaryExpression { bareCompile() { return ["-", this.x.compile()]; } } NegativeExpression.sign = $lex.Negative; export class RemExpression extends $base.BinaryExpression { bareCompile() { return [this.x.compile(), "%", this.y.compile()]; } } RemExpression.sign = $lex.Rem; export class ModExpression extends $base.BinaryExpression { bareCompile() { this.getRoot().predefinedLib.mod = true; return ["mod_" + $node.antiConflictString + "(", this.x.compile(), ",", this.y.compile(), ")"]; } } ModExpression.sign = $lex.Mod; export class PowerExpression extends $base.BinaryExpression { bareCompile() { return ["Math.pow(", this.x.compile(), ",", this.y.compile(), ")"]; } } PowerExpression.sign = $lex.Power;