From 504df9b8fde5eb09453ecd12b0b758bc20615907 Mon Sep 17 00:00:00 2001 From: "aljazbrodar." Date: Fri, 16 Jan 2026 14:19:50 +0100 Subject: [PATCH] type switch with pointers --- ass3/zbirnik/parsing/pregledovalnik.go | 106 ++++++++++++------------- 1 file changed, 53 insertions(+), 53 deletions(-) diff --git a/ass3/zbirnik/parsing/pregledovalnik.go b/ass3/zbirnik/parsing/pregledovalnik.go index ccfd88b..5e6c488 100644 --- a/ass3/zbirnik/parsing/pregledovalnik.go +++ b/ass3/zbirnik/parsing/pregledovalnik.go @@ -80,17 +80,17 @@ type ukaz interface { GetOznaka() string } -func (f format_F1) GetOznaka() string { return f.oznaka } -func (f format_F2_n) GetOznaka() string { return f.oznaka } -func (f format_F2_r) GetOznaka() string { return f.oznaka } -func (f format_F2_rn) GetOznaka() string { return f.oznaka } -func (f format_F2_rr) GetOznaka() string { return f.oznaka } -func (f format_F3_m) GetOznaka() string { return f.oznaka } -func (f format_F4_m) GetOznaka() string { return f.oznaka } -func (f format_D) GetOznaka() string { return f.oznaka } -func (f format_D_n) GetOznaka() string { return f.oznaka } -func (f format_M_i) GetOznaka() string { return f.oznaka } -func (f format_M_r) GetOznaka() string { return f.oznaka } +func (f *format_F1) GetOznaka() string { return f.oznaka } +func (f *format_F2_n) GetOznaka() string { return f.oznaka } +func (f *format_F2_r) GetOznaka() string { return f.oznaka } +func (f *format_F2_rn) GetOznaka() string { return f.oznaka } +func (f *format_F2_rr) GetOznaka() string { return f.oznaka } +func (f *format_F3_m) GetOznaka() string { return f.oznaka } +func (f *format_F4_m) GetOznaka() string { return f.oznaka } +func (f *format_D) GetOznaka() string { return f.oznaka } +func (f *format_D_n) GetOznaka() string { return f.oznaka } +func (f *format_M_i) GetOznaka() string { return f.oznaka } +func (f *format_M_r) GetOznaka() string { return f.oznaka } var register string = `A|X|L|B|S|T|F` @@ -243,7 +243,7 @@ func check_F1(el string, AST *[]ukaz) bool { } nov_ukaz.opcode = val //fmt.Println("F1: ", mnemonik, nov_ukaz.opcode) - *AST = append(*AST, nov_ukaz) + *AST = append(*AST, &nov_ukaz) return true } return false @@ -273,7 +273,7 @@ func check_F2_n(el string, AST *[]ukaz) bool { nov_ukaz.n = temp } //fmt.Println("F2_n ", el[:len(el) - 1], nov_ukaz) - *AST = append(*AST, nov_ukaz) + *AST = append(*AST, &nov_ukaz) return true } return false @@ -304,7 +304,7 @@ func check_F2_r(el string, AST *[]ukaz) bool { re_par := regexp.MustCompile(`[\t ]+[A-Za-z]+ (`+register+`)`) nov_ukaz.r1 = strings.Split(strings.Trim(re_par.FindString(el), "\t \n"), " ")[1] //fmt.Println(nov_ukaz) - *AST = append(*AST, nov_ukaz) + *AST = append(*AST, &nov_ukaz) return true } return false @@ -342,7 +342,7 @@ func check_F2_rn(el string, AST *[]ukaz) bool { nov_ukaz.n = temp } //fmt.Println("F2_rn: ", el[:len(el) - 1], nov_ukaz) - *AST = append(*AST, nov_ukaz) + *AST = append(*AST, &nov_ukaz) return true } return false @@ -375,7 +375,7 @@ func check_F2_rr(el string, AST *[]ukaz) bool { re_par2 := regexp.MustCompile(`(`+register+`), (`+register+`)`) nov_ukaz.r2 = strings.Split(re_par2.FindString(el), " ")[1] //fmt.Println("F2_rr: ", nov_ukaz) - *AST = append(*AST, nov_ukaz) + *AST = append(*AST, &nov_ukaz) return true } return false @@ -428,7 +428,7 @@ func check_F3_m(el string, AST *[]ukaz) bool { } nov_ukaz.e = false //fmt.Println(el, nov_ukaz) - *AST = append(*AST, nov_ukaz) + *AST = append(*AST, &nov_ukaz) return true } return false @@ -481,7 +481,7 @@ func check_F4_m(el string, AST *[]ukaz) bool { } nov_ukaz.e = true //fmt.Println(el, nov_ukaz) - *AST = append(*AST, nov_ukaz) + *AST = append(*AST, &nov_ukaz) return true } return false @@ -503,7 +503,7 @@ func check_D(el string, AST *[]ukaz) bool { } else { nova_direktiva.oznaka = "" } - *AST = append(*AST, nova_direktiva) + *AST = append(*AST, &nova_direktiva) //fmt.Println(el, nova_direktiva) return true } @@ -529,7 +529,7 @@ func check_D_n(el string, AST *[]ukaz) bool { } re_ope := regexp.MustCompile(`(START|END|ORG|EQU|BASE) ([A-Za-z\+\-\*]+|[0-9\+\-\*]+)`) nova_direktiva.operand = strings.Split(re_ope.FindString(el), " ")[1] - *AST = append(*AST, nova_direktiva) + *AST = append(*AST, &nova_direktiva) //fmt.Println(el, nova_direktiva) return true } @@ -562,7 +562,7 @@ func check_M_r(el string, AST *[]ukaz) bool { nova_direktiva.rezervacija = operand_int } //fmt.Println(el, nova_direktiva) - *AST = append(*AST, nova_direktiva) + *AST = append(*AST, &nova_direktiva) return true } return false @@ -595,38 +595,38 @@ func check_M_i(el string, AST *[]ukaz) bool { nova_direktiva.rezervacija = operand_int } //fmt.Println(el, nova_direktiva) - *AST = append(*AST, nova_direktiva) + *AST = append(*AST, &nova_direktiva) return true } return false } func prvi_prehod(AST *[]ukaz) { - lc_global, _ = strconv.Atoi((*AST)[0].(format_D_n).operand) - ime_programa = (*AST)[0].(format_D_n).oznaka + lc_global, _ = strconv.Atoi((*AST)[0].(*format_D_n).operand) + ime_programa = (*AST)[0].(*format_D_n).oznaka for _, el := range *AST { - fmt.Println("lc_global", lc_global) + fmt.Println("lc_global", lc_global) switch val := el.(type) { - case format_F1: val.lc = lc_global - lc_global += 1 - case format_F2_n: val.lc = lc_global - lc_global += 2 - case format_F2_r: val.lc = lc_global - lc_global += 2 - case format_F2_rn: val.lc = lc_global + case *format_F1: val.lc = lc_global + lc_global += 1 + case *format_F2_n: val.lc = lc_global lc_global += 2 - case format_F2_rr: val.lc = lc_global + case *format_F2_r: val.lc = lc_global lc_global += 2 - case format_F3_m: val.lc = lc_global + case *format_F2_rn: val.lc = lc_global + lc_global += 2 + case *format_F2_rr: val.lc = lc_global + lc_global += 2 + case *format_F3_m: val.lc = lc_global lc_global += 3 - case format_F4_m: val.lc = lc_global - lc_global += 4 - case format_D: val.lc = lc_global - case format_D_n: val.lc = lc_global - case format_M_r: val.lc = lc_global - lc_global += val.rezervacija - case format_M_i: val.lc = lc_global - lc_global += val.rezervacija + case *format_F4_m: val.lc = lc_global + lc_global += 4 + case *format_D: val.lc = lc_global + case *format_D_n: val.lc = lc_global + case *format_M_r: val.lc = lc_global + lc_global += val.rezervacija + case *format_M_i: val.lc = lc_global + lc_global += val.rezervacija } } } @@ -634,17 +634,17 @@ func prvi_prehod(AST *[]ukaz) { func izpis(AST *[]ukaz) { for _, el := range *AST { switch val := el.(type) { - case format_F1: fmt.Println("F1", val) - case format_F2_n: fmt.Println("F2_n", val) - case format_F2_r: fmt.Println("F2_r", val) - case format_F2_rn: fmt.Println("F2_rn", val) - case format_F2_rr: fmt.Println("F2_rr", val) - case format_F3_m: fmt.Println("F3_m", val) - case format_F4_m: fmt.Println("F4_m", val) - case format_D: fmt.Println("D", val) - case format_D_n: fmt.Println("D_n", val) - case format_M_r: fmt.Println("M_r", val) - case format_M_i: fmt.Println("M_i", val) + case *format_F1: fmt.Println("F1", val) + case *format_F2_n: fmt.Println("F2_n", val) + case *format_F2_r: fmt.Println("F2_r", val) + case *format_F2_rn: fmt.Println("F2_rn", val) + case *format_F2_rr: fmt.Println("F2_rr", val) + case *format_F3_m: fmt.Println("F3_m", val) + case *format_F4_m: fmt.Println("F4_m", val) + case *format_D: fmt.Println("D", val) + case *format_D_n: fmt.Println("D_n", val) + case *format_M_r: fmt.Println("M_r", val) + case *format_M_i: fmt.Println("M_i", val) } } }