in lib/generator.js [1858:1931]
visitAssign(ast, level, env) {
let leftName;
leftName = ast.left.id && _name(ast.left.id);
if (leftName === '__response') {
leftName = RESPONSE;
} else if (leftName === '__request') {
leftName = REQUEST;
} else {
leftName = _avoidReserveName(leftName);
}
if (ast.left.type === 'id') {
this.emit(`${leftName}`, level);
} else if (ast.left.type === 'property_assign' || ast.left.type === 'property') {
this.emit(`${leftName}`, level);
let isMapNext = ast.left.id.inferred && ast.left.id.inferred.type === 'map';
for (let i = 0; i < ast.left.propertyPath.length; i++) {
if (!isMapNext) {
this.emit(`.${_upperFirst(_name(ast.left.propertyPath[i]))}`);
} else {
this.emit(`["${_name(ast.left.propertyPath[i])}"]`);
}
isMapNext = ast.left.propertyPathTypes[i].type === 'map';
}
} else if (ast.left.type === 'virtualVariable') { // vid
this.emit(`this._${_lowerFirst(_name(ast.left.vid).substr(1))}`, level);
} else if (ast.left.type === 'variable') {
this.emit(`${leftName}`, level);
} else if (ast.left.type === 'array_access') {
this.visitArrayAccess(ast.left, level, env, true);
} else if (ast.left.type === 'map_access') {
let expr;
if (ast.left.id.tag === DSL.Tag.Tag.VID) {
expr = `this.${_vid(ast.left.id)}`;
} else {
expr = `${_name(ast.left.id)}`;
}
if (ast.left.propertyPath && ast.left.propertyPath.length) {
var current = ast.left.id.inferred;
for (let i = 0; i < ast.left.propertyPath.length; i++) {
var name = _name(ast.left.propertyPath[i]);
if (current.type === 'model') {
expr += `.${_upperFirst(name)}`;
} else {
expr += `["${name}"]`;
}
current = ast.left.propertyPathTypes[i];
}
}
this.emit(`${expr}[`, level);
this.visitExpr(ast.left.accessKey, level);
this.emit(`]`);
} else {
throw new Error('unimpelemented');
}
this.emit(' = ');
if (ast.expr.needToReadable) {
this.emit('StreamUtils.BytesReadable(');
this.used.push('Darabonba.Utils');
}
if (ast.expr.type === 'object') {
// paser give error inferred
let expr = ast.expr;
expr.inferred = ast.left.inferred;
this.visitExpr(expr, level, env);
} else {
this.visitExpr(ast.expr, level, env);
}
if (ast.expr.needToReadable) {
this.emit(')');
}
this.emit(';\n');
}