visitWith method

  1. @override
dynamic visitWith(
  1. WithStatement node
)

Implementation

@override
visitWith(WithStatement node) {
  final dynamic obj = getValueFromExpression(node.object);
  if (obj is! Map) {
    throw JSException(node.line ?? 1, 'with statement requires an object');
  }
  final dynamicContext = <String, dynamic>{};
  obj.forEach((key, value) {
    dynamicContext[key.toString()] = value;
  });
  final context = SimpleContext(dynamicContext);
  _dynamicContexts.add(context);
  try {
    final rtn = node.body.visitBy(this);
    context.getContextMap().forEach((key, value) {
      obj[key] = value;
    });
    return rtn;
  } finally {
    _dynamicContexts.removeLast();
  }
}