MCPcopy Index your code
hub / github.com/Shopify/go-lua / Postfix

Method Postfix

code.go:929–957  ·  view source on GitHub ↗
(op int, e1, e2 exprDesc, line int)

Source from the content-addressed store, hash-verified

927}
928
929func (f *function) Postfix(op int, e1, e2 exprDesc, line int) exprDesc {
930 switch op {
931 case oprAnd:
932 f.assert(e1.t == noJump)
933 e2 = f.DischargeVariables(e2)
934 e2.f = f.Concatenate(e2.f, e1.f)
935 return e2
936 case oprOr:
937 f.assert(e1.f == noJump)
938 e2 = f.DischargeVariables(e2)
939 e2.t = f.Concatenate(e2.t, e1.t)
940 return e2
941 case oprConcat:
942 if e2 = f.ExpressionToValue(e2); e2.kind == kindRelocatable && f.Instruction(e2).opCode() == opConcat {
943 f.assert(e1.info == f.Instruction(e2).b()-1)
944 f.freeExpression(e1)
945 f.Instruction(e2).setB(e1.info)
946 return makeExpression(kindRelocatable, e2.info)
947 }
948 return f.encodeArithmetic(opConcat, e1, f.ExpressionToNextRegister(e2), line)
949 case oprAdd, oprSub, oprMul, oprDiv, oprMod, oprPow:
950 return f.encodeArithmetic(opCode(op-oprAdd)+opAdd, e1, e2, line)
951 case oprEq, oprLT, oprLE:
952 return f.encodeComparison(opCode(op-oprEq)+opEqual, 1, e1, e2)
953 case oprNE, oprGT, oprGE:
954 return f.encodeComparison(opCode(op-oprNE)+opEqual, 0, e1, e2)
955 }
956 panic("unreachable")
957}
958
959func (f *function) FixLine(line int) { f.f.lineInfo[len(f.f.code)-1] = int32(line) }
960

Callers 1

subExpressionMethod · 0.80

Calls 14

assertMethod · 0.95
DischargeVariablesMethod · 0.95
ConcatenateMethod · 0.95
ExpressionToValueMethod · 0.95
InstructionMethod · 0.95
freeExpressionMethod · 0.95
encodeArithmeticMethod · 0.95
encodeComparisonMethod · 0.95
makeExpressionFunction · 0.85
opCodeTypeAlias · 0.85
opCodeMethod · 0.80

Tested by

no test coverage detected