MCPcopy Index your code
hub / github.com/gpujs/gpu.js / astSwitchStatement

Method astSwitchStatement

src/backend/web-gl/function-node.js:928–1022  ·  view source on GitHub ↗
(ast, retArr)

Source from the content-addressed store, hash-verified

926 }
927
928 astSwitchStatement(ast, retArr) {
929 if (ast.type !== 'SwitchStatement') {
930 throw this.astErrorOutput('Invalid switch statement', ast);
931 }
932 const { discriminant, cases } = ast;
933 const type = this.getType(discriminant);
934 const varName = `switchDiscriminant${this.astKey(ast, '_')}`;
935 switch (type) {
936 case 'Float':
937 case 'Number':
938 retArr.push(`float ${varName} = `);
939 this.astGeneric(discriminant, retArr);
940 retArr.push(';\n');
941 break;
942 case 'Integer':
943 retArr.push(`int ${varName} = `);
944 this.astGeneric(discriminant, retArr);
945 retArr.push(';\n');
946 break;
947 }
948 // switch with just a default:
949 if (cases.length === 1 && !cases[0].test) {
950 this.astGeneric(cases[0].consequent, retArr);
951 return retArr;
952 }
953
954 // regular switches:
955 let fallingThrough = false;
956 let defaultResult = [];
957 let movingDefaultToEnd = false;
958 let pastFirstIf = false;
959 for (let i = 0; i < cases.length; i++) {
960 // default
961 if (!cases[i].test) {
962 if (cases.length > i + 1) {
963 movingDefaultToEnd = true;
964 this.astGeneric(cases[i].consequent, defaultResult);
965 continue;
966 } else {
967 retArr.push(' else {\n');
968 }
969 } else {
970 // all others
971 if (i === 0 || !pastFirstIf) {
972 pastFirstIf = true;
973 retArr.push(`if (${varName} == `);
974 } else {
975 if (fallingThrough) {
976 retArr.push(`${varName} == `);
977 fallingThrough = false;
978 } else {
979 retArr.push(` else if (${varName} == `);
980 }
981 }
982 if (type === 'Integer') {
983 const testType = this.getType(cases[i].test);
984 switch (testType) {
985 case 'Number':

Callers

nothing calls this directly

Calls 8

castValueToIntegerMethod · 0.95
castLiteralToIntegerMethod · 0.95
castLiteralToFloatMethod · 0.95
castValueToFloatMethod · 0.95
astErrorOutputMethod · 0.80
getTypeMethod · 0.80
astKeyMethod · 0.80
astGenericMethod · 0.80

Tested by

no test coverage detected