public static Symbol AddOperator(this SimpleScope scope, PsiOperator op, FunctionType type) { var sym = new Symbol(type, op) { Initializer = new Intermediate.FunctionLiteral(new BuiltinFunction(type)), IsConst = true, IsExported = false, Kind = SymbolKind.Builtin }; scope.Add(sym); return(sym); }
public Signature(ITypeSignature type, PsiOperator op) : this(type, op.ToSymbolName()) { }
/// <summary> /// Converts the operator into its syntactical form (Plus will be +). /// </summary> public static string ToSyntax(this PsiOperator op) { switch(op) { case PsiOperator.Dot: return "."; case PsiOperator.Meta: return "'"; case PsiOperator.Invert: return "~"; case PsiOperator.New: return "new"; case PsiOperator.ArithmeticShiftRight: return ">>>"; case PsiOperator.ShiftLeft: return "<<"; case PsiOperator.ShiftRight: return ">>"; case PsiOperator.Plus: return "+"; case PsiOperator.Minus: return "-"; case PsiOperator.Concat: return "--"; case PsiOperator.Multiply: return "*"; case PsiOperator.Divide: return "/"; case PsiOperator.Modulo: return "%"; case PsiOperator.Exponentiate: return "**"; case PsiOperator.And: return "&"; case PsiOperator.Or: return "|"; case PsiOperator.Xor: return "^"; case PsiOperator.Forward: return "->"; case PsiOperator.Backward: return "<-"; case PsiOperator.CopyAssign: return "="; case PsiOperator.SemanticAssign: return ":="; case PsiOperator.WritebackArithmeticShiftRight: return ">>>="; case PsiOperator.WritebackShiftLeft: return "<<="; case PsiOperator.WritebackShiftRight: return ">>="; case PsiOperator.WritebackPlus: return "+="; case PsiOperator.WritebackMinus: return "-="; case PsiOperator.WritebackConcat: return "--="; case PsiOperator.WritebackMultiply: return "*="; case PsiOperator.WritebackDivide: return "/="; case PsiOperator.WritebackModulo: return "%="; case PsiOperator.WritebackExponentiate: return "**="; case PsiOperator.WritebackAnd: return "&="; case PsiOperator.WritebackOr: return "|="; case PsiOperator.WritebackXor: return "^="; case PsiOperator.LessOrEqual: return "<="; case PsiOperator.MoreOrEqual: return ">="; case PsiOperator.Equals: return "=="; case PsiOperator.NotEquals: return "!="; case PsiOperator.Less: return "<"; case PsiOperator.More: return ">"; default: return null; } }
/// <summary> /// Converts the operator into its symbol form (Plus will be operator '+'). /// </summary> public static string ToSymbolName(this PsiOperator op) => "operator '" + ToSyntax(op) + "'";
public Symbol(Type type, PsiOperator id) : this(type, id.ToSymbolName()) { }
public BinaryOperation(PsiOperator @operator, Expression lhs, Expression rhs) { this.Operator = @operator; this.LeftHandSide = lhs.NotNull(); this.RightHandSide = rhs.NotNull(); }
public UnaryOperation(PsiOperator @operator, Expression operand) { this.Operator = @operator; this.Operand = operand.NotNull(); }