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 {
|
import {
|
||||||
BINDING_ELEMENT,
|
BINDING_ELEMENT,
|
||||||
OBJECT_PATTERN,
|
OBJECT_PATTERN,
|
||||||
OBJECT_LITERAL_EXPRESSION
|
OBJECT_LITERAL_EXPRESSION
|
||||||
} from 'traceur/src/syntax/trees/ParseTreeType';
|
} from 'traceur/src/syntax/trees/ParseTreeType';
|
||||||
|
|
||||||
import {NamedParams} from '../ast/named_params';
|
import {
|
||||||
import {ObjectPatternBindingElement} from '../ast/object_pattern_binding_element';
|
NamedParameterList,
|
||||||
|
ObjectPatternBindingElement
|
||||||
|
} from '../syntax/trees/ParseTrees';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Transforms maps into named parameters:
|
* Transforms maps into named parameters:
|
||||||
@ -22,6 +25,8 @@ import {ObjectPatternBindingElement} from '../ast/object_pattern_binding_element
|
|||||||
*/
|
*/
|
||||||
export class NamedParamsTransformer extends ParseTreeTransformer {
|
export class NamedParamsTransformer extends ParseTreeTransformer {
|
||||||
/**
|
/**
|
||||||
|
* Transform function calls.
|
||||||
|
*
|
||||||
* @param {CallExpression} tree
|
* @param {CallExpression} tree
|
||||||
* @return {ParseTree}
|
* @return {ParseTree}
|
||||||
*/
|
*/
|
||||||
@ -58,10 +63,12 @@ export class NamedParamsTransformer extends ParseTreeTransformer {
|
|||||||
_replaceLastArgWithNamedParams(tree) {
|
_replaceLastArgWithNamedParams(tree) {
|
||||||
var args = tree.args.args;
|
var args = tree.args.args;
|
||||||
var last = this._last(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
|
* @param {ObjectPattern} tree
|
||||||
* @return {ParseTree}
|
* @return {ParseTree}
|
||||||
*/
|
*/
|
||||||
|
@ -4,7 +4,9 @@ import {
|
|||||||
|
|
||||||
import {
|
import {
|
||||||
ClassFieldDeclaration,
|
ClassFieldDeclaration,
|
||||||
PropertyConstructorAssignment
|
PropertyConstructorAssignment,
|
||||||
|
NamedParameterList,
|
||||||
|
ObjectPatternBindingElement
|
||||||
} from '../syntax/trees/ParseTrees'
|
} from '../syntax/trees/ParseTrees'
|
||||||
|
|
||||||
export class ParseTreeTransformer extends TraceurParseTreeTransformer {
|
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,
|
tree.name, tree.parameterList, tree.typeAnnotation, tree.annotations, tree.body, tree.isConst,
|
||||||
initializerList);
|
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_()
|
this.writeSpace_()
|
||||||
}
|
}
|
||||||
|
|
||||||
visitNamedParamsExpression(tree) {
|
visitNamedParameterList(tree) {
|
||||||
this.writeList_(tree.propertyNameAndValues, COMMA, false);
|
this.writeList_(tree.parameterNameAndValues, COMMA, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
toString() {
|
toString() {
|
||||||
|
@ -1,2 +1,4 @@
|
|||||||
export var CLASS_FIELD_DECLARATION = 'CLASS_FIELD_DECLARATION';
|
export var CLASS_FIELD_DECLARATION = 'CLASS_FIELD_DECLARATION';
|
||||||
export var PROPERTY_CONSTRUCTOR_ASSIGNMENT = 'PROPERTY_CONSTRUCTOR_ASSIGNMENT';
|
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';
|
import * as ParseTreeType from './ParseTreeType';
|
||||||
|
|
||||||
/**
|
// Class field declaration
|
||||||
* Property declaration
|
|
||||||
*/
|
|
||||||
export class ClassFieldDeclaration extends ParseTree {
|
export class ClassFieldDeclaration extends ParseTree {
|
||||||
constructor(location, lvalue, typeAnnotation, isFinal) {
|
constructor(location, lvalue, typeAnnotation, isFinal) {
|
||||||
this.location = location;
|
this.location = location;
|
||||||
@ -30,9 +28,7 @@ export class ClassFieldDeclaration extends ParseTree {
|
|||||||
|
|
||||||
var CLASS_FIELD_DECLARATION = ParseTreeType.CLASS_FIELD_DECLARATION;
|
var CLASS_FIELD_DECLARATION = ParseTreeType.CLASS_FIELD_DECLARATION;
|
||||||
|
|
||||||
/**
|
// Class constructor
|
||||||
* Class constructor
|
|
||||||
*/
|
|
||||||
export class PropertyConstructorAssignment extends PropertyMethodAssignment {
|
export class PropertyConstructorAssignment extends PropertyMethodAssignment {
|
||||||
/**
|
/**
|
||||||
* @param {SourceRange} location
|
* @param {SourceRange} location
|
||||||
@ -78,3 +74,73 @@ export class PropertyConstructorAssignment extends PropertyMethodAssignment {
|
|||||||
|
|
||||||
var PROPERTY_CONSTRUCTOR_ASSIGNMENT = ParseTreeType.PROPERTY_CONSTRUCTOR_ASSIGNMENT;
|
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…
x
Reference in New Issue
Block a user