autodoc: refactoring binOp

This commit is contained in:
Vallahor
2022-06-02 22:33:28 -03:00
committed by Andrew Kelley
parent 918475e2e2
commit 9613aca417
2 changed files with 138 additions and 1051 deletions

View File

@@ -1114,22 +1114,14 @@ var zigAnalysis;
return exprName(sliceIndex, opts);
}
case "switchOp":{
let payloadHtml = "switch() {</br>";
for (let i = 0; i < expr.switchOp.cases.length; i++) {
const caseIndex = expr.switchOp.cases[i];
const item = zigAnalysis.exprs[caseIndex];
if (item['enumLiteral']) {
payloadHtml += " " + " ." + exprName(item, opts) + " => {} " + "</br>";
continue;
}
payloadHtml += " " + exprName(item, opts) + " => {} " + "</br>";
}
if (expr.switchOp.else_index !== 0) {
const else_index = expr.switchOp.else_index;
const item = zigAnalysis.exprs[else_index];
payloadHtml += " " + "else" + " => {} " + "</br>";
}
payloadHtml += "}";
let condExpr = zigAnalysis.exprs[expr.switchOp.cond_index];
let node_name_ = expr.switchOp.node_name;
let file_name = expr.switchOp.file_name;
let line_start = expr.switchOp.line_start;
let payloadHtml = "";
let cond = exprName(condExpr, opts);
payloadHtml += "</br>" + "node_name: " + node_name_ + "</br>" + "file: " + file_name + "</br>" + "line_start: " + line_start + "</br>";
payloadHtml += "switch(" + cond + ") {...}";
return payloadHtml;
}
case "switchIndex": {
@@ -1279,7 +1271,6 @@ var zigAnalysis;
}
case "builtinBinIndex" : {
const builtinBinIndex = zigAnalysis.exprs[expr.builtinBinIndex];
console.log(expr)
return exprName(builtinBinIndex, opts);
}
case "builtinBin": {
@@ -1288,8 +1279,6 @@ var zigAnalysis;
let lhs = exprName(lhsOp, opts);
let rhs = exprName(rhsOp, opts);
console.log(expr);
let payloadHtml = "@";
switch (expr.builtinBin.name) {
case "float_to_int": {
@@ -1356,6 +1345,50 @@ var zigAnalysis;
payloadHtml += "bitReverse";
break;
}
case "div_exact": {
payloadHtml += "divExact";
break;
}
case "div_floor": {
payloadHtml += "divFloor";
break;
}
case "div_trunc": {
payloadHtml += "divTrunc";
break;
}
case "mod": {
payloadHtml += "mod";
break;
}
case "rem": {
payloadHtml += "rem";
break;
}
case "mod_rem": {
payloadHtml += "rem";
break;
}
case "shl_exact": {
payloadHtml += "shlExact";
break;
}
case "shr_exact": {
payloadHtml += "shrExact";
break;
}
case "bitcast" : {
payloadHtml += "bitCast";
break;
}
case "align_cast" : {
payloadHtml += "alignCast";
break;
}
case "vector_type" : {
payloadHtml += "Vector";
break;
}
default: console.log("builtin function not handled yet or doesn't exist!");
};
return payloadHtml + "(" + lhs + ", " + rhs + ")";
@@ -1386,97 +1419,79 @@ var zigAnalysis;
}
let operator = "";
// binOp.kind is described at Autodoc.zig
// Expr section in BinOp struct
switch (expr.binOp.opKind) {
case 0: {
switch (expr.binOp.name) {
case "add": {
operator += "+";
break;
}
case 1: {
case "addwrap": {
operator += "+%";
break;
}
case "add_sat": {
operator += "+|";
break;
}
case "sub": {
operator += "-";
break;
}
case 2: {
case "subwrap": {
operator += "-%";
break;
}
case "sub_sat": {
operator += "-|";
break;
}
case "mul": {
operator += "*";
break;
}
case 3: {
if (!expr.binOp.extact && !expr.binOp.floor && !expr.binOp.trunv) {
operator += "/";
break;
}
let print_div = "";
if (expr.binOp.exact) {
print_div = "@divExact(";
}
if (expr.binOp.floor) {
print_div = "@divFloor(";
}
if (expr.binOp.trunc) {
print_div = "@divTrunc(";
}
return print_div + print_lhs + ", " + print_rhs + ")";
case "mulwrap": {
operator += "*%";
break;
}
case 4: {
return "@mod(" + print_lhs + ", " + print_rhs + ")";
case "mul_sat": {
operator += "*|";
break;
}
case 5: {
return "@rem(" + print_lhs + ", " + print_rhs + ")";
case "div": {
operator += "/";
break;
}
case 6: {
// rem_mod
return "@rem(" + print_lhs + ", " + print_rhs + ")";
}
case 7: {
if (expr.binOp.exact) {
let print_shl = "@shlExact(";
return print_shl + print_lhs + ", " + print_rhs + ")";
}
case "shl": {
operator += "<<";
break;
}
case 8: {
if (expr.binOp.exact) {
let print_shr = "@shrExact(";
return print_shr + print_lhs + ", " + print_rhs + ")";
}
case "shl_sat": {
operator += "<<|";
break;
}
case "shr": {
operator += ">>";
break;
}
case 9 : {
return "@bitCast(" + print_lhs + ", " + print_rhs + ")";
}
case 10 : {
case "bit_or" : {
operator += "|";
break;
}
case 11 : {
return "@alignCast(" + print_lhs + ", " + print_rhs + ")";
}
case 12 : {
case "bit_and" : {
operator += "&";
break;
}
case 13 : {
case "array_cat" : {
operator += "++";
break;
}
case 14 : {
case "array_mul" : {
operator += "**";
break;
}
case 15 : {
return "@Vector(" + print_lhs + ", " + print_rhs + ")";
}
default: console.log("operator not handled yet or doesn't exist!");
};
if (expr.binOp.wrap) {
operator += "%";
}
if (expr.binOp.sat) {
operator += "|";
}
return print_lhs + " " + operator + " " + print_rhs;
}
@@ -1966,8 +1981,6 @@ var zigAnalysis;
payloadHtml += '<span class="tok-kw">' + escapeHtml(name) + '</span>';
} else if ("binOpIndex" in value) {
payloadHtml += exprName(value, opts);
console.log(value);
console.log(payloadHtml);
}else if ("comptimeExpr" in value) {
let comptimeExpr = zigAnalysis.comptimeExprs[value.comptimeExpr].code;
if (opts.wantHtml) {
@@ -1998,7 +2011,6 @@ var zigAnalysis;
}
if (fnObj.is_inferred_error) {
console.log(fnObj)
payloadHtml += "!";
}
if (fnObj.ret != null) {

File diff suppressed because it is too large Load Diff