@Override public String toString() { return String.valueOf(this.lhsExpr) + " " + this.opKind.value() + " " + this.targetType; } }
private InstructionKind getBinaryInstructionKind(OperatorKind opKind) { switch (opKind) { case ADD: return InstructionKind.ADD; case SUB: return InstructionKind.SUB; case MUL: return InstructionKind.MUL; case DIV: return InstructionKind.DIV; case MOD: return InstructionKind.MOD; case EQUAL: return InstructionKind.EQUAL; case NOT_EQUAL: return InstructionKind.NOT_EQUAL; case GREATER_THAN: return InstructionKind.GREATER_THAN; case GREATER_EQUAL: return InstructionKind.GREATER_EQUAL; case LESS_THAN: return InstructionKind.LESS_THAN; case LESS_EQUAL: return InstructionKind.LESS_EQUAL; default: throw new IllegalStateException("unsupported binary operation: " + opKind.value()); } } }
private void defineUnaryOperator(OperatorKind kind, BType type, BType retType, int opcode) { List<BType> paramTypes = Lists.of(type); defineOperator(names.fromString(kind.value()), paramTypes, retType, opcode); }
public BSymbol resolveUnaryOperator(DiagnosticPos pos, OperatorKind opKind, BType type) { return resolveOperator(names.fromString(opKind.value()), Lists.of(type)); }
private void defineBinaryOperator(OperatorKind kind, BType lhsType, BType rhsType, BType retType, int opcode) { List<BType> paramTypes = Lists.of(lhsType, rhsType); defineOperator(names.fromString(kind.value()), paramTypes, retType, opcode); }
static BLangIsAssignableExpr createIsAssignableExpr(DiagnosticPos pos, BLangExpression lhsExpr, BType targetType, BType type, Names names) { final BLangIsAssignableExpr assignableExpr = new BLangIsAssignableExpr(); assignableExpr.pos = pos; assignableExpr.lhsExpr = lhsExpr; assignableExpr.targetType = targetType; assignableExpr.type = type; assignableExpr.opSymbol = new BOperatorSymbol(names.fromString(assignableExpr.opKind.value()), null, targetType, null, InstructionCodes.IS_ASSIGNABLE); return assignableExpr; }
public BSymbol resolveBinaryOperator(OperatorKind opKind, BType lhsType, BType rhsType) { BSymbol bSymbol = resolveOperator(names.fromString(opKind.value()), Lists.of(lhsType, rhsType)); if (bSymbol == symTable.notFoundSymbol) { bSymbol = getBinaryOpForNullChecks(opKind, lhsType, rhsType); } return bSymbol; }
BSymbol createEqualityOperator(OperatorKind opKind, BType lhsType, BType rhsType) { int opcode; if (opKind == OperatorKind.REF_EQUAL) { opcode = InstructionCodes.REF_EQ; } else if (opKind == OperatorKind.REF_NOT_EQUAL) { opcode = InstructionCodes.REF_NEQ; } else if (opKind == OperatorKind.EQUAL) { opcode = InstructionCodes.REQ; } else { // OperatorKind.NOT_EQUAL opcode = InstructionCodes.RNE; } List<BType> paramTypes = Lists.of(lhsType, rhsType); BType retType = symTable.booleanType; BInvokableType opType = new BInvokableType(paramTypes, retType, null); return new BOperatorSymbol(names.fromString(opKind.value()), null, opType, null, opcode); }
private BSymbol getBinaryOpForNullChecks(OperatorKind opKind, BType lhsType, BType rhsType) { if (opKind != OperatorKind.EQUAL && opKind != OperatorKind.NOT_EQUAL) { return symTable.notFoundSymbol; } int opcode = (opKind == OperatorKind.EQUAL) ? InstructionCodes.REQ_NULL : InstructionCodes.RNE_NULL; if (lhsType.tag == TypeTags.NIL && (rhsType.tag == TypeTags.OBJECT || rhsType.tag == TypeTags.RECORD || rhsType.tag == TypeTags.INVOKABLE)) { BInvokableType opType = new BInvokableType(Lists.of(lhsType, rhsType), symTable.booleanType, null); return new BOperatorSymbol(names.fromString(opKind.value()), null, opType, null, opcode); } if ((lhsType.tag == TypeTags.OBJECT || lhsType.tag == TypeTags.RECORD || lhsType.tag == TypeTags.INVOKABLE) && rhsType.tag == TypeTags.NIL) { BInvokableType opType = new BInvokableType(Lists.of(lhsType, rhsType), symTable.booleanType, null); return new BOperatorSymbol(names.fromString(opKind.value()), null, opType, null, opcode); } return symTable.notFoundSymbol; }
BOperatorSymbol operatorSymbol = new BOperatorSymbol(names.fromString(OperatorKind.NOT.value()), symTable.rootPkgSymbol.pkgID, type, symTable.rootPkgSymbol, InstructionCodes.BNOT); BLangUnaryExpr unaryExpr = ASTBuilderUtil.createUnaryExpr(resourceNode.pos, filterRequestInvocation,