visitAssignment method

  1. @override
dynamic visitAssignment(
  1. Assignment node
)

Implementation

@override
dynamic visitAssignment(Assignment node) {
  final value = node.value.accept(this);
  if (node.variable is Identifier) {
    context.setVariable((node.variable as Identifier).name, value);
  } else if (node.variable is MemberAccess) {
    final memberAccess = node.variable as MemberAccess;
    final objName = (memberAccess.object as Identifier).name;

    if (context.getVariable(objName) == null) {
      context.setVariable(objName, {});
    }

    var objectVal = context(objName);
    for (var i = 0; i < memberAccess.members.length; i++) {
      final name = (memberAccess.members[i] as Identifier).name;
      if (i == memberAccess.members.length - 1) {
        objectVal[name] = value;
      } else {
        if (!(objectVal as Map).containsKey(memberAccess.members[i])) {
          objectVal[name] = {};
        }
        objectVal = objectVal[name];
      }
    }
  }
}