refactor(named parameters): mimic original traceur architecture
This commit is contained in:
parent
5527a1b1a4
commit
5818c3bf28
|
@ -1,16 +0,0 @@
|
|||
import {ParseTree} from 'traceur/src/syntax/trees/ParseTree';
|
||||
|
||||
export class NamedParams extends ParseTree {
|
||||
constructor(location, propertyNameAndValues) {
|
||||
this.location = location;
|
||||
this.propertyNameAndValues = propertyNameAndValues;
|
||||
}
|
||||
|
||||
visit(visitor) {
|
||||
visitor.visitNamedParamsExpression(this);
|
||||
}
|
||||
|
||||
transform(transformer) {
|
||||
return this;
|
||||
}
|
||||
}
|
|
@ -1,7 +0,0 @@
|
|||
import {BindingElement} from 'traceur/src/syntax/trees/ParseTrees';
|
||||
|
||||
export class ObjectPatternBindingElement extends BindingElement {
|
||||
visit(visitor) {
|
||||
visitor.visitObjectPatternBindingElement(this);
|
||||
}
|
||||
}
|
|
@ -1,12 +1,15 @@
|
|||
import {ParseTreeTransformer} from 'traceur/src/codegeneration/ParseTreeTransformer';
|
||||
import {ParseTreeTransformer} from './ParseTreeTransformer';
|
||||
|
||||
import {
|
||||
BINDING_ELEMENT,
|
||||
OBJECT_PATTERN,
|
||||
OBJECT_LITERAL_EXPRESSION
|
||||
} from 'traceur/src/syntax/trees/ParseTreeType';
|
||||
|
||||
import {NamedParams} from '../ast/named_params';
|
||||
import {ObjectPatternBindingElement} from '../ast/object_pattern_binding_element';
|
||||
import {
|
||||
NamedParameterList,
|
||||
ObjectPatternBindingElement
|
||||
} from '../syntax/trees/ParseTrees';
|
||||
|
||||
/**
|
||||
* Transforms maps into named parameters:
|
||||
|
@ -22,6 +25,8 @@ import {ObjectPatternBindingElement} from '../ast/object_pattern_binding_element
|
|||
*/
|
||||
export class NamedParamsTransformer extends ParseTreeTransformer {
|
||||
/**
|
||||
* Transform function calls.
|
||||
*
|
||||
* @param {CallExpression} tree
|
||||
* @return {ParseTree}
|
||||
*/
|
||||
|
@ -58,10 +63,12 @@ export class NamedParamsTransformer extends ParseTreeTransformer {
|
|||
_replaceLastArgWithNamedParams(tree) {
|
||||
var args = tree.args.args;
|
||||
var last = this._last(args);
|
||||
args[args.length - 1] = new NamedParams(last.location, last.propertyNameAndValues);
|
||||
args[args.length - 1] = new NamedParameterList(last.location, last.propertyNameAndValues);
|
||||
}
|
||||
|
||||
/**
|
||||
* Transform function declaration.
|
||||
*
|
||||
* @param {ObjectPattern} tree
|
||||
* @return {ParseTree}
|
||||
*/
|
||||
|
|
|
@ -4,7 +4,9 @@ import {
|
|||
|
||||
import {
|
||||
ClassFieldDeclaration,
|
||||
PropertyConstructorAssignment
|
||||
PropertyConstructorAssignment,
|
||||
NamedParameterList,
|
||||
ObjectPatternBindingElement
|
||||
} from '../syntax/trees/ParseTrees'
|
||||
|
||||
export class ParseTreeTransformer extends TraceurParseTreeTransformer {
|
||||
|
@ -28,4 +30,21 @@ export class ParseTreeTransformer extends TraceurParseTreeTransformer {
|
|||
tree.name, tree.parameterList, tree.typeAnnotation, tree.annotations, tree.body, tree.isConst,
|
||||
initializerList);
|
||||
}
|
||||
|
||||
transformNamedParameterList(tree) {
|
||||
var nvPairs = this.transformList(tree.parameterNameAndValues);
|
||||
if (nvPairs === tree.parameterNameAndValues) {
|
||||
return tree;
|
||||
}
|
||||
return new NamedParameterList(tree.location, nvPairs);
|
||||
}
|
||||
|
||||
transformObjectPatternBindingElement(tree) {
|
||||
var binding = this.transformAny(tree.binding);
|
||||
var initializer = this.transformAny(tree.initializer);
|
||||
if (binding === tree.binding && initializer === tree.initializer) {
|
||||
return tree;
|
||||
}
|
||||
return new ObjectPatternBindingElement(tree.location, binding, initializer);
|
||||
}
|
||||
}
|
|
@ -323,8 +323,8 @@ export class DartParseTreeWriter extends JavaScriptParseTreeWriter {
|
|||
this.writeSpace_()
|
||||
}
|
||||
|
||||
visitNamedParamsExpression(tree) {
|
||||
this.writeList_(tree.propertyNameAndValues, COMMA, false);
|
||||
visitNamedParameterList(tree) {
|
||||
this.writeList_(tree.parameterNameAndValues, COMMA, false);
|
||||
}
|
||||
|
||||
toString() {
|
||||
|
|
|
@ -1,2 +1,4 @@
|
|||
export var CLASS_FIELD_DECLARATION = 'CLASS_FIELD_DECLARATION';
|
||||
export var PROPERTY_CONSTRUCTOR_ASSIGNMENT = 'PROPERTY_CONSTRUCTOR_ASSIGNMENT';
|
||||
export var NAMED_PARAMETER_LIST = 'NAMED_PARAMETER_LIST';
|
||||
export var OBJECT_PATTERN_BINDING_ELEMENT = 'OBJECT_PATTERN_BINDING_ELEMENT';
|
||||
|
|
|
@ -4,9 +4,7 @@ import {PropertyMethodAssignment} from 'traceur/src/syntax/trees/ParseTrees';
|
|||
|
||||
import * as ParseTreeType from './ParseTreeType';
|
||||
|
||||
/**
|
||||
* Property declaration
|
||||
*/
|
||||
// Class field declaration
|
||||
export class ClassFieldDeclaration extends ParseTree {
|
||||
constructor(location, lvalue, typeAnnotation, isFinal) {
|
||||
this.location = location;
|
||||
|
@ -30,9 +28,7 @@ export class ClassFieldDeclaration extends ParseTree {
|
|||
|
||||
var CLASS_FIELD_DECLARATION = ParseTreeType.CLASS_FIELD_DECLARATION;
|
||||
|
||||
/**
|
||||
* Class constructor
|
||||
*/
|
||||
// Class constructor
|
||||
export class PropertyConstructorAssignment extends PropertyMethodAssignment {
|
||||
/**
|
||||
* @param {SourceRange} location
|
||||
|
@ -78,3 +74,73 @@ export class PropertyConstructorAssignment extends PropertyMethodAssignment {
|
|||
|
||||
var PROPERTY_CONSTRUCTOR_ASSIGNMENT = ParseTreeType.PROPERTY_CONSTRUCTOR_ASSIGNMENT;
|
||||
|
||||
// Named parameters
|
||||
export class NamedParameterList extends ParseTree {
|
||||
/**
|
||||
* @param {SourceRange} location
|
||||
* @param {Array.<ParseTree>} parameterNameAndValues
|
||||
*/
|
||||
constructor(location, parameterNameAndValues) {
|
||||
this.location = location;
|
||||
this.parameterNameAndValues = parameterNameAndValues;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {ParseTreeTransformer} transformer
|
||||
*/
|
||||
transform(transformer) {
|
||||
return transformer.transformNamedParameterList(this);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {ParseTreeVisitor} visitor
|
||||
*/
|
||||
visit(visitor) {
|
||||
visitor.visitNamedParameterList(this);
|
||||
}
|
||||
|
||||
/**
|
||||
* @type {ParseTreeType}
|
||||
*/
|
||||
get type() {
|
||||
return NAMED_PARAMETER_LIST;
|
||||
}
|
||||
}
|
||||
|
||||
var NAMED_PARAMETER_LIST = ParseTreeType.NAMED_PARAMETER_LIST;
|
||||
|
||||
// Object pattern binding element
|
||||
export class ObjectPatternBindingElement extends ParseTree {
|
||||
/**
|
||||
* @param {SourceRange} location
|
||||
* @param {BindingIdentifier|ObjectPattern|ArrayPattern} binding
|
||||
* @param {ParseTree} initializer
|
||||
*/
|
||||
constructor(location, binding, initializer) {
|
||||
this.location = location;
|
||||
this.binding = binding;
|
||||
this.initializer = initializer;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {ParseTreeTransformer} transformer
|
||||
*/
|
||||
transform(transformer) {
|
||||
return transformer.transformObjectPatternBindingElement(this);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {ParseTreeVisitor} visitor
|
||||
*/
|
||||
visit(visitor) {
|
||||
visitor.visitObjectPatternBindingElement(this);
|
||||
}
|
||||
|
||||
/**
|
||||
* @type {ParseTreeType}
|
||||
*/
|
||||
get type() {
|
||||
return OBJECT_PATTERN_BINDING_ELEMENT;
|
||||
}
|
||||
}
|
||||
var OBJECT_PATTERN_BINDING_ELEMENT = ParseTreeType.OBJECT_PATTERN_BINDING_ELEMENT;
|
||||
|
|
Loading…
Reference in New Issue