MCPcopy Create free account
hub / github.com/dop251/goja / evalConst

Method evalConst

compiler_expr.go:2433–2466  ·  view source on GitHub ↗
(expr compiledExpr)

Source from the content-addressed store, hash-verified

2431}
2432
2433func (c *compiler) evalConst(expr compiledExpr) (Value, *Exception) {
2434 if expr, ok := expr.(*compiledLiteral); ok {
2435 return expr.val, nil
2436 }
2437 if c.evalVM == nil {
2438 c.evalVM = New().vm
2439 }
2440 var savedPrg *Program
2441 createdPrg := false
2442 if c.evalVM.prg == nil {
2443 c.evalVM.prg = &Program{
2444 src: c.p.src,
2445 }
2446 savedPrg = c.p
2447 c.p = c.evalVM.prg
2448 createdPrg = true
2449 }
2450 savedPc := len(c.p.code)
2451 expr.emitGetter(true)
2452 c.evalVM.pc = savedPc
2453 ex := c.evalVM.runTry()
2454 if createdPrg {
2455 c.evalVM.prg = nil
2456 c.evalVM.pc = 0
2457 c.p = savedPrg
2458 } else {
2459 c.evalVM.prg.code = c.evalVM.prg.code[:savedPc]
2460 c.p.code = c.evalVM.prg.code
2461 }
2462 if ex == nil {
2463 return c.evalVM.pop(), nil
2464 }
2465 return nil, ex
2466}
2467
2468func (e *compiledUnaryExpr) constant() bool {
2469 return e.operand.constant()

Callers 12

checkConstantStringMethod · 0.95
processKeyMethod · 0.95
emitConstMethod · 0.95
compileIfStatementMethod · 0.95
constantMethod · 0.80
emitGetterMethod · 0.80
constantMethod · 0.80
emitGetterMethod · 0.80
constantMethod · 0.80
emitGetterMethod · 0.80

Calls 4

NewFunction · 0.85
runTryMethod · 0.80
popMethod · 0.80
emitGetterMethod · 0.65

Tested by

no test coverage detected