func (emt *EmitterData) initStrVTerm(depth int, term *syntax.Term) { term.IndexInLiterals = emt.currTermNum for i := 0; i < len(term.Value.Str); i++ { emt.printLabel(depth, fmt.Sprintf("_memMngr.vterms[%d] = (struct vterm_t){.tag = V_CHAR_TAG, .ch = %d};", emt.currTermNum, term.Value.Str[i])) emt.currTermNum++ } }
// Инициализация vterm_t для идентификатора func (emt *EmitterData) initIdentVTerm(depth int, term *syntax.Term, ident string) { runesStr := getStrOfRunes(ident) emt.printLabel(depth, fmt.Sprintf("_memMngr.vterms[%d] = (struct vterm_t){.tag = V_IDENT_TAG, .str = allocateVStringLiteral((uint32_t[]){%s}, UINT64_C(%d))};", emt.currTermNum, runesStr, utf8.RuneCountInString(ident))) term.IndexInLiterals = emt.currTermNum emt.currTermNum++ }
// Инициализация vterm_t для литералов целого типа // Пока только обычные func (emt *EmitterData) initIntNumVTerm(depth int, term *syntax.Term) { bytesStr, sign, bytesCount := getStrOfBytes(term.Value.Int) emt.printLabel(depth, fmt.Sprintf("_memMngr.vterms[%d] = (struct vterm_t){.tag = V_INT_NUM_TAG,"+ " .intNum = allocateIntNumberLiteral((uint8_t[]){%s}, %d, UINT64_C(%d))};", emt.currTermNum, bytesStr, sign, bytesCount)) term.IndexInLiterals = emt.currTermNum emt.currTermNum++ }
// Инициализация vterm_t для литералов вещественного типа func (emt *EmitterData) initFloatVTerm(depth int, term *syntax.Term) { emt.printLabel(depth, fmt.Sprintf("_memMngr.vterms[%d] = (struct vterm_t){.tag = V_DOUBLE_NUM_TAG, .doubleNum = %f};", emt.currTermNum, term.Value.Float)) term.IndexInLiterals = emt.currTermNum emt.currTermNum++ }