UNPKG

nisp

Version:

A language that for easily build cross-language language

40 lines (39 loc) 1.34 kB
"use strict"; exports.__esModule = true; var core_1 = require("../core"); exports["default"] = core_1.macro(function (ctx) { var sandbox = ctx.sandbox, ast = ctx.ast, env = ctx.env, index = ctx.index; ast = ast.slice(1); if (!ast.length) { return; } var defaultNode; if (ast[ast.length - 1][0] === 'default') { defaultNode = ast[ast.length - 1]; ast = ast.slice(0, -1); } if (!ast.length) { return core_1["default"](defaultNode[1], sandbox, env, ctx, index); } var expressionValue; var hasExpression = false; if (ast[0][0] !== 'case') { expressionValue = core_1["default"](ast[0], sandbox, env, ctx, index); hasExpression = true; ast = ast.slice(1); } for (var _i = 0, ast_1 = ast; _i < ast_1.length; _i++) { var node = ast_1[_i]; if (node[0] !== 'case') { core_1.error(ctx, 'switch unexpected identifier'); return; } var value = core_1["default"](node[1], sandbox, env, ctx, index); if (hasExpression && (expressionValue === value) || !hasExpression && value) { return core_1["default"](node[2], sandbox, env, ctx, index); } } if (defaultNode) { return core_1["default"](defaultNode[1], sandbox, env, ctx, index); } });