@glimmer/compiler
Version:
70 lines (58 loc) • 8.41 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.hasBlockKeyword = hasBlockKeyword;
var _syntax = require("@glimmer/syntax");
var _result = require("../../../../shared/result");
var mir = _interopRequireWildcard(require("../../../2-encoding/mir"));
function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
function assertHasBlockKeyword(type) {
return node => {
let call = node.type === 'AppendContent' ? node.value : node;
let named = call.type === 'Call' ? call.args.named : null;
let positionals = call.type === 'Call' ? call.args.positional : null;
if (named && !named.isEmpty()) {
return (0, _result.Err)((0, _syntax.generateSyntaxError)(`(${type}) does not take any named arguments`, call.loc));
}
if (!positionals || positionals.isEmpty()) {
return (0, _result.Ok)(_syntax.SourceSlice.synthetic('default'));
} else if (positionals.exprs.length === 1) {
let positional = positionals.exprs[0];
if (_syntax.ASTv2.isLiteral(positional, 'string')) {
return (0, _result.Ok)(positional.toSlice());
} else {
return (0, _result.Err)((0, _syntax.generateSyntaxError)(`(${type}) can only receive a string literal as its first argument`, call.loc));
}
} else {
return (0, _result.Err)((0, _syntax.generateSyntaxError)(`(${type}) only takes a single positional argument`, call.loc));
}
};
}
function translateHasBlockKeyword(type) {
return ({
node,
state: {
scope
}
}, target) => {
let block = type === 'has-block' ? new mir.HasBlock({
loc: node.loc,
target,
symbol: scope.allocateBlock(target.chars)
}) : new mir.HasBlockParams({
loc: node.loc,
target,
symbol: scope.allocateBlock(target.chars)
});
return (0, _result.Ok)(block);
};
}
function hasBlockKeyword(type) {
return {
assert: assertHasBlockKeyword(type),
translate: translateHasBlockKeyword(type)
};
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL2NvbXBpbGVyL2xpYi9wYXNzZXMvMS1ub3JtYWxpemF0aW9uL2tleXdvcmRzL3V0aWxzL2hhcy1ibG9jay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBRUE7O0FBQ0E7Ozs7OztBQUlBLFNBQUEscUJBQUEsQ0FBQSxJQUFBLEVBQTJDO0FBQ3pDLFNBQVEsSUFBRCxJQUFrRDtBQUN2RCxRQUFJLElBQUksR0FBRyxJQUFJLENBQUosSUFBQSxLQUFBLGVBQUEsR0FBZ0MsSUFBSSxDQUFwQyxLQUFBLEdBQVgsSUFBQTtBQUVBLFFBQUksS0FBSyxHQUFHLElBQUksQ0FBSixJQUFBLEtBQUEsTUFBQSxHQUF1QixJQUFJLENBQUosSUFBQSxDQUF2QixLQUFBLEdBQVosSUFBQTtBQUNBLFFBQUksV0FBVyxHQUFHLElBQUksQ0FBSixJQUFBLEtBQUEsTUFBQSxHQUF1QixJQUFJLENBQUosSUFBQSxDQUF2QixVQUFBLEdBQWxCLElBQUE7O0FBRUEsUUFBSSxLQUFLLElBQUksQ0FBQyxLQUFLLENBQW5CLE9BQWMsRUFBZCxFQUErQjtBQUM3QixhQUFPLGlCQUFJLGlDQUFvQixJQUFJLElBQUwscUNBQW5CLEVBQW1FLElBQUksQ0FBbEYsR0FBVyxDQUFKLENBQVA7QUFDRDs7QUFFRCxRQUFJLENBQUEsV0FBQSxJQUFnQixXQUFXLENBQS9CLE9BQW9CLEVBQXBCLEVBQTJDO0FBQ3pDLGFBQU8sZ0JBQUcsb0JBQUEsU0FBQSxDQUFWLFNBQVUsQ0FBSCxDQUFQO0FBREYsS0FBQSxNQUVPLElBQUksV0FBVyxDQUFYLEtBQUEsQ0FBQSxNQUFBLEtBQUosQ0FBQSxFQUFvQztBQUN6QyxVQUFJLFVBQVUsR0FBRyxXQUFXLENBQVgsS0FBQSxDQUFqQixDQUFpQixDQUFqQjs7QUFDQSxVQUFJLGNBQUEsU0FBQSxDQUFBLFVBQUEsRUFBSixRQUFJLENBQUosRUFBMkM7QUFDekMsZUFBTyxnQkFBRyxVQUFVLENBQXBCLE9BQVUsRUFBSCxDQUFQO0FBREYsT0FBQSxNQUVPO0FBQ0wsZUFBTyxpQkFDTCxpQ0FDRSxJQUFJLElBRGEsMkRBQW5CLEVBRUUsSUFBSSxDQUhSLEdBQ0UsQ0FESyxDQUFQO0FBTUQ7QUFYSSxLQUFBLE1BWUE7QUFDTCxhQUFPLGlCQUNMLGlDQUFvQixJQUFJLElBQUwsMkNBQW5CLEVBQXlFLElBQUksQ0FEL0UsR0FDRSxDQURLLENBQVA7QUFHRDtBQTVCSCxHQUFBO0FBOEJEOztBQUVELFNBQUEsd0JBQUEsQ0FBQSxJQUFBLEVBQThDO0FBQzVDLFNBQU8sQ0FDTDtBQUFBLElBQUEsSUFBQTtBQUFRLElBQUEsS0FBSyxFQUFFO0FBQUUsTUFBQTtBQUFGO0FBQWYsR0FESyxFQUFBLE1BQUEsS0FHd0M7QUFDN0MsUUFBSSxLQUFLLEdBQ1AsSUFBSSxLQUFKLFdBQUEsR0FDSSxJQUFJLEdBQUcsQ0FBUCxRQUFBLENBQWlCO0FBQUUsTUFBQSxHQUFHLEVBQUUsSUFBSSxDQUFYLEdBQUE7QUFBQSxNQUFBLE1BQUE7QUFBeUIsTUFBQSxNQUFNLEVBQUUsS0FBSyxDQUFMLGFBQUEsQ0FBb0IsTUFBTSxDQUExQixLQUFBO0FBQWpDLEtBQWpCLENBREosR0FFSSxJQUFJLEdBQUcsQ0FBUCxjQUFBLENBQXVCO0FBQ3JCLE1BQUEsR0FBRyxFQUFFLElBQUksQ0FEWSxHQUFBO0FBQUEsTUFBQSxNQUFBO0FBR3JCLE1BQUEsTUFBTSxFQUFFLEtBQUssQ0FBTCxhQUFBLENBQW9CLE1BQU0sQ0FBMUIsS0FBQTtBQUhhLEtBQXZCLENBSE47QUFTQSxXQUFPLGdCQUFQLEtBQU8sQ0FBUDtBQWJGLEdBQUE7QUFlRDs7QUFFSyxTQUFBLGVBQUEsQ0FBQSxJQUFBLEVBQ1E7QUFNWixTQUFPO0FBQ0wsSUFBQSxNQUFNLEVBQUUscUJBQXFCLENBRHhCLElBQ3dCLENBRHhCO0FBRUwsSUFBQSxTQUFTLEVBQUUsd0JBQXdCLENBQUEsSUFBQTtBQUY5QixHQUFQO0FBSUQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBU1R2MiwgZ2VuZXJhdGVTeW50YXhFcnJvciwgU291cmNlU2xpY2UgfSBmcm9tICdAZ2xpbW1lci9zeW50YXgnO1xuXG5pbXBvcnQgeyBFcnIsIE9rLCBSZXN1bHQgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQvcmVzdWx0JztcbmltcG9ydCAqIGFzIG1pciBmcm9tICcuLi8uLi8uLi8yLWVuY29kaW5nL21pcic7XG5pbXBvcnQgeyBOb3JtYWxpemF0aW9uU3RhdGUgfSBmcm9tICcuLi8uLi9jb250ZXh0JztcbmltcG9ydCB7IEdlbmVyaWNLZXl3b3JkTm9kZSwgS2V5d29yZERlbGVnYXRlIH0gZnJvbSAnLi4vaW1wbCc7XG5cbmZ1bmN0aW9uIGFzc2VydEhhc0Jsb2NrS2V5d29yZCh0eXBlOiBzdHJpbmcpIHtcbiAgcmV0dXJuIChub2RlOiBHZW5lcmljS2V5d29yZE5vZGUpOiBSZXN1bHQ8U291cmNlU2xpY2U+ID0+IHtcbiAgICBsZXQgY2FsbCA9IG5vZGUudHlwZSA9PT0gJ0FwcGVuZENvbnRlbnQnID8gbm9kZS52YWx1ZSA6IG5vZGU7XG5cbiAgICBsZXQgbmFtZWQgPSBjYWxsLnR5cGUgPT09ICdDYWxsJyA/IGNhbGwuYXJncy5uYW1lZCA6IG51bGw7XG4gICAgbGV0IHBvc2l0aW9uYWxzID0gY2FsbC50eXBlID09PSAnQ2FsbCcgPyBjYWxsLmFyZ3MucG9zaXRpb25hbCA6IG51bGw7XG5cbiAgICBpZiAobmFtZWQgJiYgIW5hbWVkLmlzRW1wdHkoKSkge1xuICAgICAgcmV0dXJuIEVycihnZW5lcmF0ZVN5bnRheEVycm9yKGAoJHt0eXBlfSkgZG9lcyBub3QgdGFrZSBhbnkgbmFtZWQgYXJndW1lbnRzYCwgY2FsbC5sb2MpKTtcbiAgICB9XG5cbiAgICBpZiAoIXBvc2l0aW9uYWxzIHx8IHBvc2l0aW9uYWxzLmlzRW1wdHkoKSkge1xuICAgICAgcmV0dXJuIE9rKFNvdXJjZVNsaWNlLnN5bnRoZXRpYygnZGVmYXVsdCcpKTtcbiAgICB9IGVsc2UgaWYgKHBvc2l0aW9uYWxzLmV4cHJzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgbGV0IHBvc2l0aW9uYWwgPSBwb3NpdGlvbmFscy5leHByc1swXTtcbiAgICAgIGlmIChBU1R2Mi5pc0xpdGVyYWwocG9zaXRpb25hbCwgJ3N0cmluZycpKSB7XG4gICAgICAgIHJldHVybiBPayhwb3NpdGlvbmFsLnRvU2xpY2UoKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gRXJyKFxuICAgICAgICAgIGdlbmVyYXRlU3ludGF4RXJyb3IoXG4gICAgICAgICAgICBgKCR7dHlwZX0pIGNhbiBvbmx5IHJlY2VpdmUgYSBzdHJpbmcgbGl0ZXJhbCBhcyBpdHMgZmlyc3QgYXJndW1lbnRgLFxuICAgICAgICAgICAgY2FsbC5sb2NcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBFcnIoXG4gICAgICAgIGdlbmVyYXRlU3ludGF4RXJyb3IoYCgke3R5cGV9KSBvbmx5IHRha2VzIGEgc2luZ2xlIHBvc2l0aW9uYWwgYXJndW1lbnRgLCBjYWxsLmxvYylcbiAgICAgICk7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiB0cmFuc2xhdGVIYXNCbG9ja0tleXdvcmQodHlwZTogc3RyaW5nKSB7XG4gIHJldHVybiAoXG4gICAgeyBub2RlLCBzdGF0ZTogeyBzY29wZSB9IH06IHsgbm9kZTogQVNUdjIuQ2FsbEV4cHJlc3Npb247IHN0YXRlOiBOb3JtYWxpemF0aW9uU3RhdGUgfSxcbiAgICB0YXJnZXQ6IFNvdXJjZVNsaWNlXG4gICk6IFJlc3VsdDxtaXIuSGFzQmxvY2sgfCBtaXIuSGFzQmxvY2tQYXJhbXM+ID0+IHtcbiAgICBsZXQgYmxvY2sgPVxuICAgICAgdHlwZSA9PT0gJ2hhcy1ibG9jaydcbiAgICAgICAgPyBuZXcgbWlyLkhhc0Jsb2NrKHsgbG9jOiBub2RlLmxvYywgdGFyZ2V0LCBzeW1ib2w6IHNjb3BlLmFsbG9jYXRlQmxvY2sodGFyZ2V0LmNoYXJzKSB9KVxuICAgICAgICA6IG5ldyBtaXIuSGFzQmxvY2tQYXJhbXMoe1xuICAgICAgICAgICAgbG9jOiBub2RlLmxvYyxcbiAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICAgIHN5bWJvbDogc2NvcGUuYWxsb2NhdGVCbG9jayh0YXJnZXQuY2hhcnMpLFxuICAgICAgICAgIH0pO1xuXG4gICAgcmV0dXJuIE9rKGJsb2NrKTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc0Jsb2NrS2V5d29yZChcbiAgdHlwZTogc3RyaW5nXG4pOiBLZXl3b3JkRGVsZWdhdGU8XG4gIEFTVHYyLkNhbGxFeHByZXNzaW9uIHwgQVNUdjIuQXBwZW5kQ29udGVudCxcbiAgU291cmNlU2xpY2UsXG4gIG1pci5IYXNCbG9jayB8IG1pci5IYXNCbG9ja1BhcmFtc1xuPiB7XG4gIHJldHVybiB7XG4gICAgYXNzZXJ0OiBhc3NlcnRIYXNCbG9ja0tleXdvcmQodHlwZSksXG4gICAgdHJhbnNsYXRlOiB0cmFuc2xhdGVIYXNCbG9ja0tleXdvcmQodHlwZSksXG4gIH07XG59XG4iXSwic291cmNlUm9vdCI6IiJ9