diff --git a/packages/syntax/src/parser.js b/packages/syntax/src/parser.js index b1f41a2..c4bbb83 100644 --- a/packages/syntax/src/parser.js +++ b/packages/syntax/src/parser.js @@ -145,8 +145,7 @@ export default class SyndicateParser extends _original_Parser { node.formals = node.params; delete node.params; // eww if (this.eat(tt.eq)) { - if (!this.match(tt.string)) { this.unexpected(null, tt.string); } - node.wireName = this.parseLiteral(this.state.value, "StringLiteral"); + node.wireName = this.parseExpression(); } this.semicolon(); return this.finishNode(node, "SyndicateTypeDefinition"); diff --git a/packages/syntax/src/plugin.js b/packages/syntax/src/plugin.js index a59b8cc..ceb7085 100644 --- a/packages/syntax/src/plugin.js +++ b/packages/syntax/src/plugin.js @@ -450,10 +450,11 @@ export default declare((api, options) => { SyndicateTypeDefinition(path, state) { const { node } = path; - path.replaceWith(template(`const ID = RECORD.makeConstructor(WIRE, FORMALS);`)({ + path.replaceWith(template(`const ID = RECORD.makeBasicConstructor(WIRE, FORMALS);`)({ ID: node.id, RECORD: state.RecordID, - WIRE: node.wireName || t.stringLiteral(node.id.name), + WIRE: node.wireName || + template.expression(`Symbol.for(N)`)({N: t.stringLiteral(node.id.name)}), FORMALS: t.arrayExpression(node.formals.map((f) => t.stringLiteral(f.name))), })); }, diff --git a/packages/syntax/src/types.js b/packages/syntax/src/types.js index 488d6a4..aa2180f 100644 --- a/packages/syntax/src/types.js +++ b/packages/syntax/src/types.js @@ -153,7 +153,7 @@ defineType("SyndicateTypeDefinition", { ), }, wireName: { - validate: assertNodeType("StringLiteral"), + validate: assertNodeType("Expression"), optional: true, }, }