diff --git a/src/ast.bux b/src/ast.bux index 99f26ea..df3d593 100644 --- a/src/ast.bux +++ b/src/ast.bux @@ -243,6 +243,8 @@ struct EnumVariant { } struct Decl { + fieldCount: int, + fields: *StructField, kind: int, line: uint32, column: uint32, @@ -299,263 +301,6 @@ struct Decl { childDecl1: *Decl, // linked list of decls (for module items, impl methods) childDecl2: *Decl, // Struct fields (up to 256) - fieldCount: int, - field0: StructField, - field1: StructField, - field2: StructField, - field3: StructField, - field4: StructField, - field5: StructField, - field6: StructField, - field7: StructField, - field8: StructField, - field9: StructField, - field10: StructField, - field11: StructField, - field12: StructField, - field13: StructField, - field14: StructField, - field15: StructField, - field16: StructField, - field17: StructField, - field18: StructField, - field19: StructField, - field20: StructField, - field21: StructField, - field22: StructField, - field23: StructField, - field24: StructField, - field25: StructField, - field26: StructField, - field27: StructField, - field28: StructField, - field29: StructField, - field30: StructField, - field31: StructField, - field32: StructField, - field33: StructField, - field34: StructField, - field35: StructField, - field36: StructField, - field37: StructField, - field38: StructField, - field39: StructField, - field40: StructField, - field41: StructField, - field42: StructField, - field43: StructField, - field44: StructField, - field45: StructField, - field46: StructField, - field47: StructField, - field48: StructField, - field49: StructField, - field50: StructField, - field51: StructField, - field52: StructField, - field53: StructField, - field54: StructField, - field55: StructField, - field56: StructField, - field57: StructField, - field58: StructField, - field59: StructField, - field60: StructField, - field61: StructField, - field62: StructField, - field63: StructField, - field64: StructField, - field65: StructField, - field66: StructField, - field67: StructField, - field68: StructField, - field69: StructField, - field70: StructField, - field71: StructField, - field72: StructField, - field73: StructField, - field74: StructField, - field75: StructField, - field76: StructField, - field77: StructField, - field78: StructField, - field79: StructField, - field80: StructField, - field81: StructField, - field82: StructField, - field83: StructField, - field84: StructField, - field85: StructField, - field86: StructField, - field87: StructField, - field88: StructField, - field89: StructField, - field90: StructField, - field91: StructField, - field92: StructField, - field93: StructField, - field94: StructField, - field95: StructField, - field96: StructField, - field97: StructField, - field98: StructField, - field99: StructField, - field100: StructField, - field101: StructField, - field102: StructField, - field103: StructField, - field104: StructField, - field105: StructField, - field106: StructField, - field107: StructField, - field108: StructField, - field109: StructField, - field110: StructField, - field111: StructField, - field112: StructField, - field113: StructField, - field114: StructField, - field115: StructField, - field116: StructField, - field117: StructField, - field118: StructField, - field119: StructField, - field120: StructField, - field121: StructField, - field122: StructField, - field123: StructField, - field124: StructField, - field125: StructField, - field126: StructField, - field127: StructField, - field128: StructField, - field129: StructField, - field130: StructField, - field131: StructField, - field132: StructField, - field133: StructField, - field134: StructField, - field135: StructField, - field136: StructField, - field137: StructField, - field138: StructField, - field139: StructField, - field140: StructField, - field141: StructField, - field142: StructField, - field143: StructField, - field144: StructField, - field145: StructField, - field146: StructField, - field147: StructField, - field148: StructField, - field149: StructField, - field150: StructField, - field151: StructField, - field152: StructField, - field153: StructField, - field154: StructField, - field155: StructField, - field156: StructField, - field157: StructField, - field158: StructField, - field159: StructField, - field160: StructField, - field161: StructField, - field162: StructField, - field163: StructField, - field164: StructField, - field165: StructField, - field166: StructField, - field167: StructField, - field168: StructField, - field169: StructField, - field170: StructField, - field171: StructField, - field172: StructField, - field173: StructField, - field174: StructField, - field175: StructField, - field176: StructField, - field177: StructField, - field178: StructField, - field179: StructField, - field180: StructField, - field181: StructField, - field182: StructField, - field183: StructField, - field184: StructField, - field185: StructField, - field186: StructField, - field187: StructField, - field188: StructField, - field189: StructField, - field190: StructField, - field191: StructField, - field192: StructField, - field193: StructField, - field194: StructField, - field195: StructField, - field196: StructField, - field197: StructField, - field198: StructField, - field199: StructField, - field200: StructField, - field201: StructField, - field202: StructField, - field203: StructField, - field204: StructField, - field205: StructField, - field206: StructField, - field207: StructField, - field208: StructField, - field209: StructField, - field210: StructField, - field211: StructField, - field212: StructField, - field213: StructField, - field214: StructField, - field215: StructField, - field216: StructField, - field217: StructField, - field218: StructField, - field219: StructField, - field220: StructField, - field221: StructField, - field222: StructField, - field223: StructField, - field224: StructField, - field225: StructField, - field226: StructField, - field227: StructField, - field228: StructField, - field229: StructField, - field230: StructField, - field231: StructField, - field232: StructField, - field233: StructField, - field234: StructField, - field235: StructField, - field236: StructField, - field237: StructField, - field238: StructField, - field239: StructField, - field240: StructField, - field241: StructField, - field242: StructField, - field243: StructField, - field244: StructField, - field245: StructField, - field246: StructField, - field247: StructField, - field248: StructField, - field249: StructField, - field250: StructField, - field251: StructField, - field252: StructField, - field253: StructField, - field254: StructField, - field255: StructField, } // --------------------------------------------------------------------------- diff --git a/src/c_backend.bux b/src/c_backend.bux index c89433b..e41370d 100644 --- a/src/c_backend.bux +++ b/src/c_backend.bux @@ -748,6 +748,9 @@ func CBE_StructHasValueStructField(st: *HirStruct) -> bool { var fi: int = 0; while fi < st.fieldCount { let ft: String = st.fields[fi].typeName; + if String_Eq(st.name, "Decl") && fi < 5 { + Print("[DEBUG hasValue] Decl field "); PrintInt(fi as int64); Print(" typeName="); Print(ft); PrintLine(""); + } if !CBE_IsPrimitiveTypeName(ft) && !String_EndsWith(ft, "*") { return true; } @@ -757,11 +760,16 @@ func CBE_StructHasValueStructField(st: *HirStruct) -> bool { } func CBE_EmitStructDef(cbe: *CEmitter, st: *HirStruct) { + Print("[DEBUG c struct] name="); Print(st.name); Print(" fieldCount="); PrintInt(st.fieldCount as int64); PrintLine(""); StringBuilder_Append(&cbe.sb, "struct "); StringBuilder_Append(&cbe.sb, st.name); StringBuilder_Append(&cbe.sb, " {\n"); var fi: int = 0; + Print("[DEBUG c emit] "); Print(st.name); Print(" fieldCount="); PrintInt(st.fieldCount as int64); PrintLine(""); while fi < st.fieldCount { + if String_Eq(st.name, "Decl") && fi >= 210 { + Print("[DEBUG c field] Decl field "); PrintInt(fi as int64); Print(" name="); Print(st.fields[fi].name); PrintLine(""); + } StringBuilder_Append(&cbe.sb, " "); var ft: String = st.fields[fi].typeName; if String_Eq(ft, "int") || String_Eq(ft, "") { @@ -830,13 +838,14 @@ func CBE_GetExprTypeName(mod: *HirModule, node: *HirNode) -> String { // --------------------------------------------------------------------------- func CBackend_Generate(mod: *HirModule) -> String { + Print("[DEBUG CBackend_Generate] structCount="); PrintInt(mod.structCount as int64); PrintLine(""); let cbe: *CEmitter = bux_alloc(sizeof(CEmitter)) as *CEmitter; cbe.sb = StringBuilder_NewCap(8192); cbe.indent = 0; cbe.mod = mod; // Header - StringBuilder_Append(&cbe.sb, "// Generated by Bux C Backend\n"); + StringBuilder_Append(&cbe.sb, "// Generated by Bux C Backend v2\n"); StringBuilder_Append(&cbe.sb, "#include \n"); StringBuilder_Append(&cbe.sb, "#include \n"); StringBuilder_Append(&cbe.sb, "#include \n"); @@ -861,6 +870,7 @@ func CBackend_Generate(mod: *HirModule) -> String { // Forward declare all struct types (skip generics) var si: int = 0; while si < mod.structCount { + Print("[DEBUG c struct name] "); Print(mod.structs[si].name); Print(" fieldCount="); PrintInt(mod.structs[si].fieldCount as int64); Print(" hasGeneric="); PrintInt(CBE_StructHasGeneric(&mod.structs[si]) as int64); PrintLine(""); if !CBE_StructHasGeneric(&mod.structs[si]) { StringBuilder_Append(&cbe.sb, "typedef struct "); StringBuilder_Append(&cbe.sb, mod.structs[si].name); @@ -868,6 +878,9 @@ func CBackend_Generate(mod: *HirModule) -> String { StringBuilder_Append(&cbe.sb, mod.structs[si].name); StringBuilder_Append(&cbe.sb, ";\n"); } + if String_Eq(mod.structs[si].name, "Decl") { + Print("[DEBUG c forward] Decl hasValue="); PrintInt(CBE_StructHasValueStructField(&mod.structs[si]) as int64); PrintLine(""); + } si = si + 1; } StringBuilder_Append(&cbe.sb, "\n"); @@ -987,9 +1000,15 @@ func CBackend_Generate(mod: *HirModule) -> String { continue; } if CBE_StructHasValueStructField(&mod.structs[si]) { + if String_Eq(mod.structs[si].name, "Decl") { + Print("[DEBUG c pass1] Decl skipped (has value struct field)\n"); + } si = si + 1; continue; } + if String_Eq(mod.structs[si].name, "Decl") { + Print("[DEBUG c pass1] Decl emitting\n"); + } CBE_EmitStructDef(cbe, &mod.structs[si]); si = si + 1; } @@ -1001,9 +1020,17 @@ func CBackend_Generate(mod: *HirModule) -> String { continue; } if !CBE_StructHasValueStructField(&mod.structs[si]) { + if String_Eq(mod.structs[si].name, "Decl") { + Print("[DEBUG c pass2] Decl skipped (no value struct field)\n"); + } si = si + 1; continue; } + if String_Eq(mod.structs[si].name, "Decl") { + Print("[DEBUG c pass2] Decl emitting\n"); + Print("[DEBUG c pass2] Decl fieldCount="); PrintInt(mod.structs[si].fieldCount as int64); PrintLine(""); + Print("[DEBUG c pass2] Decl name="); Print(mod.structs[si].name); PrintLine(""); + } CBE_EmitStructDef(cbe, &mod.structs[si]); si = si + 1; } diff --git a/src/hir_lower.bux b/src/hir_lower.bux index faed40e..722f950 100644 --- a/src/hir_lower.bux +++ b/src/hir_lower.bux @@ -712,6 +712,7 @@ func Lcx_LowerParam(out: *HirParam, p: *Param) { // --------------------------------------------------------------------------- func Lcx_LowerFunc(ctx: *LowerCtx, decl: *Decl) -> *HirFunc { + Print("[DEBUG Lcx_LowerFunc] name="); Print(decl.strValue); PrintLine(""); let f: *HirFunc = bux_alloc(sizeof(HirFunc)) as *HirFunc; f.name = decl.strValue; f.isPublic = decl.isPublic; @@ -764,6 +765,7 @@ func Lcx_LowerFunc(ctx: *LowerCtx, decl: *Decl) -> *HirFunc { sym.kind = skVar; sym.name = p.name; sym.typeKind = Lcx_ResolveTypeKind(p.refParamType); + sym.refType = p.refParamType; // Build typeName same as Lcx_LowerParam if p.refParamType.kind == tekFunc { sym.typeName = Lcx_BuildFuncTypeName(p.refParamType); @@ -826,6 +828,7 @@ func HirLower_LowerModule(mod: *Module, sema: *Sema) -> *HirModule { // Iterate declarations var decl: *Decl = mod.firstItem; while decl != null as *Decl { + Print("[DEBUG hir_lower] decl kind="); PrintInt(decl.kind as int64); Print(" name="); Print(decl.strValue); PrintLine(""); if decl.kind == dkFunc && decl.refBody != null as *Block { let f: *HirFunc = Lcx_LowerFunc(ctx, decl); ctx.funcs[ctx.funcCount] = *f; @@ -846,7 +849,9 @@ func HirLower_LowerModule(mod: *Module, sema: *Sema) -> *HirModule { } } if decl.kind == dkExternFunc { + Print("[DEBUG hir_lower] lowering extern func "); Print(decl.strValue); PrintLine(""); let f: *HirFunc = Lcx_LowerFunc(ctx, decl); + Print("[DEBUG hir_lower] extern func lowered ok"); PrintLine(""); ctx.externFuncs[ctx.externCount] = *f; ctx.externCount = ctx.externCount + 1; } @@ -856,266 +861,13 @@ func HirLower_LowerModule(mod: *Module, sema: *Sema) -> *HirModule { hm.structs[si].name = decl.strValue; hm.structs[si].fieldCount = decl.fieldCount; hm.structs[si].fields = bux_alloc(decl.fieldCount as uint * sizeof(HirStructField)) as *HirStructField; + Print("[DEBUG hir struct] name="); Print(decl.strValue); Print(" fieldCount="); PrintInt(decl.fieldCount as int64); PrintLine(""); var fi: int = 0; while fi < decl.fieldCount { var fname: String = ""; var ftype: *TypeExpr = null as *TypeExpr; - if fi == 0 { fname = decl.field0.name; ftype = decl.field0.refFieldType; } - else if fi == 1 { fname = decl.field1.name; ftype = decl.field1.refFieldType; } - else if fi == 2 { fname = decl.field2.name; ftype = decl.field2.refFieldType; } - else if fi == 3 { fname = decl.field3.name; ftype = decl.field3.refFieldType; } - else if fi == 4 { fname = decl.field4.name; ftype = decl.field4.refFieldType; } - else if fi == 5 { fname = decl.field5.name; ftype = decl.field5.refFieldType; } - else if fi == 6 { fname = decl.field6.name; ftype = decl.field6.refFieldType; } - else if fi == 7 { fname = decl.field7.name; ftype = decl.field7.refFieldType; } - else if fi == 8 { fname = decl.field8.name; ftype = decl.field8.refFieldType; } - else if fi == 9 { fname = decl.field9.name; ftype = decl.field9.refFieldType; } - else if fi == 10 { fname = decl.field10.name; ftype = decl.field10.refFieldType; } - else if fi == 11 { fname = decl.field11.name; ftype = decl.field11.refFieldType; } - else if fi == 12 { fname = decl.field12.name; ftype = decl.field12.refFieldType; } - else if fi == 13 { fname = decl.field13.name; ftype = decl.field13.refFieldType; } - else if fi == 14 { fname = decl.field14.name; ftype = decl.field14.refFieldType; } - else if fi == 15 { fname = decl.field15.name; ftype = decl.field15.refFieldType; } - else if fi == 16 { fname = decl.field16.name; ftype = decl.field16.refFieldType; } - else if fi == 17 { fname = decl.field17.name; ftype = decl.field17.refFieldType; } - else if fi == 18 { fname = decl.field18.name; ftype = decl.field18.refFieldType; } - else if fi == 19 { fname = decl.field19.name; ftype = decl.field19.refFieldType; } - else if fi == 20 { fname = decl.field20.name; ftype = decl.field20.refFieldType; } - else if fi == 21 { fname = decl.field21.name; ftype = decl.field21.refFieldType; } - else if fi == 22 { fname = decl.field22.name; ftype = decl.field22.refFieldType; } - else if fi == 23 { fname = decl.field23.name; ftype = decl.field23.refFieldType; } - else if fi == 24 { fname = decl.field24.name; ftype = decl.field24.refFieldType; } - else if fi == 25 { fname = decl.field25.name; ftype = decl.field25.refFieldType; } - else if fi == 26 { fname = decl.field26.name; ftype = decl.field26.refFieldType; } - else if fi == 27 { fname = decl.field27.name; ftype = decl.field27.refFieldType; } - else if fi == 28 { fname = decl.field28.name; ftype = decl.field28.refFieldType; } - else if fi == 29 { fname = decl.field29.name; ftype = decl.field29.refFieldType; } - else if fi == 30 { fname = decl.field30.name; ftype = decl.field30.refFieldType; } - else if fi == 31 { fname = decl.field31.name; ftype = decl.field31.refFieldType; } - else if fi == 32 { fname = decl.field32.name; ftype = decl.field32.refFieldType; } - else if fi == 33 { fname = decl.field33.name; ftype = decl.field33.refFieldType; } - else if fi == 34 { fname = decl.field34.name; ftype = decl.field34.refFieldType; } - else if fi == 35 { fname = decl.field35.name; ftype = decl.field35.refFieldType; } - else if fi == 36 { fname = decl.field36.name; ftype = decl.field36.refFieldType; } - else if fi == 37 { fname = decl.field37.name; ftype = decl.field37.refFieldType; } - else if fi == 38 { fname = decl.field38.name; ftype = decl.field38.refFieldType; } - else if fi == 39 { fname = decl.field39.name; ftype = decl.field39.refFieldType; } - else if fi == 40 { fname = decl.field40.name; ftype = decl.field40.refFieldType; } - else if fi == 41 { fname = decl.field41.name; ftype = decl.field41.refFieldType; } - else if fi == 42 { fname = decl.field42.name; ftype = decl.field42.refFieldType; } - else if fi == 43 { fname = decl.field43.name; ftype = decl.field43.refFieldType; } - else if fi == 44 { fname = decl.field44.name; ftype = decl.field44.refFieldType; } - else if fi == 45 { fname = decl.field45.name; ftype = decl.field45.refFieldType; } - else if fi == 46 { fname = decl.field46.name; ftype = decl.field46.refFieldType; } - else if fi == 47 { fname = decl.field47.name; ftype = decl.field47.refFieldType; } - else if fi == 48 { fname = decl.field48.name; ftype = decl.field48.refFieldType; } - else if fi == 49 { fname = decl.field49.name; ftype = decl.field49.refFieldType; } - else if fi == 50 { fname = decl.field50.name; ftype = decl.field50.refFieldType; } - else if fi == 51 { fname = decl.field51.name; ftype = decl.field51.refFieldType; } - else if fi == 52 { fname = decl.field52.name; ftype = decl.field52.refFieldType; } - else if fi == 53 { fname = decl.field53.name; ftype = decl.field53.refFieldType; } - else if fi == 54 { fname = decl.field54.name; ftype = decl.field54.refFieldType; } - else if fi == 55 { fname = decl.field55.name; ftype = decl.field55.refFieldType; } - else if fi == 56 { fname = decl.field56.name; ftype = decl.field56.refFieldType; } - else if fi == 57 { fname = decl.field57.name; ftype = decl.field57.refFieldType; } - else if fi == 58 { fname = decl.field58.name; ftype = decl.field58.refFieldType; } - else if fi == 59 { fname = decl.field59.name; ftype = decl.field59.refFieldType; } - else if fi == 60 { fname = decl.field60.name; ftype = decl.field60.refFieldType; } - else if fi == 61 { fname = decl.field61.name; ftype = decl.field61.refFieldType; } - else if fi == 62 { fname = decl.field62.name; ftype = decl.field62.refFieldType; } - else if fi == 63 { fname = decl.field63.name; ftype = decl.field63.refFieldType; } - else if fi == 64 { fname = decl.field64.name; ftype = decl.field64.refFieldType; } - else if fi == 65 { fname = decl.field65.name; ftype = decl.field65.refFieldType; } - else if fi == 66 { fname = decl.field66.name; ftype = decl.field66.refFieldType; } - else if fi == 67 { fname = decl.field67.name; ftype = decl.field67.refFieldType; } - else if fi == 68 { fname = decl.field68.name; ftype = decl.field68.refFieldType; } - else if fi == 69 { fname = decl.field69.name; ftype = decl.field69.refFieldType; } - else if fi == 70 { fname = decl.field70.name; ftype = decl.field70.refFieldType; } - else if fi == 71 { fname = decl.field71.name; ftype = decl.field71.refFieldType; } - else if fi == 72 { fname = decl.field72.name; ftype = decl.field72.refFieldType; } - else if fi == 73 { fname = decl.field73.name; ftype = decl.field73.refFieldType; } - else if fi == 74 { fname = decl.field74.name; ftype = decl.field74.refFieldType; } - else if fi == 75 { fname = decl.field75.name; ftype = decl.field75.refFieldType; } - else if fi == 76 { fname = decl.field76.name; ftype = decl.field76.refFieldType; } - else if fi == 77 { fname = decl.field77.name; ftype = decl.field77.refFieldType; } - else if fi == 78 { fname = decl.field78.name; ftype = decl.field78.refFieldType; } - else if fi == 79 { fname = decl.field79.name; ftype = decl.field79.refFieldType; } - else if fi == 80 { fname = decl.field80.name; ftype = decl.field80.refFieldType; } - else if fi == 81 { fname = decl.field81.name; ftype = decl.field81.refFieldType; } - else if fi == 82 { fname = decl.field82.name; ftype = decl.field82.refFieldType; } - else if fi == 83 { fname = decl.field83.name; ftype = decl.field83.refFieldType; } - else if fi == 84 { fname = decl.field84.name; ftype = decl.field84.refFieldType; } - else if fi == 85 { fname = decl.field85.name; ftype = decl.field85.refFieldType; } - else if fi == 86 { fname = decl.field86.name; ftype = decl.field86.refFieldType; } - else if fi == 87 { fname = decl.field87.name; ftype = decl.field87.refFieldType; } - else if fi == 88 { fname = decl.field88.name; ftype = decl.field88.refFieldType; } - else if fi == 89 { fname = decl.field89.name; ftype = decl.field89.refFieldType; } - else if fi == 90 { fname = decl.field90.name; ftype = decl.field90.refFieldType; } - else if fi == 91 { fname = decl.field91.name; ftype = decl.field91.refFieldType; } - else if fi == 92 { fname = decl.field92.name; ftype = decl.field92.refFieldType; } - else if fi == 93 { fname = decl.field93.name; ftype = decl.field93.refFieldType; } - else if fi == 94 { fname = decl.field94.name; ftype = decl.field94.refFieldType; } - else if fi == 95 { fname = decl.field95.name; ftype = decl.field95.refFieldType; } - else if fi == 96 { fname = decl.field96.name; ftype = decl.field96.refFieldType; } - else if fi == 97 { fname = decl.field97.name; ftype = decl.field97.refFieldType; } - else if fi == 98 { fname = decl.field98.name; ftype = decl.field98.refFieldType; } - else if fi == 99 { fname = decl.field99.name; ftype = decl.field99.refFieldType; } - else if fi == 100 { fname = decl.field100.name; ftype = decl.field100.refFieldType; } - else if fi == 101 { fname = decl.field101.name; ftype = decl.field101.refFieldType; } - else if fi == 102 { fname = decl.field102.name; ftype = decl.field102.refFieldType; } - else if fi == 103 { fname = decl.field103.name; ftype = decl.field103.refFieldType; } - else if fi == 104 { fname = decl.field104.name; ftype = decl.field104.refFieldType; } - else if fi == 105 { fname = decl.field105.name; ftype = decl.field105.refFieldType; } - else if fi == 106 { fname = decl.field106.name; ftype = decl.field106.refFieldType; } - else if fi == 107 { fname = decl.field107.name; ftype = decl.field107.refFieldType; } - else if fi == 108 { fname = decl.field108.name; ftype = decl.field108.refFieldType; } - else if fi == 109 { fname = decl.field109.name; ftype = decl.field109.refFieldType; } - else if fi == 110 { fname = decl.field110.name; ftype = decl.field110.refFieldType; } - else if fi == 111 { fname = decl.field111.name; ftype = decl.field111.refFieldType; } - else if fi == 112 { fname = decl.field112.name; ftype = decl.field112.refFieldType; } - else if fi == 113 { fname = decl.field113.name; ftype = decl.field113.refFieldType; } - else if fi == 114 { fname = decl.field114.name; ftype = decl.field114.refFieldType; } - else if fi == 115 { fname = decl.field115.name; ftype = decl.field115.refFieldType; } - else if fi == 116 { fname = decl.field116.name; ftype = decl.field116.refFieldType; } - else if fi == 117 { fname = decl.field117.name; ftype = decl.field117.refFieldType; } - else if fi == 118 { fname = decl.field118.name; ftype = decl.field118.refFieldType; } - else if fi == 119 { fname = decl.field119.name; ftype = decl.field119.refFieldType; } - else if fi == 120 { fname = decl.field120.name; ftype = decl.field120.refFieldType; } - else if fi == 121 { fname = decl.field121.name; ftype = decl.field121.refFieldType; } - else if fi == 122 { fname = decl.field122.name; ftype = decl.field122.refFieldType; } - else if fi == 123 { fname = decl.field123.name; ftype = decl.field123.refFieldType; } - else if fi == 124 { fname = decl.field124.name; ftype = decl.field124.refFieldType; } - else if fi == 125 { fname = decl.field125.name; ftype = decl.field125.refFieldType; } - else if fi == 126 { fname = decl.field126.name; ftype = decl.field126.refFieldType; } - else if fi == 127 { fname = decl.field127.name; ftype = decl.field127.refFieldType; } - else if fi == 128 { fname = decl.field128.name; ftype = decl.field128.refFieldType; } - else if fi == 129 { fname = decl.field129.name; ftype = decl.field129.refFieldType; } - else if fi == 130 { fname = decl.field130.name; ftype = decl.field130.refFieldType; } - else if fi == 131 { fname = decl.field131.name; ftype = decl.field131.refFieldType; } - else if fi == 132 { fname = decl.field132.name; ftype = decl.field132.refFieldType; } - else if fi == 133 { fname = decl.field133.name; ftype = decl.field133.refFieldType; } - else if fi == 134 { fname = decl.field134.name; ftype = decl.field134.refFieldType; } - else if fi == 135 { fname = decl.field135.name; ftype = decl.field135.refFieldType; } - else if fi == 136 { fname = decl.field136.name; ftype = decl.field136.refFieldType; } - else if fi == 137 { fname = decl.field137.name; ftype = decl.field137.refFieldType; } - else if fi == 138 { fname = decl.field138.name; ftype = decl.field138.refFieldType; } - else if fi == 139 { fname = decl.field139.name; ftype = decl.field139.refFieldType; } - else if fi == 140 { fname = decl.field140.name; ftype = decl.field140.refFieldType; } - else if fi == 141 { fname = decl.field141.name; ftype = decl.field141.refFieldType; } - else if fi == 142 { fname = decl.field142.name; ftype = decl.field142.refFieldType; } - else if fi == 143 { fname = decl.field143.name; ftype = decl.field143.refFieldType; } - else if fi == 144 { fname = decl.field144.name; ftype = decl.field144.refFieldType; } - else if fi == 145 { fname = decl.field145.name; ftype = decl.field145.refFieldType; } - else if fi == 146 { fname = decl.field146.name; ftype = decl.field146.refFieldType; } - else if fi == 147 { fname = decl.field147.name; ftype = decl.field147.refFieldType; } - else if fi == 148 { fname = decl.field148.name; ftype = decl.field148.refFieldType; } - else if fi == 149 { fname = decl.field149.name; ftype = decl.field149.refFieldType; } - else if fi == 150 { fname = decl.field150.name; ftype = decl.field150.refFieldType; } - else if fi == 151 { fname = decl.field151.name; ftype = decl.field151.refFieldType; } - else if fi == 152 { fname = decl.field152.name; ftype = decl.field152.refFieldType; } - else if fi == 153 { fname = decl.field153.name; ftype = decl.field153.refFieldType; } - else if fi == 154 { fname = decl.field154.name; ftype = decl.field154.refFieldType; } - else if fi == 155 { fname = decl.field155.name; ftype = decl.field155.refFieldType; } - else if fi == 156 { fname = decl.field156.name; ftype = decl.field156.refFieldType; } - else if fi == 157 { fname = decl.field157.name; ftype = decl.field157.refFieldType; } - else if fi == 158 { fname = decl.field158.name; ftype = decl.field158.refFieldType; } - else if fi == 159 { fname = decl.field159.name; ftype = decl.field159.refFieldType; } - else if fi == 160 { fname = decl.field160.name; ftype = decl.field160.refFieldType; } - else if fi == 161 { fname = decl.field161.name; ftype = decl.field161.refFieldType; } - else if fi == 162 { fname = decl.field162.name; ftype = decl.field162.refFieldType; } - else if fi == 163 { fname = decl.field163.name; ftype = decl.field163.refFieldType; } - else if fi == 164 { fname = decl.field164.name; ftype = decl.field164.refFieldType; } - else if fi == 165 { fname = decl.field165.name; ftype = decl.field165.refFieldType; } - else if fi == 166 { fname = decl.field166.name; ftype = decl.field166.refFieldType; } - else if fi == 167 { fname = decl.field167.name; ftype = decl.field167.refFieldType; } - else if fi == 168 { fname = decl.field168.name; ftype = decl.field168.refFieldType; } - else if fi == 169 { fname = decl.field169.name; ftype = decl.field169.refFieldType; } - else if fi == 170 { fname = decl.field170.name; ftype = decl.field170.refFieldType; } - else if fi == 171 { fname = decl.field171.name; ftype = decl.field171.refFieldType; } - else if fi == 172 { fname = decl.field172.name; ftype = decl.field172.refFieldType; } - else if fi == 173 { fname = decl.field173.name; ftype = decl.field173.refFieldType; } - else if fi == 174 { fname = decl.field174.name; ftype = decl.field174.refFieldType; } - else if fi == 175 { fname = decl.field175.name; ftype = decl.field175.refFieldType; } - else if fi == 176 { fname = decl.field176.name; ftype = decl.field176.refFieldType; } - else if fi == 177 { fname = decl.field177.name; ftype = decl.field177.refFieldType; } - else if fi == 178 { fname = decl.field178.name; ftype = decl.field178.refFieldType; } - else if fi == 179 { fname = decl.field179.name; ftype = decl.field179.refFieldType; } - else if fi == 180 { fname = decl.field180.name; ftype = decl.field180.refFieldType; } - else if fi == 181 { fname = decl.field181.name; ftype = decl.field181.refFieldType; } - else if fi == 182 { fname = decl.field182.name; ftype = decl.field182.refFieldType; } - else if fi == 183 { fname = decl.field183.name; ftype = decl.field183.refFieldType; } - else if fi == 184 { fname = decl.field184.name; ftype = decl.field184.refFieldType; } - else if fi == 185 { fname = decl.field185.name; ftype = decl.field185.refFieldType; } - else if fi == 186 { fname = decl.field186.name; ftype = decl.field186.refFieldType; } - else if fi == 187 { fname = decl.field187.name; ftype = decl.field187.refFieldType; } - else if fi == 188 { fname = decl.field188.name; ftype = decl.field188.refFieldType; } - else if fi == 189 { fname = decl.field189.name; ftype = decl.field189.refFieldType; } - else if fi == 190 { fname = decl.field190.name; ftype = decl.field190.refFieldType; } - else if fi == 191 { fname = decl.field191.name; ftype = decl.field191.refFieldType; } - else if fi == 192 { fname = decl.field192.name; ftype = decl.field192.refFieldType; } - else if fi == 193 { fname = decl.field193.name; ftype = decl.field193.refFieldType; } - else if fi == 194 { fname = decl.field194.name; ftype = decl.field194.refFieldType; } - else if fi == 195 { fname = decl.field195.name; ftype = decl.field195.refFieldType; } - else if fi == 196 { fname = decl.field196.name; ftype = decl.field196.refFieldType; } - else if fi == 197 { fname = decl.field197.name; ftype = decl.field197.refFieldType; } - else if fi == 198 { fname = decl.field198.name; ftype = decl.field198.refFieldType; } - else if fi == 199 { fname = decl.field199.name; ftype = decl.field199.refFieldType; } - else if fi == 200 { fname = decl.field200.name; ftype = decl.field200.refFieldType; } - else if fi == 201 { fname = decl.field201.name; ftype = decl.field201.refFieldType; } - else if fi == 202 { fname = decl.field202.name; ftype = decl.field202.refFieldType; } - else if fi == 203 { fname = decl.field203.name; ftype = decl.field203.refFieldType; } - else if fi == 204 { fname = decl.field204.name; ftype = decl.field204.refFieldType; } - else if fi == 205 { fname = decl.field205.name; ftype = decl.field205.refFieldType; } - else if fi == 206 { fname = decl.field206.name; ftype = decl.field206.refFieldType; } - else if fi == 207 { fname = decl.field207.name; ftype = decl.field207.refFieldType; } - else if fi == 208 { fname = decl.field208.name; ftype = decl.field208.refFieldType; } - else if fi == 209 { fname = decl.field209.name; ftype = decl.field209.refFieldType; } - else if fi == 210 { fname = decl.field210.name; ftype = decl.field210.refFieldType; } - else if fi == 211 { fname = decl.field211.name; ftype = decl.field211.refFieldType; } - else if fi == 212 { fname = decl.field212.name; ftype = decl.field212.refFieldType; } - else if fi == 213 { fname = decl.field213.name; ftype = decl.field213.refFieldType; } - else if fi == 214 { fname = decl.field214.name; ftype = decl.field214.refFieldType; } - else if fi == 215 { fname = decl.field215.name; ftype = decl.field215.refFieldType; } - else if fi == 216 { fname = decl.field216.name; ftype = decl.field216.refFieldType; } - else if fi == 217 { fname = decl.field217.name; ftype = decl.field217.refFieldType; } - else if fi == 218 { fname = decl.field218.name; ftype = decl.field218.refFieldType; } - else if fi == 219 { fname = decl.field219.name; ftype = decl.field219.refFieldType; } - else if fi == 220 { fname = decl.field220.name; ftype = decl.field220.refFieldType; } - else if fi == 221 { fname = decl.field221.name; ftype = decl.field221.refFieldType; } - else if fi == 222 { fname = decl.field222.name; ftype = decl.field222.refFieldType; } - else if fi == 223 { fname = decl.field223.name; ftype = decl.field223.refFieldType; } - else if fi == 224 { fname = decl.field224.name; ftype = decl.field224.refFieldType; } - else if fi == 225 { fname = decl.field225.name; ftype = decl.field225.refFieldType; } - else if fi == 226 { fname = decl.field226.name; ftype = decl.field226.refFieldType; } - else if fi == 227 { fname = decl.field227.name; ftype = decl.field227.refFieldType; } - else if fi == 228 { fname = decl.field228.name; ftype = decl.field228.refFieldType; } - else if fi == 229 { fname = decl.field229.name; ftype = decl.field229.refFieldType; } - else if fi == 230 { fname = decl.field230.name; ftype = decl.field230.refFieldType; } - else if fi == 231 { fname = decl.field231.name; ftype = decl.field231.refFieldType; } - else if fi == 232 { fname = decl.field232.name; ftype = decl.field232.refFieldType; } - else if fi == 233 { fname = decl.field233.name; ftype = decl.field233.refFieldType; } - else if fi == 234 { fname = decl.field234.name; ftype = decl.field234.refFieldType; } - else if fi == 235 { fname = decl.field235.name; ftype = decl.field235.refFieldType; } - else if fi == 236 { fname = decl.field236.name; ftype = decl.field236.refFieldType; } - else if fi == 237 { fname = decl.field237.name; ftype = decl.field237.refFieldType; } - else if fi == 238 { fname = decl.field238.name; ftype = decl.field238.refFieldType; } - else if fi == 239 { fname = decl.field239.name; ftype = decl.field239.refFieldType; } - else if fi == 240 { fname = decl.field240.name; ftype = decl.field240.refFieldType; } - else if fi == 241 { fname = decl.field241.name; ftype = decl.field241.refFieldType; } - else if fi == 242 { fname = decl.field242.name; ftype = decl.field242.refFieldType; } - else if fi == 243 { fname = decl.field243.name; ftype = decl.field243.refFieldType; } - else if fi == 244 { fname = decl.field244.name; ftype = decl.field244.refFieldType; } - else if fi == 245 { fname = decl.field245.name; ftype = decl.field245.refFieldType; } - else if fi == 246 { fname = decl.field246.name; ftype = decl.field246.refFieldType; } - else if fi == 247 { fname = decl.field247.name; ftype = decl.field247.refFieldType; } - else if fi == 248 { fname = decl.field248.name; ftype = decl.field248.refFieldType; } - else if fi == 249 { fname = decl.field249.name; ftype = decl.field249.refFieldType; } - else if fi == 250 { fname = decl.field250.name; ftype = decl.field250.refFieldType; } - else if fi == 251 { fname = decl.field251.name; ftype = decl.field251.refFieldType; } - else if fi == 252 { fname = decl.field252.name; ftype = decl.field252.refFieldType; } - else if fi == 253 { fname = decl.field253.name; ftype = decl.field253.refFieldType; } - else if fi == 254 { fname = decl.field254.name; ftype = decl.field254.refFieldType; } - else if fi == 255 { fname = decl.field255.name; ftype = decl.field255.refFieldType; } + fname = decl.fields[fi].name; + ftype = decl.fields[fi].refFieldType; // Skip empty field names if String_Eq(fname, "") { fi = fi + 1; diff --git a/src/lexer.bux b/src/lexer.bux index 74951d8..ae3e801 100644 --- a/src/lexer.bux +++ b/src/lexer.bux @@ -323,6 +323,11 @@ func lexScanIdent(lex: *Lexer) { lex.tokens[lex.tokenCount] = tok; lex.tokenCount = lex.tokenCount + 1; } + if String_StartsWith(tok.text, "field") { + PrintLine(String_Concat("DEBUG lexer ident=", tok.text)); + PrintLine(String_Concat("DEBUG lexer addr=", bux_int_to_str(tok.text as int64))); + PrintLine(String_Concat("DEBUG lexer pos=", bux_int_to_str(lex.tokenCount as int64))); + } } // --------------------------------------------------------------------------- diff --git a/src/parser.bux b/src/parser.bux index 2bb4b78..6ea8d54 100644 --- a/src/parser.bux +++ b/src/parser.bux @@ -476,7 +476,7 @@ func parserParsePostfixExpr(p: *Parser) -> *Expr { discard parserAdvance(p); let line: uint32 = parserCurToken(p).line; let col: uint32 = parserCurToken(p).column; - let name: LexToken = parserExpect(p, tkIdent, "expected field name"); + let name: LexToken = parserExpectIdentOrKeyword(p, "expected field name"); let e: *Expr = parserMakeExpr(ekField, line, col); e.child1 = left; e.strValue = name.text; @@ -489,7 +489,7 @@ func parserParsePostfixExpr(p: *Parser) -> *Expr { discard parserAdvance(p); let line: uint32 = parserCurToken(p).line; let col: uint32 = parserCurToken(p).column; - let name: LexToken = parserExpect(p, tkIdent, "expected path segment"); + let name: LexToken = parserExpectIdentOrKeyword(p, "expected path segment"); let e: *Expr = parserMakeExpr(ekField, line, col); e.child1 = left; e.strValue = name.text; @@ -553,6 +553,7 @@ func parserParsePostfixExpr(p: *Parser) -> *Expr { let siCol: uint32 = parserCurToken(p).column; let typeName: String = left.strValue; var fieldCount: int = 0; + PrintLine("PARSER FIX V2 ACTIVE"); var firstField: *Expr = null as *Expr; var lastField: *Expr = null as *Expr; while !parserCheck(p, tkRBrace) && parserPeek(p, 0) != tkEndOfFile { @@ -1190,11 +1191,16 @@ func parserParseStructDecl(p: *Parser, isPublic: bool) -> *Decl { let nameTok: LexToken = parserExpectIdentOrKeyword(p, "expected struct name"); let d: *Decl = bux_alloc(sizeof(Decl)) as *Decl; + d.fields = bux_alloc(256 as uint * sizeof(StructField)) as *StructField; + if d.fields == null as *StructField { + PrintLine("ERROR: bux_alloc returned null for fields"); + } d.kind = dkStruct; d.line = line; d.column = col; d.isPublic = isPublic; d.strValue = nameTok.text; + var fieldCount: int = 0; // Type params if parserCheck(p, tkLt) { @@ -1212,11 +1218,16 @@ func parserParseStructDecl(p: *Parser, isPublic: bool) -> *Decl { discard parserExpect(p, tkLBrace, "expected '{'"); while !parserCheck(p, tkRBrace) && parserPeek(p, 0) != tkEndOfFile { - if d.fieldCount >= 256 { break; } + if fieldCount >= 256 { break; } if parserCheck(p, tkNewLine) { discard parserAdvance(p); continue; } if parserCheck(p, tkSemicolon) { discard parserAdvance(p); continue; } let beforePos: int = p.pos; let fName: LexToken = parserExpectIdentOrKeyword(p, "expected field name"); + if fieldCount >= 250 && fieldCount <= 256 { + PrintLine(String_Concat("RAW fieldCount=", bux_int_to_str(fieldCount as int64))); + PrintLine(String_Concat("RAW fName=", fName.text)); + PrintLine(String_Concat("RAW pos=", bux_int_to_str(p.pos as int64))); + } discard parserExpect(p, tkColon, "expected ':' in struct field"); let fType: *TypeExpr = parserParseType(p); parserMatch(p, tkSemicolon); @@ -1226,777 +1237,12 @@ func parserParseStructDecl(p: *Parser, isPublic: bool) -> *Decl { continue; } - if d.fieldCount == 0 { - d.field0.name = fName.text; - d.field0.refFieldType = fType; - } else if d.fieldCount == 1 { - d.field1.name = fName.text; - d.field1.refFieldType = fType; - } else if d.fieldCount == 2 { - d.field2.name = fName.text; - d.field2.refFieldType = fType; - } else if d.fieldCount == 3 { - d.field3.name = fName.text; - d.field3.refFieldType = fType; - } else if d.fieldCount == 4 { - d.field4.name = fName.text; - d.field4.refFieldType = fType; - } else if d.fieldCount == 5 { - d.field5.name = fName.text; - d.field5.refFieldType = fType; - } else if d.fieldCount == 6 { - d.field6.name = fName.text; - d.field6.refFieldType = fType; - } else if d.fieldCount == 7 { - d.field7.name = fName.text; - d.field7.refFieldType = fType; - } else if d.fieldCount == 8 { - d.field8.name = fName.text; - d.field8.refFieldType = fType; - } else if d.fieldCount == 9 { - d.field9.name = fName.text; - d.field9.refFieldType = fType; - } else if d.fieldCount == 10 { - d.field10.name = fName.text; - d.field10.refFieldType = fType; - } else if d.fieldCount == 11 { - d.field11.name = fName.text; - d.field11.refFieldType = fType; - } else if d.fieldCount == 12 { - d.field12.name = fName.text; - d.field12.refFieldType = fType; - } else if d.fieldCount == 13 { - d.field13.name = fName.text; - d.field13.refFieldType = fType; - } else if d.fieldCount == 14 { - d.field14.name = fName.text; - d.field14.refFieldType = fType; - } else if d.fieldCount == 15 { - d.field15.name = fName.text; - d.field15.refFieldType = fType; - } else if d.fieldCount == 16 { - d.field16.name = fName.text; - d.field16.refFieldType = fType; - } else if d.fieldCount == 17 { - d.field17.name = fName.text; - d.field17.refFieldType = fType; - } else if d.fieldCount == 18 { - d.field18.name = fName.text; - d.field18.refFieldType = fType; - } else if d.fieldCount == 19 { - d.field19.name = fName.text; - d.field19.refFieldType = fType; - } else if d.fieldCount == 20 { - d.field20.name = fName.text; - d.field20.refFieldType = fType; - } else if d.fieldCount == 21 { - d.field21.name = fName.text; - d.field21.refFieldType = fType; - } else if d.fieldCount == 22 { - d.field22.name = fName.text; - d.field22.refFieldType = fType; - } else if d.fieldCount == 23 { - d.field23.name = fName.text; - d.field23.refFieldType = fType; - } else if d.fieldCount == 24 { - d.field24.name = fName.text; - d.field24.refFieldType = fType; - } else if d.fieldCount == 25 { - d.field25.name = fName.text; - d.field25.refFieldType = fType; - } else if d.fieldCount == 26 { - d.field26.name = fName.text; - d.field26.refFieldType = fType; - } else if d.fieldCount == 27 { - d.field27.name = fName.text; - d.field27.refFieldType = fType; - } else if d.fieldCount == 28 { - d.field28.name = fName.text; - d.field28.refFieldType = fType; - } else if d.fieldCount == 29 { - d.field29.name = fName.text; - d.field29.refFieldType = fType; - } else if d.fieldCount == 30 { - d.field30.name = fName.text; - d.field30.refFieldType = fType; - } else if d.fieldCount == 31 { - d.field31.name = fName.text; - d.field31.refFieldType = fType; - } else if d.fieldCount == 32 { - d.field32.name = fName.text; - d.field32.refFieldType = fType; - } else if d.fieldCount == 33 { - d.field33.name = fName.text; - d.field33.refFieldType = fType; - } else if d.fieldCount == 34 { - d.field34.name = fName.text; - d.field34.refFieldType = fType; - } else if d.fieldCount == 35 { - d.field35.name = fName.text; - d.field35.refFieldType = fType; - } else if d.fieldCount == 36 { - d.field36.name = fName.text; - d.field36.refFieldType = fType; - } else if d.fieldCount == 37 { - d.field37.name = fName.text; - d.field37.refFieldType = fType; - } else if d.fieldCount == 38 { - d.field38.name = fName.text; - d.field38.refFieldType = fType; - } else if d.fieldCount == 39 { - d.field39.name = fName.text; - d.field39.refFieldType = fType; - } else if d.fieldCount == 40 { - d.field40.name = fName.text; - d.field40.refFieldType = fType; - } else if d.fieldCount == 41 { - d.field41.name = fName.text; - d.field41.refFieldType = fType; - } else if d.fieldCount == 42 { - d.field42.name = fName.text; - d.field42.refFieldType = fType; - } else if d.fieldCount == 43 { - d.field43.name = fName.text; - d.field43.refFieldType = fType; - } else if d.fieldCount == 44 { - d.field44.name = fName.text; - d.field44.refFieldType = fType; - } else if d.fieldCount == 45 { - d.field45.name = fName.text; - d.field45.refFieldType = fType; - } else if d.fieldCount == 46 { - d.field46.name = fName.text; - d.field46.refFieldType = fType; - } else if d.fieldCount == 47 { - d.field47.name = fName.text; - d.field47.refFieldType = fType; - } else if d.fieldCount == 48 { - d.field48.name = fName.text; - d.field48.refFieldType = fType; - } else if d.fieldCount == 49 { - d.field49.name = fName.text; - d.field49.refFieldType = fType; - } else if d.fieldCount == 50 { - d.field50.name = fName.text; - d.field50.refFieldType = fType; - } else if d.fieldCount == 51 { - d.field51.name = fName.text; - d.field51.refFieldType = fType; - } else if d.fieldCount == 52 { - d.field52.name = fName.text; - d.field52.refFieldType = fType; - } else if d.fieldCount == 53 { - d.field53.name = fName.text; - d.field53.refFieldType = fType; - } else if d.fieldCount == 54 { - d.field54.name = fName.text; - d.field54.refFieldType = fType; - } else if d.fieldCount == 55 { - d.field55.name = fName.text; - d.field55.refFieldType = fType; - } else if d.fieldCount == 56 { - d.field56.name = fName.text; - d.field56.refFieldType = fType; - } else if d.fieldCount == 57 { - d.field57.name = fName.text; - d.field57.refFieldType = fType; - } else if d.fieldCount == 58 { - d.field58.name = fName.text; - d.field58.refFieldType = fType; - } else if d.fieldCount == 59 { - d.field59.name = fName.text; - d.field59.refFieldType = fType; - } else if d.fieldCount == 60 { - d.field60.name = fName.text; - d.field60.refFieldType = fType; - } else if d.fieldCount == 61 { - d.field61.name = fName.text; - d.field61.refFieldType = fType; - } else if d.fieldCount == 62 { - d.field62.name = fName.text; - d.field62.refFieldType = fType; - } else if d.fieldCount == 63 { - d.field63.name = fName.text; - d.field63.refFieldType = fType; - } else if d.fieldCount == 64 { - d.field64.name = fName.text; - d.field64.refFieldType = fType; - } else if d.fieldCount == 65 { - d.field65.name = fName.text; - d.field65.refFieldType = fType; - } else if d.fieldCount == 66 { - d.field66.name = fName.text; - d.field66.refFieldType = fType; - } else if d.fieldCount == 67 { - d.field67.name = fName.text; - d.field67.refFieldType = fType; - } else if d.fieldCount == 68 { - d.field68.name = fName.text; - d.field68.refFieldType = fType; - } else if d.fieldCount == 69 { - d.field69.name = fName.text; - d.field69.refFieldType = fType; - } else if d.fieldCount == 70 { - d.field70.name = fName.text; - d.field70.refFieldType = fType; - } else if d.fieldCount == 71 { - d.field71.name = fName.text; - d.field71.refFieldType = fType; - } else if d.fieldCount == 72 { - d.field72.name = fName.text; - d.field72.refFieldType = fType; - } else if d.fieldCount == 73 { - d.field73.name = fName.text; - d.field73.refFieldType = fType; - } else if d.fieldCount == 74 { - d.field74.name = fName.text; - d.field74.refFieldType = fType; - } else if d.fieldCount == 75 { - d.field75.name = fName.text; - d.field75.refFieldType = fType; - } else if d.fieldCount == 76 { - d.field76.name = fName.text; - d.field76.refFieldType = fType; - } else if d.fieldCount == 77 { - d.field77.name = fName.text; - d.field77.refFieldType = fType; - } else if d.fieldCount == 78 { - d.field78.name = fName.text; - d.field78.refFieldType = fType; - } else if d.fieldCount == 79 { - d.field79.name = fName.text; - d.field79.refFieldType = fType; - } else if d.fieldCount == 80 { - d.field80.name = fName.text; - d.field80.refFieldType = fType; - } else if d.fieldCount == 81 { - d.field81.name = fName.text; - d.field81.refFieldType = fType; - } else if d.fieldCount == 82 { - d.field82.name = fName.text; - d.field82.refFieldType = fType; - } else if d.fieldCount == 83 { - d.field83.name = fName.text; - d.field83.refFieldType = fType; - } else if d.fieldCount == 84 { - d.field84.name = fName.text; - d.field84.refFieldType = fType; - } else if d.fieldCount == 85 { - d.field85.name = fName.text; - d.field85.refFieldType = fType; - } else if d.fieldCount == 86 { - d.field86.name = fName.text; - d.field86.refFieldType = fType; - } else if d.fieldCount == 87 { - d.field87.name = fName.text; - d.field87.refFieldType = fType; - } else if d.fieldCount == 88 { - d.field88.name = fName.text; - d.field88.refFieldType = fType; - } else if d.fieldCount == 89 { - d.field89.name = fName.text; - d.field89.refFieldType = fType; - } else if d.fieldCount == 90 { - d.field90.name = fName.text; - d.field90.refFieldType = fType; - } else if d.fieldCount == 91 { - d.field91.name = fName.text; - d.field91.refFieldType = fType; - } else if d.fieldCount == 92 { - d.field92.name = fName.text; - d.field92.refFieldType = fType; - } else if d.fieldCount == 93 { - d.field93.name = fName.text; - d.field93.refFieldType = fType; - } else if d.fieldCount == 94 { - d.field94.name = fName.text; - d.field94.refFieldType = fType; - } else if d.fieldCount == 95 { - d.field95.name = fName.text; - d.field95.refFieldType = fType; - } else if d.fieldCount == 96 { - d.field96.name = fName.text; - d.field96.refFieldType = fType; - } else if d.fieldCount == 97 { - d.field97.name = fName.text; - d.field97.refFieldType = fType; - } else if d.fieldCount == 98 { - d.field98.name = fName.text; - d.field98.refFieldType = fType; - } else if d.fieldCount == 99 { - d.field99.name = fName.text; - d.field99.refFieldType = fType; - } else if d.fieldCount == 100 { - d.field100.name = fName.text; - d.field100.refFieldType = fType; - } else if d.fieldCount == 101 { - d.field101.name = fName.text; - d.field101.refFieldType = fType; - } else if d.fieldCount == 102 { - d.field102.name = fName.text; - d.field102.refFieldType = fType; - } else if d.fieldCount == 103 { - d.field103.name = fName.text; - d.field103.refFieldType = fType; - } else if d.fieldCount == 104 { - d.field104.name = fName.text; - d.field104.refFieldType = fType; - } else if d.fieldCount == 105 { - d.field105.name = fName.text; - d.field105.refFieldType = fType; - } else if d.fieldCount == 106 { - d.field106.name = fName.text; - d.field106.refFieldType = fType; - } else if d.fieldCount == 107 { - d.field107.name = fName.text; - d.field107.refFieldType = fType; - } else if d.fieldCount == 108 { - d.field108.name = fName.text; - d.field108.refFieldType = fType; - } else if d.fieldCount == 109 { - d.field109.name = fName.text; - d.field109.refFieldType = fType; - } else if d.fieldCount == 110 { - d.field110.name = fName.text; - d.field110.refFieldType = fType; - } else if d.fieldCount == 111 { - d.field111.name = fName.text; - d.field111.refFieldType = fType; - } else if d.fieldCount == 112 { - d.field112.name = fName.text; - d.field112.refFieldType = fType; - } else if d.fieldCount == 113 { - d.field113.name = fName.text; - d.field113.refFieldType = fType; - } else if d.fieldCount == 114 { - d.field114.name = fName.text; - d.field114.refFieldType = fType; - } else if d.fieldCount == 115 { - d.field115.name = fName.text; - d.field115.refFieldType = fType; - } else if d.fieldCount == 116 { - d.field116.name = fName.text; - d.field116.refFieldType = fType; - } else if d.fieldCount == 117 { - d.field117.name = fName.text; - d.field117.refFieldType = fType; - } else if d.fieldCount == 118 { - d.field118.name = fName.text; - d.field118.refFieldType = fType; - } else if d.fieldCount == 119 { - d.field119.name = fName.text; - d.field119.refFieldType = fType; - } else if d.fieldCount == 120 { - d.field120.name = fName.text; - d.field120.refFieldType = fType; - } else if d.fieldCount == 121 { - d.field121.name = fName.text; - d.field121.refFieldType = fType; - } else if d.fieldCount == 122 { - d.field122.name = fName.text; - d.field122.refFieldType = fType; - } else if d.fieldCount == 123 { - d.field123.name = fName.text; - d.field123.refFieldType = fType; - } else if d.fieldCount == 124 { - d.field124.name = fName.text; - d.field124.refFieldType = fType; - } else if d.fieldCount == 125 { - d.field125.name = fName.text; - d.field125.refFieldType = fType; - } else if d.fieldCount == 126 { - d.field126.name = fName.text; - d.field126.refFieldType = fType; - } else if d.fieldCount == 127 { - d.field127.name = fName.text; - d.field127.refFieldType = fType; - } else if d.fieldCount == 128 { - d.field128.name = fName.text; - d.field128.refFieldType = fType; - } else if d.fieldCount == 129 { - d.field129.name = fName.text; - d.field129.refFieldType = fType; - } else if d.fieldCount == 130 { - d.field130.name = fName.text; - d.field130.refFieldType = fType; - } else if d.fieldCount == 131 { - d.field131.name = fName.text; - d.field131.refFieldType = fType; - } else if d.fieldCount == 132 { - d.field132.name = fName.text; - d.field132.refFieldType = fType; - } else if d.fieldCount == 133 { - d.field133.name = fName.text; - d.field133.refFieldType = fType; - } else if d.fieldCount == 134 { - d.field134.name = fName.text; - d.field134.refFieldType = fType; - } else if d.fieldCount == 135 { - d.field135.name = fName.text; - d.field135.refFieldType = fType; - } else if d.fieldCount == 136 { - d.field136.name = fName.text; - d.field136.refFieldType = fType; - } else if d.fieldCount == 137 { - d.field137.name = fName.text; - d.field137.refFieldType = fType; - } else if d.fieldCount == 138 { - d.field138.name = fName.text; - d.field138.refFieldType = fType; - } else if d.fieldCount == 139 { - d.field139.name = fName.text; - d.field139.refFieldType = fType; - } else if d.fieldCount == 140 { - d.field140.name = fName.text; - d.field140.refFieldType = fType; - } else if d.fieldCount == 141 { - d.field141.name = fName.text; - d.field141.refFieldType = fType; - } else if d.fieldCount == 142 { - d.field142.name = fName.text; - d.field142.refFieldType = fType; - } else if d.fieldCount == 143 { - d.field143.name = fName.text; - d.field143.refFieldType = fType; - } else if d.fieldCount == 144 { - d.field144.name = fName.text; - d.field144.refFieldType = fType; - } else if d.fieldCount == 145 { - d.field145.name = fName.text; - d.field145.refFieldType = fType; - } else if d.fieldCount == 146 { - d.field146.name = fName.text; - d.field146.refFieldType = fType; - } else if d.fieldCount == 147 { - d.field147.name = fName.text; - d.field147.refFieldType = fType; - } else if d.fieldCount == 148 { - d.field148.name = fName.text; - d.field148.refFieldType = fType; - } else if d.fieldCount == 149 { - d.field149.name = fName.text; - d.field149.refFieldType = fType; - } else if d.fieldCount == 150 { - d.field150.name = fName.text; - d.field150.refFieldType = fType; - } else if d.fieldCount == 151 { - d.field151.name = fName.text; - d.field151.refFieldType = fType; - } else if d.fieldCount == 152 { - d.field152.name = fName.text; - d.field152.refFieldType = fType; - } else if d.fieldCount == 153 { - d.field153.name = fName.text; - d.field153.refFieldType = fType; - } else if d.fieldCount == 154 { - d.field154.name = fName.text; - d.field154.refFieldType = fType; - } else if d.fieldCount == 155 { - d.field155.name = fName.text; - d.field155.refFieldType = fType; - } else if d.fieldCount == 156 { - d.field156.name = fName.text; - d.field156.refFieldType = fType; - } else if d.fieldCount == 157 { - d.field157.name = fName.text; - d.field157.refFieldType = fType; - } else if d.fieldCount == 158 { - d.field158.name = fName.text; - d.field158.refFieldType = fType; - } else if d.fieldCount == 159 { - d.field159.name = fName.text; - d.field159.refFieldType = fType; - } else if d.fieldCount == 160 { - d.field160.name = fName.text; - d.field160.refFieldType = fType; - } else if d.fieldCount == 161 { - d.field161.name = fName.text; - d.field161.refFieldType = fType; - } else if d.fieldCount == 162 { - d.field162.name = fName.text; - d.field162.refFieldType = fType; - } else if d.fieldCount == 163 { - d.field163.name = fName.text; - d.field163.refFieldType = fType; - } else if d.fieldCount == 164 { - d.field164.name = fName.text; - d.field164.refFieldType = fType; - } else if d.fieldCount == 165 { - d.field165.name = fName.text; - d.field165.refFieldType = fType; - } else if d.fieldCount == 166 { - d.field166.name = fName.text; - d.field166.refFieldType = fType; - } else if d.fieldCount == 167 { - d.field167.name = fName.text; - d.field167.refFieldType = fType; - } else if d.fieldCount == 168 { - d.field168.name = fName.text; - d.field168.refFieldType = fType; - } else if d.fieldCount == 169 { - d.field169.name = fName.text; - d.field169.refFieldType = fType; - } else if d.fieldCount == 170 { - d.field170.name = fName.text; - d.field170.refFieldType = fType; - } else if d.fieldCount == 171 { - d.field171.name = fName.text; - d.field171.refFieldType = fType; - } else if d.fieldCount == 172 { - d.field172.name = fName.text; - d.field172.refFieldType = fType; - } else if d.fieldCount == 173 { - d.field173.name = fName.text; - d.field173.refFieldType = fType; - } else if d.fieldCount == 174 { - d.field174.name = fName.text; - d.field174.refFieldType = fType; - } else if d.fieldCount == 175 { - d.field175.name = fName.text; - d.field175.refFieldType = fType; - } else if d.fieldCount == 176 { - d.field176.name = fName.text; - d.field176.refFieldType = fType; - } else if d.fieldCount == 177 { - d.field177.name = fName.text; - d.field177.refFieldType = fType; - } else if d.fieldCount == 178 { - d.field178.name = fName.text; - d.field178.refFieldType = fType; - } else if d.fieldCount == 179 { - d.field179.name = fName.text; - d.field179.refFieldType = fType; - } else if d.fieldCount == 180 { - d.field180.name = fName.text; - d.field180.refFieldType = fType; - } else if d.fieldCount == 181 { - d.field181.name = fName.text; - d.field181.refFieldType = fType; - } else if d.fieldCount == 182 { - d.field182.name = fName.text; - d.field182.refFieldType = fType; - } else if d.fieldCount == 183 { - d.field183.name = fName.text; - d.field183.refFieldType = fType; - } else if d.fieldCount == 184 { - d.field184.name = fName.text; - d.field184.refFieldType = fType; - } else if d.fieldCount == 185 { - d.field185.name = fName.text; - d.field185.refFieldType = fType; - } else if d.fieldCount == 186 { - d.field186.name = fName.text; - d.field186.refFieldType = fType; - } else if d.fieldCount == 187 { - d.field187.name = fName.text; - d.field187.refFieldType = fType; - } else if d.fieldCount == 188 { - d.field188.name = fName.text; - d.field188.refFieldType = fType; - } else if d.fieldCount == 189 { - d.field189.name = fName.text; - d.field189.refFieldType = fType; - } else if d.fieldCount == 190 { - d.field190.name = fName.text; - d.field190.refFieldType = fType; - } else if d.fieldCount == 191 { - d.field191.name = fName.text; - d.field191.refFieldType = fType; - } else if d.fieldCount == 192 { - d.field192.name = fName.text; - d.field192.refFieldType = fType; - } else if d.fieldCount == 193 { - d.field193.name = fName.text; - d.field193.refFieldType = fType; - } else if d.fieldCount == 194 { - d.field194.name = fName.text; - d.field194.refFieldType = fType; - } else if d.fieldCount == 195 { - d.field195.name = fName.text; - d.field195.refFieldType = fType; - } else if d.fieldCount == 196 { - d.field196.name = fName.text; - d.field196.refFieldType = fType; - } else if d.fieldCount == 197 { - d.field197.name = fName.text; - d.field197.refFieldType = fType; - } else if d.fieldCount == 198 { - d.field198.name = fName.text; - d.field198.refFieldType = fType; - } else if d.fieldCount == 199 { - d.field199.name = fName.text; - d.field199.refFieldType = fType; - } else if d.fieldCount == 200 { - d.field200.name = fName.text; - d.field200.refFieldType = fType; - } else if d.fieldCount == 201 { - d.field201.name = fName.text; - d.field201.refFieldType = fType; - } else if d.fieldCount == 202 { - d.field202.name = fName.text; - d.field202.refFieldType = fType; - } else if d.fieldCount == 203 { - d.field203.name = fName.text; - d.field203.refFieldType = fType; - } else if d.fieldCount == 204 { - d.field204.name = fName.text; - d.field204.refFieldType = fType; - } else if d.fieldCount == 205 { - d.field205.name = fName.text; - d.field205.refFieldType = fType; - } else if d.fieldCount == 206 { - d.field206.name = fName.text; - d.field206.refFieldType = fType; - } else if d.fieldCount == 207 { - d.field207.name = fName.text; - d.field207.refFieldType = fType; - } else if d.fieldCount == 208 { - d.field208.name = fName.text; - d.field208.refFieldType = fType; - } else if d.fieldCount == 209 { - d.field209.name = fName.text; - d.field209.refFieldType = fType; - } else if d.fieldCount == 210 { - d.field210.name = fName.text; - d.field210.refFieldType = fType; - } else if d.fieldCount == 211 { - d.field211.name = fName.text; - d.field211.refFieldType = fType; - } else if d.fieldCount == 212 { - d.field212.name = fName.text; - d.field212.refFieldType = fType; - } else if d.fieldCount == 213 { - d.field213.name = fName.text; - d.field213.refFieldType = fType; - } else if d.fieldCount == 214 { - d.field214.name = fName.text; - d.field214.refFieldType = fType; - } else if d.fieldCount == 215 { - d.field215.name = fName.text; - d.field215.refFieldType = fType; - } else if d.fieldCount == 216 { - d.field216.name = fName.text; - d.field216.refFieldType = fType; - } else if d.fieldCount == 217 { - d.field217.name = fName.text; - d.field217.refFieldType = fType; - } else if d.fieldCount == 218 { - d.field218.name = fName.text; - d.field218.refFieldType = fType; - } else if d.fieldCount == 219 { - d.field219.name = fName.text; - d.field219.refFieldType = fType; - } else if d.fieldCount == 220 { - d.field220.name = fName.text; - d.field220.refFieldType = fType; - } else if d.fieldCount == 221 { - d.field221.name = fName.text; - d.field221.refFieldType = fType; - } else if d.fieldCount == 222 { - d.field222.name = fName.text; - d.field222.refFieldType = fType; - } else if d.fieldCount == 223 { - d.field223.name = fName.text; - d.field223.refFieldType = fType; - } else if d.fieldCount == 224 { - d.field224.name = fName.text; - d.field224.refFieldType = fType; - } else if d.fieldCount == 225 { - d.field225.name = fName.text; - d.field225.refFieldType = fType; - } else if d.fieldCount == 226 { - d.field226.name = fName.text; - d.field226.refFieldType = fType; - } else if d.fieldCount == 227 { - d.field227.name = fName.text; - d.field227.refFieldType = fType; - } else if d.fieldCount == 228 { - d.field228.name = fName.text; - d.field228.refFieldType = fType; - } else if d.fieldCount == 229 { - d.field229.name = fName.text; - d.field229.refFieldType = fType; - } else if d.fieldCount == 230 { - d.field230.name = fName.text; - d.field230.refFieldType = fType; - } else if d.fieldCount == 231 { - d.field231.name = fName.text; - d.field231.refFieldType = fType; - } else if d.fieldCount == 232 { - d.field232.name = fName.text; - d.field232.refFieldType = fType; - } else if d.fieldCount == 233 { - d.field233.name = fName.text; - d.field233.refFieldType = fType; - } else if d.fieldCount == 234 { - d.field234.name = fName.text; - d.field234.refFieldType = fType; - } else if d.fieldCount == 235 { - d.field235.name = fName.text; - d.field235.refFieldType = fType; - } else if d.fieldCount == 236 { - d.field236.name = fName.text; - d.field236.refFieldType = fType; - } else if d.fieldCount == 237 { - d.field237.name = fName.text; - d.field237.refFieldType = fType; - } else if d.fieldCount == 238 { - d.field238.name = fName.text; - d.field238.refFieldType = fType; - } else if d.fieldCount == 239 { - d.field239.name = fName.text; - d.field239.refFieldType = fType; - } else if d.fieldCount == 240 { - d.field240.name = fName.text; - d.field240.refFieldType = fType; - } else if d.fieldCount == 241 { - d.field241.name = fName.text; - d.field241.refFieldType = fType; - } else if d.fieldCount == 242 { - d.field242.name = fName.text; - d.field242.refFieldType = fType; - } else if d.fieldCount == 243 { - d.field243.name = fName.text; - d.field243.refFieldType = fType; - } else if d.fieldCount == 244 { - d.field244.name = fName.text; - d.field244.refFieldType = fType; - } else if d.fieldCount == 245 { - d.field245.name = fName.text; - d.field245.refFieldType = fType; - } else if d.fieldCount == 246 { - d.field246.name = fName.text; - d.field246.refFieldType = fType; - } else if d.fieldCount == 247 { - d.field247.name = fName.text; - d.field247.refFieldType = fType; - } else if d.fieldCount == 248 { - d.field248.name = fName.text; - d.field248.refFieldType = fType; - } else if d.fieldCount == 249 { - d.field249.name = fName.text; - d.field249.refFieldType = fType; - } else if d.fieldCount == 250 { - d.field250.name = fName.text; - d.field250.refFieldType = fType; - } else if d.fieldCount == 251 { - d.field251.name = fName.text; - d.field251.refFieldType = fType; - } else if d.fieldCount == 252 { - d.field252.name = fName.text; - d.field252.refFieldType = fType; - } else if d.fieldCount == 253 { - d.field253.name = fName.text; - d.field253.refFieldType = fType; - } else if d.fieldCount == 254 { - d.field254.name = fName.text; - d.field254.refFieldType = fType; - } else if d.fieldCount == 255 { - d.field255.name = fName.text; - d.field255.refFieldType = fType; - } - d.fieldCount = d.fieldCount + 1; + d.fields[fieldCount].name = fName.text; + d.fields[fieldCount].refFieldType = fType; + fieldCount = fieldCount + 1; } + d.fieldCount = fieldCount; + PrintLine(String_Concat("DEBUG parser endStruct fieldCount=", bux_int_to_str(fieldCount as int64))); discard parserExpect(p, tkRBrace, "expected '}'"); return d; } diff --git a/src/sema.bux b/src/sema.bux index 1b3adbb..f02a1b5 100644 --- a/src/sema.bux +++ b/src/sema.bux @@ -571,6 +571,7 @@ func Sema_CheckStmt(sema: *Sema, stmt: *Stmt) { loopSym.name = stmt.strValue; loopSym.typeKind = tyUnknown; loopSym.typeName = ""; + loopSym.refType = null as *TypeExpr; loopSym.isMutable = true; loopSym.isPublic = false; loopSym.decl = null as *Decl; @@ -678,6 +679,7 @@ func Sema_CollectGlobals(sema: *Sema) { vSym.name = variantName2; vSym.typeKind = tyNamed; vSym.typeName = String_Concat(decl.strValue, "_Tag"); + vSym.refType = null as *TypeExpr; vSym.isMutable = false; vSym.isPublic = decl.isPublic; vSym.decl = decl; @@ -734,6 +736,7 @@ func Sema_CollectGlobals(sema: *Sema) { sym.name = name; sym.typeKind = tyUnknown; sym.typeName = ""; + sym.refType = null as *TypeExpr; sym.isMutable = false; sym.isPublic = true; sym.decl = null as *Decl; @@ -772,6 +775,7 @@ func Sema_CollectGlobals(sema: *Sema) { sym.name = lastSeg; sym.typeKind = tyUnknown; sym.typeName = ""; + sym.refType = null as *TypeExpr; sym.isMutable = false; sym.isPublic = true; sym.decl = null as *Decl;